From 780b387de7915ebedda188e361f55c03eac4bd55 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Wed, 9 May 2001 07:06:47 +0000 Subject: [PATCH] (encryption_type): make field names more consistent (create_checksum): separate usage and type (krb5_create_checksum): add a separate type parameter (encrypt_internal): only free once on mismatched checksum length git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9868 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/crypto.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/krb5/crypto.c b/lib/krb5/crypto.c index be4f3abbc..c5fc050e8 100644 --- a/lib/krb5/crypto.c +++ b/lib/krb5/crypto.c @@ -112,7 +112,7 @@ struct encryption_type { size_t blocksize; size_t confoundersize; struct key_type *keytype; - struct checksum_type *cksumtype; + struct checksum_type *checksum; struct checksum_type *keyed_checksum; unsigned flags; krb5_error_code (*encrypt)(struct key_data *key, @@ -1403,7 +1403,7 @@ do_checksum (krb5_context context, static krb5_error_code create_checksum(krb5_context context, krb5_crypto crypto, - unsigned usage, /* not krb5_key_usage */ + krb5_key_usage usage, /* not krb5_key_usage */ krb5_cksumtype type, /* 0 -> pick from crypto */ void *data, size_t len, @@ -1411,13 +1411,14 @@ create_checksum(krb5_context context, { struct checksum_type *ct = NULL; - if (type) + if (type) { ct = _find_checksum(type); - else if(crypto) { + } else if (crypto) { ct = crypto->et->keyed_checksum; - if(ct == NULL) - ct = crypto->et->cksumtype; + if (ct == NULL) + ct = crypto->et->checksum; } + if(ct == NULL) return KRB5_PROG_SUMTYPE_NOSUPP; return do_checksum (context, ct, crypto, usage, data, len, result); @@ -1426,14 +1427,15 @@ create_checksum(krb5_context context, krb5_error_code krb5_create_checksum(krb5_context context, krb5_crypto crypto, - unsigned usage_or_type, + krb5_key_usage usage, + int type, void *data, size_t len, Checksum *result) { return create_checksum(context, crypto, - CHECKSUM_USAGE(usage_or_type), - usage_or_type, data, len, result); + CHECKSUM_USAGE(usage), + type, data, len, result); } static krb5_error_code @@ -2175,7 +2177,7 @@ encrypt_internal_derived(krb5_context context, ret = create_checksum(context, crypto, INTEGRITY_USAGE(usage), - 0, + et->keyed_checksum->type, p, block_sz, &cksum); @@ -2225,7 +2227,7 @@ encrypt_internal(krb5_context context, krb5_error_code ret; struct encryption_type *et = crypto->et; - checksum_sz = CHECKSUMSIZE(et->cksumtype); + checksum_sz = CHECKSUMSIZE(et->checksum); sz = et->confoundersize + checksum_sz + len; block_sz = (sz + et->blocksize - 1) &~ (et->blocksize - 1); /* pad */ @@ -2243,14 +2245,12 @@ encrypt_internal(krb5_context context, ret = create_checksum(context, crypto, 0, - 0, + et->checksum->type, p, block_sz, &cksum); - if(ret == 0 && cksum.checksum.length != checksum_sz) { - free_Checksum (&cksum); + if(ret == 0 && cksum.checksum.length != checksum_sz) ret = KRB5_CRYPTO_INTERNAL; - } if(ret) { memset(p, 0, block_sz); free(p); @@ -2284,7 +2284,7 @@ encrypt_internal_special(krb5_context context, void *ivec) { struct encryption_type *et = crypto->et; - size_t cksum_sz = CHECKSUMSIZE(et->cksumtype); + size_t cksum_sz = CHECKSUMSIZE(et->checksum); size_t sz = len + cksum_sz + et->confoundersize; char *tmp, *p; @@ -2385,7 +2385,7 @@ decrypt_internal(krb5_context context, size_t checksum_sz, l; struct encryption_type *et = crypto->et; - checksum_sz = CHECKSUMSIZE(et->cksumtype); + checksum_sz = CHECKSUMSIZE(et->checksum); p = malloc(len); if(len != 0 && p == NULL) return ENOMEM; @@ -2406,7 +2406,7 @@ decrypt_internal(krb5_context context, return ret; } memset(p + et->confoundersize, 0, checksum_sz); - cksum.cksumtype = CHECKSUMTYPE(et->cksumtype); + cksum.cksumtype = CHECKSUMTYPE(et->checksum); ret = verify_checksum(context, NULL, 0, p, len, &cksum); free_Checksum(&cksum); if(ret) { @@ -2434,7 +2434,7 @@ decrypt_internal_special(krb5_context context, void *ivec) { struct encryption_type *et = crypto->et; - size_t cksum_sz = CHECKSUMSIZE(et->cksumtype); + size_t cksum_sz = CHECKSUMSIZE(et->checksum); size_t sz = len - cksum_sz - et->confoundersize; char *cdata = (char *)data; char *tmp; @@ -2905,7 +2905,7 @@ wrapped_length (krb5_context context, size_t blocksize = et->blocksize; size_t res; - res = et->confoundersize + et->cksumtype->checksumsize + data_len; + res = et->confoundersize + et->checksum->checksumsize + data_len; res = (res + blocksize - 1) / blocksize * blocksize; return res; } @@ -2921,7 +2921,7 @@ wrapped_length_dervied (krb5_context context, res = et->confoundersize + data_len; res = (res + blocksize - 1) / blocksize * blocksize; - res += et->cksumtype->checksumsize; + res += et->checksum->checksumsize; return res; }