X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=crypto%2Falgtables.c;h=6f7a81cb894c32abd8923928d7a078708d2dffbd;hb=d1431da7660c2585f394d16c259b17b5358ac435;hp=8fa24e4d626742c22fe92be35b9949f35ad5ba2d;hpb=07876950ceee6d28473f347ad2f0c4422c266e32;p=chiark-tcl.git diff --git a/crypto/algtables.c b/crypto/algtables.c index 8fa24e4..6f7a81c 100644 --- a/crypto/algtables.c +++ b/crypto/algtables.c @@ -6,8 +6,9 @@ #include "hbytes.h" #include "serpent.h" -#include "sha1.h" -#include "md5.h" + +#include +#include static void alg_serpent_makekey(void *schedule, const void *key, int keylen) { serpent_makekey(schedule, key, keylen); @@ -29,35 +30,36 @@ const BlockCipherAlgInfo blockcipheralginfos[]= { { 0 } }; -static void alg_sha1_init(void *state) { sha1_init(state); } -static void alg_sha1_update(void *state, const void *data, int len) { - sha1_update(state, data, len); -} -static void alg_sha1_final(void *state, void *digest) { - sha1_final(state, digest); -} -static void alg_sha1_oneshot(void *digest, const void *data, int len) { - sha1(data,len,digest); -} +#define NETTLE_DIGESTS \ + DO(sha1, SHA1) \ + DO(sha256, SHA256) \ + DO(md5, MD5) -static void alg_md5_init(void *state) { MD5Init(state); } -static void alg_md5_update(void *state, const void *data, int len) { - MD5Update(state, data, len); -} -static void alg_md5_final(void *state, void *digest) { - MD5Final(digest, state); -} -static void alg_md5_oneshot(void *digest, const void *data, int len) { - struct MD5Context ctx; - MD5Init(&ctx); - MD5Update(&ctx,data,len); - MD5Final(digest,&ctx); -} +#define DO(name,NAME) \ + static void alg_##name##_init(void *state) { \ + name##_init(state); \ + } \ + static void alg_##name##_update(void *state, const void *data, int len) { \ + name##_update(state, len, data); \ + } \ + static void alg_##name##_final(void *state, void *digest) { \ + name##_digest(state,NAME##_DIGEST_SIZE,digest); \ + } \ + static void alg_##name##_oneshot(void *digest, const void *data, int len) { \ + struct name##_ctx ctx; \ + name##_init(&ctx); \ + name##_update(&ctx, len, data); \ + name##_digest(&ctx,NAME##_DIGEST_SIZE,digest); \ + } + NETTLE_DIGESTS +#undef DO const HashAlgInfo hashalginfos[]= { - { "sha1", 20, 64, sizeof(struct sha1_state), - alg_sha1_init, alg_sha1_update, alg_sha1_final, alg_sha1_oneshot }, - { "md5", 16, 64, sizeof(struct MD5Context), - alg_md5_init, alg_md5_update, alg_md5_final, alg_md5_oneshot }, +#define DO(name,NAME) \ + { #name, NAME##_DIGEST_SIZE, NAME##_DATA_SIZE, sizeof(struct name##_ctx), \ + alg_##name##_init, alg_##name##_update, alg_##name##_final, \ + alg_##name##_oneshot }, + NETTLE_DIGESTS +#undef DO { 0 } };