8 extern void curve25519_donna(uint8_t *, const uint8_t *, const uint8_t *);
9 extern uint64_t tsc_read();
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};
16 uint64_t sum = 0, sum_squares = 0, skipped = 0, mean;
17 static const unsigned count = 200000;
19 memset(private_key, 42, sizeof(private_key));
21 private_key[0] &= 248;
22 private_key[31] &= 127;
23 private_key[31] |= 64;
25 curve25519_donna(public, private_key, basepoint);
26 memset(peer1, 0, sizeof(peer1));
27 memset(peer2, 255, sizeof(peer2));
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;
35 // something terrible happened (task switch etc)
40 sum_squares += (delta * delta);
43 mean = sum / ((uint64_t) count);
44 printf("all 0: mean:%lu sd:%f skipped:%lu\n",
46 sqrt((double)(sum_squares/((uint64_t) count) - mean*mean)),
49 sum = sum_squares = skipped = 0;
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;
57 // something terrible happened (task switch etc)
62 sum_squares += (delta * delta);
65 mean = sum / ((uint64_t) count);
66 printf("all 1: mean:%lu sd:%f skipped:%lu\n",
68 sqrt((double)(sum_squares/((uint64_t) count) - mean*mean)),