3 This file is part of the AVR-Crypto-Lib.
4 Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de)
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.
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.
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/>.
20 #include "nessie_bc_test.h"
21 #include "blockcipher_descriptor.h"
22 #include "keysize_descriptor.h"
26 #include <avr/pgmspace.h>
29 void(*bcal_nessie_dummy_init_fpt)(const void* key, void* ctx)=NULL;
31 void bcal_nessie_dummy_init(const void* key, uint16_t keysize, void* ctx){
32 if(bcal_nessie_dummy_init_fpt){
33 bcal_nessie_dummy_init_fpt(key, ctx);
35 memcpy(ctx, key, (keysize+7)/8);
39 void bcal_nessie(const bcdesc_t* bcd){
40 if(pgm_read_byte(&(bcd->type))!=BCDESC_TYPE_BLOCKCIPHER)
42 char name[1+strlen_P((void*)pgm_read_word(&(bcd->name)))];
43 strcpy_P(name, (void*)pgm_read_word(&(bcd->name)));
46 nessie_bc_ctx.blocksize_B = (pgm_read_word(&(bcd->blocksize_b))+7)/8;
47 nessie_bc_ctx.name = name;
48 nessie_bc_ctx.ctx_size_B = pgm_read_word(&(bcd->ctxsize_B));
49 nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)pgm_read_word(&(bcd->enc));
50 nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)pgm_read_word(&(bcd->dec));
51 nessie_bc_ctx.cipher_free = (nessie_bc_free_fpt)pgm_read_word(&(bcd->free));
52 if((pgm_read_byte(&(bcd->flags))&BC_INIT_TYPE)==BC_INIT_TYPE_2){
53 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)pgm_read_word(&(bcd->init));
55 bcal_nessie_dummy_init_fpt = (void(*)(const void*,void*))pgm_read_word(&(bcd->init));
56 nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)bcal_nessie_dummy_init;
59 uint16_t *keysize_list=NULL;
61 items = get_keysizes((PGM_VOID_P)pgm_read_word(&(bcd->valid_keysize_desc)), &keysize_list);
63 for(i=0; i<items; ++i){
64 nessie_bc_ctx.keysize_b = keysize_list[i];
72 void bcal_nessie_multiple(const bcdesc_t* const* bcd_list){
75 bcd = (void*)pgm_read_word(bcd_list);
79 bcd_list = (void*)((uint8_t*)bcd_list + 2);