Beispiel #1
0
void kuz_lt (w128_t *w, int enc) {
    int     i, j;
    uint8_t x;

    // Linear vector from sect 5.1.2
    const uint8_t kuz_lvec[16] = {
      0x94, 0x20, 0x85, 0x10, 0xC2, 0xC0, 0x01, 0xFB,
      0x01, 0xC0, 0xC2, 0x10, 0x85, 0x20, 0x94, 0x01 };

    // 16 rounds
    for (j=0; j<16; j++)
    {
      if (enc == KUZ_ENCRYPT)
      {
        // An LFSR with 16 elements from GF(2^8)
        x = w->b[15]; // since lvec[15] = 1

        for (i = 14; i >= 0; i--) {
          w->b[i + 1] = w->b[i];
          x ^= kuz_mul_gf256(w->b[i], kuz_lvec[i]);
        }
        w->b[0] = x;
      } else {
        x = w->b[0];

        for (i = 0; i < 15; i++) {
          w->b[i] = w->b[i + 1];
          x ^= kuz_mul_gf256(w->b[i], kuz_lvec[i]);
        }
        w->b[15] = x;
      }
    }
}
Beispiel #2
0
INLINE void kuz_l(w128_t *w)
{
#if(!USE_ASM)
	uint8_t x;
	
	// 16 rounds
	for (unsigned int j = 0; j < sizeof(kuz_lvec)/sizeof(kuz_lvec[0]); j++) {

		// An LFSR with 16 elements from GF(2^8)
		x = w->b[15];	// since lvec[15] = 1

		for (int i = 14; i >= 0; i--) {
			w->b[i + 1] = w->b[i];
			x ^= kuz_mul_gf256(w->b[i], kuz_lvec[i]);
		}
		w->b[0] = x;
	}
#else
#if(USE_MUL_TABLE)
    kuz_l_asm_table(w);
#else
    kuz_l_asm(w);
#endif
#endif
}
Beispiel #3
0
INLINE void kuz_l_inv(w128_t *w)
{
#if(!USE_ASM)
	uint8_t x;
	
	// 16 rounds
	for (unsigned int j = 0; j < sizeof(kuz_lvec)/sizeof(kuz_lvec[0]); j++) {

		x = w->b[0];
		for (int i = 0; i < 15; i++) {
			w->b[i] = w->b[i + 1];	
			x ^= kuz_mul_gf256(w->b[i], kuz_lvec[i]);
		}
		w->b[15] = x;
	}
#else
#if(USE_MUL_TABLE)
    kuz_l_inv_asm_table(w);
#else
    kuz_l_inv_asm(w);
#endif
#endif
}