X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=md5.c;h=ca9ddb1ad7069b4850e59e96949c1db32f62efbf;hb=147b444d6faa9a621e33d653b7a72c29724203c3;hp=ab00d26efb41028978569fefe86d0adae1022a23;hpb=2fe58dfd10216a37f1ece081f926971882de112e;p=secnet.git diff --git a/md5.c b/md5.c index ab00d26..ca9ddb1 100644 --- a/md5.c +++ b/md5.c @@ -3,6 +3,7 @@ * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. + * [I interpet this as a blanket permision -iwj.] * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, @@ -20,17 +21,14 @@ * Still in the public domain. */ -#include /* for memcpy() */ -#include /* for stupid systems */ -#include /* for ntohl() */ - #include "secnet.h" -#include "config.h" +#include "util.h" +#include /* for memcpy() */ #include "md5.h" #ifdef WORDS_BIGENDIAN static void -byteSwap(uint32_t *buf, unsigned words) +byteSwap(uint32_t *buf, int words) { md5byte *p = (md5byte *)buf; @@ -133,7 +131,7 @@ MD5Final(md5byte digest[16], struct MD5Context *ctx) byteSwap(ctx->buf, 4); memcpy(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ + memset(ctx, 0, sizeof *ctx); /* In case it's sensitive */ } #ifndef ASM_MD5 @@ -241,17 +239,14 @@ MD5Transform(uint32_t buf[4], uint32_t const in[16]) #endif -static void *md5_init(void) +static void md5_init(void *sst) { - struct MD5Context *ctx; + struct MD5Context *ctx=sst; - ctx=safe_malloc(sizeof(*ctx),"md5_init"); MD5Init(ctx); - - return ctx; } -static void md5_update(void *sst, uint8_t const *buf, uint32_t len) +static void md5_update(void *sst, const void *buf, int32_t len) { struct MD5Context *ctx=sst; @@ -263,7 +258,6 @@ static void md5_final(void *sst, uint8_t *digest) struct MD5Context *ctx=sst; MD5Final(digest,ctx); - free(ctx); } struct md5 { @@ -271,36 +265,33 @@ struct md5 { struct hash_if ops; }; -init_module md5_module; void md5_module(dict_t *dict) { struct md5 *st; - void *ctx; - string_t testinput="12345\n"; + cstring_t testinput="12345\n"; uint8_t expected[16]= {0xd5,0x77,0x27,0x3f,0xf8,0x85,0xc3,0xf8, 0x4d,0xad,0xb8,0x57,0x8b,0xb4,0x13,0x99}; uint8_t digest[16]; int i; - st=safe_malloc(sizeof(*st),"netlink_module"); + NEW(st); st->cl.description="md5"; st->cl.type=CL_HASH; st->cl.apply=NULL; st->cl.interface=&st->ops; - st->ops.len=16; + st->ops.hlen=16; + st->ops.slen=sizeof(struct MD5Context); st->ops.init=md5_init; st->ops.update=md5_update; st->ops.final=md5_final; dict_add(dict,"md5",new_closure(&st->cl)); - ctx=md5_init(); - md5_update(ctx,testinput,strlen(testinput)); - md5_final(ctx,digest); + hash_hash(&st->ops,testinput,strlen(testinput),digest); for (i=0; i<16; i++) { if (digest[i]!=expected[i]) { - fatal("md5 module failed self-test\n"); + fatal("md5 module failed self-test"); } } }