Пример #1
0
void tmd_aes_generic_encrypt_xts(aes_block *output, const aes_key *k1, aes_key *k2, aes_block *dataunit,
                                 uint32_t spoint, aes_block *input, uint32_t nb_blocks)
{
    aes_block block, tweak;

    /* load IV and encrypt it using k2 as the tweak */
    block128_copy(&tweak, dataunit);
    aes_encrypt_block(&tweak, k2, &tweak);

    /* TO OPTIMISE: this is really inefficient way to do that */
    while (spoint-- > 0)
        tmd_gf_mulx(&tweak);

    for ( ; nb_blocks-- > 0; input++, output++, tmd_gf_mulx(&tweak)) {
        block128_vxor(&block, input, &tweak);
        aes_encrypt_block(&block, k1, &block);
        block128_vxor(output, &block, &tweak);
    }
}
Пример #2
0
void aes_decrypt_xts(uint8_t *output, aes_key *k1, aes_key *k2, aes_block *dataunit,
                     uint32_t spoint, uint8_t *input, uint32_t nb_blocks)
{
	aes_block block, tweak;

	if (!nb_blocks)
		return;

	/* load IV and encrypt it using k2 as the tweak */
	block128_copy(&tweak, dataunit);
	aes_encrypt_block(&tweak, k2, &tweak);

	/* TO OPTIMISE: this is really inefficient way to do that */
	while (spoint-- > 0)
		gf_mulx(&tweak);

	for ( ; nb_blocks-- > 0; input += 16, output += 16, gf_mulx(&tweak)) {
		block128_vxor(&block, (block128 *) input, &tweak);
		aes_decrypt_block(&block, k1, &block);
		block128_vxor((block128 *) output, &block, &tweak);
	}
}
Пример #3
0
void tmd_aes_generic_decrypt_cbc(aes_block *output, const aes_key *key, const aes_block *ivini, aes_block *newIV, const aes_block *input, uint32_t nb_blocks)
{
    aes_block block, blocko;
    aes_block *iv;
    iv = newIV;

    /* preload IV in block */
    block128_copy(iv, ivini);
    for ( ; nb_blocks-- > 0; input++, output++) {
        block128_copy(&block, (block128 *) input);
        tmd_aes_generic_decrypt_block(&blocko, key, &block);
        block128_vxor((block128 *) output, &blocko, iv);
        block128_copy(iv, &block);
    }
}
Пример #4
0
void aes_encrypt_ctr(uint8_t *output, aes_key *key, aes_block *iv, uint8_t *input, uint32_t len)
{
	aes_block block, o;
	uint32_t nb_blocks = len / 16;
	int i;

	/* preload IV in block */
	block128_copy(&block, iv);

	for ( ; nb_blocks-- > 0; block128_inc_be(&block), output += 16, input += 16) {
		aes_encrypt_block(&o, key, &block);
		block128_vxor((block128 *) output, &o, (block128 *) input);
	}

	if ((len % 16) != 0) {
		aes_encrypt_block(&o, key, &block);
		for (i = 0; i < (len % 16); i++) {
			*output = ((uint8_t *) &o)[i] ^ *input;
			output += 1;
			input += 1;
		}
	}
}