Annotation of embedaddon/axTLS/ssl/test/perf_bigint.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2007, Cameron Rich
3: *
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions are met:
8: *
9: * * Redistributions of source code must retain the above copyright notice,
10: * this list of conditions and the following disclaimer.
11: * * Redistributions in binary form must reproduce the above copyright notice,
12: * this list of conditions and the following disclaimer in the documentation
13: * and/or other materials provided with the distribution.
14: * * Neither the name of the axTLS project nor the names of its contributors
15: * may be used to endorse or promote products derived from this software
16: * without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30:
31: /**
32: * Some performance testing of bigint.
33: */
34:
35: #include <stdio.h>
36: #include <stdlib.h>
37: #include <string.h>
38:
39: #include "os_port.h"
40: #include "ssl.h"
41:
42: /**************************************************************************
43: * BIGINT tests
44: *
45: **************************************************************************/
46:
47: int main(int argc, char *argv[])
48: {
49: #ifdef CONFIG_SSL_CERT_VERIFICATION
50: RSA_CTX *rsa_ctx = NULL;
51: BI_CTX *ctx;
52: bigint *bi_data, *bi_res;
53: float diff;
54: int res = 1;
55: struct timeval tv_old, tv_new;
56: const char *plaintext;
57: uint8_t compare[MAX_KEY_BYTE_SIZE];
58: int i, max_biggie = 10; /* really crank performance */
59: int len;
60: uint8_t *buf;
61:
62: /**
63: * 512 bit key
64: */
65: plaintext = /* 64 byte number */
66: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
67:
68: len = get_file("../ssl/test/axTLS.key_512", &buf);
69: asn1_get_private_key(buf, len, &rsa_ctx);
70: ctx = rsa_ctx->bi_ctx;
71: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
72: bi_res = RSA_public(rsa_ctx, bi_data);
73: bi_data = bi_res; /* reuse again */
74:
75: gettimeofday(&tv_old, NULL);
76: for (i = 0; i < max_biggie; i++)
77: {
78: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
79: if (i < max_biggie-1)
80: {
81: bi_free(ctx, bi_res);
82: }
83: }
84:
85: gettimeofday(&tv_new, NULL);
86: bi_free(ctx, bi_data);
87:
88: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
89: (tv_new.tv_usec-tv_old.tv_usec)/1000;
90: printf("512 bit decrypt time: %.2fms\n", diff/max_biggie);
91: TTY_FLUSH();
92: bi_export(ctx, bi_res, compare, 64);
93: RSA_free(rsa_ctx);
94: free(buf);
95: if (memcmp(plaintext, compare, 64) != 0)
96: goto end;
97:
98: /**
99: * 1024 bit key
100: */
101: plaintext = /* 128 byte number */
102: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
103: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
104:
105: len = get_file("../ssl/test/axTLS.key_1024", &buf);
106: rsa_ctx = NULL;
107: asn1_get_private_key(buf, len, &rsa_ctx);
108: ctx = rsa_ctx->bi_ctx;
109: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
110: bi_res = RSA_public(rsa_ctx, bi_data);
111: bi_data = bi_res; /* reuse again */
112:
113: gettimeofday(&tv_old, NULL);
114: for (i = 0; i < max_biggie; i++)
115: {
116: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
117: if (i < max_biggie-1)
118: {
119: bi_free(ctx, bi_res);
120: }
121: }
122:
123: gettimeofday(&tv_new, NULL);
124: bi_free(ctx, bi_data);
125:
126: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
127: (tv_new.tv_usec-tv_old.tv_usec)/1000;
128: printf("1024 bit decrypt time: %.2fms\n", diff/max_biggie);
129: TTY_FLUSH();
130: bi_export(ctx, bi_res, compare, 128);
131: RSA_free(rsa_ctx);
132: free(buf);
133: if (memcmp(plaintext, compare, 128) != 0)
134: goto end;
135:
136: /**
137: * 2048 bit key
138: */
139: plaintext = /* 256 byte number */
140: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
141: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
142: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
143: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
144:
145: len = get_file("../ssl/test/axTLS.key_2048", &buf);
146: rsa_ctx = NULL;
147: asn1_get_private_key(buf, len, &rsa_ctx);
148: ctx = rsa_ctx->bi_ctx;
149: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
150: bi_res = RSA_public(rsa_ctx, bi_data);
151: bi_data = bi_res; /* reuse again */
152:
153: gettimeofday(&tv_old, NULL);
154: for (i = 0; i < max_biggie; i++)
155: {
156: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
157: if (i < max_biggie-1)
158: {
159: bi_free(ctx, bi_res);
160: }
161: }
162: gettimeofday(&tv_new, NULL);
163: bi_free(ctx, bi_data);
164:
165: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
166: (tv_new.tv_usec-tv_old.tv_usec)/1000;
167: printf("2048 bit decrypt time: %.2fms\n", diff/max_biggie);
168: TTY_FLUSH();
169: bi_export(ctx, bi_res, compare, 256);
170: RSA_free(rsa_ctx);
171: free(buf);
172: if (memcmp(plaintext, compare, 256) != 0)
173: goto end;
174:
175: /**
176: * 4096 bit key
177: */
178: plaintext = /* 512 byte number */
179: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
180: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
181: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
182: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
183: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
184: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
185: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
186: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
187:
188: len = get_file("../ssl/test/axTLS.key_4096", &buf);
189: rsa_ctx = NULL;
190: asn1_get_private_key(buf, len, &rsa_ctx);
191: ctx = rsa_ctx->bi_ctx;
192: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
193: gettimeofday(&tv_old, NULL);
194: bi_res = RSA_public(rsa_ctx, bi_data);
195: gettimeofday(&tv_new, NULL);
196: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
197: (tv_new.tv_usec-tv_old.tv_usec)/1000;
198: printf("4096 bit encrypt time: %.2fms\n", diff);
199: TTY_FLUSH();
200: bi_data = bi_res; /* reuse again */
201:
202: gettimeofday(&tv_old, NULL);
203: for (i = 0; i < max_biggie; i++)
204: {
205: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
206: if (i < max_biggie-1)
207: {
208: bi_free(ctx, bi_res);
209: }
210: }
211:
212: gettimeofday(&tv_new, NULL);
213: bi_free(ctx, bi_data);
214:
215: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
216: (tv_new.tv_usec-tv_old.tv_usec)/1000;
217: printf("4096 bit decrypt time: %.2fms\n", diff/max_biggie);
218: TTY_FLUSH();
219: bi_export(ctx, bi_res, compare, 512);
220: RSA_free(rsa_ctx);
221: free(buf);
222: if (memcmp(plaintext, compare, 512) != 0)
223: goto end;
224:
225: /* done */
226: printf("Bigint performance testing complete\n");
227: res = 0;
228:
229: end:
230: return res;
231: #else
232: return 0;
233: #endif
234: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>