blob: 525c8528d05ef31cbc4de4ae3a175d932228ed6f [file] [log] [blame]
Paul Bakker5121ce52009-01-03 21:22:43 +00001/*
2 * Benchmark demonstration program
3 *
Paul Bakkere0ccd0a2009-01-04 16:27:10 +00004 * Based on XySSL: Copyright (C) 2006-2008 Christophe Devine
5 *
6 * Copyright (C) 2009 Paul Bakker
Paul Bakker5121ce52009-01-03 21:22:43 +00007 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22
23#ifndef _CRT_SECURE_NO_DEPRECATE
24#define _CRT_SECURE_NO_DEPRECATE 1
25#endif
26
27#include <string.h>
28#include <stdlib.h>
29#include <stdio.h>
30
Paul Bakker40e46942009-01-03 21:51:57 +000031#include "polarssl/config.h"
Paul Bakker5121ce52009-01-03 21:22:43 +000032
Paul Bakker40e46942009-01-03 21:51:57 +000033#include "polarssl/md4.h"
34#include "polarssl/md5.h"
35#include "polarssl/sha1.h"
36#include "polarssl/sha2.h"
37#include "polarssl/arc4.h"
38#include "polarssl/des.h"
39#include "polarssl/aes.h"
Paul Bakker38119b12009-01-10 23:31:23 +000040#include "polarssl/camellia.h"
Paul Bakker40e46942009-01-03 21:51:57 +000041#include "polarssl/rsa.h"
42#include "polarssl/timing.h"
Paul Bakker5121ce52009-01-03 21:22:43 +000043
44#define BUFSIZE 1024
45
46static int myrand( void *rng_state )
47{
48 if( rng_state != NULL )
49 rng_state = NULL;
50
51 return( rand() );
52}
53
54unsigned char buf[BUFSIZE];
55
56int main( void )
57{
58 int keysize;
59 unsigned long i, j, tsc;
60 unsigned char tmp[32];
Paul Bakker40e46942009-01-03 21:51:57 +000061#if defined(POLARSSL_ARC4_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000062 arc4_context arc4;
63#endif
Paul Bakker40e46942009-01-03 21:51:57 +000064#if defined(POLARSSL_DES_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000065 des3_context des3;
66 des_context des;
67#endif
Paul Bakker40e46942009-01-03 21:51:57 +000068#if defined(POLARSSL_AES_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000069 aes_context aes;
70#endif
Paul Bakker38119b12009-01-10 23:31:23 +000071#if defined(POLARSSL_CAMELLIA_C)
72 camellia_context camellia;
73#endif
Paul Bakker40e46942009-01-03 21:51:57 +000074#if defined(POLARSSL_RSA_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000075 rsa_context rsa;
76#endif
77
78 memset( buf, 0xAA, sizeof( buf ) );
79
80 printf( "\n" );
81
Paul Bakker40e46942009-01-03 21:51:57 +000082#if defined(POLARSSL_MD4_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000083 printf( " MD4 : " );
84 fflush( stdout );
85
86 set_alarm( 1 );
87 for( i = 1; ! alarmed; i++ )
88 md4( buf, BUFSIZE, tmp );
89
90 tsc = hardclock();
91 for( j = 0; j < 1024; j++ )
92 md4( buf, BUFSIZE, tmp );
93
94 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
95 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
96#endif
97
Paul Bakker40e46942009-01-03 21:51:57 +000098#if defined(POLARSSL_MD5_C)
Paul Bakker5121ce52009-01-03 21:22:43 +000099 printf( " MD5 : " );
100 fflush( stdout );
101
102 set_alarm( 1 );
103 for( i = 1; ! alarmed; i++ )
104 md5( buf, BUFSIZE, tmp );
105
106 tsc = hardclock();
107 for( j = 0; j < 1024; j++ )
108 md5( buf, BUFSIZE, tmp );
109
110 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
111 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
112#endif
113
Paul Bakker40e46942009-01-03 21:51:57 +0000114#if defined(POLARSSL_SHA1_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000115 printf( " SHA-1 : " );
116 fflush( stdout );
117
118 set_alarm( 1 );
119 for( i = 1; ! alarmed; i++ )
120 sha1( buf, BUFSIZE, tmp );
121
122 tsc = hardclock();
123 for( j = 0; j < 1024; j++ )
124 sha1( buf, BUFSIZE, tmp );
125
126 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
127 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
128#endif
129
Paul Bakker40e46942009-01-03 21:51:57 +0000130#if defined(POLARSSL_SHA2_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000131 printf( " SHA-256 : " );
132 fflush( stdout );
133
134 set_alarm( 1 );
135 for( i = 1; ! alarmed; i++ )
136 sha2( buf, BUFSIZE, tmp, 0 );
137
138 tsc = hardclock();
139 for( j = 0; j < 1024; j++ )
140 sha2( buf, BUFSIZE, tmp, 0 );
141
142 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
143 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
144#endif
145
Paul Bakker40e46942009-01-03 21:51:57 +0000146#if defined(POLARSSL_ARC4_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000147 printf( " ARC4 : " );
148 fflush( stdout );
149
150 arc4_setup( &arc4, tmp, 32 );
151
152 set_alarm( 1 );
153 for( i = 1; ! alarmed; i++ )
154 arc4_crypt( &arc4, buf, BUFSIZE );
155
156 tsc = hardclock();
157 for( j = 0; j < 1024; j++ )
158 arc4_crypt( &arc4, buf, BUFSIZE );
159
160 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
161 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
162#endif
163
Paul Bakker40e46942009-01-03 21:51:57 +0000164#if defined(POLARSSL_DES_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000165 printf( " 3DES : " );
166 fflush( stdout );
167
168 des3_set3key_enc( &des3, tmp );
169
170 set_alarm( 1 );
171 for( i = 1; ! alarmed; i++ )
172 des3_crypt_cbc( &des3, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
173
174 tsc = hardclock();
175 for( j = 0; j < 1024; j++ )
176 des3_crypt_cbc( &des3, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
177
178 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
179 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
180
181 printf( " DES : " );
182 fflush( stdout );
183
184 des_setkey_enc( &des, tmp );
185
186 set_alarm( 1 );
187 for( i = 1; ! alarmed; i++ )
188 des_crypt_cbc( &des, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
189
190 tsc = hardclock();
191 for( j = 0; j < 1024; j++ )
192 des_crypt_cbc( &des, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
193
194 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
195 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
196#endif
197
Paul Bakker40e46942009-01-03 21:51:57 +0000198#if defined(POLARSSL_AES_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000199 for( keysize = 128; keysize <= 256; keysize += 64 )
200 {
201 printf( " AES-%d : ", keysize );
202 fflush( stdout );
203
204 memset( buf, 0, sizeof( buf ) );
205 memset( tmp, 0, sizeof( tmp ) );
206 aes_setkey_enc( &aes, tmp, keysize );
207
208 set_alarm( 1 );
209
210 for( i = 1; ! alarmed; i++ )
211 aes_crypt_cbc( &aes, AES_ENCRYPT, BUFSIZE, tmp, buf, buf );
212
213 tsc = hardclock();
214 for( j = 0; j < 4096; j++ )
215 aes_crypt_cbc( &aes, AES_ENCRYPT, BUFSIZE, tmp, buf, buf );
216
217 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
218 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
219 }
220#endif
221
Paul Bakker38119b12009-01-10 23:31:23 +0000222#if defined(POLARSSL_CAMELLIA_C)
223 for( keysize = 128; keysize <= 256; keysize += 64 )
224 {
225 printf( " CAMELLIA-%d : ", keysize );
226 fflush( stdout );
227
228 memset( buf, 0, sizeof( buf ) );
229 memset( tmp, 0, sizeof( tmp ) );
230 camellia_setkey_enc( &camellia, tmp, keysize );
231
232 set_alarm( 1 );
233
234 for( i = 1; ! alarmed; i++ )
235 camellia_crypt_cbc( &camellia, CAMELLIA_ENCRYPT, BUFSIZE, tmp, buf, buf );
236
237 tsc = hardclock();
238 for( j = 0; j < 4096; j++ )
239 camellia_crypt_cbc( &camellia, CAMELLIA_ENCRYPT, BUFSIZE, tmp, buf, buf );
240
241 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
242 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
243 }
244#endif
245
Paul Bakker40e46942009-01-03 21:51:57 +0000246#if defined(POLARSSL_RSA_C)
Paul Bakker5121ce52009-01-03 21:22:43 +0000247 rsa_init( &rsa, RSA_PKCS_V15, 0, myrand, NULL );
248 rsa_gen_key( &rsa, 1024, 65537 );
249
250 printf( " RSA-1024 : " );
251 fflush( stdout );
252 set_alarm( 3 );
253
254 for( i = 1; ! alarmed; i++ )
255 {
256 buf[0] = 0;
257 rsa_public( &rsa, buf, buf );
258 }
259
260 printf( "%9lu public/s\n", i / 3 );
261
262 printf( " RSA-1024 : " );
263 fflush( stdout );
264 set_alarm( 3 );
265
266 for( i = 1; ! alarmed; i++ )
267 {
268 buf[0] = 0;
269 rsa_private( &rsa, buf, buf );
270 }
271
272 printf( "%9lu private/s\n\n", i / 3 );
273
274 rsa_free( &rsa );
275#endif
276
277#ifdef WIN32
278 printf( " Press Enter to exit this program.\n" );
279 fflush( stdout ); getchar();
280#endif
281
282 return( 0 );
283}