Feat: Added vaptvupt codec, fix jasmin tests
This commit is contained in:
parent
cf70d4ecfe
commit
6651842748
63 changed files with 6577 additions and 342 deletions
|
|
@ -3,16 +3,30 @@
|
|||
.p2align 5
|
||||
.global zupt_aes256_blk
|
||||
.type zupt_aes256_blk, %function
|
||||
/* zupt_aes256_blk(out_ptr=rdi, in_blk=rsi, key=rdx, ctr_blk=rcx)
|
||||
* AES-256 single-block encrypt: out = AES(key, ctr) XOR in
|
||||
*
|
||||
* FIX v2.0.0: Round keys at [rsp+0], [rsp+16], [rsp+32], ..., [rsp+224]
|
||||
* The previous version had [rsp+0], [rsp+1], ..., [rsp+14] (byte offsets).
|
||||
*
|
||||
* Stack layout: 15 × 16 bytes = 240 bytes for round keys, 16-byte aligned.
|
||||
*/
|
||||
zupt_aes256_blk:
|
||||
mov r10, rsp
|
||||
lea rsp, qword ptr[rsp + -240]
|
||||
lea rsp, qword ptr[rsp - 256]
|
||||
and rsp, -16
|
||||
vmovdqu xmm0, xmmword ptr[rdx]
|
||||
vmovdqu xmm1, xmmword ptr[rdx + 1]
|
||||
vmovdqu xmmword ptr[rsp], xmm0
|
||||
vmovdqu xmmword ptr[rsp + 1], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 1
|
||||
vpshufd xmm2, xmm2, 255
|
||||
|
||||
/* Load 256-bit key (two u128 halves) */
|
||||
vmovdqu xmm0, xmmword ptr[rdx] /* key[0] = first 128 bits */
|
||||
vmovdqu xmm1, xmmword ptr[rdx + 16] /* key[1] = second 128 bits */
|
||||
|
||||
/* Store round keys 0-1 (the raw key halves) */
|
||||
vmovdqa xmmword ptr[rsp + 0], xmm0 /* rk0 */
|
||||
vmovdqa xmmword ptr[rsp + 16], xmm1 /* rk1 */
|
||||
|
||||
/* Round key 2 (even): RCON=0x01 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x01
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -20,9 +34,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 2], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 32], xmm0 /* rk2 */
|
||||
|
||||
/* Round key 3 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -30,9 +46,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 3], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 2
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 48], xmm1 /* rk3 */
|
||||
|
||||
/* Round key 4 (even): RCON=0x02 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x02
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -40,9 +58,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 4], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 64], xmm0 /* rk4 */
|
||||
|
||||
/* Round key 5 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -50,9 +70,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 5], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 4
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 80], xmm1 /* rk5 */
|
||||
|
||||
/* Round key 6 (even): RCON=0x04 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x04
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -60,9 +82,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 6], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 96], xmm0 /* rk6 */
|
||||
|
||||
/* Round key 7 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -70,9 +94,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 7], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 8
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 112], xmm1 /* rk7 */
|
||||
|
||||
/* Round key 8 (even): RCON=0x08 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x08
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -80,9 +106,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 8], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 128], xmm0 /* rk8 */
|
||||
|
||||
/* Round key 9 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -90,9 +118,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 9], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 16
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 144], xmm1 /* rk9 */
|
||||
|
||||
/* Round key 10 (even): RCON=0x10 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x10
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -100,9 +130,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 10], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 160], xmm0 /* rk10 */
|
||||
|
||||
/* Round key 11 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -110,9 +142,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 11], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 32
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 176], xmm1 /* rk11 */
|
||||
|
||||
/* Round key 12 (even): RCON=0x20 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x20
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -120,9 +154,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 12], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 192], xmm0 /* rk12 */
|
||||
|
||||
/* Round key 13 (odd) */
|
||||
vaeskeygenassist xmm2, xmm0, 0
|
||||
vpshufd xmm2, xmm2, 170
|
||||
vpshufd xmm2, xmm2, 0xAA
|
||||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpslldq xmm3, xmm1, 4
|
||||
|
|
@ -130,9 +166,11 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm1, 4
|
||||
vpxor xmm1, xmm1, xmm3
|
||||
vpxor xmm1, xmm1, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 13], xmm1
|
||||
vaeskeygenassist xmm2, xmm1, 64
|
||||
vpshufd xmm2, xmm2, 255
|
||||
vmovdqa xmmword ptr[rsp + 208], xmm1 /* rk13 */
|
||||
|
||||
/* Round key 14 (even): RCON=0x40 */
|
||||
vaeskeygenassist xmm2, xmm1, 0x40
|
||||
vpshufd xmm2, xmm2, 0xFF
|
||||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpslldq xmm3, xmm0, 4
|
||||
|
|
@ -140,27 +178,51 @@ zupt_aes256_blk:
|
|||
vpslldq xmm3, xmm0, 4
|
||||
vpxor xmm0, xmm0, xmm3
|
||||
vpxor xmm0, xmm0, xmm2
|
||||
vmovdqu xmmword ptr[rsp + 14], xmm0
|
||||
vmovdqu xmm0, xmmword ptr[rcx]
|
||||
vpxor xmm0, xmm0, xmmword ptr[rsp]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 1]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 2]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 3]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 4]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 5]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 6]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 7]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 8]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 9]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 10]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 11]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 12]
|
||||
vaesenc xmm0, xmm0, xmmword ptr[rsp + 13]
|
||||
vaesenclast xmm0, xmm0, xmmword ptr[rsp + 14]
|
||||
vmovdqu xmm1, xmmword ptr[rsi]
|
||||
vpxor xmm0, xmm0, xmm1
|
||||
movq qword ptr[rdi], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 224], xmm0 /* rk14 */
|
||||
|
||||
/* ═══ Encrypt: AES-256 14 rounds ═══ */
|
||||
vmovdqu xmm4, xmmword ptr[rcx] /* Load counter block */
|
||||
vpxor xmm4, xmm4, xmmword ptr[rsp + 0] /* AddRoundKey(rk0) */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 16] /* Round 1 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 32] /* Round 2 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 48] /* Round 3 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 64] /* Round 4 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 80] /* Round 5 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 96] /* Round 6 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 112] /* Round 7 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 128] /* Round 8 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 144] /* Round 9 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 160] /* Round 10 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 176] /* Round 11 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 192] /* Round 12 */
|
||||
vaesenc xmm4, xmm4, xmmword ptr[rsp + 208] /* Round 13 */
|
||||
vaesenclast xmm4, xmm4, xmmword ptr[rsp + 224] /* Round 14 (final) */
|
||||
|
||||
/* XOR keystream with plaintext */
|
||||
vmovdqu xmm5, xmmword ptr[rsi] /* Load plaintext block */
|
||||
vpxor xmm4, xmm4, xmm5
|
||||
vmovdqu xmmword ptr[rdi], xmm4 /* Store result */
|
||||
|
||||
/* Wipe round keys from stack */
|
||||
vpxor xmm0, xmm0, xmm0
|
||||
vmovdqa xmmword ptr[rsp + 0], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 16], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 32], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 48], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 64], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 80], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 96], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 112], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 128], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 144], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 160], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 176], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 192], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 208], xmm0
|
||||
vmovdqa xmmword ptr[rsp + 224], xmm0
|
||||
|
||||
mov rsp, r10
|
||||
ret
|
||||
.ident "Jasmin Compiler 2026.03.0"
|
||||
.section ".note.GNU-stack", "", %progbits
|
||||
.size zupt_aes256_blk, . - zupt_aes256_blk
|
||||
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
|
|
|
|||
Loading…
Reference in a new issue