diff options
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 |