X-Git-Url: https://git.cryptolib.org/?p=avr-crypto-lib.git;a=blobdiff_plain;f=mugi%2Fmugi.c;h=db74d55f8968b496478cb05b97dc0d1d1bde118e;hp=d196c6eecebb570d1eaf1f3841c08ab8510e14b3;hb=4b5da1dc27a791b5c448274a3db09cd035b33493;hpb=4f50c75ee5a6cc88bf7ea71957ed509e298e6c25 diff --git a/mugi/mugi.c b/mugi/mugi.c index d196c6e..db74d55 100644 --- a/mugi/mugi.c +++ b/mugi/mugi.c @@ -1,7 +1,7 @@ /* mugi.c */ /* This file is part of the AVR-Crypto-Lib. - Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + Copyright (C) 2006-2015 Daniel Otte (bg@nerilex.org) 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 @@ -19,7 +19,7 @@ /** * \file mugi.c * \author Daniel Otte - * \email daniel.otte@rub.de + * \email bg@nerilex.org * \date 2009-02-15 * \brief implementation of the MUGI key stream generator * \license GPLv3 or later @@ -34,9 +34,9 @@ #include "gf256mul.h" /* -#include "test_src/cli.h" / * only for debugging * / +#include "cli.h" / * only for debugging * / -void dump_mugi_ctx(mugi_ctx_t* ctx){ +void dump_mugi_ctx(mugi_ctx_t *ctx){ uint8_t i; cli_putstr_P(PSTR("\r\n== MUGI CTX DUMP==\r\n a:")); cli_hexdump(&(ctx->a[0]), 8); @@ -65,16 +65,19 @@ void dump_mugi_ctx(mugi_ctx_t* ctx){ #define GF256MUL_2(a) (gf256mul(2, (a), 0x1b)) uint64_t changeendian64(uint64_t a){ - uint8_t r[8]; - r[0] = ((uint8_t*)&a)[7]; - r[1] = ((uint8_t*)&a)[6]; - r[2] = ((uint8_t*)&a)[5]; - r[3] = ((uint8_t*)&a)[4]; - r[4] = ((uint8_t*)&a)[3]; - r[5] = ((uint8_t*)&a)[2]; - r[6] = ((uint8_t*)&a)[1]; - r[7] = ((uint8_t*)&a)[0]; - return *((uint64_t*)r); + union { + uint8_t v8[8]; + uint64_t v64; + } r; + r.v8[0] = ((uint8_t*)&a)[7]; + r.v8[1] = ((uint8_t*)&a)[6]; + r.v8[2] = ((uint8_t*)&a)[5]; + r.v8[3] = ((uint8_t*)&a)[4]; + r.v8[4] = ((uint8_t*)&a)[3]; + r.v8[5] = ((uint8_t*)&a)[2]; + r.v8[6] = ((uint8_t*)&a)[1]; + r.v8[7] = ((uint8_t*)&a)[0]; + return r.v64; } static @@ -98,7 +101,7 @@ uint64_t rotr64(uint64_t a, uint8_t i){ #define T(x) (((uint8_t*)&t)[(x)]) #define D(y) (((uint8_t*)dest)[(y)]) -static void mugi_f(uint64_t* dest, uint64_t* a, uint64_t* b){ +static void mugi_f(uint64_t *dest, uint64_t *a, uint64_t *b){ uint64_t t; uint8_t i,x; t = (*a); @@ -144,7 +147,7 @@ static void mugi_f(uint64_t* dest, uint64_t* a, uint64_t* b){ } static -void mugi_rho(mugi_ctx_t* ctx){ +void mugi_rho(mugi_ctx_t *ctx){ uint64_t t,bx; t = ctx->a[1]; ctx->a[1] = ctx->a[2]; @@ -158,7 +161,7 @@ void mugi_rho(mugi_ctx_t* ctx){ } static -void mugi_rho_init(uint64_t* a){ +void mugi_rho_init(uint64_t *a){ uint64_t t; t = a[1]; a[1] = a[2]; @@ -171,7 +174,7 @@ void mugi_rho_init(uint64_t* a){ } static -void mugi_lambda(uint64_t* b, uint64_t *a){ +void mugi_lambda(uint64_t *b, uint64_t *a){ uint8_t i; uint64_t t; t=b[15]; @@ -183,7 +186,7 @@ void mugi_lambda(uint64_t* b, uint64_t *a){ b[10] ^= rotl64(b[14], 32); } -void mugi_init(const void* key, const void* iv, mugi_ctx_t* ctx){ +void mugi_init(const void *key, const void *iv, mugi_ctx_t *ctx){ uint8_t i; uint64_t a0; memcpy(ctx->a, key, 128/8); @@ -206,7 +209,7 @@ void mugi_init(const void* key, const void* iv, mugi_ctx_t* ctx){ a0=0x00; } -uint64_t mugi_gen(mugi_ctx_t* ctx){ +uint64_t mugi_gen(mugi_ctx_t *ctx){ uint64_t r; r=ctx->a[0]; mugi_rho(ctx);