* 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,
*/
#include "secnet.h"
+#include "util.h"
#include <string.h> /* for memcpy() */
#include "md5.h"
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
#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, int32_t len)
+static void md5_update(void *sst, const void *buf, int32_t len)
{
struct MD5Context *ctx=sst;
struct MD5Context *ctx=sst;
MD5Final(digest,ctx);
- free(ctx);
}
struct md5 {
void md5_module(dict_t *dict)
{
struct md5 *st;
- void *ctx;
cstring_t testinput="12345\n";
uint8_t expected[16]=
{0xd5,0x77,0x27,0x3f,0xf8,0x85,0xc3,0xf8,
uint8_t digest[16];
int i;
- st=safe_malloc(sizeof(*st),"md5_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");