diff options
Diffstat (limited to 'nacl/crypto_box/measure.c')
-rw-r--r-- | nacl/crypto_box/measure.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/nacl/crypto_box/measure.c b/nacl/crypto_box/measure.c new file mode 100644 index 00000000..08df1e39 --- /dev/null +++ b/nacl/crypto_box/measure.c | |||
@@ -0,0 +1,137 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include "randombytes.h" | ||
3 | #include "cpucycles.h" | ||
4 | #include "crypto_box.h" | ||
5 | |||
6 | extern void printentry(long long,const char *,long long *,long long); | ||
7 | extern unsigned char *alignedcalloc(unsigned long long); | ||
8 | extern const char *primitiveimplementation; | ||
9 | extern const char *implementationversion; | ||
10 | extern const char *sizenames[]; | ||
11 | extern const long long sizes[]; | ||
12 | extern void allocate(void); | ||
13 | extern void measure(void); | ||
14 | |||
15 | const char *primitiveimplementation = crypto_box_IMPLEMENTATION; | ||
16 | const char *implementationversion = crypto_box_VERSION; | ||
17 | const char *sizenames[] = { "publickeybytes", "secretkeybytes", "beforenmbytes", "noncebytes", "zerobytes", "boxzerobytes", 0 }; | ||
18 | const long long sizes[] = { crypto_box_PUBLICKEYBYTES, crypto_box_SECRETKEYBYTES, crypto_box_BEFORENMBYTES, crypto_box_NONCEBYTES, crypto_box_ZEROBYTES, crypto_box_BOXZEROBYTES }; | ||
19 | |||
20 | #define MAXTEST_BYTES 4096 | ||
21 | |||
22 | static unsigned char *ska; | ||
23 | static unsigned char *pka; | ||
24 | static unsigned char *skb; | ||
25 | static unsigned char *pkb; | ||
26 | static unsigned char *n; | ||
27 | static unsigned char *m; | ||
28 | static unsigned char *c; | ||
29 | static unsigned char *sa; | ||
30 | static unsigned char *sb; | ||
31 | |||
32 | void preallocate(void) | ||
33 | { | ||
34 | } | ||
35 | |||
36 | void allocate(void) | ||
37 | { | ||
38 | ska = alignedcalloc(crypto_box_SECRETKEYBYTES); | ||
39 | pka = alignedcalloc(crypto_box_PUBLICKEYBYTES); | ||
40 | skb = alignedcalloc(crypto_box_SECRETKEYBYTES); | ||
41 | pkb = alignedcalloc(crypto_box_PUBLICKEYBYTES); | ||
42 | n = alignedcalloc(crypto_box_NONCEBYTES); | ||
43 | m = alignedcalloc(MAXTEST_BYTES + crypto_box_ZEROBYTES); | ||
44 | c = alignedcalloc(MAXTEST_BYTES + crypto_box_ZEROBYTES); | ||
45 | sa = alignedcalloc(crypto_box_BEFORENMBYTES); | ||
46 | sb = alignedcalloc(crypto_box_BEFORENMBYTES); | ||
47 | } | ||
48 | |||
49 | #define TIMINGS 15 | ||
50 | static long long cycles[TIMINGS + 1]; | ||
51 | |||
52 | void measure(void) | ||
53 | { | ||
54 | int i; | ||
55 | int loop; | ||
56 | int mlen; | ||
57 | |||
58 | for (loop = 0;loop < LOOPS;++loop) { | ||
59 | for (i = 0;i <= TIMINGS;++i) { | ||
60 | cycles[i] = cpucycles(); | ||
61 | crypto_box_keypair(pka,ska); | ||
62 | } | ||
63 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
64 | printentry(-1,"keypair_cycles",cycles,TIMINGS); | ||
65 | |||
66 | for (i = 0;i <= TIMINGS;++i) { | ||
67 | cycles[i] = cpucycles(); | ||
68 | crypto_box_keypair(pkb,skb); | ||
69 | } | ||
70 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
71 | printentry(-1,"keypair_cycles",cycles,TIMINGS); | ||
72 | |||
73 | for (i = 0;i <= TIMINGS;++i) { | ||
74 | cycles[i] = cpucycles(); | ||
75 | crypto_box_beforenm(sa,pkb,ska); | ||
76 | } | ||
77 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
78 | printentry(-1,"beforenm_cycles",cycles,TIMINGS); | ||
79 | |||
80 | for (i = 0;i <= TIMINGS;++i) { | ||
81 | cycles[i] = cpucycles(); | ||
82 | crypto_box_beforenm(sb,pka,skb); | ||
83 | } | ||
84 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
85 | printentry(-1,"beforenm_cycles",cycles,TIMINGS); | ||
86 | |||
87 | for (mlen = 0;mlen <= MAXTEST_BYTES;mlen += 1 + mlen / 8) { | ||
88 | randombytes(n,crypto_box_NONCEBYTES); | ||
89 | randombytes(m + crypto_box_ZEROBYTES,mlen); | ||
90 | randombytes(c,mlen + crypto_box_ZEROBYTES); | ||
91 | |||
92 | for (i = 0;i <= TIMINGS;++i) { | ||
93 | cycles[i] = cpucycles(); | ||
94 | crypto_box(c,m,mlen + crypto_box_ZEROBYTES,n,pka,skb); | ||
95 | } | ||
96 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
97 | printentry(mlen,"cycles",cycles,TIMINGS); | ||
98 | |||
99 | for (i = 0;i <= TIMINGS;++i) { | ||
100 | cycles[i] = cpucycles(); | ||
101 | crypto_box_open(m,c,mlen + crypto_box_ZEROBYTES,n,pkb,ska); | ||
102 | } | ||
103 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
104 | printentry(mlen,"open_cycles",cycles,TIMINGS); | ||
105 | |||
106 | ++c[crypto_box_ZEROBYTES]; | ||
107 | for (i = 0;i <= TIMINGS;++i) { | ||
108 | cycles[i] = cpucycles(); | ||
109 | crypto_box_open(m,c,mlen + crypto_box_ZEROBYTES,n,pkb,ska); | ||
110 | } | ||
111 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
112 | printentry(mlen,"forgery_open_cycles",cycles,TIMINGS); | ||
113 | |||
114 | for (i = 0;i <= TIMINGS;++i) { | ||
115 | cycles[i] = cpucycles(); | ||
116 | crypto_box_afternm(c,m,mlen + crypto_box_ZEROBYTES,n,sb); | ||
117 | } | ||
118 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
119 | printentry(mlen,"afternm_cycles",cycles,TIMINGS); | ||
120 | |||
121 | for (i = 0;i <= TIMINGS;++i) { | ||
122 | cycles[i] = cpucycles(); | ||
123 | crypto_box_open_afternm(m,c,mlen + crypto_box_ZEROBYTES,n,sa); | ||
124 | } | ||
125 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
126 | printentry(mlen,"open_afternm_cycles",cycles,TIMINGS); | ||
127 | |||
128 | ++c[crypto_box_ZEROBYTES]; | ||
129 | for (i = 0;i <= TIMINGS;++i) { | ||
130 | cycles[i] = cpucycles(); | ||
131 | crypto_box_open_afternm(m,c,mlen + crypto_box_ZEROBYTES,n,sa); | ||
132 | } | ||
133 | for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; | ||
134 | printentry(mlen,"forgery_open_afternm_cycles",cycles,TIMINGS); | ||
135 | } | ||
136 | } | ||
137 | } | ||