summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-04-10 23:32:45 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-04-10 23:32:45 +0200
commit10fd2098416c78958a199f31480bd363eaa76212 (patch)
treea1dafd44090d2aea4180f6fc5d4205dc698a8063 /utils
parent8f747e26fb8629ea290f88cf70112770e90a168a (diff)
downloadeurephia-10fd2098416c78958a199f31480bd363eaa76212.tar.gz
eurephia-10fd2098416c78958a199f31480bd363eaa76212.tar.xz
eurephia-10fd2098416c78958a199f31480bd363eaa76212.zip
Rewritten common/passwd.c and utils/benchmark.c
Make them work without the need of defining BENCHMARK during compilation
Diffstat (limited to 'utils')
-rw-r--r--utils/benchmark.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/utils/benchmark.c b/utils/benchmark.c
index d8c5d2d..24f4511 100644
--- a/utils/benchmark.c
+++ b/utils/benchmark.c
@@ -25,7 +25,54 @@
#include <assert.h>
#include <sys/time.h>
-void benchmark_hashing(int rounds);
+#include <eurephia_nullsafe.h>
+#include <eurephia_context.h>
+
+#define ROUNDS_MIN 1000
+#define ROUNDS_MAX 999999999
+
+// Internal functions found in passwd.c
+int pack_saltinfo(char *buf, int buflen, int rounds, int saltlen, const char *pwd);
+inline char *sha512_crypt_r(const char *key, const char *salt, size_t maxrounds_cfg, char *buffer, int buflen);
+int gen_randsaltstr(eurephiaCTX *ctx, char *saltstr, int len);
+
+// A function which calculates a hash based on a standard password, used
+// for measuring the time used for hash calculation
+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, ROUNDS_MAX, buffer, 1024);
+
+ free_nullsafe(buffer);
+}
+
int timeval_subtract (result, x, y)
struct timeval *result, *x, *y;