};
/*****************************************************************************/
+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];
}
/*****************************************************************************/
-
-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);
}
/*****************************************************************************/
-
-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];
}
/*****************************************************************************/
-
-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];
* 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){
* 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){