From 0a52d5798576066db9e32e6bd3aff317f1be5073 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Wed, 9 Jul 1997 00:29:04 +0000 Subject: [PATCH] Move checksum functions here. Add krb5_cksumsize function. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2071 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/checksum.c | 66 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/lib/krb5/checksum.c b/lib/krb5/checksum.c index badffd79d..7c93470af 100644 --- a/lib/krb5/checksum.c +++ b/lib/krb5/checksum.c @@ -8,11 +8,56 @@ struct checksum_type { void (*checksum)(void *, size_t, void *); }; +static void +NULL_checksum(void *p, size_t len, void *result) +{ +} + +static void +MD4_checksum(void *p, size_t len, void *result) +{ + struct md4 m; + md4_init(&m); + md4_update(&m, p, len); + md4_finito(&m, result); +} + +static void +MD5_checksum(void *p, size_t len, void *result) +{ + struct md5 m; + md5_init(&m); + md5_update(&m, p, len); + md5_finito(&m, result); +} + +static void +SHA1_checksum(void *p, size_t len, void *result) +{ + struct sha m; + sha_init(&m); + sha_update(&m, p, len); + sha_finito(&m, result); +} + +static void +CRC_checksum(void *p, size_t len, void *result) +{ + u_int32_t crc; + unsigned char *r = result; + crc_init_table (); + crc = crc_update (p, len, 0); + r[0] = crc & 0xff; + r[1] = (crc >> 8) & 0xff; + r[2] = (crc >> 16) & 0xff; + r[3] = (crc >> 24) & 0xff; +} + static struct checksum_type cm[] = { - { CKSUMTYPE_NONE, 0, krb5_NULL_checksum}, - { CKSUMTYPE_CRC32, 4, krb5_CRC_checksum}, - { CKSUMTYPE_RSA_MD4, 16, krb5_MD4_checksum}, - { CKSUMTYPE_RSA_MD5, 16, krb5_MD5_checksum} + { CKSUMTYPE_NONE, 0, NULL_checksum}, + { CKSUMTYPE_CRC32, 4, CRC_checksum}, + { CKSUMTYPE_RSA_MD4, 16, MD4_checksum}, + { CKSUMTYPE_RSA_MD5, 16, MD5_checksum} }; static int num_ctypes = sizeof(cm) / sizeof(cm[0]); @@ -27,6 +72,19 @@ find_checksum_type(int ctype) return NULL; } +krb5_error_code +krb5_cksumsize(krb5_context context, + krb5_cksumtype type, + size_t *size) +{ + struct checksum_type *c = find_checksum_type(type); + if(c == NULL) + return KRB5_PROG_SUMTYPE_NOSUPP; + + *size = c->checksumsize; + return 0; +} + krb5_error_code krb5_create_checksum (krb5_context context, krb5_cksumtype type,