]> gitweb.ps.run Git - matrix_esp_thesis/blob - ext/olm/lib/curve25519-donna/test-sc-curve25519.c
add dependencies to repo
[matrix_esp_thesis] / ext / olm / lib / curve25519-donna / test-sc-curve25519.c
1 #define _GNU_SOURCE
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <stdint.h>
6 #include <math.h>
7
8 extern void curve25519_donna(uint8_t *, const uint8_t *, const uint8_t *);
9 extern uint64_t tsc_read();
10
11 int
12 main(int argc, char **argv) {
13   uint8_t private_key[32], public[32], peer1[32], peer2[32], output[32];
14   static const uint8_t basepoint[32] = {9};
15   unsigned i;
16   uint64_t sum = 0, sum_squares = 0, skipped = 0, mean;
17   static const unsigned count = 200000;
18
19   memset(private_key, 42, sizeof(private_key));
20
21   private_key[0] &= 248;
22   private_key[31] &= 127;
23   private_key[31] |= 64;
24
25   curve25519_donna(public, private_key, basepoint);
26   memset(peer1, 0, sizeof(peer1));
27   memset(peer2, 255, sizeof(peer2));
28
29   for (i = 0; i < count; ++i) {
30     const uint64_t start = tsc_read();
31     curve25519_donna(output, peer1, public);
32     const uint64_t end = tsc_read();
33     const uint64_t delta = end - start;
34     if (delta > 650000) {
35       // something terrible happened (task switch etc)
36       skipped++;
37       continue;
38     }
39     sum += delta;
40     sum_squares += (delta * delta);
41   }
42
43   mean = sum / ((uint64_t) count);
44   printf("all 0: mean:%lu sd:%f skipped:%lu\n",
45          mean,
46          sqrt((double)(sum_squares/((uint64_t) count) - mean*mean)),
47          skipped);
48
49   sum = sum_squares = skipped = 0;
50
51   for (i = 0; i < count; ++i) {
52     const uint64_t start = tsc_read();
53     curve25519_donna(output, peer2, public);
54     const uint64_t end = tsc_read();
55     const uint64_t delta = end - start;
56     if (delta > 650000) {
57       // something terrible happened (task switch etc)
58       skipped++;
59       continue;
60     }
61     sum += delta;
62     sum_squares += (delta * delta);
63   }
64
65   mean = sum / ((uint64_t) count);
66   printf("all 1: mean:%lu sd:%f skipped:%lu\n",
67          mean,
68          sqrt((double)(sum_squares/((uint64_t) count) - mean*mean)),
69          skipped);
70
71   return 0;
72 }