Add verifier procedure/dispatch
authorPaul Park <pjpark@mit.edu>
Fri, 7 Jul 1995 21:01:22 +0000 (21:01 +0000)
committerPaul Park <pjpark@mit.edu>
Fri, 7 Jul 1995 21:01:22 +0000 (21:01 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6253 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/md4/md4glue.c

index caa0a3376f914fe7ec0c49361299d559fb5bfd93..cc6bd03aa1852ec9c81b5f9d1be2c9e9cbf5f1ca 100644 (file)
 #include "k5-int.h"
 #include "rsa-md4.h"
 
-krb5_error_code
-md4_sum_func KRB5_NPROTOTYPE((krb5_pointer in, size_t in_length,
-    krb5_pointer seed, size_t seed_length, krb5_checksum *outcksum));
-
 krb5_error_code
 md4_sum_func(in, in_length, seed, seed_length, outcksum)
 krb5_pointer in;
@@ -48,15 +44,50 @@ krb5_checksum FAR *outcksum;
     outcksum->checksum_type = CKSUMTYPE_RSA_MD4;
     outcksum->length = RSA_MD4_CKSUM_LENGTH;
 
-    memcpy((char *)outcksum->contents, (char *)&working.digest[0], 16);
+    memcpy((char *)outcksum->contents, (char *)&working.digest[0],
+          RSA_MD4_CKSUM_LENGTH);
 
     memset((char *)&working, 0, sizeof(working));
     return 0;
 }
 
+krb5_error_code
+md4_verify_func(cksum, in, in_length, seed, seed_length)
+krb5_checksum FAR *cksum;
+krb5_pointer in;
+size_t in_length;
+krb5_pointer seed;
+size_t seed_length;
+{
+    krb5_octet *input = (krb5_octet *)in;
+    MD4_CTX working;
+    krb5_error_code retval;
+
+    retval = 0;
+    if (cksum->checksum_type == CKSUMTYPE_RSA_MD4) {
+       if (cksum->length == RSA_MD4_CKSUM_LENGTH) {
+           MD4Init(&working);
+           MD4Update(&working, input, in_length);
+           MD4Final(&working);
+
+           if (memcmp((char *) cksum->contents,
+                      (char *) &working.digest[0],
+                      RSA_MD4_CKSUM_LENGTH))
+               retval = KRB5KRB_AP_ERR_BAD_INTEGRITY;
+           memset((char *)&working, 0, sizeof(working));
+       }
+       else
+           retval = KRB5KRB_AP_ERR_BAD_INTEGRITY;
+    }
+    else
+       retval = KRB5KRB_AP_ERR_INAPP_CKSUM;
+    return retval;
+}
+
 krb5_checksum_entry rsa_md4_cksumtable_entry = {
     0,
     md4_sum_func,
+    md4_verify_func,
     RSA_MD4_CKSUM_LENGTH,
     1,                                 /* is collision proof */
     0,                                 /* doesn't use key */