Exemple #1
0
static
void aes_enc_round(aes_cipher_state_t *state, const aes_roundkey_t *k, uint8_t countermeasures)
{
    uint8_t tmp[16], t;
    uint8_t i;

    volatile uint16_t loop;

    /* subBytes */
    for (i = 0; i < 16; ++i) {
        tmp[i] = pgm_read_byte(aes_sbox + state->s[i]);
    }
    /* shiftRows */
    aes_shiftcol(tmp + 1, 1);
    aes_shiftcol(tmp + 2, 2);
    aes_shiftcol(tmp + 3, 3);
    /* mixColums */
    for (i = 0; i < 4; ++i) {
        t = tmp[4 * i + 0] ^ tmp[4 * i + 1] ^ tmp[4 * i + 2] ^ tmp[4 * i + 3];

        
        if (countermeasures == 1) {
            for (loop = random() & 0x00003FF; loop>0; loop--) {

            }
        }

        state->s[4 * i + 0] =
        GF256MUL_2(tmp[4*i+0]^tmp[4*i+1])
                ^ tmp[4 * i + 0]
                ^ t;

        state->s[4 * i + 1] =
        GF256MUL_2(tmp[4*i+1]^tmp[4*i+2])
                ^ tmp[4 * i + 1]
                ^ t;
        
        if (countermeasures == 1) {
            for (loop = random() & 0x00003FF; loop>0; loop--) {

            }
        }

        state->s[4 * i + 2] =
        GF256MUL_2(tmp[4*i+2]^tmp[4*i+3])
                ^ tmp[4 * i + 2]
                ^ t;
        state->s[4 * i + 3] =
        GF256MUL_2(tmp[4*i+3]^tmp[4*i+0])
                ^ tmp[4 * i + 3]
                ^ t;
    }

    /* addKey */
    for (i = 0; i < 16; ++i) {
        state->s[i] ^= k->ks[i];
    }
}
Exemple #2
0
static
void aes_enc_round(aes_cipher_state_t* state, const aes_roundkey_t* k, uint8_t round){
	uint8_t tmp[16], t;
	uint8_t i;
	/* subBytes */
    // Photon-DA Trigger
    if(round == 1) {
#if DELAY > 0
        _delay_us(DELAY);
#endif
        pda_trigger();
    }

	for(i=0; i<16; ++i){
		tmp[i] = aes_sbox[state->s[i]];
	}

    // Reset Photon-DA Trigger
    if(round == 1) {
#if DELAY > 0
        _delay_us(DELAY);
#endif
        pda_reset_trigger();
    }

	/* shiftRows */
	aes_shiftcol(tmp+1, 1);
	aes_shiftcol(tmp+2, 2);
	aes_shiftcol(tmp+3, 3);
	/* mixColums */
	for(i=0; i<4; ++i){
		t = tmp[4*i+0] ^ tmp[4*i+1] ^ tmp[4*i+2] ^ tmp[4*i+3];
		state->s[4*i+0] =
			  GF256MUL_2(tmp[4*i+0]^tmp[4*i+1])
			^ tmp[4*i+0]
			^ t;
		state->s[4*i+1] =
			  GF256MUL_2(tmp[4*i+1]^tmp[4*i+2])
			^ tmp[4*i+1]
			^ t;
		state->s[4*i+2] =
			  GF256MUL_2(tmp[4*i+2]^tmp[4*i+3])
			^ tmp[4*i+2]
			^ t;
		state->s[4*i+3] =
			  GF256MUL_2(tmp[4*i+3]^tmp[4*i+0])
			^ tmp[4*i+3]
			^ t;
	}

	/* addKey */
	for(i=0; i<16; ++i){
		state->s[i] ^= k->ks[i];
	}
}
static
void aes_enc_round(aes_cipher_state_t* state, const aes_roundkey_t* k){
	uint8_t tmp[16], t;
	uint8_t i;
	/* subBytes */
	for(i=0; i<16; ++i){
		tmp[i] = aes_sbox[state->s[i]];
	}
	/* shiftRows */
	aes_shiftcol(tmp+1, 1);
	aes_shiftcol(tmp+2, 2);
	aes_shiftcol(tmp+3, 3);
	/* mixColums */
	for(i=0; i<4; ++i){
		t = tmp[4*i+0] ^ tmp[4*i+1] ^ tmp[4*i+2] ^ tmp[4*i+3];
		state->s[4*i+0] =
			  GF256MUL_2(tmp[4*i+0]^tmp[4*i+1])
			^ tmp[4*i+0]
			^ t;
		state->s[4*i+1] =
			  GF256MUL_2(tmp[4*i+1]^tmp[4*i+2])
			^ tmp[4*i+1]
			^ t;
		state->s[4*i+2] =
			  GF256MUL_2(tmp[4*i+2]^tmp[4*i+3])
			^ tmp[4*i+2]
			^ t;
		state->s[4*i+3] =
			  GF256MUL_2(tmp[4*i+3]^tmp[4*i+0])
			^ tmp[4*i+3]
			^ t;
	}

	/* addKey */
	for(i=0; i<16; ++i){
		state->s[i] ^= k->ks[i];
	}
}
Exemple #4
0
static void mugi_f(uint64_t *dest, uint64_t *a, uint64_t *b){
	uint64_t t;
	uint8_t i,x;
	t = (*a); 
	if(b)
		t ^= (*b);
	for(i=0; i<8; ++i)
		T(i) = pgm_read_byte(aes_sbox+T(i));
	
	x = T(0) ^ T(1) ^ T(2) ^ T(3);
	D(4) =
		  GF256MUL_2(T(0)^T(1))
		^ T(0)
		^ x;
	D(5) =
		  GF256MUL_2(T(1)^T(2))
		^ T(1)
		^ x;
	D(2) =
		  GF256MUL_2(T(2)^T(3))
		^ T(2)
		^ x;
	D(3) =
		  GF256MUL_2(T(3)^T(0))
		^ T(3)
		^ x;
	x = T(4) ^ T(5) ^ T(6) ^ T(7);
	D(0) =
		  GF256MUL_2(T(4)^T(5))
		^ T(4)
		^ x;
	D(1) =
		  GF256MUL_2(T(5)^T(6))
		^ T(5)
		^ x;
	D(6) =
		  GF256MUL_2(T(6)^T(7))
		^ T(6)
		^ x;
	D(7) =
		  GF256MUL_2(T(7)^T(4))
		^ T(7)
		^ x;
}