X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=bcal-basic.c;h=3d7a65c41b8f30c490b0e0ce606756ad0cb7ec0c;hb=02ac3b653f3a11f284cc1a0cb0e983575f2f431b;hp=6fd344d34c652dbdc8907a22fe4264be73546ead;hpb=1a1a9f56318298d8ec87df9f7e78da68732f0d48;p=avr-crypto-lib.git diff --git a/bcal-basic.c b/bcal-basic.c index 6fd344d..3d7a65c 100644 --- a/bcal-basic.c +++ b/bcal-basic.c @@ -1,6 +1,6 @@ /* bcal-basic.c */ /* - This file is part of the Crypto-avr-lib/microcrypt-lib. + This file is part of the AVR-Crypto-Lib. Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) This program is free software: you can redistribute it and/or modify @@ -20,34 +20,34 @@ #include #include #include +#include #include "blockcipher_descriptor.h" #include "keysize_descriptor.h" - uint8_t bcal_cipher_init(const bcdesc_t* cipher_descriptor, - const void* key, uint16_t keysize, bcgen_ctx_t* ctx){ - if(!is_valid_keysize_P((PGM_VOID_P)(pgm_read_word(cipher_descriptor->valid_keysize_desc)), - keysize)) + const void* key, uint16_t keysize_b, bcgen_ctx_t* ctx){ + if(!is_valid_keysize_P((PGM_VOID_P)pgm_read_word(&(cipher_descriptor->valid_keysize_desc)), + keysize_b)){ return 1; - + } uint8_t flags; bc_init_fpt init_fpt; ctx->desc_ptr = (bcdesc_t*)cipher_descriptor; - ctx->keysize = keysize; + ctx->keysize = keysize_b; flags = pgm_read_byte(cipher_descriptor->flags); - init_fpt.initvoid = (void_fpt)(pgm_read_word(cipher_descriptor->init.initvoid)); + init_fpt.initvoid = (void_fpt)(pgm_read_word(&(cipher_descriptor->init.initvoid))); if(init_fpt.initvoid == NULL){ - if(!(ctx->ctx = malloc(keysize/8))) + if(!(ctx->ctx = malloc((keysize_b+7)/8))) return 2; - memcpy(ctx->ctx, key, keysize/8); + memcpy(ctx->ctx, key, (keysize_b+7)/8); return 0; } - if(!(ctx->ctx = malloc(pgm_read_word(cipher_descriptor->ctxsize_B)))) + if(!(ctx->ctx = malloc(pgm_read_word(&(cipher_descriptor->ctxsize_B))))) return 3; if((flags&BC_INIT_TYPE)==BC_INIT_TYPE_1){ - init_fpt.init1((void*)key, ctx->ctx); + init_fpt.init1((void*)key, (ctx->ctx)); }else{ - init_fpt.init2((void*)key, keysize, ctx->ctx); + init_fpt.init2((void*)key, keysize_b, (ctx->ctx)); } return 0; } @@ -56,32 +56,39 @@ void bcal_cipher_free(bcgen_ctx_t* ctx){ if(!ctx) return; bc_free_fpt free_fpt; - free_fpt = (bc_free_fpt)(pgm_read_word(ctx->desc_ptr->free)); + free_fpt = (bc_free_fpt)(pgm_read_word(&(ctx->desc_ptr->free))); if(free_fpt) - free_fpt(ctx->ctx); + free_fpt((ctx->ctx)); free(ctx->ctx); } void bcal_cipher_enc(void* block, const bcgen_ctx_t* ctx){ bc_enc_fpt enc_fpt; - enc_fpt.encvoid = (void_fpt)pgm_read_word(ctx->desc_ptr->enc.encvoid); + enc_fpt.encvoid = (void_fpt)pgm_read_word(&(ctx->desc_ptr->enc.encvoid)); if(!enc_fpt.encvoid){ /* very bad error, no enciphering function specified */ return; } - enc_fpt.enc1(block, ctx->ctx); + enc_fpt.enc1(block, (ctx->ctx)); } void bcal_cipher_dec(void* block, const bcgen_ctx_t* ctx){ bc_dec_fpt dec_fpt; - dec_fpt.decvoid = (void_fpt)pgm_read_word(ctx->desc_ptr->dec.decvoid); + dec_fpt.decvoid = (void_fpt)pgm_read_word(&(ctx->desc_ptr->dec.decvoid)); if(!dec_fpt.decvoid){ /* very bad error, no deciphering function specified */ return; } - dec_fpt.dec1(block, ctx->ctx); + dec_fpt.dec1(block, (ctx->ctx)); } +uint16_t bcal_cipher_getBlocksize_b(const bcdesc_t* desc){ + return pgm_read_word(&(desc->blocksize_b)); +} + +PGM_VOID_P bcal_cipher_getKeysizeDesc(const bcdesc_t* desc){ + return (PGM_VOID_P)pgm_read_word(&(desc->valid_keysize_desc)); +}