]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - skipjack/skipjack.c
fixing E-Mail-Address & Copyright
[avr-crypto-lib.git] / skipjack / skipjack.c
index ec36edff403c4c826762ada4797b6057accf3ed3..68187ce079222f8684ca276199accebf05c2b46f 100644 (file)
@@ -1,7 +1,7 @@
 /* skipjack.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
@@ -80,34 +80,41 @@ const uint8_t skipjack_ftable[] PROGMEM ={
 };
 
 /*****************************************************************************/
+static
+uint16_t skipjack_sub_g(uint8_t g, uint8_t k, uint8_t *key){
+       return pgm_read_byte(&(skipjack_ftable[g ^ key[9 - k % 10]]));
+}
 
+static
 uint16_t skipjack_g(uint16_t g, uint8_t k, uint8_t *key){
        #define G1 (((uint8_t*)&g)[1])
        #define G2 (((uint8_t*)&g)[0])
        /* this could also be rolled up */
-       G1 ^= pgm_read_byte_near(&(skipjack_ftable[G2 ^ key[9-(4*k+0)%10]]));
-       G2 ^= pgm_read_byte_near(&(skipjack_ftable[G1 ^ key[9-(4*k+1)%10]]));
-       G1 ^= pgm_read_byte_near(&(skipjack_ftable[G2 ^ key[9-(4*k+2)%10]]));
-       G2 ^= pgm_read_byte_near(&(skipjack_ftable[G1 ^ key[9-(4*k+3)%10]]));
+       k *= 4;
+       G1 ^= skipjack_sub_g(G2, k + 0, key);
+       G2 ^= skipjack_sub_g(G1, k + 1, key);
+       G1 ^= skipjack_sub_g(G2, k + 2, key);
+       G2 ^= skipjack_sub_g(G1, k + 3, key);
        return g;       
 }
 
 /*****************************************************************************/
-
+static
 uint16_t skipjack_g_inv(uint16_t g, uint8_t k, uint8_t *key){
 //     #define G1 (((uint8_t)&g)[1])
 //     #define G2 (((uint8_t)&g)[0])
        /* this could also be rolled up */
-       G2 ^= pgm_read_byte_near(&(skipjack_ftable[G1 ^ key[9-(4*k+3)%10]]));
-       G1 ^= pgm_read_byte_near(&(skipjack_ftable[G2 ^ key[9-(4*k+2)%10]]));
-       G2 ^= pgm_read_byte_near(&(skipjack_ftable[G1 ^ key[9-(4*k+1)%10]]));
-       G1 ^= pgm_read_byte_near(&(skipjack_ftable[G2 ^ key[9-(4*k+0)%10]]));
-       return g;       
+       k *= 4;
+       G2 ^= skipjack_sub_g(G1, k + 3, key);
+       G1 ^= skipjack_sub_g(G2, k + 2, key);
+       G2 ^= skipjack_sub_g(G1, k + 1, key);
+       G1 ^= skipjack_sub_g(G2, k + 0, key);
+       return g;
 }
 
 /*****************************************************************************/
-
-void skipjack_a(uint16_t* w, uint8_t k, uint8_t* key){
+static
+void skipjack_a(uint16_t *w, uint8_t k, uint8_t *key){
        uint16_t t;
        t = w[0];
        w[0] = w[1];
@@ -117,8 +124,8 @@ void skipjack_a(uint16_t* w, uint8_t k, uint8_t* key){
 }
 
 /*****************************************************************************/
-
-void skipjack_a_inv(uint16_t* w, uint8_t k, uint8_t* key){
+static
+void skipjack_a_inv(uint16_t *w, uint8_t k, uint8_t *key){
        uint16_t t;
        t = w[3] ^ w[2];
        w[3] = skipjack_g_inv(w[2],k,key);
@@ -128,8 +135,8 @@ void skipjack_a_inv(uint16_t* w, uint8_t k, uint8_t* key){
 }
 
 /*****************************************************************************/
-
-void skipjack_b(uint16_t* w, uint8_t k, uint8_t* key){
+static
+void skipjack_b(uint16_t *w, uint8_t k, uint8_t *key){
        uint16_t t;
        t = w[3];
        w[3] = w[0];
@@ -139,8 +146,8 @@ void skipjack_b(uint16_t* w, uint8_t k, uint8_t* key){
 }
 
 /*****************************************************************************/
-
-void skipjack_b_inv(uint16_t* w, uint8_t k, uint8_t* key){
+static
+void skipjack_b_inv(uint16_t *w, uint8_t k, uint8_t *key){
        uint16_t t;
        t = w[1];
        w[1] = w[0];
@@ -154,7 +161,7 @@ void skipjack_b_inv(uint16_t* w, uint8_t k, uint8_t* key){
  * block is 64 bits (=8 bytes) in size, key is 80 bits (=10 bytes) in size.
  * 
  */
-void skipjack_enc(void* block, void* key){
+void skipjack_enc(void *block, void *key){
        uint8_t k;
        for(k=0; k<32; ++k){
                if(k & 0x08){
@@ -169,7 +176,7 @@ void skipjack_enc(void* block, void* key){
  * block is 64 bits (=8 bytes) in size, key is 80 bits (=10 bytes) in size.
  * 
  */
-void skipjack_dec(void* block, void* key){
+void skipjack_dec(void *block, void *key){
        int8_t k;
        for(k=31; k>=0; --k){
                if(k & 0x08){