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.





Autor


En línea
