]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - hfal-basic.c
extended HFAL
[avr-crypto-lib.git] / hfal-basic.c
index 3bd41e5cba92c0b18323434cbd7de9dd5d0fc6e8..b0ec35c5782c4ca5fe0fd9671d0b5bba3639db62 100644 (file)
@@ -39,11 +39,11 @@ void hfal_hash_nextBlock(hfgen_ctx_t* ctx, const void* block){
        f(ctx->ctx, block);
 }
        
-void hfal_hash_lastBlock(hfgen_ctx_t* ctx, const void* block, uint16_t size){
+void hfal_hash_lastBlock(hfgen_ctx_t* ctx, const void* block, uint16_t length_b){
        hf_lastBlock_fpt f;
        hfdesc_t* x=ctx->desc_ptr;
        f =(hf_lastBlock_fpt)pgm_read_word(&(x->lastBlock));
-       f(ctx->ctx, block, size);
+       f(ctx->ctx, block, length_b);
 }
 
 void hfal_hash_ctx2hash(void* dest, hfgen_ctx_t* ctx){
@@ -64,20 +64,38 @@ void hfal_hash_free(hfgen_ctx_t* ctx){
 
 void hfal_hash_mem(const hfdesc_t* hash_descriptor, void* dest, const void* msg, uint32_t length_b){
        void_fpt f;
-       uint16_t bs,bsb;
-       uint8_t ctx[pgm_read_word(&(hash_descriptor->ctxsize_B))];
-       f=(void_fpt)pgm_read_word(&(hash_descriptor->init));
-       ((hf_init_fpt)f)(ctx);
-       bs=pgm_read_word(&(hash_descriptor->blocksize_b));
-       bsb=bs/8;
-       f=(void_fpt)pgm_read_word(&(hash_descriptor->nextBlock));
-       while(length_b>=bs){
-               ((hf_nextBlock_fpt)f)(ctx, msg);
-               length_b -= bs;
-               msg = (uint8_t*)msg + bsb;
+       f = (void_fpt)pgm_read_word(&(hash_descriptor->mem));
+       if(f){
+               ((hf_mem_fpt)f)(dest, msg, length_b);
+       }else{
+               
+               uint16_t bs,bsb;
+               uint8_t ctx[pgm_read_word(&(hash_descriptor->ctxsize_B))];
+               f=(void_fpt)pgm_read_word(&(hash_descriptor->init));
+               ((hf_init_fpt)f)(ctx);
+               bs=pgm_read_word(&(hash_descriptor->blocksize_b));
+               bsb=bs/8;
+               f=(void_fpt)pgm_read_word(&(hash_descriptor->nextBlock));
+               while(length_b>=bs){
+                       ((hf_nextBlock_fpt)f)(ctx, msg);
+                       length_b -= bs;
+                       msg = (uint8_t*)msg + bsb;
+               }
+               f=(void_fpt)pgm_read_word(&(hash_descriptor->lastBlock));
+               ((hf_lastBlock_fpt)f)(ctx, msg, length_b);
+               f=(void_fpt)pgm_read_word(&(hash_descriptor->ctx2hash));
+               ((hf_ctx2hash_fpt)f)(dest, ctx);
        }
-       f=(void_fpt)pgm_read_word(&(hash_descriptor->lastBlock));
-       ((hf_lastBlock_fpt)f)(ctx, msg, length_b);
-       f=(void_fpt)pgm_read_word(&(hash_descriptor->ctx2hash));
-       ((hf_ctx2hash_fpt)f)(dest, ctx);
 } 
+
+uint16_t hfal_hash_getBlocksize(const* hash_descriptor){
+       uint16_t ret;
+       ret = pgm_read_word(&(hash_descriptor->blocksize_b));
+       return ret;
+}
+
+uint16_t hfal_hash_getHashsize(const* hash_descriptor){
+       uint16_t ret;
+       ret = pgm_read_word(&(hash_descriptor->hashsize_b));
+       return ret;
+}