diff options
Diffstat (limited to 'src/lib/crypto/openssl/des/string2key.c')
-rw-r--r-- | src/lib/crypto/openssl/des/string2key.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/lib/crypto/openssl/des/string2key.c b/src/lib/crypto/openssl/des/string2key.c index bc37da63b..923cee52b 100644 --- a/src/lib/crypto/openssl/des/string2key.c +++ b/src/lib/crypto/openssl/des/string2key.c @@ -33,7 +33,18 @@ mit_des_string_to_key_int(krb5_keyblock *key, const krb5_data *pw, const krb5_data *salt) { DES_cblock outkey; - DES_string_to_key(pw->data, &outkey); + char *str; + krb5_data s = (salt == NULL) ? empty_data() : *salt; + + /* AFS string-to-key isn't implemented. */ + if (s.length == SALT_TYPE_AFS_LENGTH) + return KRB5_CRYPTO_INTERNAL; + + /* Concatenate password and salt. */ + if (asprintf(&str, "%.*s%.*s", pw->length, pw->data, s.length, s.data) < 0) + return ENOMEM; + DES_string_to_key(str, &outkey); + free(str); if (key->length < sizeof(outkey)) return KRB5_CRYPTO_INTERNAL; key->length = sizeof(outkey); |