Tomb/extras/kdf/pbkdf2/benchmark.c
Jaromil 3eb93acc18 Directory reorganization
This commit re-organizes all the source distribution contents to
present users with the simple script, while moving the rest in extras.
Also autoconf/automake scripts were removed, back to minimalism.

The rationale of this change is that Tomb really only consists of a
script and users with no extra needs should just be presented with
it with no need for anything else. Any other thing on top of the Tomb
script is an extra and can be even distributed separately or integrated
in distributions.
2013-05-18 17:29:37 +02:00

60 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <gcrypt.h>
static long bench(int ic) {
char *pass = "mypass";
unsigned char *salt = "abcdefghijklmno";
int salt_len = strlen(salt);
int result_len = 64;
unsigned char *result = calloc(result_len, sizeof(char));
struct timeval start, end;
long microtime;
gettimeofday(&start, NULL);
gcry_kdf_derive( pass, strlen(pass), GCRY_KDF_PBKDF2, GCRY_MD_SHA1, salt, salt_len, ic, result_len, result);
gettimeofday(&end, NULL);
microtime = 1000000*end.tv_sec+end.tv_usec - (1000000*start.tv_sec+start.tv_usec);
return (long)microtime;
}
int main(int argc, char *argv[])
{
long desired_time = 1000000;
long microtime;
int ic=100;
int tries=0;
if(argc >= 2)
sscanf(argv[1], "%ld", &desired_time);
if (!gcry_check_version ("1.5.0")) {
fputs ("libgcrypt version mismatch\n", stderr);
exit (2);
}
/* Allocate a pool of 16k secure memory. This make the secure memory
available and also drops privileges where needed. */
gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
/* It is now okay to let Libgcrypt complain when there was/is
a problem with the secure memory. */
gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
/* Tell Libgcrypt that initialization has completed. */
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
microtime = bench(ic);
while( abs(desired_time-microtime) > (desired_time/10) /*little difference */
&& tries++ <= 5) {
float ratio = (float)desired_time/microtime;
if(ratio > 1000) ratio=1000.0;
ic*=ratio;
if(ic<1) ic=1;
microtime = bench(ic);
}
printf("%d\n", ic);
return 0;
}