X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=skipjack%2Fskipjack.c;h=588c4cb056ed69124d7f9ef95d54341ba4ab8049;hb=2c909fca2a13cd76a526515bda5d0292483d7a55;hp=ec36edff403c4c826762ada4797b6057accf3ed3;hpb=f947a91725d102074386e84dc98d819d7f935611;p=avr-crypto-lib.git diff --git a/skipjack/skipjack.c b/skipjack/skipjack.c index ec36edf..588c4cb 100644 --- a/skipjack/skipjack.c +++ b/skipjack/skipjack.c @@ -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){