]> git.cryptolib.org Git - avr-crypto-lib.git/blob - main-present-test.c
some minor changes to performance testing code
[avr-crypto-lib.git] / main-present-test.c
1 /*
2  * present test-suit
3  * 
4 */
5
6 #include "config.h"
7 #include "serial-tools.h"
8 #include "uart.h"
9 #include "debug.h"
10
11 #include "present.h"
12 #include "nessie_bc_test.h"
13 #include "cli.h"
14 #include "performance_test.h"
15
16 #include <stdlib.h>
17 #include <stdint.h>
18 #include <string.h>
19
20 char* cipher_name = "Present";
21
22 /*****************************************************************************
23  *  additional validation-functions                                                                                      *
24  *****************************************************************************/
25 void present_genctx_dummy(uint8_t* key, uint16_t keysize_b, present_ctx_t* ctx){
26         present_init(key, keysize_b, ctx);
27 }
28
29 void testrun_nessie_present(void){
30         nessie_bc_ctx.blocksize_B =   8;
31         nessie_bc_ctx.keysize_b   =  80;
32         nessie_bc_ctx.name        = cipher_name;
33         nessie_bc_ctx.ctx_size_B  = sizeof(present_ctx_t);
34         nessie_bc_ctx.cipher_enc  = (nessie_bc_enc_fpt)present_enc;
35         nessie_bc_ctx.cipher_dec  = (nessie_bc_dec_fpt)present_dec;
36         nessie_bc_ctx.cipher_genctx  = (nessie_bc_gen_fpt)present_genctx_dummy;
37         
38         nessie_bc_run();        
39 }
40
41 void testrun_selfenc(uint8_t* key, uint8_t* buffer){
42         present_ctx_t ctx;
43         uart_putstr_P(PSTR("\r\nkey   : "));
44         uart_hexdump(key, 10);
45         uart_putstr_P(PSTR("\r\nplain : "));
46         uart_hexdump(buffer, 8);
47         present_init(key, 80, &ctx);
48         present_enc(buffer, &ctx);
49         uart_putstr_P(PSTR("\r\ncipher: "));
50         uart_hexdump(buffer, 8);
51         present_dec(buffer, &ctx);
52         uart_putstr_P(PSTR("\r\nplain : "));
53         uart_hexdump(buffer, 8);
54         uart_putstr_P(PSTR("\r\n"));
55 }
56
57 void testrun_self_present(void){
58         uint8_t buffer[8], key[10];
59         uart_putstr_P(PSTR("\r\n\r\n=== Testvectors from the paper ===\r\n"));
60         
61         memset(buffer, 0, 8);
62         memset(key, 0, 10);
63         testrun_selfenc(key, buffer);
64         
65         memset(buffer, 0, 8);
66         memset(key, 0xFF, 10);
67         testrun_selfenc(key, buffer);
68         
69         memset(buffer, 0xFF, 8);
70         memset(key, 0, 10);
71         testrun_selfenc(key, buffer);
72         
73         memset(buffer, 0xFF, 8);
74         memset(key, 0xFF, 10);
75         testrun_selfenc(key, buffer);
76         
77 }
78
79 void testrun_performance_present(void){
80         uint16_t i,c;
81         uint64_t t;
82         char str[16];
83         uint8_t key[10], data[8];
84         present_ctx_t ctx;
85         
86         calibrateTimer();
87         getOverhead(&c, &i);
88         uart_putstr_P(PSTR("\r\n\r\n=== benchmark ==="));
89         utoa(c, str, 10);
90         uart_putstr_P(PSTR("\r\n\tconst overhead:     "));
91         uart_putstr(str);
92         utoa(i, str, 10);
93         uart_putstr_P(PSTR("\r\n\tinterrupt overhead: "));
94         uart_putstr(str);
95         
96         memset(key,  0, 10);
97         memset(data, 0,  8);
98         
99         startTimer(1);
100         present_init(key, 80, &ctx);
101         t = stopTimer();
102         uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
103         ultoa((unsigned long)t, str, 10);
104         uart_putstr(str);
105         
106         startTimer(1);
107         present_enc(data, &ctx);
108         t = stopTimer();
109         uart_putstr_P(PSTR("\r\n\tencrypt time: "));
110         ultoa((unsigned long)t, str, 10);
111         uart_putstr(str);
112         
113         startTimer(1);
114         present_dec(data, &ctx);
115         t = stopTimer();
116         uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
117         ultoa((unsigned long)t, str, 10);
118         uart_putstr(str);
119         uart_putstr_P(PSTR("\r\n"));
120 }
121
122 /*****************************************************************************
123  *  main                                                                                                                                         *
124  *****************************************************************************/
125
126 typedef void(*void_fpt)(void);
127
128 int main (void){
129         char  str[20];
130         DEBUG_INIT();
131         uart_putstr("\r\n");
132
133         uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
134         uart_putstr(cipher_name);
135         uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
136
137         PGM_P    u   = PSTR("nessie\0test\0performance\0");
138         void_fpt v[] = {testrun_nessie_present, testrun_self_present, testrun_performance_present};
139
140         while(1){ 
141                 if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
142                 if(execcommand_d0_P(str, u, v)<0){
143                         uart_putstr_P(PSTR("\r\nunknown command\r\n"));
144                 }
145                 continue;
146         error:
147                 uart_putstr("ERROR\r\n");
148         }
149         
150 }