]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - hfal-basic.c
updated Makefile
[avr-crypto-lib.git] / hfal-basic.c
index 3bd41e5cba92c0b18323434cbd7de9dd5d0fc6e8..551a8bc18b7d0103d8ba46036e01382f047e485b 100644 (file)
 
 uint8_t hfal_hash_init(const hfdesc_t* hash_descriptor, hfgen_ctx_t* ctx){
        hf_init_fpt f;
+       uint16_t tmp;
        ctx->desc_ptr = (hfdesc_t*)hash_descriptor;
-       if(!(ctx->ctx=malloc(pgm_read_word(&(hash_descriptor->ctxsize_B)))))
+       tmp = pgm_read_word(&(hash_descriptor->ctxsize_B));
+       if(!(ctx->ctx=malloc(tmp)))
                return 3;
        f= (hf_init_fpt)pgm_read_word(&(hash_descriptor->init));
        f(ctx->ctx);
        return 0;
 }
-       
+
 void hfal_hash_nextBlock(hfgen_ctx_t* ctx, const void* block){
        hf_nextBlock_fpt f;
        hfdesc_t* x=(ctx->desc_ptr);
        f =(hf_nextBlock_fpt)pgm_read_word(&(x->nextBlock));
        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 +66,37 @@ 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 hfdesc_t* hash_descriptor){
+       uint16_t ret;
+       ret = pgm_read_word(&(hash_descriptor->blocksize_b));
+       return ret;
+}
+
+uint16_t hfal_hash_getHashsize(const hfdesc_t* hash_descriptor){
+       uint16_t ret;
+       ret = pgm_read_word(&(hash_descriptor->hashsize_b));
+       return ret;
+}