X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=blobdiff_plain;f=sha1.c;h=a78345a55f6378dc51d1bb67b3e2dab4eb8d404f;hp=d85e0a83975f15f9089bf02d7081c57d48ddb68a;hb=HEAD;hpb=8dea8d37a13fcc615daba3375809900f04a2e5a2 diff --git a/sha1.c b/sha1.c index d85e0a8..a78345a 100644 --- a/sha1.c +++ b/sha1.c @@ -2,6 +2,7 @@ SHA-1 in C By Steve Reid 100% Public Domain +[I interpet this as a blanket permision -iwj.] Note: parts of this file have been removed or modified to work in secnet. Instead of using this file in new projects, I suggest you use the @@ -59,7 +60,9 @@ By Saul Kravitz Still 100% PD Modified to run on Compaq Alpha hardware. - +----------------- +(Further modifications as part of secnet. See git history for full details. + - Ian Jackson et al) */ /* @@ -75,6 +78,7 @@ A million repetitions of "a" /* #define SHA1HANDSOFF */ #include "secnet.h" +#include "util.h" #include #include @@ -284,17 +288,14 @@ unsigned char finalcount[8]; /*************************************************************/ /* Everything below here is the interface to secnet */ -static void *sha1_init(void) +static void sha1_init(void *sst) { - SHA1_CTX *ctx; + SHA1_CTX *ctx=sst; - ctx=safe_malloc(sizeof(*ctx),"sha1_init"); SHA1Init(ctx); - - return ctx; } -static void sha1_update(void *sst, uint8_t const *buf, uint32_t len) +static void sha1_update(void *sst, const void *buf, int32_t len) { SHA1_CTX *ctx=sst; @@ -306,7 +307,6 @@ static void sha1_final(void *sst, uint8_t *digest) SHA1_CTX *ctx=sst; SHA1Final(digest,ctx); - free(ctx); } struct sha1 { @@ -314,12 +314,12 @@ struct sha1 { struct hash_if ops; }; -init_module sha1_module; +static struct sha1 st[1]; +struct hash_if *const sha1_hash_if = &st->ops; + void sha1_module(dict_t *dict) { - struct sha1 *st; - void *ctx; - string_t testinput="abcdbcdecdefdefgefghfghigh" + cstring_t testinput="abcdbcdecdefdefgefghfghigh" "ijhijkijkljklmklmnlmnomnopnopq"; uint8_t expected[20]= { 0x84,0x98,0x3e,0x44, @@ -330,24 +330,22 @@ void sha1_module(dict_t *dict) uint8_t digest[20]; int i; - st=safe_malloc(sizeof(*st),"sha1_module"); st->cl.description="sha1"; st->cl.type=CL_HASH; st->cl.apply=NULL; st->cl.interface=&st->ops; - st->ops.len=20; + st->ops.hlen=20; + st->ops.slen=sizeof(SHA1_CTX); st->ops.init=sha1_init; st->ops.update=sha1_update; st->ops.final=sha1_final; dict_add(dict,"sha1",new_closure(&st->cl)); - ctx=sha1_init(); - sha1_update(ctx,testinput,strlen(testinput)); - sha1_final(ctx,digest); + hash_hash(&st->ops,testinput,strlen(testinput),digest); for (i=0; i<20; i++) { if (digest[i]!=expected[i]) { - fatal("sha1 module failed self-test\n"); + fatal("sha1 module failed self-test"); } } }