summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-03-22 11:24:36 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-03-22 11:24:36 +0100
commit20f4b70c6f47b4a48197e05691de67225512f36f (patch)
tree7dcf17a7d268c5518e69eadf7a07b72eece1ff27 /common
parent2d01e7ab1312d28207b9ae63f1e35b6e9f8e560c (diff)
downloadeurephia-20f4b70c6f47b4a48197e05691de67225512f36f.tar.gz
eurephia-20f4b70c6f47b4a48197e05691de67225512f36f.tar.xz
eurephia-20f4b70c6f47b4a48197e05691de67225512f36f.zip
Added benchmarking to suggest minimum and maximum rounds for hashes
Diffstat (limited to 'common')
-rw-r--r--common/passwd.c41
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