gestumblinde

Gestumblinde - reference implementation of SLH-DSA
git clone git://www.tkruger.se/gestumblinde.git
Log | Files | Refs | README

bench.c (3094B)


      1 #include <assert.h>
      2 #include <stdio.h>
      3 #include <time.h>
      4 
      5 #include "slh.h"
      6 
      7 #define BENCH_LEN_MSG 32
      8 
      9 #if ENN == 16
     10 uint8_t BENCH_SK[4 * ENN] = {
     11     103, 101, 115, 116, 117, 109, 98,  108, 105, 110, 100, 101, 103,
     12     97,  97,  116, 97,  97,  110, 97,  101, 114, 105, 110, 116, 101,
     13     108, 111, 101, 115, 116, 102, 111, 101, 114, 101, 110, 110, 97,
     14     103, 111, 110, 107, 111, 109, 109, 101, 114, 104, 47,  111, 154,
     15     54,  193, 126, 255, 3,   249, 104, 241, 60,  161, 89,  113};
     16 #elif ENN == 24
     17 uint8_t BENCH_SK[4 * ENN] = {
     18     103, 101, 115, 116, 117, 109, 98,  108, 105, 110, 100, 101, 103, 97,
     19     97,  116, 189, 177, 231, 9,   173, 59,  194, 4,   97,  97,  110, 97,
     20     101, 114, 105, 110, 116, 101, 108, 111, 101, 115, 116, 102, 117, 114,
     21     146, 254, 171, 158, 41,  218, 111, 101, 114, 101, 110, 110, 97,  103,
     22     111, 110, 107, 111, 109, 109, 101, 114, 80,  103, 254, 5,   104, 255,
     23     79,  97,  163, 49,  66,  229, 92,  1,   244, 201, 91,  209, 134, 9,
     24     15,  25,  109, 199, 7,   250, 113, 42,  18,  244, 98,  145};
     25 #elif ENN == 32
     26 uint8_t BENCH_SK[4 * ENN] = {
     27     103, 101, 115, 116, 117, 109, 98,  108, 105, 110, 100, 101, 103, 97,  97,
     28     116, 67,  110, 116, 61,  167, 81,  134, 44,  1,   81,  106, 57,  159, 253,
     29     203, 225, 97,  97,  110, 97,  101, 114, 105, 110, 116, 101, 108, 111, 101,
     30     115, 116, 102, 6,   30,  202, 160, 84,  17,  65,  28,  55,  165, 134, 75,
     31     195, 219, 74,  70,  111, 101, 114, 101, 110, 110, 97,  103, 111, 110, 107,
     32     111, 109, 109, 101, 114, 118, 23,  140, 134, 120, 24,  199, 193, 210, 197,
     33     170, 232, 44,  207, 173, 175, 145, 109, 178, 174, 228, 202, 205, 199, 214,
     34     51,  65,  211, 86,  113, 195, 13,  105, 96,  108, 63,  229, 238, 212, 107,
     35     135, 28,  172, 175, 215, 221, 222, 202};
     36 #else
     37 #error "T'is a bad'ENN"
     38 #endif
     39 const uint8_t BENCH_MSG[BENCH_LEN_MSG] = {
     40     104, 101, 108, 108, 111, 119, 111, 114, 108, 100, 111,
     41     114, 115, 111, 109, 101, 115, 117, 99,  104, 109, 101,
     42     97,  110, 105, 110, 103, 108, 101, 115, 115, 116};
     43 
     44 static double time_sign(uint8_t *sig) {
     45   const uint8_t *sk = BENCH_SK;
     46   const uint8_t *msg = BENCH_MSG;
     47 
     48   clock_t before, after;
     49 
     50   before = clock();
     51   slh_sign(sig, msg, BENCH_LEN_MSG, sk, 0);
     52   after = clock();
     53 
     54   return ((double)(after - before)) / CLOCKS_PER_SEC;
     55 }
     56 
     57 static double time_verif(uint8_t *sig) {
     58   const uint8_t *pk = BENCH_SK + 2 * ENN;
     59   const uint8_t *msg = BENCH_MSG;
     60 
     61   clock_t before, after;
     62 
     63   before = clock();
     64   if (slh_verify(msg, BENCH_LEN_MSG, sig, SLH_SIGNATURE_LEN, pk) != 1) {
     65     printf("This should not happen!\n");
     66     exit(1);
     67   }
     68   after = clock();
     69 
     70   return ((double)(after - before)) / CLOCKS_PER_SEC;
     71 }
     72 
     73 static void pk_hack() {
     74   uint32_t adrs[ADRS_LEN] = {0};
     75   adrs[ADRS_LAYER_ADDRESS_IDX] = htobe32(D - 1);
     76 
     77   uint8_t pkb[ENN];
     78   xmss_node(pkb, BENCH_SK, 0, HP, BENCH_SK + 2 * ENN, adrs);
     79 
     80   memcpy(BENCH_SK + 3 * ENN, pkb, ENN);
     81 }
     82 
     83 int main() {
     84   uint8_t sig[SLH_SIGNATURE_LEN];
     85 
     86   pk_hack();
     87 
     88   double sign_time = time_sign(sig);
     89   double verif_time = time_verif(sig);
     90 
     91   printf("  %.2f %.2f\n", sign_time, verif_time);
     92 
     93   return 0;
     94 }