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 }