moving sha256 arround
This commit is contained in:
parent
81c98b4526
commit
38d2de57df
|
@ -4,9 +4,9 @@ ALGO_NAME := SHA256_C
|
||||||
# comment out the following line for removement of SHA256 from the build process
|
# comment out the following line for removement of SHA256 from the build process
|
||||||
HASHES += $(ALGO_NAME)
|
HASHES += $(ALGO_NAME)
|
||||||
|
|
||||||
$(ALGO_NAME)_DIR := sha256/
|
$(ALGO_NAME)_DIR := sha2/
|
||||||
$(ALGO_NAME)_INCDIR := hfal/
|
$(ALGO_NAME)_INCDIR := hfal/
|
||||||
$(ALGO_NAME)_OBJ := sha256.o
|
$(ALGO_NAME)_OBJ := sha256.o sha2_small_common.o
|
||||||
$(ALGO_NAME)_TESTBIN := main-sha256-test.o $(CLI_STD) $(HFAL_STD) hfal_sha256.o
|
$(ALGO_NAME)_TESTBIN := main-sha256-test.o $(CLI_STD) $(HFAL_STD) hfal_sha256.o
|
||||||
$(ALGO_NAME)_NESSIE_TEST := "nessie"
|
$(ALGO_NAME)_NESSIE_TEST := "nessie"
|
||||||
$(ALGO_NAME)_PERFORMANCE_TEST := "performance"
|
$(ALGO_NAME)_PERFORMANCE_TEST := "performance"
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
/* sha256.c */
|
||||||
|
/*
|
||||||
|
This file is part of the ARM-Crypto-Lib.
|
||||||
|
Copyright (C) 2006-2010 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 sha256.c
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 16.05.2006
|
||||||
|
*
|
||||||
|
* \par License:
|
||||||
|
* GPL
|
||||||
|
*
|
||||||
|
* \brief SHA-256 implementation.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h> /* for memcpy, memmove, memset */
|
||||||
|
#include "sha2_small_common.h"
|
||||||
|
#include "sha256.h"
|
||||||
|
|
||||||
|
#define LITTLE_ENDIAN
|
||||||
|
|
||||||
|
#if defined LITTLE_ENDIAN
|
||||||
|
#elif defined BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error specify endianess!!!
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
const
|
||||||
|
uint32_t sha256_init_vector[]={
|
||||||
|
0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,
|
||||||
|
0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 };
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief \c sh256_init initialises a sha256 context for hashing.
|
||||||
|
* \c sh256_init c initialises the given sha256 context for hashing
|
||||||
|
* @param state pointer to a sha256 context
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
void sha256_init(sha256_ctx_t *state){
|
||||||
|
state->length=0;
|
||||||
|
memcpy(state->h, sha256_init_vector, 8*4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
void sha256_nextBlock (sha256_ctx_t *state, const void* block){
|
||||||
|
sha2_small_common_nextBlock(state, block);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
void sha256_lastBlock (sha256_ctx_t *state, const void* block, uint16_t length_b){
|
||||||
|
sha2_small_common_lastBlock(state, block, length_b);
|
||||||
|
}
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief function to process the last block being hashed
|
||||||
|
* @param state Pointer to the context in which this block should be processed.
|
||||||
|
* @param block Pointer to the message wich should be hashed.
|
||||||
|
* @param length is the length of only THIS block in BITS not in bytes!
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* length in bits!
|
||||||
|
*/
|
||||||
|
void sha256(void* dest, const void* msg, uint32_t length_b){ /* length could be choosen longer but this is for µC */
|
||||||
|
sha256_ctx_t s;
|
||||||
|
sha256_init(&s);
|
||||||
|
while(length_b >= SHA256_BLOCK_BITS){
|
||||||
|
sha256_nextBlock(&s, msg);
|
||||||
|
msg = (uint8_t*)msg + SHA256_BLOCK_BITS/8;
|
||||||
|
length_b -= SHA256_BLOCK_BITS;
|
||||||
|
}
|
||||||
|
sha256_lastBlock(&s, msg, length_b);
|
||||||
|
sha256_ctx2hash(dest,&s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************/
|
||||||
|
|
||||||
|
void sha256_ctx2hash(void* dest, const sha256_ctx_t *state){
|
||||||
|
#if defined LITTLE_ENDIAN
|
||||||
|
uint8_t i, j, *s=(uint8_t*)(state->h);
|
||||||
|
i=8;
|
||||||
|
do{
|
||||||
|
j=3;
|
||||||
|
do{
|
||||||
|
*((uint8_t*)dest) = s[j];
|
||||||
|
dest = (uint8_t*)dest + 1;
|
||||||
|
}while(j--);
|
||||||
|
s += 4;
|
||||||
|
}while(--i);
|
||||||
|
#elif BIG_ENDIAN
|
||||||
|
memcpy(dest, state->h, 32);
|
||||||
|
#else
|
||||||
|
# error unsupported endian type!
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define SHA256_H_
|
#define SHA256_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "sha2_small_common.h"
|
||||||
/** \def SHA256_HASH_BITS
|
/** \def SHA256_HASH_BITS
|
||||||
* defines the size of a SHA-256 hash value in bits
|
* defines the size of a SHA-256 hash value in bits
|
||||||
*/
|
*/
|
||||||
|
@ -55,18 +55,7 @@
|
||||||
*
|
*
|
||||||
* A variable of this type may hold the state of a SHA-256 hashing process
|
* A variable of this type may hold the state of a SHA-256 hashing process
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef sha2_small_common_ctx_t sha256_ctx_t;
|
||||||
uint32_t h[8];
|
|
||||||
uint64_t length;
|
|
||||||
} sha256_ctx_t;
|
|
||||||
|
|
||||||
/** \typedef sha256_hash_t
|
|
||||||
* \brief SHA-256 hash value type
|
|
||||||
*
|
|
||||||
* A variable of this type may hold the hash value produced by the
|
|
||||||
* sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state) function.
|
|
||||||
*/
|
|
||||||
typedef uint8_t sha256_hash_t[SHA256_HASH_BYTES];
|
|
||||||
|
|
||||||
/** \fn void sha256_init(sha256_ctx_t *state)
|
/** \fn void sha256_init(sha256_ctx_t *state)
|
||||||
* \brief initialize a SHA-256 context
|
* \brief initialize a SHA-256 context
|
||||||
|
@ -103,7 +92,7 @@ void sha256_lastBlock(sha256_ctx_t* state, const void* block, uint16_t length_b)
|
||||||
* \param dest pointer to the location where the hash value should be written
|
* \param dest pointer to the location where the hash value should be written
|
||||||
* \param state pointer to the SHA-256 hash context
|
* \param state pointer to the SHA-256 hash context
|
||||||
*/
|
*/
|
||||||
void sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state);
|
void sha256_ctx2hash(void* dest, const sha256_ctx_t* state);
|
||||||
|
|
||||||
/** \fn void sha256(sha256_hash_t* dest, const void* msg, uint32_t length_b)
|
/** \fn void sha256(sha256_hash_t* dest, const void* msg, uint32_t length_b)
|
||||||
* \brief simple SHA-256 hashing function for direct hashing
|
* \brief simple SHA-256 hashing function for direct hashing
|
||||||
|
@ -114,6 +103,6 @@ void sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state);
|
||||||
* \param msg pointer to the message thats going to be hashed
|
* \param msg pointer to the message thats going to be hashed
|
||||||
* \param length_b length of the message in bits
|
* \param length_b length of the message in bits
|
||||||
*/
|
*/
|
||||||
void sha256(sha256_hash_t* dest, const void* msg, uint32_t length_b);
|
void sha256(void* dest, const void* msg, uint32_t length_b);
|
||||||
|
|
||||||
#endif /*SHA256_H_*/
|
#endif /*SHA256_H_*/
|
|
@ -1,7 +1,7 @@
|
||||||
/* sha256.c */
|
/* sha2_small_common.c */
|
||||||
/*
|
/*
|
||||||
This file is part of the ARM-Crypto-Lib.
|
This file is part of the ARM-Crypto-Lib.
|
||||||
Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de)
|
Copyright (C) 2006-2011 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,55 +16,13 @@
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
/**
|
|
||||||
* \file sha256.c
|
|
||||||
* \author Daniel Otte
|
|
||||||
* \date 16.05.2006
|
|
||||||
*
|
|
||||||
* \par License:
|
|
||||||
* GPL
|
|
||||||
*
|
|
||||||
* \brief SHA-256 implementation.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h> /* for memcpy, memmove, memset */
|
#include <string.h>
|
||||||
#include "sha256.h"
|
#include "sha2_small_common.h"
|
||||||
|
|
||||||
#define LITTLE_ENDIAN
|
#define LITTLE_ENDIAN
|
||||||
|
|
||||||
#if defined LITTLE_ENDIAN
|
|
||||||
#elif defined BIG_ENDIAN
|
|
||||||
#else
|
|
||||||
#error specify endianess!!!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
const
|
|
||||||
uint32_t sha256_init_vector[]={
|
|
||||||
0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,
|
|
||||||
0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19 };
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief \c sh256_init initialises a sha256 context for hashing.
|
|
||||||
* \c sh256_init c initialises the given sha256 context for hashing
|
|
||||||
* @param state pointer to a sha256 context
|
|
||||||
* @return none
|
|
||||||
*/
|
|
||||||
void sha256_init(sha256_ctx_t *state){
|
|
||||||
state->length=0;
|
|
||||||
memcpy(state->h, sha256_init_vector, 8*4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rotate x right by n positions
|
* rotate x right by n positions
|
||||||
*/
|
*/
|
||||||
|
@ -78,6 +36,7 @@ uint32_t rotl32( uint32_t x, uint8_t n){
|
||||||
return ((x<<n) | (x>>(32-n)));
|
return ((x<<n) | (x>>(32-n)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
// #define CHANGE_ENDIAN32(x) (((x)<<24) | ((x)>>24) | (((x)& 0x0000ff00)<<8) | (((x)& 0x00ff0000)>>8))
|
// #define CHANGE_ENDIAN32(x) (((x)<<24) | ((x)>>24) | (((x)& 0x0000ff00)<<8) | (((x)& 0x00ff0000)>>8))
|
||||||
|
@ -87,8 +46,6 @@ uint32_t change_endian32(uint32_t x){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
/* sha256 functions as macros for speed and size, cause they are called only once */
|
/* sha256 functions as macros for speed and size, cause they are called only once */
|
||||||
|
|
||||||
#define CH(x,y,z) (((x)&(y)) ^ ((~(x))&(z)))
|
#define CH(x,y,z) (((x)&(y)) ^ ((~(x))&(z)))
|
||||||
|
@ -112,12 +69,11 @@ uint32_t k[]={
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* block must be, 512, Bit = 64, Byte, long !!!
|
* block must be, 512, Bit = 64, Byte, long !!!
|
||||||
*/
|
*/
|
||||||
void sha256_nextBlock (sha256_ctx_t *state, const void* block){
|
void sha2_small_common_nextBlock (sha2_small_common_ctx_t *state, const void* block){
|
||||||
uint32_t w[64]; /* this is 256, byte, large, */
|
uint32_t w[64]; /* this is 256, byte, large, */
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
uint32_t a[8],t1,t2;
|
uint32_t a[8],t1,t2;
|
||||||
|
@ -154,43 +110,34 @@ void sha256_nextBlock (sha256_ctx_t *state, const void* block){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
void sha2_small_common_lastBlock(sha2_small_common_ctx_t *state, const void* block, uint16_t length_b){
|
||||||
|
uint8_t lb[512/8]; /* local block */
|
||||||
/**
|
// uint64_t len;
|
||||||
* \brief function to process the last block being hashed
|
while(length_b>=512){
|
||||||
* @param state Pointer to the context in which this block should be processed.
|
sha2_small_common_nextBlock(state, block);
|
||||||
* @param block Pointer to the message wich should be hashed.
|
length_b -= 512;
|
||||||
* @param length is the length of only THIS block in BITS not in bytes!
|
block = (uint8_t*)block+64;
|
||||||
* 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, const void* block, uint16_t length){
|
|
||||||
uint8_t lb[SHA256_BLOCK_BITS/8]; /* local block */
|
|
||||||
while(length>=SHA256_BLOCK_BITS){
|
|
||||||
sha256_nextBlock(state, block);
|
|
||||||
length -= SHA256_BLOCK_BITS;
|
|
||||||
block = (uint8_t*)block+SHA256_BLOCK_BYTES;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
state->length += length;
|
state->length += length_b;
|
||||||
memcpy (&(lb[0]), block, length/8);
|
memcpy (&(lb[0]), block, length_b/8);
|
||||||
|
|
||||||
/* set the final one bit */
|
/* set the final one bit */
|
||||||
if (length & 0x7){ // if we have single bits at the end
|
if (length_b & 0x7){ // if we have single bits at the end
|
||||||
lb[length/8] = ((uint8_t*)(block))[length/8];
|
lb[length_b/8] = ((uint8_t*)(block))[length_b/8];
|
||||||
} else {
|
} else {
|
||||||
lb[length/8] = 0;
|
lb[length_b/8] = 0;
|
||||||
}
|
}
|
||||||
lb[length/8] |= 0x80>>(length & 0x7);
|
lb[length_b/8] |= 0x80>>(length_b & 0x7);
|
||||||
length =(length >> 3) + 1; /* from now on length contains the number of BYTES in lb*/
|
length_b =(length_b >> 3) + 1; /* from now on length contains the number of BYTES in lb*/
|
||||||
/* pad with zeros */
|
/* pad with zeros */
|
||||||
if (length>64-8){ /* not enouth space for 64bit length value */
|
if (length_b>64-8){ /* not enouth space for 64bit length value */
|
||||||
memset((void*)(&(lb[length])), 0, 64-length);
|
memset((void*)(&(lb[length_b])), 0, 64-length_b);
|
||||||
sha256_nextBlock(state, lb);
|
sha2_small_common_nextBlock(state, lb);
|
||||||
state->length -= 512;
|
state->length -= 512;
|
||||||
length = 0;
|
length_b = 0;
|
||||||
}
|
}
|
||||||
memset((void*)(&(lb[length])), 0, 56-length);
|
memset((void*)(&(lb[length_b])), 0, 56-length_b);
|
||||||
/* store the 64bit length value */
|
/* store the 64bit length value */
|
||||||
#if defined LITTLE_ENDIAN
|
#if defined LITTLE_ENDIAN
|
||||||
/* this is now rolled up */
|
/* this is now rolled up */
|
||||||
|
@ -201,43 +148,6 @@ void sha256_lastBlock(sha256_ctx_t *state, const void* block, uint16_t length){
|
||||||
#elif defined BIG_ENDIAN
|
#elif defined BIG_ENDIAN
|
||||||
*((uint64_t)&(lb[56])) = state->length;
|
*((uint64_t)&(lb[56])) = state->length;
|
||||||
#endif
|
#endif
|
||||||
sha256_nextBlock(state, lb);
|
sha2_small_common_nextBlock(state, lb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* length in bits!
|
|
||||||
*/
|
|
||||||
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){
|
|
||||||
sha256_nextBlock(&s, msg);
|
|
||||||
msg = (uint8_t*)msg + SHA256_BLOCK_BITS/8;
|
|
||||||
length -= SHA256_BLOCK_BITS;
|
|
||||||
}
|
|
||||||
sha256_lastBlock(&s, msg, length);
|
|
||||||
sha256_ctx2hash(dest,&s);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
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){
|
|
||||||
((uint32_t*)dest)[i] = change_endian32(state->h[i]);
|
|
||||||
}
|
|
||||||
#elif BIG_ENDIAN
|
|
||||||
if (dest != state->h)
|
|
||||||
memcpy(dest, state->h, SHA256_HASH_BITS/8);
|
|
||||||
#else
|
|
||||||
# error unsupported endian type!
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/* sha2_small_common.h */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2011 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHA2_SMALL_COMMON_H_
|
||||||
|
#define SHA2_SMALL_COMMON_H_
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t h[8];
|
||||||
|
uint64_t length;
|
||||||
|
} sha2_small_common_ctx_t;
|
||||||
|
|
||||||
|
void sha2_small_common_nextBlock(sha2_small_common_ctx_t* state, const void* block);
|
||||||
|
void sha2_small_common_lastBlock(sha2_small_common_ctx_t* state, const void* block, uint16_t length_b);
|
||||||
|
|
||||||
|
#endif /* SHA2_SMALL_COMMON_H_ */
|
|
@ -21,15 +21,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include "main-test-common.h"
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "config.h"
|
|
||||||
#include "cli.h"
|
|
||||||
#include "dump.h"
|
|
||||||
#include "uart_lowlevel.h"
|
|
||||||
#include "sysclock.h"
|
|
||||||
#include "hw_gptm.h"
|
|
||||||
|
|
||||||
#include "shavs.h"
|
#include "shavs.h"
|
||||||
#include "nessie_hash_test.h"
|
#include "nessie_hash_test.h"
|
||||||
|
@ -41,14 +33,6 @@
|
||||||
#include "sha256.h"
|
#include "sha256.h"
|
||||||
#include "hfal_sha256.h"
|
#include "hfal_sha256.h"
|
||||||
|
|
||||||
void uart0_putc(char byte){
|
|
||||||
uart_putc(UART_0, byte);
|
|
||||||
}
|
|
||||||
|
|
||||||
char uart0_getc(void){
|
|
||||||
return uart_getc(UART_0);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* algo_name = "SHA-256";
|
const char* algo_name = "SHA-256";
|
||||||
|
|
||||||
const hfdesc_t* algolist[] = {
|
const hfdesc_t* algolist[] = {
|
||||||
|
@ -97,10 +81,10 @@ void test_monte(void){
|
||||||
0x38, 0xF0, 0xDF, 0x70, 0x1D, 0xA9, 0x3C, 0x3B,
|
0x38, 0xF0, 0xDF, 0x70, 0x1D, 0xA9, 0x3C, 0x3B,
|
||||||
0xF2, 0xC9, 0xC8, 0x68, 0x96, 0xE7, 0xE6, 0xC7 };
|
0xF2, 0xC9, 0xC8, 0x68, 0x96, 0xE7, 0xE6, 0xC7 };
|
||||||
uint8_t hash[SHA256_HASH_BYTES];
|
uint8_t hash[SHA256_HASH_BYTES];
|
||||||
sha256((sha256_hash_t*)hash, data1, 3*32*8);
|
sha256(hash, data1, 3*32*8);
|
||||||
cli_putstr("\r\n hash(data1) = ");
|
cli_putstr("\r\n hash(data1) = ");
|
||||||
cli_hexdump(hash, 32);
|
cli_hexdump(hash, 32);
|
||||||
sha256((sha256_hash_t*)hash, data2, 3*32*8);
|
sha256(hash, data2, 3*32*8);
|
||||||
cli_putstr("\r\n hash(data2) = ");
|
cli_putstr("\r\n hash(data2) = ");
|
||||||
cli_hexdump(hash, 32);
|
cli_hexdump(hash, 32);
|
||||||
}
|
}
|
||||||
|
@ -125,7 +109,7 @@ void test_monte2(void){
|
||||||
0x39, 0xd8, 0x35, 0xa7, 0x24, 0xe2, 0xfa, 0xe7 };
|
0x39, 0xd8, 0x35, 0xa7, 0x24, 0xe2, 0xfa, 0xe7 };
|
||||||
|
|
||||||
uint8_t hash[SHA256_HASH_BYTES];
|
uint8_t hash[SHA256_HASH_BYTES];
|
||||||
sha256((sha256_hash_t*)hash, data, 1024);
|
sha256(hash, data, 1024);
|
||||||
cli_putstr("\r\n hash(data) = ");
|
cli_putstr("\r\n hash(data) = ");
|
||||||
cli_hexdump(hash, 32);
|
cli_hexdump(hash, 32);
|
||||||
}
|
}
|
||||||
|
@ -164,26 +148,14 @@ const cmdlist_entry_t cmdlist[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
sysclk_set_freq(SYS_FREQ);
|
main_setup();
|
||||||
sysclk_mosc_verify_enable();
|
|
||||||
uart_init(UART_0, 115200, 8, UART_PARATY_NONE, UART_STOPBITS_ONE);
|
|
||||||
gptm_set_timer_32periodic(TIMER0);
|
|
||||||
|
|
||||||
cli_rx = uart0_getc;
|
|
||||||
cli_tx = uart0_putc;
|
|
||||||
|
|
||||||
shavs_algolist=(hfdesc_t**)algolist;
|
shavs_algolist=(hfdesc_t**)algolist;
|
||||||
shavs_algo=(hfdesc_t*)&sha256_desc;
|
shavs_algo=(hfdesc_t*)&sha256_desc;
|
||||||
|
|
||||||
for(;;){
|
for(;;){
|
||||||
cli_putstr("\r\n\r\nARM-Crypto-Lib VS (");
|
welcome_msg(algo_name);
|
||||||
cli_putstr(algo_name);
|
cmd_interface(cmdlist);
|
||||||
cli_putstr("; ");
|
|
||||||
cli_putstr(__DATE__);
|
|
||||||
cli_putc(' ');
|
|
||||||
cli_putstr(__TIME__);
|
|
||||||
cli_putstr(")\r\nloaded and running\r\n");
|
|
||||||
cmd_interface(cmdlist);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue