diff --git a/USAGE.hashfunctions b/USAGE.hashfunctions index 1f2256e..163cd2d 100644 --- a/USAGE.hashfunctions +++ b/USAGE.hashfunctions @@ -28,13 +28,13 @@ email: daniel.otte@rub.de * compression algorithm * finalization function -3. block cipher API +3. hash function API The API is not always consistent due to the fact that we tried to optimize the code for size (flash, heap and stack) and speed (runtime of the different components). Generally the API of the implemented block ciphers consists of: - *_init function, which implements the keyschedule + *_init function, which implements the initialisation of the context *_nextBlock function, which implements the compression algorithm *_lastBlock function, which implements the the padding algorithm *_ctx2hash function, which turns a context into an actual hash value @@ -45,7 +45,7 @@ email: daniel.otte@rub.de parameter means what. 3.1.2 sizes in bits and bytes - Working with cryptographical functions involves working with different + Working with cryptographic functions involves working with different lengths. Some times you want to know it in bits and sometimes in bytes. To reduce frustration and to avoid bugs we suffix a length parameter with either _b or _B depending on the meaning. _b means in bits and _B means in bytes diff --git a/hashfunction_descriptor.h b/hashfunction_descriptor.h index 8b5faed..8eb12c1 100644 --- a/hashfunction_descriptor.h +++ b/hashfunction_descriptor.h @@ -47,7 +47,7 @@ typedef struct { /** mem, function pointer to a function which hashes a message in RAM * completely or NULL if there is no such function */ hf_mem_fpt mem; -} hfdesc_t; /* blockcipher descriptor type */ +} hfdesc_t; /* hashfunction descriptor type */ typedef struct{ hfdesc_t* desc_ptr; diff --git a/hfal_shabal.c b/hfal_shabal.c new file mode 100644 index 0000000..bacce62 --- /dev/null +++ b/hfal_shabal.c @@ -0,0 +1,113 @@ +/* hfal_shabal.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 hfal_shabal.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-04-20 + * \license GPLv3 or later + * + */ + +#include +#include +#include "hashfunction_descriptor.h" +#include "shabal.h" + + +static const char shabal192_str[] PROGMEM = "Shabal-192"; +static const char shabal224_str[] PROGMEM = "Shabal-224"; +static const char shabal256_str[] PROGMEM = "Shabal-256"; +static const char shabal384_str[] PROGMEM = "Shabal-384"; +static const char shabal512_str[] PROGMEM = "Shabal-512"; + +const hfdesc_t shabal192_desc PROGMEM = { + HFDESC_TYPE_HASHFUNCTION, + 0, + shabal192_str, + sizeof(shabal_ctx_t), + SHABAL_BLOCKSIZE, + 192, + (hf_init_fpt)shabal192_init, + (hf_nextBlock_fpt)shabal_nextBlock, + (hf_lastBlock_fpt)shabal_lastBlock, + (hf_ctx2hash_fpt)shabal192_ctx2hash, + (hf_free_fpt)NULL, + (hf_mem_fpt)shabal192 +}; + +const hfdesc_t shabal224_desc PROGMEM = { + HFDESC_TYPE_HASHFUNCTION, + 0, + shabal224_str, + sizeof(shabal_ctx_t), + SHABAL_BLOCKSIZE, + 224, + (hf_init_fpt)shabal224_init, + (hf_nextBlock_fpt)shabal_nextBlock, + (hf_lastBlock_fpt)shabal_lastBlock, + (hf_ctx2hash_fpt)shabal224_ctx2hash, + (hf_free_fpt)NULL, + (hf_mem_fpt)shabal224 +}; + +const hfdesc_t shabal256_desc PROGMEM = { + HFDESC_TYPE_HASHFUNCTION, + 0, + shabal256_str, + sizeof(shabal_ctx_t), + SHABAL_BLOCKSIZE, + 256, + (hf_init_fpt)shabal256_init, + (hf_nextBlock_fpt)shabal_nextBlock, + (hf_lastBlock_fpt)shabal_lastBlock, + (hf_ctx2hash_fpt)shabal256_ctx2hash, + (hf_free_fpt)NULL, + (hf_mem_fpt)shabal256 +}; + +const hfdesc_t shabal384_desc PROGMEM = { + HFDESC_TYPE_HASHFUNCTION, + 0, + shabal384_str, + sizeof(shabal_ctx_t), + SHABAL_BLOCKSIZE, + 384, + (hf_init_fpt)shabal384_init, + (hf_nextBlock_fpt)shabal_nextBlock, + (hf_lastBlock_fpt)shabal_lastBlock, + (hf_ctx2hash_fpt)shabal384_ctx2hash, + (hf_free_fpt)NULL, + (hf_mem_fpt)shabal384 +}; + +const hfdesc_t shabal512_desc PROGMEM = { + HFDESC_TYPE_HASHFUNCTION, + 0, + shabal512_str, + sizeof(shabal_ctx_t), + SHABAL_BLOCKSIZE, + 512, + (hf_init_fpt)shabal512_init, + (hf_nextBlock_fpt)shabal_nextBlock, + (hf_lastBlock_fpt)shabal_lastBlock, + (hf_ctx2hash_fpt)shabal512_ctx2hash, + (hf_free_fpt)NULL, + (hf_mem_fpt)shabal512 +}; diff --git a/hfal_shabal.h b/hfal_shabal.h new file mode 100644 index 0000000..6299519 --- /dev/null +++ b/hfal_shabal.h @@ -0,0 +1,40 @@ +/* hfal_shabal.h */ +/* + 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 hfal_shabal.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-04-20 + * \license GPLv3 or later + * + */ + +#ifndef HFAL_SHABAL_H_ +#define HFAL_SHABAL_H_ + +#include +#include "hashfunction_descriptor.h" + +extern const hfdesc_t shabal192_desc; +extern const hfdesc_t shabal224_desc; +extern const hfdesc_t shabal256_desc; +extern const hfdesc_t shabal384_desc; +extern const hfdesc_t shabal512_desc; + +#endif /* HFAL_SHABAL_H_ */ diff --git a/host/performance2wiki.rb b/host/performance2wiki.rb index c1e3e2a..a60cde1 100644 --- a/host/performance2wiki.rb +++ b/host/performance2wiki.rb @@ -60,7 +60,7 @@ def process_hashfunction(fin, name) printf("| %20s || %3s || %3s || || %4d || || %4d || %4d ||" + " %6d || %6d || %7.2f || %6d || || || \n|-\n" , name, $lang, $lang ,ctxsize, hashsize, blocksize, - inittime, nextblocktime, nextblocktime.to_f/blocksize*8, + inittime, nextblocktime, nextblocktime.to_f/(blocksize/8), lastblocktime+convtime) end diff --git a/test_src/cli.h b/test_src/cli.h index 422d97a..dc79a7d 100644 --- a/test_src/cli.h +++ b/test_src/cli.h @@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + #ifndef CLI_H_ #define CLI_H_