Duda con MixColumns

Iniciado por cpu2, 9 Diciembre 2013, 03:34 AM

0 Miembros y 1 Visitante están viendo este tema.

cpu2

Hola

La tengo casi lista, pero tengo un problema. Como sabran la funcion MixColumns se trata de unas multiplicaciones en GF 2(8) y una reduccion modular por 0x11b, en algunos casos se multiplica por 2 y en otros por 3, el 1 no hace falta claro, bien resulta que en algunos bytes cuando los multiplicas por 2 o por 3 es igual el que sea, se pasan de 0xff, lo que los convierte en un word, a esos si hay que hacerles una reduccion modular.

Ejemplo:

0xbf << 1 = 0x17e xor 0x11b = 0x65

Pero por ejemplo 0x56 no hace falta.

0x56 << 1 = 0xac

Bien tengo el siguiente codigo, imaginaos que todo el registro esta lleno de 0xbf.

Código (asm) [Seleccionar]
.section .data

sb:
.quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f
rm:
.quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b

.section .text
.globl _start

_start:

pand sb, %xmm0
pslld $1, %xmm0
pxor rm, %xmm0


Bien el and, es para evitar que se convierta en word, ocuparia el otro dword y no puede ser, se quedaria en 0x7e, no en 0x17e, y luego se multiplica por 2 y luego el xor es la reduccion modular, todo bien.

Bueno esta es la duda, si tengo un 0x56 y 0xbf en el registro barregados 0x56 no requiere ninguna reduccion modular pero 0xbf si, el resultado seria erroneo, como podria solucionar este problema, alguien me echa un cable?

Un saludo.