4 * email: daniel.otte@rub.de
7 * a suit for running the nessie-tests for blockciphers
12 #include "nessie_bc_test.h"
13 #include "nessie_common.h"
16 nessie_bc_ctx_t nessie_bc_ctx;
18 void nessie_bc_init(void){
19 memset(&nessie_bc_ctx, 0, sizeof(nessie_bc_ctx_t));
22 void nessie_bc_free(void* ctx){
23 if(nessie_bc_ctx.cipher_free)
24 nessie_bc_ctx.cipher_free(ctx);
27 void nessie_bc_enc(uint8_t* key, uint8_t* pt){
28 uint8_t ctx[nessie_bc_ctx.ctx_size_B];
29 uint8_t buffer[nessie_bc_ctx.blocksize_B];
33 nessie_print_item("key", key, (nessie_bc_ctx.keysize_b+7)/8);
34 nessie_bc_ctx.cipher_genctx(key, nessie_bc_ctx.keysize_b, ctx);
36 memcpy(buffer, pt, nessie_bc_ctx.blocksize_B);
37 nessie_print_item("plain", buffer, nessie_bc_ctx.blocksize_B);
38 nessie_bc_ctx.cipher_enc(buffer, ctx);
39 nessie_print_item("cipher", buffer, nessie_bc_ctx.blocksize_B);
40 if(nessie_bc_ctx.cipher_dec){
41 nessie_bc_ctx.cipher_dec(buffer, ctx);
42 nessie_print_item("decrypted", buffer, nessie_bc_ctx.blocksize_B);
45 memcpy(buffer, pt, nessie_bc_ctx.blocksize_B);
47 nessie_bc_ctx.cipher_enc(buffer, ctx);
49 nessie_print_item("Iterated 100 times", buffer, nessie_bc_ctx.blocksize_B);
50 #ifndef NESSIE_NO1KTEST
51 /* 1000 times test, we use the 100 precedig steps to fasten things a bit */
53 nessie_bc_ctx.cipher_enc(buffer, ctx);
55 nessie_print_item("Iterated 1000 times", buffer, nessie_bc_ctx.blocksize_B);
60 void nessie_bc_dec(uint8_t* key, uint8_t* ct){
61 uint8_t ctx[nessie_bc_ctx.ctx_size_B];
62 uint8_t buffer[nessie_bc_ctx.blocksize_B];
65 nessie_print_item("key", key, (nessie_bc_ctx.keysize_b+7)/8);
66 nessie_bc_ctx.cipher_genctx(key, nessie_bc_ctx.keysize_b, ctx);
67 memcpy(buffer, ct, nessie_bc_ctx.blocksize_B);
68 nessie_print_item("cipher", buffer, nessie_bc_ctx.blocksize_B);
69 nessie_bc_ctx.cipher_dec(buffer, ctx);
70 nessie_print_item("plain", buffer, nessie_bc_ctx.blocksize_B);
71 nessie_bc_ctx.cipher_enc(buffer, ctx);
72 nessie_print_item("encrypted", buffer, nessie_bc_ctx.blocksize_B);
76 void nessie_bc_run(void){
79 uint8_t key[(nessie_bc_ctx.keysize_b+7)/8];
80 uint8_t buffer[nessie_bc_ctx.blocksize_B];
82 nessie_print_header(nessie_bc_ctx.name, nessie_bc_ctx.keysize_b,
83 nessie_bc_ctx.blocksize_B*8, 0, 0, 0);
86 nessie_print_setheader(set);
87 for(i=0; i<nessie_bc_ctx.keysize_b; ++i){
88 nessie_print_set_vector(set, i);
89 memset(key, 0, (nessie_bc_ctx.keysize_b+7)/8);
90 key[i/8] |= 0x80>>(i%8);
91 memset(buffer, 0, nessie_bc_ctx.blocksize_B);
92 nessie_bc_enc(key, buffer);
96 nessie_print_setheader(set);
97 for(i=0; i<nessie_bc_ctx.blocksize_B*8; ++i){
98 nessie_print_set_vector(set, i);
99 memset(key, 0, (nessie_bc_ctx.keysize_b+7)/8);
100 memset(buffer, 0, nessie_bc_ctx.blocksize_B);
101 buffer[i/8] |= 0x80>>(i%8);
102 nessie_bc_enc(key, buffer);
106 nessie_print_setheader(set);
107 for(i=0; i<256; ++i){
108 nessie_print_set_vector(set, i);
109 memset(key, i, (nessie_bc_ctx.keysize_b+7)/8);
110 memset(buffer, i, nessie_bc_ctx.blocksize_B);
111 nessie_bc_enc(key, buffer);
115 nessie_print_setheader(set);
117 nessie_print_set_vector(set, 0);
118 for(i=0; i<(nessie_bc_ctx.keysize_b+7)/8; ++i){
121 for(i=0; i<nessie_bc_ctx.blocksize_B; ++i){
124 nessie_bc_enc(key, buffer);
126 nessie_print_set_vector(set, 1);
127 /* This is the test vectors in Kasumi */
128 static uint8_t kasumi_key[] = {
129 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
130 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48 };
131 static uint8_t kasumi_plain[]={
132 0xEA, 0x02, 0x47, 0x14, 0xAD, 0x5C, 0x4D, 0x84 };
133 for(i=0; i<(nessie_bc_ctx.keysize_b+7)/8; ++i){
134 key[i]=kasumi_key[i%sizeof(kasumi_key)];
136 for(i=0; i<nessie_bc_ctx.blocksize_B; ++i){
137 buffer[i]=kasumi_plain[i%sizeof(kasumi_plain)];
139 nessie_bc_enc(key, buffer);
141 if(nessie_bc_ctx.cipher_dec==NULL)
145 nessie_print_setheader(set);
146 for(i=0; i<nessie_bc_ctx.keysize_b; ++i){
147 nessie_print_set_vector(set, i);
148 memset(key, 0, (nessie_bc_ctx.keysize_b+7)/8);
149 key[i/8] |= 0x80>>(i%8);
150 memset(buffer, 0, nessie_bc_ctx.blocksize_B);
151 nessie_bc_dec(key, buffer);
155 nessie_print_setheader(set);
156 for(i=0; i<nessie_bc_ctx.blocksize_B*8; ++i){
157 nessie_print_set_vector(set, i);
158 memset(key, 0, (nessie_bc_ctx.keysize_b+7)/8);
159 memset(buffer, 0, nessie_bc_ctx.blocksize_B);
160 buffer[i/8] |= 0x80>>(i%8);
161 nessie_bc_dec(key, buffer);
165 nessie_print_setheader(set);
166 for(i=0; i<256; ++i){
167 nessie_print_set_vector(set, i);
168 memset(key, i, (nessie_bc_ctx.keysize_b+7)/8);
169 memset(buffer, i, nessie_bc_ctx.blocksize_B);
170 nessie_bc_dec(key, buffer);
174 nessie_print_setheader(set);
176 nessie_print_set_vector(set, 0);
177 for(i=0; i<(nessie_bc_ctx.keysize_b+7)/8; ++i){
180 for(i=0; i<nessie_bc_ctx.blocksize_B; ++i){
183 nessie_bc_dec(key, buffer);
185 nessie_print_set_vector(set, 1);
186 for(i=0; i<(nessie_bc_ctx.keysize_b+7)/8; ++i){
187 key[i]=kasumi_key[i%sizeof(kasumi_key)];
189 for(i=0; i<nessie_bc_ctx.blocksize_B; ++i){
190 buffer[i]=kasumi_plain[i%sizeof(kasumi_plain)];
192 nessie_bc_dec(key, buffer);
193 nessie_print_footer();