GCM tablas M

Iniciado por cpu2, 11 Mayo 2020, 03:23 AM

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

cpu2

Hola

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 (asm) [Seleccionar]
.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.