Switch more cases to EVP crypto layer
This commit is contained in:
@@ -555,15 +555,6 @@ DES3_random_to_key(krb5_context context,
|
||||
* ARCFOUR
|
||||
*/
|
||||
|
||||
static void
|
||||
ARCFOUR_schedule(krb5_context context,
|
||||
struct key_type *kt,
|
||||
struct key_data *kd)
|
||||
{
|
||||
RC4_set_key (kd->schedule->data,
|
||||
kd->key->keyvalue.length, kd->key->keyvalue.data);
|
||||
}
|
||||
|
||||
static krb5_error_code
|
||||
ARCFOUR_string_to_key(krb5_context context,
|
||||
krb5_enctype enctype,
|
||||
@@ -884,10 +875,13 @@ static struct key_type keytype_arcfour = {
|
||||
"arcfour",
|
||||
128,
|
||||
16,
|
||||
sizeof(RC4_KEY),
|
||||
sizeof(struct evp_schedule),
|
||||
NULL,
|
||||
ARCFOUR_schedule,
|
||||
arcfour_salt
|
||||
evp_schedule,
|
||||
arcfour_salt,
|
||||
NULL,
|
||||
evp_cleanup,
|
||||
EVP_rc4
|
||||
};
|
||||
|
||||
krb5_error_code KRB5_LIB_FUNCTION
|
||||
@@ -2149,12 +2143,12 @@ ARCFOUR_subencrypt(krb5_context context,
|
||||
unsigned usage,
|
||||
void *ivec)
|
||||
{
|
||||
EVP_CIPHER_CTX ctx;
|
||||
struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
|
||||
Checksum k1_c, k2_c, k3_c, cksum;
|
||||
struct key_data ke;
|
||||
krb5_keyblock kb;
|
||||
unsigned char t[4];
|
||||
RC4_KEY rc4_key;
|
||||
unsigned char *cdata = data;
|
||||
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
|
||||
krb5_error_code ret;
|
||||
@@ -2196,8 +2190,12 @@ ARCFOUR_subencrypt(krb5_context context,
|
||||
if (ret)
|
||||
krb5_abortx(context, "hmac failed");
|
||||
|
||||
RC4_set_key (&rc4_key, k3_c.checksum.length, k3_c.checksum.data);
|
||||
RC4 (&rc4_key, len - 16, cdata + 16, cdata + 16);
|
||||
EVP_CIPHER_CTX_init(&ctx);
|
||||
|
||||
EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 1);
|
||||
EVP_Cipher(&ctx, cdata + 16, cdata + 16, len - 16);
|
||||
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||
|
||||
memset (k1_c_data, 0, sizeof(k1_c_data));
|
||||
memset (k2_c_data, 0, sizeof(k2_c_data));
|
||||
memset (k3_c_data, 0, sizeof(k3_c_data));
|
||||
@@ -2212,12 +2210,12 @@ ARCFOUR_subdecrypt(krb5_context context,
|
||||
unsigned usage,
|
||||
void *ivec)
|
||||
{
|
||||
EVP_CIPHER_CTX ctx;
|
||||
struct checksum_type *c = _find_checksum (CKSUMTYPE_RSA_MD5);
|
||||
Checksum k1_c, k2_c, k3_c, cksum;
|
||||
struct key_data ke;
|
||||
krb5_keyblock kb;
|
||||
unsigned char t[4];
|
||||
RC4_KEY rc4_key;
|
||||
unsigned char *cdata = data;
|
||||
unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16];
|
||||
unsigned char cksum_data[16];
|
||||
@@ -2250,8 +2248,10 @@ ARCFOUR_subdecrypt(krb5_context context,
|
||||
if (ret)
|
||||
krb5_abortx(context, "hmac failed");
|
||||
|
||||
RC4_set_key (&rc4_key, k3_c.checksum.length, k3_c.checksum.data);
|
||||
RC4 (&rc4_key, len - 16, cdata + 16, cdata + 16);
|
||||
EVP_CIPHER_CTX_init(&ctx);
|
||||
EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, k3_c.checksum.data, NULL, 0);
|
||||
EVP_Cipher(&ctx, cdata + 16, cdata + 16, len - 16);
|
||||
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||
|
||||
ke.key = &kb;
|
||||
kb.keyvalue = k2_c.checksum;
|
||||
@@ -4444,6 +4444,7 @@ _krb5_pk_octetstring2key(krb5_context context,
|
||||
void *keydata;
|
||||
unsigned char counter;
|
||||
unsigned char shaoutput[SHA_DIGEST_LENGTH];
|
||||
EVP_MD_CTX *m;
|
||||
|
||||
if(et == NULL) {
|
||||
krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
|
||||
@@ -4459,19 +4460,27 @@ _krb5_pk_octetstring2key(krb5_context context,
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
m = EVP_MD_CTX_create();
|
||||
if (m == NULL) {
|
||||
free(keydata);
|
||||
krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
counter = 0;
|
||||
offset = 0;
|
||||
do {
|
||||
SHA_CTX m;
|
||||
|
||||
SHA1_Init(&m);
|
||||
SHA1_Update(&m, &counter, 1);
|
||||
SHA1_Update(&m, dhdata, dhsize);
|
||||
EVP_DigestInit_ex(m, EVP_sha1(), NULL);
|
||||
EVP_DigestUpdate(m, &counter, 1);
|
||||
EVP_DigestUpdate(m, dhdata, dhsize);
|
||||
|
||||
if (c_n)
|
||||
SHA1_Update(&m, c_n->data, c_n->length);
|
||||
EVP_DigestUpdate(m, c_n->data, c_n->length);
|
||||
if (k_n)
|
||||
SHA1_Update(&m, k_n->data, k_n->length);
|
||||
SHA1_Final(shaoutput, &m);
|
||||
EVP_DigestUpdate(m, k_n->data, k_n->length);
|
||||
|
||||
EVP_DigestFinal_ex(m, shaoutput, NULL);
|
||||
|
||||
memcpy((unsigned char *)keydata + offset,
|
||||
shaoutput,
|
||||
@@ -4482,6 +4491,8 @@ _krb5_pk_octetstring2key(krb5_context context,
|
||||
} while(offset < keylen);
|
||||
memset(shaoutput, 0, sizeof(shaoutput));
|
||||
|
||||
EVP_MD_CTX_destroy(m);
|
||||
|
||||
ret = krb5_random_to_key(context, type, keydata, keylen, key);
|
||||
memset(keydata, 0, sizeof(keylen));
|
||||
free(keydata);
|
||||
|
Reference in New Issue
Block a user