X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=sha256.c;h=f654968a906818d6b8e878cc0f381880b65ed68a;hb=8f855d283a31a468ea014774c4723a8b77b81644;hp=bf9103bae3f25121ba52d8fcd31cde47f552845d;hpb=cc0d247149bad70179dff52f544381545054da44;p=avr-crypto-lib.git diff --git a/sha256.c b/sha256.c index bf9103b..f654968 100644 --- a/sha256.c +++ b/sha256.c @@ -1,3 +1,21 @@ +/* sha256.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 . +*/ /** * \file sha256.c * \author Daniel Otte @@ -93,7 +111,7 @@ uint32_t k[]={ /** * block must be, 512, Bit = 64, Byte, long !!! */ -void sha256_nextBlock (sha256_ctx_t *state, void* block){ +void sha256_nextBlock (sha256_ctx_t *state, const void* block){ uint32_t w[64]; /* this is 256, byte, large, */ uint8_t i; uint32_t a[8],t1,t2; @@ -140,18 +158,18 @@ void sha256_nextBlock (sha256_ctx_t *state, void* block){ * bits are big endian, meaning high bits come first. * if you have a message with bits at the end, the byte must be padded with zeros */ -void sha256_lastBlock(sha256_ctx_t *state, void* block, uint16_t length){ +void sha256_lastBlock(sha256_ctx_t *state, const void* block, uint16_t length){ uint8_t lb[SHA256_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); + lb[length/8] |= 0x80>>(length & 0x7); length =(length >> 3) + 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 */ @@ -180,7 +198,7 @@ void sha256_lastBlock(sha256_ctx_t *state, void* block, uint16_t length){ /* * length in bits! */ -void sha256(sha256_hash_t *dest, void* msg, uint32_t length){ /* length could be choosen longer but this is for µC */ +void sha256(sha256_hash_t *dest, const void* msg, uint32_t length){ /* length could be choosen longer but this is for µC */ sha256_ctx_t s; sha256_init(&s); while(length >= SHA256_BLOCK_BITS){ @@ -196,7 +214,7 @@ void sha256(sha256_hash_t *dest, void* msg, uint32_t length){ /* length could be /*************************************************************************/ -void sha256_ctx2hash(sha256_hash_t *dest, sha256_ctx_t *state){ +void sha256_ctx2hash(sha256_hash_t *dest, const sha256_ctx_t *state){ #if defined LITTLE_ENDIAN uint8_t i; for(i=0; i<8; ++i){