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:
Código:
0xbf << 1 = 0x17e xor 0x11b = 0x65
Pero por ejemplo 0x56 no hace falta.
Código:
0x56 << 1 = 0xac
Bien tengo el siguiente codigo, imaginaos que todo el registro esta lleno de 0xbf.
Código
.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.