xref: /netbsd-src/external/bsd/nsd/dist/iterated_hash.c (revision 181254a7b1bdde6873432bffef2d2decc4b5c22f)
1 /*
2  * iterated_hash.c -- nsec3 hash calculation.
3  *
4  * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
5  *
6  * See LICENSE for the license.
7  *
8  * With thanks to Ben Laurie.
9  */
10 #include "config.h"
11 #ifdef NSEC3
12 #include <openssl/sha.h>
13 #include <stdio.h>
14 #include <assert.h>
15 
16 #include "iterated_hash.h"
17 
18 int
19 iterated_hash(unsigned char out[SHA_DIGEST_LENGTH],
20 	const unsigned char *salt, int saltlength,
21 	const unsigned char *in, int inlength, int iterations)
22 {
23 #if defined(NSEC3) && defined(HAVE_SSL)
24 	SHA_CTX ctx;
25 	int n;
26 	assert(in && inlength > 0 && iterations >= 0);
27 	for(n=0 ; n <= iterations ; ++n)
28 	{
29 		SHA1_Init(&ctx);
30 		SHA1_Update(&ctx, in, inlength);
31 		if(saltlength > 0)
32 			SHA1_Update(&ctx, salt, saltlength);
33 		SHA1_Final(out, &ctx);
34 		in=out;
35 		inlength=SHA_DIGEST_LENGTH;
36 	}
37 	return SHA_DIGEST_LENGTH;
38 #else
39 	(void)out; (void)salt; (void)saltlength;
40 	(void)in; (void)inlength; (void)iterations;
41 	return 0;
42 #endif
43 }
44 
45 #endif /* NSEC3 */
46