diff --git a/lib/krb5/checksum.c b/lib/krb5/checksum.c index 45968ffad..c3ae5b1b8 100644 --- a/lib/krb5/checksum.c +++ b/lib/krb5/checksum.c @@ -25,3 +25,26 @@ krb5_create_checksum (krb5_context context, md4_finito (&m, result->checksum.data); return 0; } + +krb5_error_code +krb5_verify_checksum (krb5_context context, + void *ptr, + size_t len, + Checksum *cksum) +{ + struct md4 m; + u_char csum[16]; + + if (cksum->cksumtype != CKSUMTYPE_RSA_MD4) + return KRB_AP_ERR_INAPP_CKSUM; + if (cksum->checksum.length != 16) + return KRB_AP_ERR_MODIFIED; + + md4_init (&m); + md4_update (&m, ptr, len); + md4_finito (&m, csum); + if (memcmp (cksum->checksum.data, csum, 16) == 0) + return 0; + else + return KRB_AP_ERR_MODIFIED; +}