From 97fd28fc9a09464374b7f8fd153bffbe51c9c93f Mon Sep 17 00:00:00 2001 From: John Kohl Date: Thu, 3 Jan 1991 16:57:01 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1608 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/crypto/md4/md4crypto.c | 87 ++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/lib/crypto/md4/md4crypto.c diff --git a/src/lib/crypto/md4/md4crypto.c b/src/lib/crypto/md4/md4crypto.c new file mode 100644 index 000000000..e8ef135c8 --- /dev/null +++ b/src/lib/crypto/md4/md4crypto.c @@ -0,0 +1,87 @@ +/* + * $Source$ + * $Author$ + * + * Copyright 1991 by the Massachusetts Institute of Technology. + * + * For copying and distribution information, please see the file + * . + * + * Kerberos glue for MD4 sample implementation. + */ + +#if !defined(lint) && !defined(SABER) +static char rcsid_md4crypto_c[] = +"$Id$"; +#endif /* !lint & !SABER */ + +#include +#include +#include + +#include "../des/des_int.h" /* we cheat a bit and call it directly... */ + +static krb5_error_code +md4_crypto_sum_func(in, in_length, seed, seed_length, outcksum) +krb5_pointer in; +size_t in_length; +krb5_pointer seed; +size_t seed_length; +krb5_checksum *outcksum; +{ + krb5_octet *output, outtmp[RSA_MD4_DES_CKSUM_LENGTH]; + krb5_octet *input = (krb5_octet *)in; + krb5_encrypt_block eblock; + krb5_keyblock keyblock; + krb5_error_code retval; + + register int i, j; + MDstruct working; + + MDbegin(&working); + + for (i = in_length; i >= 64; i -= 64, input += 64) + /* MD4 works in 512 bit chunks (64 bytes) */ + MDupdate(&working, input, 512); + /* now close out remaining stuff. Even if i == 0, we want to + "close out" the MD4 algorithm */ + MDupdate(&working, input, i*8); + + outcksum->checksum_type = CKSUMTYPE_RSA_MD4_DES; + outcksum->length = RSA_MD4_DES_CKSUM_LENGTH; + + /* the output code here is adapted from MDprint; + it needs to assemble it into proper byte order. */ + + output = &outtmp[0]; + for (i = 0; i < 4; i++) + for (j = 0; j < 32; j += 8) + *output++ = (working.buffer[i] >> j) & 0xFF; + + keyblock.length = seed_length; + keyblock.contents = seed; + keyblock.keytype = KEYTYPE_DES; + + if (retval = mit_des_process_key(&eblock, &keyblock)) + return retval; + /* now encrypt it */ + retval = mit_des_cbc_encrypt(output, + outcksum->contents, + RSA_MD4_DES_CKSUM_LENGTH, + (struct mit_des_ks_struct *)eblock.priv, + keyblock.contents, + MIT_DES_ENCRYPT); + if (retval) { + (void) mit_des_finish_key(&eblock); + return retval; + } + return mit_des_finish_key(&eblock); +} + + +krb5_checksum_entry md4_crypto_cksumtable_entry = { + md4_crypto_sum_func, + RSA_MD4_CKSUM_LENGTH, /* CRC-32 is 4 octets */ + 1, /* is collision proof */ + 1, /* uses key */ +}; -- 2.26.2