diff options
| author | Theodore Tso <tytso@mit.edu> | 1992-09-30 14:05:27 +0000 |
|---|---|---|
| committer | Theodore Tso <tytso@mit.edu> | 1992-09-30 14:05:27 +0000 |
| commit | b32b9b5ff08d5ed2059b0551adaaeaef4ac71379 (patch) | |
| tree | 73ba86cf44edde7c0055786207c87d69c064ab3a /src | |
| parent | c15373cde8cf9cd0aefb9eb591401faa32a06166 (diff) | |
| download | krb5-b32b9b5ff08d5ed2059b0551adaaeaef4ac71379.tar.gz krb5-b32b9b5ff08d5ed2059b0551adaaeaef4ac71379.tar.xz krb5-b32b9b5ff08d5ed2059b0551adaaeaef4ac71379.zip | |
*** empty log message ***
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2450 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/crypto/md5/md5crypto.c | 64 | ||||
| -rw-r--r-- | src/lib/crypto/md5/md5glue.c | 38 |
2 files changed, 102 insertions, 0 deletions
diff --git a/src/lib/crypto/md5/md5crypto.c b/src/lib/crypto/md5/md5crypto.c new file mode 100644 index 000000000..9dcb8694e --- /dev/null +++ b/src/lib/crypto/md5/md5crypto.c @@ -0,0 +1,64 @@ +#if !defined(lint) && !defined(SABER) +static char rcsid_md5crypto_c[] = "$Id$"; +#endif + +#include <krb5/krb5.h> +#include <krb5/ext-proto.h> +#include <krb5/rsa-md5.h> + +#include "../des/des_int.h" /* we cheat a bit and call it directly... */ + +static krb5_error_code +md5_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 outtmp[RSA_MD5_DES_CKSUM_LENGTH]; + krb5_octet *input = (krb5_octet *)in; + krb5_encrypt_block eblock; + krb5_keyblock keyblock; + krb5_error_code retval; + + MD5_CTX working; + + MD5Init(&working); + MD5Update(&working, input, in_length); + MD5Final(&working); + + outcksum->checksum_type = CKSUMTYPE_RSA_MD5_DES; + outcksum->length = RSA_MD5_DES_CKSUM_LENGTH; + + memcpy((char *)outtmp, (char *)&working.digest[0], 16); + + memset((char *)&working, 0, sizeof(working)); + + keyblock.length = seed_length; + keyblock.contents = (krb5_octet *)seed; + keyblock.keytype = KEYTYPE_DES; + + if (retval = mit_des_process_key(&eblock, &keyblock)) + return retval; + /* now encrypt it */ + retval = mit_des_cbc_encrypt(&outtmp[0], + outcksum->contents, + RSA_MD5_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 rsa_md5_des_cksumtable_entry = { + md5_crypto_sum_func, + RSA_MD5_DES_CKSUM_LENGTH, + 1, /* is collision proof */ + 1, /* uses key */ +}; diff --git a/src/lib/crypto/md5/md5glue.c b/src/lib/crypto/md5/md5glue.c new file mode 100644 index 000000000..a5453570a --- /dev/null +++ b/src/lib/crypto/md5/md5glue.c @@ -0,0 +1,38 @@ +#if !defined(lint) && !defined(SABER) +static char rcsid_md5glue_c[] = "$Id$"; +#endif + +#include <krb5/krb5.h> +#include <krb5/ext-proto.h> +#include <krb5/rsa-md5.h> + +static krb5_error_code +md5_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 *input = (krb5_octet *)in; + MD5_CTX working; + + MD5Init(&working); + MD5Update(&working, input, in_length); + MD5Final(&working); + + outcksum->checksum_type = CKSUMTYPE_RSA_MD5; + outcksum->length = RSA_MD5_CKSUM_LENGTH; + + memcpy((char *)outcksum->contents, (char *)&working.digest[0], 16); + + memset((char *)&working, 0, sizeof(working)); + return 0; +} + +krb5_checksum_entry rsa_md5_cksumtable_entry = { + md5_sum_func, + RSA_MD5_CKSUM_LENGTH, + 1, /* is collision proof */ + 0, /* doesn't use key */ +}; |
