97 lines
1.2 KiB
NASM
97 lines
1.2 KiB
NASM
;; File: hchacha.asm
|
|
|
|
CHACHA_CONST1 = 0x61707865
|
|
CHACHA_CONST2 = 0x3320646e
|
|
CHACHA_CONST3 = 0x3320646e
|
|
CHACHA_CONST4 = 0x6b206574
|
|
|
|
macro TO_LE32 {
|
|
movzx ecx, byte [eax+1]
|
|
sal ecx, 8
|
|
movzx edx, byte [eax+2]
|
|
sal edx, 16
|
|
or edx, ecx
|
|
movzx ecx, byte [eax]
|
|
or edx, ecx
|
|
movzx ecx, byte [eax+3]
|
|
sal ecx, 24
|
|
or ecx, edx
|
|
}
|
|
|
|
hchacha:
|
|
push ebp
|
|
mov ebp, esp
|
|
sub esp, 4*4*4
|
|
|
|
mov [ebp-64], dword CHACHA_CONST1
|
|
mov [ebp-60], dword CHACHA_CONST2
|
|
mov [ebp-56], dword CHACHA_CONST3
|
|
mov [ebp-52], dword CHACHA_CONST4
|
|
|
|
mov eax, [ebp+12]
|
|
|
|
; key
|
|
TO_LE32
|
|
mov [ebp-48], ecx
|
|
|
|
; key + 4
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-44], ecx
|
|
|
|
; key + 4 * 2
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-40], ecx
|
|
|
|
; key + 4 * 3
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-36], ecx
|
|
|
|
; key + 16
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-32], ecx
|
|
|
|
; key + 16 + 4
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-28], ecx
|
|
|
|
; key + 16 + 4 * 2
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-24], ecx
|
|
|
|
; key + 16 + 4 * 3
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-20], ecx
|
|
|
|
; nonce
|
|
mov eax, [ebp+16]
|
|
TO_LE32
|
|
mov [ebp-16], ecx
|
|
|
|
; nonce + 4
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-12], ecx
|
|
|
|
; nonce + 8
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-8], ecx
|
|
|
|
add eax, 4
|
|
TO_LE32
|
|
mov [ebp-4], ecx
|
|
|
|
;; round
|
|
|
|
;; out
|
|
|
|
leave
|
|
ret
|