diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-22 11:24:36 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-22 11:24:36 +0100 |
commit | 20f4b70c6f47b4a48197e05691de67225512f36f (patch) | |
tree | 7dcf17a7d268c5518e69eadf7a07b72eece1ff27 /common/passwd.c | |
parent | 2d01e7ab1312d28207b9ae63f1e35b6e9f8e560c (diff) | |
download | eurephia-20f4b70c6f47b4a48197e05691de67225512f36f.tar.gz eurephia-20f4b70c6f47b4a48197e05691de67225512f36f.tar.xz eurephia-20f4b70c6f47b4a48197e05691de67225512f36f.zip |
Added benchmarking to suggest minimum and maximum rounds for hashes
Diffstat (limited to 'common/passwd.c')
-rw-r--r-- | common/passwd.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/common/passwd.c b/common/passwd.c index 2006602..6c5eda2 100644 --- a/common/passwd.c +++ b/common/passwd.c @@ -471,3 +471,44 @@ char *eurephia_quick_hash(const char *salt, const char *pwd) { return ret; } + + +#ifdef BENCHMARK +// This function is only used by the eurephia_init program to benchmark +// the SHA512 performance, to suggest recommended minimum and maximum +// hashing rounds. +void benchmark_hashing(int rounds) { + + char *buffer = NULL; + char *pwdhash = NULL; + static char randstr[34]; + static int rand_set = 0; + char pwdsalt[64], saltstr[32]; + + // Get random data for our salt + if( rand_set == 0 ) { + memset(&randstr, 0, 34); + if( gen_randsaltstr(NULL, randstr, 32) == 0 ) { + fprintf(stderr, "Could not retrieve enough random data for hashing"); + exit(19); + }; + rand_set = 1; + } + + // Prepare a salt package + memset(&pwdsalt, 0, 64); + memset(&saltstr, 0, 32); + pack_saltinfo(saltstr, 30, rounds, 32, "benchmarkpassword"); + strncpy(pwdsalt, saltstr, strlen(saltstr)); + strncat(pwdsalt, randstr, 62 - strlen(saltstr)); + memset(&randstr, 0, 32); + + buffer = (char *) malloc(1024); + assert( buffer != NULL ); + memset(buffer, 0, 1024); + + pwdhash = sha512_crypt_r("benchmarkpassword", pwdsalt, buffer, 1024); + + free_nullsafe(buffer); +} +#endif |