]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - sha1.c
forgotten files
[avr-crypto-lib.git] / sha1.c
diff --git a/sha1.c b/sha1.c
index 711c51c682b13d85e6de7f829aa80c89cee156c2..97cde32814fbfd5264167e35060915e6ed9df641 100644 (file)
--- a/sha1.c
+++ b/sha1.c
@@ -1,9 +1,26 @@
+/* sha1.c */
+/*
+    This file is part of the AVR-Crypto-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/>.
+*/
 /**
  * \file       sha1.c
  * \author     Daniel Otte
- * \date       08.10.2006
- * \par License:
- * GPL
+ * \date       2006-10-08
+ * \license GPLv3 or later
  * \brief SHA-1 implementation.
  * 
  */
@@ -71,7 +88,7 @@ uint32_t parity(uint32_t x, uint32_t y, uint32_t z){
 
 typedef uint32_t (*pf_t)(uint32_t x, uint32_t y, uint32_t z);
 
-void sha1_nextBlock (sha1_ctx_t *state, void* block){
+void sha1_nextBlock (sha1_ctx_t *state, const void* block){
        uint32_t a[5];
        uint32_t w[16];
        uint32_t temp;
@@ -93,7 +110,7 @@ void sha1_nextBlock (sha1_ctx_t *state, void* block){
                DEBUG_B(dbgi);
                DEBUG_C(':');
                #ifdef DEBUG
-                       uart_hexdump(&(w[dbgi]) ,4);
+                       cli_hexdump(&(w[dbgi]) ,4);
                #endif
        }
        
@@ -107,12 +124,12 @@ void sha1_nextBlock (sha1_ctx_t *state, void* block){
                s = t & MASK;
                if(t>=16){
                        #ifdef DEBUG
-                        DEBUG_S("\r\n ws = "); uart_hexdump(&ws, 4);
+                        DEBUG_S("\r\n ws = "); cli_hexdump(&ws, 4);
                        #endif
                        w[s] = rotl32( w[(s+13)&MASK] ^ w[(s+8)&MASK] ^ 
                                 w[(s+ 2)&MASK] ^ w[s] ,1);                     
                        #ifdef DEBUG
-                        DEBUG_S(" --> ws = "); uart_hexdump(&(w[s]), 4);
+                        DEBUG_S(" --> ws = "); cli_hexdump(&(w[s]), 4);
                        #endif
                }
                
@@ -126,15 +143,15 @@ void sha1_nextBlock (sha1_ctx_t *state, void* block){
                DEBUG_S("\r\nt = "); DEBUG_B(t);
                DEBUG_S("; a[]: ");
                #ifdef DEBUG
-                uart_hexdump(a, 5*4);
+                cli_hexdump(a, 5*4);
                #endif
                DEBUG_S("; k = ");
                #ifdef DEBUG
-                uart_hexdump(&(k[t/20]), 4);
+                cli_hexdump(&(k[t/20]), 4);
                #endif
                DEBUG_S("; f(b,c,d) = ");
                #ifdef DEBUG
-                uart_hexdump(&dtemp, 4);
+                cli_hexdump(&dtemp, 4);
                #endif
        }
        
@@ -147,19 +164,19 @@ void sha1_nextBlock (sha1_ctx_t *state, void* block){
 
 /********************************************************************************************************/
 
-void sha1_lastBlock(sha1_ctx_t *state, void* block, uint16_t length){
+void sha1_lastBlock(sha1_ctx_t *state, const void* block, uint16_t length){
        uint8_t lb[SHA1_BLOCK_BITS/8]; /* local block */
        state->length += length;
        memcpy (&(lb[0]), block, length/8);
        
        /* set the final one bit */
-       if (length & 0x3){ /* if we have single bits at the end */
+       if (length & 0x7){ /* if we have single bits at the end */
                lb[length/8] = ((uint8_t*)(block))[length/8];
        } else {
                lb[length/8] = 0;
        }
        lb[length/8] |= 0x80>>(length & 0x3);
-       length =(length >> 3) + 1; /* from now on length contains the number of BYTES in lb*/
+       length =(length >> 7) + 1; /* from now on length contains the number of BYTES in lb*/
        /* pad with zeros */
        if (length>64-8){ /* not enouth space for 64bit length value */
                memset((void*)(&(lb[length])), 0, 64-length);
@@ -202,14 +219,14 @@ void sha1_ctx2hash (sha1_hash_t *dest, sha1_ctx_t *state){
  * 
  * 
  */
-void sha1 (sha1_hash_t *dest, void* msg, uint32_t length){
+void sha1 (sha1_hash_t *dest, const void* msg, uint32_t length){
        sha1_ctx_t s;
        DEBUG_S("\r\nBLA BLUB");
        sha1_init(&s);
        while(length & (~0x0001ff)){ /* length>=512 */
                DEBUG_S("\r\none block");
                sha1_nextBlock(&s, msg);
-               msg += SHA1_BLOCK_BITS/8; /* increment pointer to next block */
+               msg = (uint8_t*)msg + SHA1_BLOCK_BITS/8; /* increment pointer to next block */
                length -= SHA1_BLOCK_BITS;
        }
        sha1_lastBlock(&s, msg, length);