mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-12-02 01:48:36 +00:00
3eb93acc18
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.
60 lines
1.6 KiB
C
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;
|
|
|
|
}
|