Fix KRB-FX-CF2 for enctypes with non-dense keyspaces
It is necessary to use the RFC3961 random_to_key operation when creating a key from a bitstring. Signed-off-by: Nicolas Williams <nico@cryptonector.com>
This commit is contained in:

committed by
Nicolas Williams

parent
cdf39f1369
commit
ad57868996
@@ -2551,13 +2551,11 @@ krb5_crypto_fx_cf2(krb5_context context,
|
|||||||
krb5_data_zero(&os1);
|
krb5_data_zero(&os1);
|
||||||
krb5_data_zero(&os2);
|
krb5_data_zero(&os2);
|
||||||
|
|
||||||
ret = krb5_enctype_keysize(context, enctype, &keysize);
|
ret = krb5_enctype_keybits(context, enctype, &keysize);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
keysize = (keysize + 7) / 8;
|
||||||
|
|
||||||
ret = krb5_data_alloc(&res->keyvalue, keysize);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
ret = krb5_crypto_prfplus(context, crypto1, pepper1, keysize, &os1);
|
ret = krb5_crypto_prfplus(context, crypto1, pepper1, keysize, &os1);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -2567,13 +2565,12 @@ krb5_crypto_fx_cf2(krb5_context context,
|
|||||||
|
|
||||||
res->keytype = enctype;
|
res->keytype = enctype;
|
||||||
{
|
{
|
||||||
unsigned char *p1 = os1.data, *p2 = os2.data, *p3 = res->keyvalue.data;
|
unsigned char *p1 = os1.data, *p2 = os2.data;
|
||||||
for (i = 0; i < keysize; i++)
|
for (i = 0; i < keysize; i++)
|
||||||
p3[i] = p1[i] ^ p2[i];
|
p1[i] ^= p2[i];
|
||||||
}
|
}
|
||||||
|
ret = krb5_random_to_key(context, enctype, os1.data, keysize, res);
|
||||||
out:
|
out:
|
||||||
if (ret)
|
|
||||||
krb5_data_free(&res->keyvalue);
|
|
||||||
krb5_data_free(&os1);
|
krb5_data_free(&os1);
|
||||||
krb5_data_free(&os2);
|
krb5_data_free(&os2);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user