00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _CRT_SECURE_NO_DEPRECATE
00025 #define _CRT_SECURE_NO_DEPRECATE 1
00026 #endif
00027
00028 #include "power_clocks_lib.h"
00029 #include "gpio.h"
00030 #include "intc.h"
00031 #include "print_funcs.h"
00032
00033 #if (defined __GNUC__)
00034 #include "nlao_cpu.h"
00035 #include "nlao_usart.h"
00036 #else
00037 #include <stdio.h>
00038 #endif
00039
00040 #include <string.h>
00041 #include <stdlib.h>
00042
00043 #include "cycle_counter.h"
00044 #include "polarssl/config.h"
00045
00046 #include "polarssl/md4.h"
00047 #include "polarssl/md5.h"
00048 #include "polarssl/sha1.h"
00049 #include "polarssl/sha2.h"
00050 #include "polarssl/sha4.h"
00051 #include "polarssl/arc4.h"
00052 #include "polarssl/des.h"
00053 #include "polarssl/aes.h"
00054 #include "polarssl/camellia.h"
00055 #include "polarssl/rsa.h"
00056 #include "polarssl/timing.h"
00057
00058 #define BUFSIZE 1024
00059
00062
00063 static pcl_freq_param_t pcl_freq_param =
00064 {
00065 .cpu_f = AVR32_PM_CPU_MAX_FREQ,
00066 .pba_f = AVR32_PM_PBA_MAX_FREQ,
00067 .osc0_f = FOSC0,
00068 .osc0_startup = OSC0_STARTUP
00069 };
00071
00074 static void init_sys_clocks(void)
00075 {
00076
00077
00078 if (pcl_configure_clocks(&pcl_freq_param) != PASS) {
00079 while(1);
00080 }
00081
00082
00083 init_dbg_rs232(pcl_freq_param.pba_f);
00084 }
00085
00086 #if __GNUC__
00087
00099 int _init_startup(void)
00100 {
00101
00102 extern void _evba;
00103
00104
00105 Set_system_register(AVR32_EVBA, (int)&_evba);
00106
00107
00108 Enable_global_exception();
00109
00110
00111 INTC_init_interrupts();
00112
00113
00114 set_cpu_hz(pcl_freq_param.pba_f);
00115
00116
00117 set_usart_base( ( void * ) DBG_USART );
00118
00119
00120 return 1;
00121 }
00122
00123 #elif (defined __ICCAVR32__)
00124
00125 #define CPU_HZ AVR32_PM_CPU_MAX_FREQ
00126
00129 int __low_level_init(void)
00130 {
00131
00132 Enable_global_exception();
00133
00134
00135 INTC_init_interrupts();
00136
00137
00138 extern volatile avr32_usart_t *volatile stdio_usart_base;
00139 stdio_usart_base = DBG_USART;
00140
00141
00142 return 1;
00143 }
00144
00145 #endif // Compiler
00146
00147
00148 static int myrand( void *rng_state )
00149 {
00150 if( rng_state != NULL )
00151 rng_state = NULL;
00152
00153 return( rand() );
00154 }
00155
00156 unsigned char buf[BUFSIZE];
00157
00158 int main( void )
00159 {
00160 int keysize;
00161 unsigned long i, j, tsc;
00162 unsigned char tmp[64];
00163 t_cpu_time timer;
00164
00165 init_sys_clocks();
00166
00167 printf( "Start Benchmark\n");
00168
00169 #if defined(POLARSSL_ARC4_C)
00170 arc4_context arc4;
00171 #endif
00172 #if defined(POLARSSL_DES_C)
00173 des3_context des3;
00174 des_context des;
00175 #endif
00176 #if defined(POLARSSL_AES_C)
00177 aes_context aes;
00178 #endif
00179 #if defined(POLARSSL_CAMELLIA_C)
00180 camellia_context camellia;
00181 #endif
00182 #if defined(POLARSSL_RSA_C)
00183 rsa_context rsa;
00184 #endif
00185
00186 memset( buf, 0xAA, sizeof( buf ) );
00187
00188 printf( "\n" );
00189
00190 #if defined(POLARSSL_MD4_C)
00191 printf( " MD4 : " );
00192 fflush( stdout );
00193
00194 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00195 for( i = 1; !cpu_is_timeout(&timer); i++ )
00196 md4( buf, BUFSIZE, tmp );
00197
00198 tsc = hardclock();
00199 for( j = 0; j < 1024; j++ )
00200 md4( buf, BUFSIZE, tmp );
00201
00202 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00203 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00204 #endif
00205
00206 #if defined(POLARSSL_MD5_C)
00207 printf( " MD5 : " );
00208 fflush( stdout );
00209
00210 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00211 for( i = 1; !cpu_is_timeout(&timer); i++ )
00212 md5( buf, BUFSIZE, tmp );
00213
00214 tsc = hardclock();
00215 for( j = 0; j < 1024; j++ )
00216 md5( buf, BUFSIZE, tmp );
00217
00218 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00219 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00220 #endif
00221
00222 #if defined(POLARSSL_SHA1_C)
00223 printf( " SHA-1 : " );
00224 fflush( stdout );
00225
00226 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00227 for( i = 1; !cpu_is_timeout(&timer); i++ )
00228 sha1( buf, BUFSIZE, tmp );
00229
00230 tsc = hardclock();
00231 for( j = 0; j < 1024; j++ )
00232 sha1( buf, BUFSIZE, tmp );
00233
00234 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00235 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00236 #endif
00237
00238 #if defined(POLARSSL_SHA2_C)
00239 printf( " SHA-256 : " );
00240 fflush( stdout );
00241
00242 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00243 for( i = 1; !cpu_is_timeout(&timer); i++ )
00244 sha2( buf, BUFSIZE, tmp, 0 );
00245
00246 tsc = hardclock();
00247 for( j = 0; j < 1024; j++ )
00248 sha2( buf, BUFSIZE, tmp, 0 );
00249
00250 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00251 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00252 #endif
00253
00254 #if defined(POLARSSL_SHA4_C)
00255 printf( " SHA-512 : " );
00256 fflush( stdout );
00257
00258 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00259 for( i = 1; !cpu_is_timeout(&timer); i++ )
00260 sha4( buf, BUFSIZE, tmp, 0 );
00261
00262 tsc = hardclock();
00263 for( j = 0; j < 1024; j++ )
00264 sha4( buf, BUFSIZE, tmp, 0 );
00265
00266 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00267 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00268 #endif
00269
00270 #if defined(POLARSSL_ARC4_C)
00271 printf( " ARC4 : " );
00272 fflush( stdout );
00273
00274 arc4_setup( &arc4, tmp, 32 );
00275
00276 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00277 for( i = 1; !cpu_is_timeout(&timer); i++ )
00278 arc4_crypt( &arc4, buf, BUFSIZE );
00279
00280 tsc = hardclock();
00281 for( j = 0; j < 1024; j++ )
00282 arc4_crypt( &arc4, buf, BUFSIZE );
00283
00284 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00285 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00286 #endif
00287
00288 #if defined(POLARSSL_DES_C)
00289 printf( " 3DES : " );
00290 fflush( stdout );
00291
00292 des3_set3key_enc( &des3, tmp );
00293
00294 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00295 for( i = 1; !cpu_is_timeout(&timer); i++ )
00296 des3_crypt_cbc( &des3, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00297
00298 tsc = hardclock();
00299 for( j = 0; j < 1024; j++ )
00300 des3_crypt_cbc( &des3, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00301
00302 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00303 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00304
00305 printf( " DES : " );
00306 fflush( stdout );
00307
00308 des_setkey_enc( &des, tmp );
00309
00310 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00311 for( i = 1; !cpu_is_timeout(&timer); i++ )
00312 des_crypt_cbc( &des, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00313
00314 tsc = hardclock();
00315 for( j = 0; j < 1024; j++ )
00316 des_crypt_cbc( &des, DES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00317
00318 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00319 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00320 #endif
00321
00322 #if defined(POLARSSL_AES_C)
00323 for( keysize = 128; keysize <= 256; keysize += 64 )
00324 {
00325 printf( " AES-%d : ", keysize );
00326 fflush( stdout );
00327
00328 memset( buf, 0, sizeof( buf ) );
00329 memset( tmp, 0, sizeof( tmp ) );
00330 aes_setkey_enc( &aes, tmp, keysize );
00331
00332 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00333
00334 for( i = 1; !cpu_is_timeout(&timer); i++ )
00335 aes_crypt_cbc( &aes, AES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00336
00337 tsc = hardclock();
00338 for( j = 0; j < 4096; j++ )
00339 aes_crypt_cbc( &aes, AES_ENCRYPT, BUFSIZE, tmp, buf, buf );
00340
00341 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00342 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00343 }
00344 #endif
00345
00346 #if defined(POLARSSL_CAMELLIA_C)
00347 for( keysize = 128; keysize <= 256; keysize += 64 )
00348 {
00349 printf( " CAMELLIA-%d : ", keysize );
00350 fflush( stdout );
00351
00352 memset( buf, 0, sizeof( buf ) );
00353 memset( tmp, 0, sizeof( tmp ) );
00354 camellia_setkey_enc( &camellia, tmp, keysize );
00355
00356 cpu_set_timeout(cpu_ms_2_cy(1000, CPU_HZ),&timer);
00357
00358 for( i = 1; !cpu_is_timeout(&timer); i++ )
00359 camellia_crypt_cbc( &camellia, CAMELLIA_ENCRYPT, BUFSIZE, tmp, buf, buf );
00360
00361 tsc = hardclock();
00362 for( j = 0; j < 4096; j++ )
00363 camellia_crypt_cbc( &camellia, CAMELLIA_ENCRYPT, BUFSIZE, tmp, buf, buf );
00364
00365 printf( "%9lu Kb/s, %9lu cycles/byte\n", i * BUFSIZE / 1024,
00366 ( hardclock() - tsc ) / ( j * BUFSIZE ) );
00367 }
00368 #endif
00369
00370 #if defined(POLARSSL_RSA_C)
00371 rsa_init( &rsa, RSA_PKCS_V15, 0, myrand, NULL );
00372 rsa_gen_key( &rsa, 1024, 65537 );
00373
00374 printf( " RSA-1024 : " );
00375 fflush( stdout );
00376 cpu_set_timeout(cpu_ms_2_cy(3000, CPU_HZ),&timer);
00377
00378 for( i = 1; !cpu_is_timeout(&timer); i++ )
00379 {
00380 buf[0] = 0;
00381 rsa_public( &rsa, buf, buf );
00382 }
00383
00384 printf( "%9lu public/s\n", i / 3 );
00385
00386 printf( " RSA-1024 : " );
00387 fflush( stdout );
00388 cpu_set_timeout(cpu_ms_2_cy(3000, CPU_HZ),&timer);
00389
00390 for( i = 1; !cpu_is_timeout(&timer); i++ )
00391 {
00392 buf[0] = 0;
00393 rsa_private( &rsa, buf, buf );
00394 }
00395
00396 printf( "%9lu private/s\n\n", i / 3 );
00397
00398 rsa_free( &rsa );
00399 #endif
00400
00401 #ifdef WIN32
00402 printf( " Press Enter to exit this program.\n" );
00403 fflush( stdout ); getchar();
00404 #endif
00405
00406 return( 0 );
00407 }