]> git.cryptolib.org Git - avr-crypto-lib.git/blob - test_src/main-camellia-test.c
b52cb09fae89d33e9e70c231e8841493b4ab3c5e
[avr-crypto-lib.git] / test_src / main-camellia-test.c
1 /* main-camellia-test.c */
2 /*
3     This file is part of the This file is part of the AVR-Crypto-Lib.
4     Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
5
6     This program is free software: you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation, either version 3 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 /*
20  * camellia test-suit
21  * 
22  */
23
24 #include "config.h"
25 #include "serial-tools.h"
26 #include "uart.h"
27 #include "debug.h"
28
29 #include "camellia.h"
30 #include "nessie_bc_test.h"
31 #include "performance_test.h"
32 #include "cli.h"
33
34 char* cipher_name = "Camellia";
35
36
37 #include <stdint.h>
38 #include <string.h>
39 #include <stdlib.h>
40 #include <avr/pgmspace.h>
41
42
43 /*****************************************************************************
44  *  additional validation-functions                                                                                      *
45  *****************************************************************************/
46 void camellia128_init_dummy(void* key, uint16_t keysize_b, void* ctx){
47         camellia128_init(key, ctx);
48 }
49
50 void testrun_nessie_camellia(void){
51         nessie_bc_ctx.blocksize_B =  16;
52         nessie_bc_ctx.keysize_b   = 128;
53         nessie_bc_ctx.name        = cipher_name;
54         nessie_bc_ctx.ctx_size_B  = sizeof(camellia128_ctx_t);
55         nessie_bc_ctx.cipher_enc  = (nessie_bc_enc_fpt)camellia128_enc;
56         nessie_bc_ctx.cipher_dec  = (nessie_bc_dec_fpt)camellia128_dec;
57         nessie_bc_ctx.cipher_genctx  = (nessie_bc_gen_fpt)camellia128_init_dummy;
58         
59         nessie_bc_run();
60 }
61
62
63 void test_performance_camellia(void){
64         uint64_t t;
65         char str[6];
66         uint8_t key[16], data[16];
67         camellia128_ctx_t ctx;
68         
69         calibrateTimer();
70         print_overhead();
71         
72         memset(key,  0, 16);
73         memset(data, 0, 16);
74         
75         startTimer(1);
76         camellia128_init(key, &ctx);
77         t = stopTimer();
78         uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
79         ultoa((unsigned long)t, str, 10);
80         uart_putstr(str);
81         
82         
83         startTimer(1);
84         camellia128_enc(data, &ctx);
85         t = stopTimer();
86         uart_putstr_P(PSTR("\r\n\tencrypt time: "));
87         ultoa((unsigned long)t, str, 10);
88         uart_putstr(str);
89         
90         
91         startTimer(1);
92         camellia128_dec(data, &ctx);
93         t = stopTimer();
94         uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
95         ultoa((unsigned long)t, str, 10);
96         uart_putstr(str);
97         
98         uart_putstr_P(PSTR("\r\n"));
99 }
100
101
102
103 /*****************************************************************************
104  *  self tests                                                                                                                           *
105  *****************************************************************************/
106 /*
107 128-bit key
108 key         01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
109 plaintext   01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
110 ciphertext  67 67 31 38 54 96 69 73 08 57 06 56 48 ea be 43
111 */
112 void testrun_camellia(void){
113
114   uint8_t data[16] = { 0x01, 0x23, 0x45, 0x67, 
115                        0x89, 0xab, 0xcd, 0xef, 
116                        0xfe, 0xdc, 0xba, 0x98, 
117                        0x76, 0x54, 0x32, 0x10 };
118
119   uint8_t key[16] = { 0x01, 0x23, 0x45, 0x67, 
120                        0x89, 0xab, 0xcd, 0xef, 
121                        0xfe, 0xdc, 0xba, 0x98, 
122                        0x76, 0x54, 0x32, 0x10 };
123
124
125   camellia128_ctx_t ctx;
126   camellia128_init(key, &ctx);
127   uart_putstr_P(PSTR("\r\n key:        "));
128   uart_hexdump(data, 16);
129   uart_putstr_P(PSTR("\r\n plaintext:  "));
130   uart_hexdump(data, 16);
131   camellia128_enc(data, &ctx);
132   uart_putstr_P(PSTR("\r\n ciphertext: "));
133   uart_hexdump(data, 16);
134   camellia128_dec(data, &ctx);
135   uart_putstr_P(PSTR("\r\n decrypted:  "));
136   uart_hexdump(data, 16);
137
138 }
139
140
141 /*****************************************************************************
142  * main                                                                                                                                  *
143  *****************************************************************************/
144
145 int main (void){
146         char str[20];
147
148         
149         DEBUG_INIT();
150         uart_putstr("\r\n");
151
152         uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
153         uart_putstr(cipher_name);
154         uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
155
156         PGM_P    u   = PSTR("nessie\0test\0performance\0");
157         void_fpt v[] = {testrun_nessie_camellia, testrun_camellia, test_performance_camellia};
158         
159         while(1){ 
160                 if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
161                 if(execcommand_d0_P(str, u, v)<0){
162                         uart_putstr_P(PSTR("\r\nunknown command\r\n"));
163                 }
164                 continue;
165         error:
166                 uart_putstr("ERROR\r\n");
167         }
168 }
169