]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - hmac-sha256.c
+Serpent
[avr-crypto-lib.git] / hmac-sha256.c
index e6fe3bc5bf18c1778aef59bcaa41f90b1cd61b69..f7cf7bab1eff62635627f24ef2fb6f0c8069904b 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <stdint.h>
 #include <string.h>
+#include "config.h"
 #include "sha256.h"
 
 #define IPAD 0x36
@@ -19,6 +20,8 @@
 
 typedef sha256_ctx_t hmac_sha256_ctx_t;
 
+#ifndef HMAC_SHORTONLY
+
 void hmac_sha256_init(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        uint8_t buffer[SHA256_BLOCK_BITS/8];
        uint8_t i;
@@ -26,7 +29,7 @@ void hmac_sha256_init(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        if (kl > SHA256_BLOCK_BITS){
                sha256((void*)buffer, key, kl);
        } else {
-               memcpy(buffer, key, kl/8 + (kl & 0x7)?1:0);
+               memcpy(buffer, key, (kl+7)/8);
        }
        
        for (i=0; i<SHA256_BLOCK_BITS/8; ++i){
@@ -48,7 +51,7 @@ void hmac_sha256_final(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        if (kl > SHA256_BLOCK_BITS){
                sha256((void*)buffer, key, kl);
        } else {
-               memcpy(buffer, key, kl/8 + (kl & 0x7)?1:0);
+               memcpy(buffer, key, (kl+7)/8);
        }
        
        for (i=0; i<SHA256_BLOCK_BITS/8; ++i){
@@ -65,6 +68,8 @@ void hmac_sha256_final(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
 #endif 
 }
 
+#endif
+
 /*
 void hmac_sha256_nextBlock()
 void hmac_sha256_lastBlock()
@@ -85,7 +90,7 @@ void hmac_sha256(void* dest, void* key, uint16_t kl, void* msg, uint64_t ml){ /*
        if (kl > SHA256_BLOCK_BITS){
                sha256((void*)buffer, key, kl);
        } else {
-               memcpy(buffer, key, kl/8 + (kl & 0x7)?1:0);
+               memcpy(buffer, key, (kl+7)/8);
        }
        
        for (i=0; i<SHA256_BLOCK_BITS/8; ++i){
@@ -95,7 +100,7 @@ void hmac_sha256(void* dest, void* key, uint16_t kl, void* msg, uint64_t ml){ /*
        sha256_nextBlock(&s, buffer);
        while (ml >= SHA256_BLOCK_BITS){
                sha256_nextBlock(&s, msg);
-               msg += SHA256_BLOCK_BITS/8;
+               msg = (uint8_t*)msg + SHA256_BLOCK_BITS/8;
                ml -=  SHA256_BLOCK_BITS;
        }
        sha256_lastBlock(&s, msg, ml);