Cuanto tiempo ha pasado ya, disculpas por abandonar el tema pero he tenido que ocuparme de otras cosas.
Aqui dejo el codigo, lo he testeado a mano siguiendo el algoritmo del PDF del NIST el 1. Testeado con 1 byte.
Se que se puede mejorar, pero no he encontrado un TEST VECTOR para este algoritmo, como los que hay en el PDF de AES al final de todo.
He pensado en contruir todo el PAPER del NIST y luego retomar esto de las las tablas, no se o ire tirando.
Código
.section .text .globl _start .align 16 _start: pxor %xmm0, %xmm0 # xmm0 | Z movdqu %xmm1, (%rsp) # rsp | x movdqu %xmm1, -16(%rsp) # rsp | V _l02: movq $-16, %rax # contador byte _l01: xorq %r8, %r8 # contador bit movq $-8, %r9 _l0: btq %r8, 16(%rsp, %rax) # compruebo el bit de el primer byte jnc _l1 # si el bit es 0, paso a LSB movdqu -16(%rsp), %xmm3 pxor %xmm3, %xmm0 # si el bit es 1, Z xor V, paso a LSB _l1: btq $63, -8(%rsp) # compruebo el ultimo bit 127 LSB 1 (V) jc _l2 movq -8(%rsp), %rbx shlq $63, %rbx shrq $1, -8(%rsp) shrq $1, -16(%rsp) # LSB(V)=0 orq %rbx, -16(%rsp) jmp _l3 _l2: movq -8(%rsp), %rbx shlq $63, %rbx shrq $1, -8(%rsp) #LSB(V)=1 shrq $1, -16(%rsp) orq %rbx, -16(%rsp) xorq $0x00000000000000e1, -16(%rsp) _l3: incq %r8 incq %r9 js _l0 incq %rax js _l01
El codigo en realidad no es muy bueno, comparandolo con las tablas GCM, y ni hablar del paso de parametros. Y todas las operaciones las realizo en memoria.
Me gustaria encontrar un test vector de este algoritmo, si alguien sabe algo por favor que me lo diga, o que me confirme que el codigo opera bien.
Saludos.