From a700b9bcafcb53b1456516180afaa7583531edf3 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Sat, 8 Mar 1997 05:55:54 +0000 Subject: [PATCH] correct crc calculation and actually checks it as well. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1279 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/encrypt.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/krb5/encrypt.c b/lib/krb5/encrypt.c index 3a6d230ea..663eccd84 100644 --- a/lib/krb5/encrypt.c +++ b/lib/krb5/encrypt.c @@ -1,5 +1,6 @@ #include #include +#include "crc.h" krb5_error_code krb5_encrypt (krb5_context context, @@ -45,8 +46,8 @@ krb5_decrypt (krb5_context context, krb5_keyblock *keyblock, krb5_data *result) { - u_char *p; - u_long crc; + u_char *p = (u_char *)ptr; + u_long my_crc, her_crc; des_cblock key; des_key_schedule schedule; @@ -54,14 +55,16 @@ krb5_decrypt (krb5_context context, des_set_key (&key, schedule); des_cbc_encrypt ((des_cblock *)ptr, (des_cblock *)ptr, len, schedule, &key, DES_DECRYPT); + her_crc = (p[11] << 24) | (p[10] << 16) | (p[9] << 8) | (p[8] << 0); + memset (p + 8, 0, sizeof(her_crc)); crc_init_table (); - crc = crc_update (ptr, len, 0); -#if 0 - if (crc) + my_crc = crc_update (ptr, len, 0); + if (my_crc != her_crc) return KRB5KRB_AP_ERR_BAD_INTEGRITY; -#endif result->length = len - 12; result->data = malloc(result->length); + if (result->data == NULL) + return ENOMEM; memcpy (result->data, (u_char *)ptr + 12, result->length); return 0; }