4 * email: daniel.otte@rub.de
7 * a suit for running the nessie-tests for streamciphers
12 #include "nessie_stream_test.h"
13 #include "nessie_common.h"
16 nessie_stream_ctx_t nessie_stream_ctx;
19 #define BLOCKSIZE_B 64
22 void memxor(void* dest, void* src, uint8_t length){
24 *((uint8_t*)dest) ^= *((uint8_t*)src);
25 dest = (uint8_t*)dest +1;
26 src = (uint8_t*)src +1;
32 void nessie_gen_block(void* ctx, uint8_t* block){
34 for(i=0; i<BLOCKSIZE_B; ++i){
35 block[i] = nessie_stream_ctx.cipher_enc(ctx);
40 void nessie_stream_enc(uint8_t* key){
41 uint8_t ctx[nessie_stream_ctx.ctx_size_B];
42 uint8_t buffer[BLOCKSIZE_B];
43 uint8_t xorbuffer[BLOCKSIZE_B];
46 memset(xorbuffer, 0, BLOCKSIZE_B);
48 nessie_print_item("key", key, (nessie_stream_ctx.keysize_b+7)/8);
50 nessie_stream_ctx.cipher_genctx(key, nessie_stream_ctx.keysize_b, ctx);
52 nessie_gen_block(ctx, buffer);
53 memxor(xorbuffer, buffer, BLOCKSIZE_B);
54 nessie_print_item("stream[0..63]", buffer, BLOCKSIZE_B);
56 for(i=0; i<((192-0)/BLOCKSIZE_B-1); ++i){
57 nessie_gen_block(ctx, buffer);
58 memxor(xorbuffer, buffer, BLOCKSIZE_B);
61 nessie_gen_block(ctx, buffer);
62 memxor(xorbuffer, buffer, BLOCKSIZE_B);
63 nessie_print_item("stream[192..255]", buffer, BLOCKSIZE_B);
65 nessie_gen_block(ctx, buffer);
66 memxor(xorbuffer, buffer, BLOCKSIZE_B);
67 nessie_print_item("stream[256..319]", buffer, BLOCKSIZE_B);
69 for(i=0; i<((448-256)/BLOCKSIZE_B-1); ++i){
70 nessie_gen_block(ctx, buffer);
71 memxor(xorbuffer, buffer, BLOCKSIZE_B);
74 nessie_gen_block(ctx, buffer);
75 memxor(xorbuffer, buffer, BLOCKSIZE_B);
76 nessie_print_item("stream[448..511]", buffer, BLOCKSIZE_B);
78 nessie_print_item("stream[0..511]xored", xorbuffer, BLOCKSIZE_B);
84 void nessie_stream_enc_large(uint8_t* key){
85 uint8_t ctx[nessie_stream_ctx.ctx_size_B];
86 uint8_t buffer[BLOCKSIZE_B];
87 uint8_t xorbuffer[BLOCKSIZE_B];
90 memset(xorbuffer, 0, BLOCKSIZE_B);
92 nessie_print_item("key", key, (nessie_stream_ctx.keysize_b+7)/8);
94 nessie_stream_ctx.cipher_genctx(key, nessie_stream_ctx.keysize_b, ctx);
96 nessie_gen_block(ctx, buffer);
97 memxor(xorbuffer, buffer, BLOCKSIZE_B);
98 nessie_print_item("stream[0..63]", buffer, BLOCKSIZE_B);
100 for(i=0; i<((65472-0)/BLOCKSIZE_B-1); ++i){
101 nessie_gen_block(ctx, buffer);
102 memxor(xorbuffer, buffer, BLOCKSIZE_B);
105 nessie_gen_block(ctx, buffer);
106 memxor(xorbuffer, buffer, BLOCKSIZE_B);
107 nessie_print_item("stream[65472..65535]", buffer, BLOCKSIZE_B);
109 nessie_gen_block(ctx, buffer);
110 memxor(xorbuffer, buffer, BLOCKSIZE_B);
111 nessie_print_item("stream[65536..65599]", buffer, BLOCKSIZE_B);
113 for(i=0; i<((131008-65536)/BLOCKSIZE_B-1); ++i){
114 nessie_gen_block(ctx, buffer);
115 memxor(xorbuffer, buffer, BLOCKSIZE_B);
118 nessie_gen_block(ctx, buffer);
119 memxor(xorbuffer, buffer, BLOCKSIZE_B);
120 nessie_print_item("stream[131008..131071]", buffer, BLOCKSIZE_B);
122 nessie_print_item("stream[0..131071]xored", xorbuffer, BLOCKSIZE_B);
126 void nessie_stream_run(void){
129 uint8_t key[(nessie_stream_ctx.keysize_b+7)/8];
131 nessie_print_header(nessie_stream_ctx.name, nessie_stream_ctx.keysize_b,
132 0, 0, 0, nessie_stream_ctx.ivsize_b);
135 nessie_print_setheader(set);
136 for(i=0; i<nessie_stream_ctx.keysize_b; ++i){
137 nessie_print_set_vector(set, i);
138 memset(key, 0, (nessie_stream_ctx.keysize_b+7)/8);
139 key[i/8] |= 0x80>>(i%8);
140 nessie_stream_enc(key);
144 nessie_print_setheader(set);
145 for(i=0; i<256; ++i){
146 nessie_print_set_vector(set, i);
147 memset(key, i, (nessie_stream_ctx.keysize_b+7)/8);
148 nessie_stream_enc(key);
152 nessie_print_setheader(set);
153 for(i=0; i<256; ++i){
155 nessie_print_set_vector(set, i);
156 for(j=0; j<(nessie_stream_ctx.keysize_b+7)/8; ++j){
159 nessie_stream_enc(key);
163 nessie_print_setheader(set);
166 nessie_print_set_vector(set, i);
167 for(j=0; j<(nessie_stream_ctx.keysize_b+7)/8; ++j){
168 key[j]=(i*5+j*0x53)&0xff;
170 nessie_stream_enc_large(key);
173 nessie_print_footer();