use EVP for des-crc-mdX functions
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23574 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1278,7 +1278,7 @@ RSA_MD4_checksum(krb5_context context,
|
|||||||
|
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
RSA_checksum(krb5_context context,
|
des_checksum(krb5_context context,
|
||||||
const EVP_MD *evp_md,
|
const EVP_MD *evp_md,
|
||||||
struct key_data *key,
|
struct key_data *key,
|
||||||
const void *data,
|
const void *data,
|
||||||
@@ -1313,28 +1313,18 @@ RSA_checksum(krb5_context context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
RSA_MD4_DES_checksum(krb5_context context,
|
des_verify(krb5_context context,
|
||||||
|
const EVP_MD *evp_md,
|
||||||
struct key_data *key,
|
struct key_data *key,
|
||||||
const void *data,
|
const void *data,
|
||||||
size_t len,
|
size_t len,
|
||||||
unsigned usage,
|
|
||||||
Checksum *cksum)
|
|
||||||
{
|
|
||||||
return RSA_checksum(context, EVP_md4(), key, data, len, cksum);
|
|
||||||
}
|
|
||||||
|
|
||||||
static krb5_error_code
|
|
||||||
RSA_MD4_DES_verify(krb5_context context,
|
|
||||||
struct key_data *key,
|
|
||||||
const void *data,
|
|
||||||
size_t len,
|
|
||||||
unsigned usage,
|
|
||||||
Checksum *C)
|
Checksum *C)
|
||||||
{
|
{
|
||||||
EVP_MD_CTX *m;
|
EVP_MD_CTX *m;
|
||||||
unsigned char tmp[24];
|
unsigned char tmp[24];
|
||||||
unsigned char res[16];
|
unsigned char res[16];
|
||||||
DES_cblock ivec;
|
DES_cblock ivec;
|
||||||
|
DES_key_schedule *sched = key->schedule->data;
|
||||||
krb5_error_code ret = 0;
|
krb5_error_code ret = 0;
|
||||||
|
|
||||||
m = EVP_MD_CTX_create();
|
m = EVP_MD_CTX_create();
|
||||||
@@ -1347,10 +1337,10 @@ RSA_MD4_DES_verify(krb5_context context,
|
|||||||
DES_cbc_encrypt(C->checksum.data,
|
DES_cbc_encrypt(C->checksum.data,
|
||||||
(void*)tmp,
|
(void*)tmp,
|
||||||
C->checksum.length,
|
C->checksum.length,
|
||||||
key->schedule->data,
|
&sched[0],
|
||||||
&ivec,
|
&ivec,
|
||||||
DES_DECRYPT);
|
DES_DECRYPT);
|
||||||
EVP_DigestInit_ex(m, EVP_md4(), NULL);
|
EVP_DigestInit_ex(m, evp_md, NULL);
|
||||||
EVP_DigestUpdate(m, tmp, 8); /* confounder */
|
EVP_DigestUpdate(m, tmp, 8); /* confounder */
|
||||||
EVP_DigestUpdate(m, data, len);
|
EVP_DigestUpdate(m, data, len);
|
||||||
EVP_DigestFinal_ex (m, res, NULL);
|
EVP_DigestFinal_ex (m, res, NULL);
|
||||||
@@ -1364,6 +1354,28 @@ RSA_MD4_DES_verify(krb5_context context,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static krb5_error_code
|
||||||
|
RSA_MD4_DES_checksum(krb5_context context,
|
||||||
|
struct key_data *key,
|
||||||
|
const void *data,
|
||||||
|
size_t len,
|
||||||
|
unsigned usage,
|
||||||
|
Checksum *cksum)
|
||||||
|
{
|
||||||
|
return des_checksum(context, EVP_md4(), key, data, len, cksum);
|
||||||
|
}
|
||||||
|
|
||||||
|
static krb5_error_code
|
||||||
|
RSA_MD4_DES_verify(krb5_context context,
|
||||||
|
struct key_data *key,
|
||||||
|
const void *data,
|
||||||
|
size_t len,
|
||||||
|
unsigned usage,
|
||||||
|
Checksum *C)
|
||||||
|
{
|
||||||
|
return des_verify(context, EVP_md5(), key, data, len, C);
|
||||||
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
RSA_MD5_checksum(krb5_context context,
|
RSA_MD5_checksum(krb5_context context,
|
||||||
struct key_data *key,
|
struct key_data *key,
|
||||||
@@ -1385,7 +1397,7 @@ RSA_MD5_DES_checksum(krb5_context context,
|
|||||||
unsigned usage,
|
unsigned usage,
|
||||||
Checksum *C)
|
Checksum *C)
|
||||||
{
|
{
|
||||||
return RSA_checksum(context, EVP_md5(), key, data, len, C);
|
return des_checksum(context, EVP_md5(), key, data, len, C);
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
@@ -1396,31 +1408,7 @@ RSA_MD5_DES_verify(krb5_context context,
|
|||||||
unsigned usage,
|
unsigned usage,
|
||||||
Checksum *C)
|
Checksum *C)
|
||||||
{
|
{
|
||||||
MD5_CTX md5;
|
return des_verify(context, EVP_md5(), key, data, len, C);
|
||||||
unsigned char tmp[24];
|
|
||||||
unsigned char res[16];
|
|
||||||
DES_cblock ivec;
|
|
||||||
DES_key_schedule *sched = key->schedule->data;
|
|
||||||
krb5_error_code ret = 0;
|
|
||||||
|
|
||||||
memset(&ivec, 0, sizeof(ivec));
|
|
||||||
DES_cbc_encrypt(C->checksum.data,
|
|
||||||
(void*)tmp,
|
|
||||||
C->checksum.length,
|
|
||||||
&sched[0],
|
|
||||||
&ivec,
|
|
||||||
DES_DECRYPT);
|
|
||||||
MD5_Init (&md5);
|
|
||||||
MD5_Update (&md5, tmp, 8); /* confounder */
|
|
||||||
MD5_Update (&md5, data, len);
|
|
||||||
MD5_Final (res, &md5);
|
|
||||||
if(memcmp(res, tmp + 8, sizeof(res)) != 0) {
|
|
||||||
krb5_clear_error_string (context);
|
|
||||||
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
|
|
||||||
}
|
|
||||||
memset(tmp, 0, sizeof(tmp));
|
|
||||||
memset(res, 0, sizeof(res));
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
|
Reference in New Issue
Block a user