]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - rabbit/rabbit_c.c
fixing E-Mail-Address & Copyright
[avr-crypto-lib.git] / rabbit / rabbit_c.c
index c5f8a43321e09dbe3de85ed6807dcb0ce58d4f9d..89019d82bfa763d537729d29c402d05fbe4a47c0 100644 (file)
@@ -1,7 +1,7 @@
 /* rabbit_c.c */
 /*
     This file is part of the ARM-Crypto-Lib.
-    Copyright (C) 2006-2011 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
@@ -27,7 +27,7 @@
 #endif
 
 /*
-void dump_ctx(rabbit_ctx_tctx){
+void dump_ctx(rabbit_ctx_t *ctx){
        uint8_t i=0;
        cli_putstr_P(PSTR("\r\n --- ctx dump ---\r\n  b = "));
        cli_hexdump_byte(ctx->carry);
@@ -62,7 +62,7 @@ const uint32_t c_const[8] PROGMEM = {
 };
 
 static
-void gen_g(uint32_t* dest, rabbit_ctx_t* ctx){
+void gen_g(uint32_t *dest, rabbit_ctx_t *ctx){
        uint8_t i=0;
        uint64_t a;
        uint32_t t, *x, *c;
@@ -76,7 +76,7 @@ void gen_g(uint32_t* dest, rabbit_ctx_t* ctx){
 }
 
 static
-void update_c(rabbit_ctx_tctx){
+void update_c(rabbit_ctx_t *ctx){
        uint8_t i=0;
        uint64_t a;
        uint32_t *c;
@@ -97,7 +97,7 @@ void update_c(rabbit_ctx_t* ctx){
 #define ROT8(a)  (((a)<< 8) | ((a)>>24))
 
 static
-void step(rabbit_ctx_tctx){
+void step(rabbit_ctx_t *ctx){
        uint32_t g[8];
        uint8_t i=0;
        update_c(ctx);
@@ -111,7 +111,7 @@ void step(rabbit_ctx_t* ctx){
 }
 
 static
-void keysetup(rabbit_ctx_t* ctx, const void* key){
+void keysetup(rabbit_ctx_t *ctx, const void *key){
        uint16_t *x, *c;
        uint8_t i=0;
        x = (uint16_t*)(ctx->x);
@@ -139,27 +139,31 @@ void keysetup(rabbit_ctx_t* ctx, const void* key){
 }
 
 static
-void ivsetup(rabbit_ctx_t* ctx, const void* iv){
+void ivsetup(rabbit_ctx_t *ctx, const void *iv){
        uint8_t i;
        uint32_t t;
-       uint8_t t_iv[8];
+       union __attribute__((packed)){
+               uint8_t v8[8];
+               uint16_t v16[4];
+               uint32_t v32[2];
+       }t_iv;
        i=0;
 #if ESTREAM
-       memcpy(t_iv, iv, 8);
+       memcpy(t_iv.v8, iv, 8);
 #else
        do{
-               t_iv[i] = ((uint8_t*)iv)[7-i];
-               t_iv[7-i] = ((uint8_t*)iv)[i];
+               t_iv.v8[i] = ((uint8_t*)iv)[7-i];
+               t_iv.v8[7-i] = ((uint8_t*)iv)[i];
        }while(++i<4);
 #endif
-       ctx->c[0] ^= *((uint32_t*)t_iv);
-       ctx->c[4] ^= *((uint32_t*)t_iv);
-       ctx->c[2] ^= ((uint32_t*)t_iv)[1];
-       ctx->c[6] ^= ((uint32_t*)t_iv)[1];
-       t = (( (uint32_t)((uint16_t*)t_iv)[3])<<16) | (((uint16_t*)t_iv)[1]);
+       ctx->c[0] ^= t_iv.v32[0];
+       ctx->c[4] ^= t_iv.v32[0];
+       ctx->c[2] ^= t_iv.v32[1];
+       ctx->c[6] ^= t_iv.v32[1];
+       t = ( ((uint32_t)(t_iv.v16[3]))<<16) | (t_iv.v16[1]);
        ctx->c[1] ^= t;
        ctx->c[5] ^= t;
-       t = (( (uint32_t)((uint16_t*)t_iv)[2])<<16) | (((uint16_t*)t_iv)[0]);
+       t = ( ((uint32_t)(t_iv.v16[2]))<<16) | (t_iv.v16[0]);
        ctx->c[3] ^= t;
        ctx->c[7] ^= t;
        i=4;
@@ -169,7 +173,7 @@ void ivsetup(rabbit_ctx_t* ctx, const void* iv){
 }
 
 static
-void extract(rabbit_ctx_tctx){
+void extract(rabbit_ctx_t *ctx){
        int8_t i=0;
        uint8_t *t;
        uint16_t v;
@@ -200,9 +204,9 @@ void extract(rabbit_ctx_t* ctx){
 
 static const uint8_t key80_pad[] PROGMEM = { 0xDE, 0x05, 0x6E, 0xAC, 0x8A, 0x11 };
 
-void rabbit_init(const voidkey, uint16_t keysize_b,
-                  const voidiv,
-                  rabbit_ctx_tctx){
+void rabbit_init(const void *key, uint16_t keysize_b,
+                  const void *iv,
+                  rabbit_ctx_t *ctx){
        uint8_t t_key[16];
        if(keysize_b==80){
                memcpy(t_key, key, 10);
@@ -228,7 +232,7 @@ void rabbit_init(const void* key, uint16_t keysize_b,
        ctx->buffer_idx = 16;
 }
 
-uint8_t rabbit_gen(rabbit_ctx_tctx){
+uint8_t rabbit_gen(rabbit_ctx_t *ctx){
        if(ctx->buffer_idx==16){
                step(ctx);
                extract(ctx);