update to pseudo-standard APIs for md4,md5,sha.
some changes to libdes calls to make them more portable. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7817 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 1998, 1999 Kungliga Tekniska H<>gskolan
|
||||
* Copyright (c) 1997 - 2000 Kungliga Tekniska H<>gskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
@@ -228,12 +228,14 @@ DES_AFS3_Transarc_string_to_key (krb5_data pw,
|
||||
memcpy(&temp_key, "kerberos", 8);
|
||||
des_set_odd_parity (&temp_key);
|
||||
des_set_key (&temp_key, schedule);
|
||||
des_cbc_cksum ((des_cblock *)password, &ivec, passlen, schedule, &ivec);
|
||||
des_cbc_cksum ((const void *)password, &ivec, passlen,
|
||||
schedule, &ivec);
|
||||
|
||||
memcpy(&temp_key, &ivec, 8);
|
||||
des_set_odd_parity (&temp_key);
|
||||
des_set_key (&temp_key, schedule);
|
||||
des_cbc_cksum ((des_cblock *)password, key, passlen, schedule, &ivec);
|
||||
des_cbc_cksum ((const void *)password, key, passlen,
|
||||
schedule, &ivec);
|
||||
memset(&schedule, 0, sizeof(schedule));
|
||||
memset(&temp_key, 0, sizeof(temp_key));
|
||||
memset(&ivec, 0, sizeof(ivec));
|
||||
@@ -337,7 +339,8 @@ DES3_string_to_key(krb5_context context,
|
||||
des_set_key(keys + i, s[i]);
|
||||
}
|
||||
memset(&ivec, 0, sizeof(ivec));
|
||||
des_ede3_cbc_encrypt((void*)tmp, (void*)tmp, sizeof(tmp),
|
||||
des_ede3_cbc_encrypt((const void *)tmp,
|
||||
(void *)tmp, sizeof(tmp),
|
||||
s[0], s[1], s[2], &ivec, DES_ENCRYPT);
|
||||
memset(s, 0, sizeof(s));
|
||||
memset(&ivec, 0, sizeof(ivec));
|
||||
@@ -411,7 +414,7 @@ ARCFOUR_string_to_key(krb5_context context,
|
||||
char *s, *p;
|
||||
size_t len;
|
||||
int i;
|
||||
struct md4 m;
|
||||
MD4_CTX m;
|
||||
|
||||
len = 2 * (password.length + salt.saltvalue.length);
|
||||
s = malloc (len);
|
||||
@@ -425,11 +428,11 @@ ARCFOUR_string_to_key(krb5_context context,
|
||||
*p++ = ((char *)salt.saltvalue.data)[i];
|
||||
*p++ = 0;
|
||||
}
|
||||
md4_init(&m);
|
||||
md4_update(&m, s, len);
|
||||
MD4Init (&m);
|
||||
MD4Update (&m, s, len);
|
||||
key->keytype = enctype;
|
||||
krb5_data_alloc (&key->keyvalue, 16);
|
||||
md4_finito(&m, key->keyvalue.data);
|
||||
MD4Final (key->keyvalue.data, &m);
|
||||
memset (s, 0, len);
|
||||
free (s);
|
||||
return 0;
|
||||
@@ -806,10 +809,11 @@ RSA_MD4_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md4 m;
|
||||
md4_init(&m);
|
||||
md4_update(&m, data, len);
|
||||
md4_finito(&m, C->checksum.data);
|
||||
MD4_CTX m;
|
||||
|
||||
MD4Init (&m);
|
||||
MD4Update (&m, data, len);
|
||||
MD4Final (C->checksum.data, &m);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -819,18 +823,18 @@ RSA_MD4_DES_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *cksum)
|
||||
{
|
||||
struct md4 md4;
|
||||
MD4_CTX md4;
|
||||
des_cblock ivec;
|
||||
unsigned char *p = cksum->checksum.data;
|
||||
|
||||
krb5_generate_random_block(p, 8);
|
||||
md4_init(&md4);
|
||||
md4_update(&md4, p, 8);
|
||||
md4_update(&md4, data, len);
|
||||
md4_finito(&md4, p + 8);
|
||||
MD4Init (&md4);
|
||||
MD4Update (&md4, p, 8);
|
||||
MD4Update (&md4, data, len);
|
||||
MD4Final (p + 8, &md4);
|
||||
memset (&ivec, 0, sizeof(ivec));
|
||||
des_cbc_encrypt((des_cblock*)p,
|
||||
(des_cblock*)p,
|
||||
des_cbc_encrypt((const void *)p,
|
||||
(void *)p,
|
||||
24,
|
||||
key->schedule->data,
|
||||
&ivec,
|
||||
@@ -844,23 +848,23 @@ RSA_MD4_DES_verify(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md4 md4;
|
||||
MD4_CTX md4;
|
||||
unsigned char tmp[24];
|
||||
unsigned char res[16];
|
||||
des_cblock ivec;
|
||||
krb5_error_code ret = 0;
|
||||
|
||||
memset(&ivec, 0, sizeof(ivec));
|
||||
des_cbc_encrypt(C->checksum.data,
|
||||
des_cbc_encrypt(C->checksum.data,
|
||||
(void*)tmp,
|
||||
C->checksum.length,
|
||||
key->schedule->data,
|
||||
&ivec,
|
||||
DES_DECRYPT);
|
||||
md4_init(&md4);
|
||||
md4_update(&md4, tmp, 8); /* confounder */
|
||||
md4_update(&md4, data, len);
|
||||
md4_finito(&md4, res);
|
||||
MD4Init (&md4);
|
||||
MD4Update (&md4, tmp, 8); /* confounder */
|
||||
MD4Update (&md4, data, len);
|
||||
MD4Final (res, &md4);
|
||||
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
|
||||
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
|
||||
memset(tmp, 0, sizeof(tmp));
|
||||
@@ -875,10 +879,11 @@ RSA_MD5_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md5 m;
|
||||
md5_init(&m);
|
||||
md5_update(&m, data, len);
|
||||
md5_finito(&m, C->checksum.data);
|
||||
MD5_CTX m;
|
||||
|
||||
MD5Init (&m);
|
||||
MD5Update(&m, data, len);
|
||||
MD5Final (C->checksum.data, &m);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -888,18 +893,18 @@ RSA_MD5_DES_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md5 md5;
|
||||
MD5_CTX md5;
|
||||
des_cblock ivec;
|
||||
unsigned char *p = C->checksum.data;
|
||||
|
||||
krb5_generate_random_block(p, 8);
|
||||
md5_init(&md5);
|
||||
md5_update(&md5, p, 8);
|
||||
md5_update(&md5, data, len);
|
||||
md5_finito(&md5, p + 8);
|
||||
MD5Init (&md5);
|
||||
MD5Update (&md5, p, 8);
|
||||
MD5Update (&md5, data, len);
|
||||
MD5Final (p + 8, &md5);
|
||||
memset (&ivec, 0, sizeof(ivec));
|
||||
des_cbc_encrypt((des_cblock*)p,
|
||||
(des_cblock*)p,
|
||||
des_cbc_encrypt((const void *)p,
|
||||
(void *)p,
|
||||
24,
|
||||
key->schedule->data,
|
||||
&ivec,
|
||||
@@ -913,7 +918,7 @@ RSA_MD5_DES_verify(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md5 md5;
|
||||
MD5_CTX md5;
|
||||
unsigned char tmp[24];
|
||||
unsigned char res[16];
|
||||
des_cblock ivec;
|
||||
@@ -927,10 +932,10 @@ RSA_MD5_DES_verify(krb5_context context,
|
||||
sched[0],
|
||||
&ivec,
|
||||
DES_DECRYPT);
|
||||
md5_init(&md5);
|
||||
md5_update(&md5, tmp, 8); /* confounder */
|
||||
md5_update(&md5, data, len);
|
||||
md5_finito(&md5, res);
|
||||
MD5Init (&md5);
|
||||
MD5Update (&md5, tmp, 8); /* confounder */
|
||||
MD5Update (&md5, data, len);
|
||||
MD5Final (res, &md5);
|
||||
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
|
||||
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
|
||||
memset(tmp, 0, sizeof(tmp));
|
||||
@@ -945,19 +950,19 @@ RSA_MD5_DES3_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md5 md5;
|
||||
MD5_CTX md5;
|
||||
des_cblock ivec;
|
||||
unsigned char *p = C->checksum.data;
|
||||
des_key_schedule *sched = key->schedule->data;
|
||||
|
||||
krb5_generate_random_block(p, 8);
|
||||
md5_init(&md5);
|
||||
md5_update(&md5, p, 8);
|
||||
md5_update(&md5, data, len);
|
||||
md5_finito(&md5, p + 8);
|
||||
MD5Init (&md5);
|
||||
MD5Update (&md5, p, 8);
|
||||
MD5Update (&md5, data, len);
|
||||
MD5Final (p + 8, &md5);
|
||||
memset (&ivec, 0, sizeof(ivec));
|
||||
des_ede3_cbc_encrypt((des_cblock*)p,
|
||||
(des_cblock*)p,
|
||||
des_ede3_cbc_encrypt((const void *)p,
|
||||
(void *)p,
|
||||
24,
|
||||
sched[0], sched[1], sched[2],
|
||||
&ivec,
|
||||
@@ -971,7 +976,7 @@ RSA_MD5_DES3_verify(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct md5 md5;
|
||||
MD5_CTX md5;
|
||||
unsigned char tmp[24];
|
||||
unsigned char res[16];
|
||||
des_cblock ivec;
|
||||
@@ -985,10 +990,10 @@ RSA_MD5_DES3_verify(krb5_context context,
|
||||
sched[0], sched[1], sched[2],
|
||||
&ivec,
|
||||
DES_DECRYPT);
|
||||
md5_init(&md5);
|
||||
md5_update(&md5, tmp, 8); /* confounder */
|
||||
md5_update(&md5, data, len);
|
||||
md5_finito(&md5, res);
|
||||
MD5Init (&md5);
|
||||
MD5Update (&md5, tmp, 8); /* confounder */
|
||||
MD5Update (&md5, data, len);
|
||||
MD5Final (res, &md5);
|
||||
if(memcmp(res, tmp + 8, sizeof(res)) != 0)
|
||||
ret = KRB5KRB_AP_ERR_BAD_INTEGRITY;
|
||||
memset(tmp, 0, sizeof(tmp));
|
||||
@@ -1003,10 +1008,11 @@ SHA1_checksum(krb5_context context,
|
||||
size_t len,
|
||||
Checksum *C)
|
||||
{
|
||||
struct sha m;
|
||||
sha_init(&m);
|
||||
sha_update(&m, data, len);
|
||||
sha_finito(&m, C->checksum.data);
|
||||
SHA1_CTX m;
|
||||
|
||||
SHA1Init(&m);
|
||||
SHA1Update(&m, data, len);
|
||||
SHA1Final(C->checksum.data, &m);
|
||||
}
|
||||
|
||||
/* HMAC according to RFC2104 */
|
||||
@@ -2284,11 +2290,12 @@ krb5_get_keyid(krb5_context context,
|
||||
krb5_keyblock *key,
|
||||
u_int32_t *keyid)
|
||||
{
|
||||
struct md5 md5;
|
||||
MD5_CTX md5;
|
||||
unsigned char tmp[16];
|
||||
md5_init(&md5);
|
||||
md5_update(&md5, key->keyvalue.data, key->keyvalue.length);
|
||||
md5_finito(&md5, tmp);
|
||||
|
||||
MD5Init (&md5);
|
||||
MD5Update (&md5, key->keyvalue.data, key->keyvalue.length);
|
||||
MD5Final (tmp, &md5);
|
||||
*keyid = (tmp[12] << 24) | (tmp[13] << 16) | (tmp[14] << 8) | tmp[15];
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user