]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - hmac-sha256.c
insereated GPLv3 stub
[avr-crypto-lib.git] / hmac-sha256.c
index 714933f8cda7a4ea48b59e9f42f57d37f65ed842..c57ba95becb42b71b83ee4cb25d310462cc3f108 100644 (file)
@@ -1,3 +1,21 @@
+/* hmac-sha256.c */
+/*
+    This file is part of the Crypto-avr-lib/microcrypt-lib.
+    Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
 /**
  * 
  * implementation of HMAC as described in RFC2104
@@ -26,10 +44,11 @@ void hmac_sha256_init(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        uint8_t buffer[SHA256_BLOCK_BITS/8];
        uint8_t i;
        
+       memset(buffer, 0, SHA256_BLOCK_BITS/8);
        if (kl > SHA256_BLOCK_BITS){
                sha256((void*)buffer, key, kl);
        } else {
-               memcpy(buffer, key, (kl+7/8));
+               memcpy(buffer, key, (kl+7)/8);
        }
        
        for (i=0; i<SHA256_BLOCK_BITS/8; ++i){
@@ -48,6 +67,7 @@ void hmac_sha256_final(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        uint8_t i;
        sha256_ctx_t a;
        
+       memset(buffer, 0, SHA256_BLOCK_BITS/8);
        if (kl > SHA256_BLOCK_BITS){
                sha256((void*)buffer, key, kl);
        } else {
@@ -61,7 +81,8 @@ void hmac_sha256_final(hmac_sha256_ctx_t *s, void* key, uint16_t kl){
        sha256_init(&a);
        sha256_nextBlock(&a, buffer); /* hash key ^ opad */
        sha256_ctx2hash((void*)buffer, s);  /* copy hash(key ^ ipad, msg) to buffer */
-       sha256_lastBlock(s, buffer, SHA256_HASH_BITS);
+       sha256_lastBlock(&a, buffer, SHA256_HASH_BITS);
+       memcpy(s, &a, sizeof(sha256_ctx_t));
 #if defined SECURE_WIPE_BUFFER
        memset(buffer, 0, SHA256_BLOCK_BITS/8);
        memset(a.h, 0, 8*4);