URI: 
       tbenchmark.c - tomb - the crypto undertaker
  HTML git clone git://parazyd.org/tomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tbenchmark.c (1630B)
       ---
            1 #include <stdio.h>
            2 #include <stdlib.h>
            3 #include <string.h>
            4 
            5 #include <sys/time.h>
            6 
            7 #include <gcrypt.h>
            8 
            9 static long bench(int ic) {
           10         char *pass = "mypass";
           11         unsigned char *salt = "abcdefghijklmno";
           12         int salt_len = strlen(salt);
           13         int result_len = 64;
           14         unsigned char *result = calloc(result_len, sizeof(char));
           15         struct timeval start, end;
           16         long microtime;
           17 
           18         gettimeofday(&start, NULL);
           19         gcry_kdf_derive( pass, strlen(pass), GCRY_KDF_PBKDF2, GCRY_MD_SHA1, salt, salt_len, ic, result_len, result);
           20         gettimeofday(&end, NULL);
           21         microtime = 1000000*end.tv_sec+end.tv_usec - (1000000*start.tv_sec+start.tv_usec);
           22 
           23         return (long)microtime;
           24 }
           25 int main(int argc, char *argv[])
           26 {
           27         long desired_time = 1000000;
           28         long microtime;
           29         int ic=100;
           30         int tries=0;
           31         if(argc >= 2)
           32                 sscanf(argv[1], "%ld", &desired_time);
           33         if (!gcry_check_version ("1.5.0")) {
           34                 fputs ("libgcrypt version mismatch\n", stderr);
           35                 exit (2);
           36         }
           37         /* Allocate a pool of 16k secure memory.  This make the secure memory
           38         available and also drops privileges where needed.  */
           39         gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
           40         /* It is now okay to let Libgcrypt complain when there was/is
           41         a problem with the secure memory. */
           42         gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
           43         /* Tell Libgcrypt that initialization has completed. */
           44         gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
           45 
           46 
           47         microtime = bench(ic);
           48         while( abs(desired_time-microtime) > (desired_time/10) /*little difference */ 
           49                         && tries++ <= 5) {
           50                 float ratio = (float)desired_time/microtime;
           51                 if(ratio > 1000) ratio=1000.0;
           52                 ic*=ratio;
           53                 if(ic<1) ic=1;
           54                 microtime = bench(ic);
           55         } 
           56         printf("%d\n", ic);
           57         return 0;
           58 
           59 }