X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=groestl_large.c;fp=groestl_large.c;h=0000000000000000000000000000000000000000;hb=4f50c75ee5a6cc88bf7ea71957ed509e298e6c25;hp=bcfd8e51ae67c81f807c466b21d7f20d7db38314;hpb=7701e318e4e2bac7f84dbf6e368f1501814948fc;p=avr-crypto-lib.git diff --git a/groestl_large.c b/groestl_large.c deleted file mode 100644 index bcfd8e5..0000000 --- a/groestl_large.c +++ /dev/null @@ -1,242 +0,0 @@ -/* groestl_large.c */ -/* - This file is part of the AVR-Crypto-Lib. - Copyright (C) 2009 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 groestl_large.c - * \author Daniel Otte - * \email daniel.otte@rub.de - * \date 2009-06-11 - * \license GPLv3 or later - * - */ - -#include "groestl_large.h" -#include "aes_sbox.h" -#include "gf256mul.h" -#include "memxor.h" -#include -#include -#include - -#define ROUNDS 14 -#define POLYNOM 0x1b - -#define DEBUG 0 - -#if DEBUG - #include "cli.h" - void dump_m(const uint8_t* m){ - uint8_t i,j; - for(i=0; i<16; ++i){ - cli_putstr_P(PSTR("\r\n")); - for(j=0; j<8; ++j){ - cli_putc(' '); - cli_hexdump(m+8*i+j, 1); - } - } - } -#else - #define dump_m(m) -#endif - -static uint8_t matrix[] PROGMEM = { - 2, 2, 3, 4, 5, 3, 5, 7, - 7, 2, 2, 3, 4, 5, 3, 5, - 5, 7, 2, 2, 3, 4, 5, 3, - 3, 5, 7, 2, 2, 3, 4, 5, - 5, 3, 5, 7, 2, 2, 3, 4, - 4, 5, 3, 5, 7, 2, 2, 3, - 3, 4, 5, 3, 5, 7, 2, 2, - 2, 3, 4, 5, 3, 5, 7, 2 -}; - -void groestl_large_rounds(uint8_t *m, uint8_t q){ - uint8_t r,i,j; - uint8_t tmp[16]; - for(r=0; rh, 0, 16*8); - ctx->h[8*16-1] = (uint8_t)384; - ctx->h[8*16-2] = (uint8_t)(384>>8); - ctx->counter = 0; -} - -void groestl512_init(groestl512_ctx_t* ctx){ - memset(ctx->h, 0, 16*8); - ctx->h[8*16-2] = 2; - ctx->counter = 0; -} - -void groestl_large_nextBlock(groestl_large_ctx_t* ctx, const void* block){ - uint8_t tmp1[128], tmp2[128]; -/* - for(i=0; i<8; ++i){ - for(j=0; j<8; ++j){ - tmp1[j*8+i] = ((uint8_t*)block)[i*8+j]; - } - } -*/ - memcpy(tmp1, block, 128); - memcpy(tmp2, tmp1, 128); - memxor(tmp1, ctx->h, 128); - groestl_large_rounds(tmp1, 0); - groestl_large_rounds(tmp2, 1); - memxor(ctx->h, tmp1, 128); - memxor(ctx->h, tmp2, 128); - ctx->counter++; -} - -void groestl_large_lastBlock(groestl_large_ctx_t* ctx, const void* block, uint16_t length_b){ - uint8_t buffer[128]; - while(length_b>=GROESTL_LARGE_BLOCKSIZE){ - groestl_large_nextBlock(ctx, block); - length_b -= GROESTL_LARGE_BLOCKSIZE; - block = (uint8_t*)block + GROESTL_LARGE_BLOCKSIZE_B; - } - memset(buffer, 0, 128); - memcpy(buffer, block, (length_b+7)/8); - buffer[length_b/8] |= 0x80>>(length_b%8); - if(length_b>1024-65){ - groestl_large_nextBlock(ctx, buffer); - memset(buffer, 0, 128-4); - } - ctx->counter++; - buffer[128-1] = (uint8_t)(ctx->counter); - buffer[128-2] = (uint8_t)((ctx->counter)>>8); - buffer[128-3] = (uint8_t)((ctx->counter)>>16); - buffer[128-4] = (uint8_t)((ctx->counter)>>24); - groestl_large_nextBlock(ctx, buffer); -} - -void groestl_large_ctx2hash(void* dest, const groestl_large_ctx_t* ctx, uint16_t outlength_b){ - uint8_t tmp[128]; - memcpy(tmp, ctx->h, 128); - groestl_large_rounds(tmp, 0); - memxor(tmp, ctx->h, 128); -#if DEBUG - cli_putstr_P(PSTR("\r\npost finalisation")); - dump_m(tmp); -#endif - memcpy(dest, tmp+128-outlength_b/8, outlength_b/8); -} - -void groestl384_ctx2hash(void* dest, const groestl384_ctx_t* ctx){ - groestl_large_ctx2hash(dest, ctx, 384); -} - -void groestl512_ctx2hash(void* dest, const groestl512_ctx_t* ctx){ - groestl_large_ctx2hash(dest, ctx, 512); -} - -void groestl384_nextBlock(groestl384_ctx_t* ctx, const void* block){ - groestl_large_nextBlock(ctx, block); -} - -void groestl512_nextBlock(groestl512_ctx_t* ctx, const void* block){ - groestl_large_nextBlock(ctx, block); -} - -void groestl384_lastBlock(groestl384_ctx_t* ctx, const void* block, uint16_t length_b){ - groestl_large_lastBlock(ctx, block, length_b); -} - -void groestl512_lastBlock(groestl512_ctx_t* ctx, const void* block, uint16_t length_b){ - groestl_large_lastBlock(ctx, block, length_b); -} - -void groestl384(void* dest, const void* msg, uint32_t length_b){ - groestl_large_ctx_t ctx; - groestl384_init(&ctx); - while(length_b>=GROESTL_LARGE_BLOCKSIZE){ - groestl_large_nextBlock(&ctx, msg); - length_b -= GROESTL_LARGE_BLOCKSIZE; - msg = (uint8_t*)msg + GROESTL_LARGE_BLOCKSIZE_B; - } - groestl_large_lastBlock(&ctx, msg, length_b); - groestl_large_ctx2hash(dest, &ctx, 384); -} - -void groestl512(void* dest, const void* msg, uint32_t length_b){ - groestl_large_ctx_t ctx; - groestl512_init(&ctx); - while(length_b>=GROESTL_LARGE_BLOCKSIZE){ - groestl_large_nextBlock(&ctx, msg); - length_b -= GROESTL_LARGE_BLOCKSIZE; - msg = (uint8_t*)msg + GROESTL_LARGE_BLOCKSIZE_B; - } - groestl_large_lastBlock(&ctx, msg, length_b); - groestl_large_ctx2hash(dest, &ctx, 512); -} - - -