summaryrefslogtreecommitdiffstats
path: root/src/lib/crypto
diff options
context:
space:
mode:
authorRichard Basch <probe@mit.edu>1995-11-28 20:08:53 +0000
committerRichard Basch <probe@mit.edu>1995-11-28 20:08:53 +0000
commit13c25d984cbc5c95ee73c9872fd3de6cebcc75e9 (patch)
tree041fa3468cee2a7b926fcbefc7b5cffb98b7b215 /src/lib/crypto
parent7d339153b49875a6a3fc28705bb9c393fc420eb9 (diff)
downloadkrb5-13c25d984cbc5c95ee73c9872fd3de6cebcc75e9.tar.gz
krb5-13c25d984cbc5c95ee73c9872fd3de6cebcc75e9.tar.xz
krb5-13c25d984cbc5c95ee73c9872fd3de6cebcc75e9.zip
Make sure that each DES key is strong. If not, xor first byte with 0xf0
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@7140 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/crypto')
-rw-r--r--src/lib/crypto/des/d3_str2ky.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/crypto/des/d3_str2ky.c b/src/lib/crypto/des/d3_str2ky.c
index 5f4d7a050..d83810d01 100644
--- a/src/lib/crypto/des/d3_str2ky.c
+++ b/src/lib/crypto/des/d3_str2ky.c
@@ -90,8 +90,11 @@ const krb5_data FAR * salt;
return EINVAL;
/* fix key parity */
- for (j = 0; j < keyblock->length/sizeof(mit_des_cblock); j++)
+ for (j = 0; j < keyblock->length/sizeof(mit_des_cblock); j++) {
mit_des_fixup_key_parity(*((mit_des_cblock *)key+j));
+ if (mit_des_is_weak_key(*((mit_des_cblock *)key+j)))
+ *((unsigned char *)((mit_des_cblock *)key+j)) ^= 0xf0;
+ }
/* Now, CBC encrypt with itself */
(void) mit_des3_key_sched(*((mit_des3_cblock *)key), ks);
@@ -111,8 +114,11 @@ const krb5_data FAR * salt;
krb5_xfree(copystr);
/* now fix up key parity again */
- for (j = 0; j < keyblock->length/sizeof(mit_des_cblock); j++)
+ for (j = 0; j < keyblock->length/sizeof(mit_des_cblock); j++) {
mit_des_fixup_key_parity(*((mit_des_cblock *)key+j));
+ if (mit_des_is_weak_key(*((mit_des_cblock *)key+j)))
+ *((unsigned char *)((mit_des_cblock *)key+j)) ^= 0xf0;
+ }
return 0;
}