diff options
Diffstat (limited to 'src/lib/crypto/krb/make_checksum.c')
-rw-r--r-- | src/lib/crypto/krb/make_checksum.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/lib/crypto/krb/make_checksum.c b/src/lib/crypto/krb/make_checksum.c index 06a5247..bffc59b 100644 --- a/src/lib/crypto/krb/make_checksum.c +++ b/src/lib/crypto/krb/make_checksum.c @@ -29,10 +29,12 @@ #include "etypes.h" #include "dk.h" +/* A 0 checksum type means use the mandatory checksum*/ + krb5_error_code KRB5_CALLCONV krb5_k_make_checksum(krb5_context context, krb5_cksumtype cksumtype, - krb5_key key, krb5_keyusage usage, - const krb5_data *input, krb5_checksum *cksum) + krb5_key key, krb5_keyusage usage, + const krb5_data *input, krb5_checksum *cksum) { unsigned int i; const struct krb5_cksumtypes *ctp; @@ -43,6 +45,12 @@ krb5_k_make_checksum(krb5_context context, krb5_cksumtype cksumtype, krb5_error_code ret; size_t cksumlen; + if (cksumtype == 0) { + ret = krb5int_c_mandatory_cksumtype(context, krb5_k_key_enctype(context, key), &cksumtype); + if (ret != 0) + return ret; + } + for (i = 0; i < krb5int_cksumtypes_length; i++) { if (krb5int_cksumtypes_list[i].ctype == cksumtype) break; @@ -57,6 +65,7 @@ krb5_k_make_checksum(krb5_context context, krb5_cksumtype cksumtype, cksumlen = ctp->hash->hashsize; cksum->length = cksumlen; + cksum->checksum_type = cksumtype; cksum->contents = malloc(cksum->length); if (cksum->contents == NULL) return ENOMEM; |