/* bmw_small.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 . */ /* * \file bmw_small.c * \author Daniel Otte * \email daniel.otte@rub.de * \date 2009-04-27 * \license GPLv3 or later * */ #include #include #include "bmw_small.h" #include "memxor.h" #define SHL32(a,n) ((a)<<(n)) #define SHR32(a,n) ((a)>>(n)) #define ROTL32(a,n) (((a)<<(n))|((a)>>(32-(n)))) #define ROTR32(a,n) (((a)>>(n))|((a)<<(32-(n)))) #define TWEAK 1 #if TWEAK # define BUG24 0 #else # define BUG24 1 #endif #define F0_HACK 0 #define DEBUG 0 #ifndef F0_HACK # define F0_HACK 0 #endif #if DEBUG #include "cli.h" void ctx_dump(const bmw_small_ctx_t* ctx){ uint8_t i; cli_putstr("\r\n==== ctx dump ===="); for(i=0; i<16;++i){ cli_putstr("\r\n h["); cli_hexdump(&i, 1); cli_putstr("] = "); cli_hexdump_rev(&(ctx->h[i]), 4); } cli_putstr("\r\n counter = "); cli_hexdump(&(ctx->counter), 4); } void dump_x(const uint32_t* q, uint8_t elements, char x){ uint8_t i; cli_putstr("\r\n==== "); cli_putc(x); cli_putstr(" dump ===="); for(i=0; i