diff options
author | jakob <jakob@openbsd.org> | 2010-01-15 19:24:49 +0000 |
---|---|---|
committer | jakob <jakob@openbsd.org> | 2010-01-15 19:24:49 +0000 |
commit | 62ac0c33cd8a350e5e6563e0c87195af8a07028d (patch) | |
tree | 0fecfab1cce45651e8931998fbd441bd212b8284 /usr.sbin/nsd/iterated_hash.c | |
parent | Replace pool_get() + bzero() with pool_get(..., PR_ZERO). (diff) | |
download | wireguard-openbsd-62ac0c33cd8a350e5e6563e0c87195af8a07028d.tar.xz wireguard-openbsd-62ac0c33cd8a350e5e6563e0c87195af8a07028d.zip |
NSD v3.2.4
Diffstat (limited to 'usr.sbin/nsd/iterated_hash.c')
-rw-r--r-- | usr.sbin/nsd/iterated_hash.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/usr.sbin/nsd/iterated_hash.c b/usr.sbin/nsd/iterated_hash.c new file mode 100644 index 00000000000..da29482087f --- /dev/null +++ b/usr.sbin/nsd/iterated_hash.c @@ -0,0 +1,43 @@ +/* + * iterated_hash.c -- nsec3 hash calculation. + * + * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. + * + * See LICENSE for the license. + * + * With thanks to Ben Laurie. + */ +#include <config.h> +#ifdef NSEC3 +#include <openssl/sha.h> +#include <stdio.h> +#include <assert.h> + +#include "iterated_hash.h" + +int +iterated_hash(unsigned char out[SHA_DIGEST_LENGTH], + const unsigned char *salt, int saltlength, + const unsigned char *in, int inlength, int iterations) +{ +#if defined(NSEC3) && defined(HAVE_SSL) + SHA_CTX ctx; + int n; + assert(in && inlength > 0 && iterations >= 0); + for(n=0 ; n <= iterations ; ++n) + { + SHA1_Init(&ctx); + SHA1_Update(&ctx, in, inlength); + if(saltlength > 0) + SHA1_Update(&ctx, salt, saltlength); + SHA1_Final(out, &ctx); + in=out; + inlength=SHA_DIGEST_LENGTH; + } + return SHA_DIGEST_LENGTH; +#else + return 0; +#endif +} + +#endif /* NSEC3 */ |