📄 tiger.asm
字号:
mov edx,x2.u64.Hi
add eax,ebx
adc edx,ecx
mov x2.u64.Lo,eax
mov x2.u64.Hi,edx
xor ebx,-1
xor ecx,-1
shld ecx,ebx,19
shl ebx,19
mov esi,x3.u64.Lo
mov edi,x3.u64.Hi
xor eax,ebx
xor edx,ecx
sub esi,eax
sbb edi,edx
mov x3.u64.Lo,esi
mov x3.u64.Hi,edi
mov eax,x4.u64.Lo
mov edx,x4.u64.Hi
xor eax,esi
xor edx,edi
mov x4.u64.Lo,eax
mov x4.u64.Hi,edx
mov ebx,x5.u64.Lo
mov ecx,x5.u64.Hi
add ebx,eax
adc ecx,edx
mov x5.u64.Lo,ebx
mov x5.u64.Hi,ecx
xor eax,-1
xor edx,-1
shrd eax,edx,23
shr edx,23
xor eax,ebx
xor edx,ecx
mov esi,x6.u64.Lo
mov edi,x6.u64.Hi
sub esi,eax
sbb edi,edx
mov x6.u64.Lo,esi
mov x6.u64.Hi,edi
mov eax,x7.u64.Lo
mov edx,x7.u64.Hi
xor eax,esi
xor edx,edi
mov x7.u64.Lo,eax
mov x7.u64.Hi,edx
mov ebx,x0.u64.Lo
mov ecx,x0.u64.Hi
add ebx,eax
adc ecx,edx
mov x0.u64.Lo,ebx
mov x0.u64.Hi,ecx
xor eax,-1
xor edx,-1
shld edx,eax,19
shl eax,19
xor eax,ebx
xor edx,ecx
mov esi,x1.u64.Lo
mov edi,x1.u64.Hi
sub esi,eax
sbb edi,edx
mov x1.u64.Lo,esi
mov x1.u64.Hi,edi
mov eax,x2.u64.Lo
mov edx,x2.u64.Hi
xor eax,esi
xor edx,edi
mov x2.u64.Lo,eax
mov x2.u64.Hi,edx
mov ebx,x3.u64.Lo
mov ecx,x3.u64.Hi
add ebx,eax
adc ecx,edx
mov x3.u64.Lo,ebx
mov x3.u64.Hi,ecx
xor eax,-1
xor edx,-1
shrd eax,edx,23
shr edx,23
xor eax,ebx
xor edx,ecx
mov esi,x4.u64.Lo
mov edi,x4.u64.Hi
sub esi,eax
sbb edi,edx
mov x4.u64.Lo,esi
mov x4.u64.Hi,edi
mov eax,x5.u64.Lo
mov edx,x5.u64.Hi
xor eax,esi
xor edx,edi
mov x5.u64.Lo,eax
mov x5.u64.Hi,edx
mov ebx,x6.u64.Lo
mov ecx,x6.u64.Hi
add ebx,eax
adc ecx,edx
mov x6.u64.Lo,ebx
mov x6.u64.Hi,ecx
mov eax,x7.u64.Lo
mov edx,x7.u64.Hi
xor ebx,089ABCDEFh
xor ecx,001234567h
sub eax,ebx
sbb edx,ecx
mov x7.u64.Lo,eax
mov x7.u64.Hi,edx
ENDM
ROUND MACRO a_,b_,c_,x_,mulp
mov ebx,[x_].u64.Lo
mov ecx,[x_].u64.Hi
mov eax,[c_].u64.Lo
mov edx,[c_].u64.Hi
xor eax,ebx
xor edx,ecx
mov [c_].u64.Lo,eax
mov [c_].u64.Hi,edx
mov ebx,eax
mov ecx,edx
and ebx,0FFh
and ecx,0FFh
mov esi,[TigerK1+8*ebx].u64.Lo;0
mov edi,[TigerK1+8*ebx].u64.Hi
xor esi,[TigerK3+8*ecx].u64.Lo;1
xor edi,[TigerK3+8*ecx].u64.Hi
mov ebx,eax
mov ecx,edx
shr ebx,16
and ebx,0FFh
shr ecx,16
and ecx,0FFh
xor esi,[TigerK2+8*ebx].u64.Lo;2
xor edi,[TigerK2+8*ebx].u64.Hi
xor esi,[TigerK4+8*ecx].u64.Lo;3
xor edi,[TigerK4+8*ecx].u64.Hi
mov Tigertmp[0],esi
mov Tigertmp[4],edi
mov ebx,eax
mov ecx,edx
shr ebx,8
and ebx,0FFh
shr ecx,8
and ecx,0FFh
mov esi,[TigerK4+8*ebx].u64.Lo
mov edi,[TigerK4+8*ebx].u64.Hi
xor esi,[TigerK2+8*ecx].u64.Lo
xor edi,[TigerK2+8*ecx].u64.Hi
shr eax,24
shr edx,24
xor esi,[TigerK3+8*eax].u64.Lo
xor edi,[TigerK3+8*eax].u64.Hi
xor esi,[TigerK1+8*edx].u64.Lo
xor edi,[TigerK1+8*edx].u64.Hi
add esi,[b_].u64.Lo
adc edi,[b_].u64.Hi
mov eax,Tigertmp[0]
mov edx,Tigertmp[4]
sub [a_].u64.Lo,eax
sbb [a_].u64.Hi,edx
if mulp eq 5
mov ebx,esi
mov ecx,edi
shld edi,esi,2
shl esi,2
add esi,ebx
adc edi,ecx
elseif mulp eq 7
mov ebx,esi
mov ecx,edi
shld edi,esi,3
shl esi,3
sub esi,ebx
sbb edi,ecx
elseif mulp eq 9
mov ebx,esi
mov ecx,edi
shld edi,esi,3
shl esi,3
add esi,ebx
adc edi,ecx
endif
mov [b_].u64.Lo,esi
mov [b_].u64.Hi,edi
ENDM
align 4
TigerTransform proc
pushad
Tigerlocals equ 12*8
sub esp,Tigerlocals
x0 equ [esp+0*8]
x1 equ [esp+1*8]
x2 equ [esp+2*8]
x3 equ [esp+3*8]
x4 equ [esp+4*8]
x5 equ [esp+5*8]
x6 equ [esp+6*8]
x7 equ [esp+7*8]
llA equ [esp+8*8]
llB equ [esp+9*8]
llC equ [esp+10*8]
Tigertmp equ dword ptr [esp+11*8]
mov esi,offset TigerDigest
mov edi,offset TigerHashBuf
MOV64 llA,esi[0*8]
MOV64 llB,esi[1*8]
MOV64 llC,esi[2*8]
MOV64 x0,edi[0*8]
MOV64 x1,edi[1*8]
MOV64 x2,edi[2*8]
MOV64 x3,edi[3*8]
MOV64 x4,edi[4*8]
MOV64 x5,edi[5*8]
MOV64 x6,edi[6*8]
MOV64 x7,edi[7*8]
ROUND llA,llB,llC,x0,5
ROUND llB,llC,llA,x1,5
ROUND llC,llA,llB,x2,5
ROUND llA,llB,llC,x3,5
ROUND llB,llC,llA,x4,5
ROUND llC,llA,llB,x5,5
ROUND llA,llB,llC,x6,5
ROUND llB,llC,llA,x7,5
KEY_SCHEDULE
ROUND llC,llA,llB,x0,7
ROUND llA,llB,llC,x1,7
ROUND llB,llC,llA,x2,7
ROUND llC,llA,llB,x3,7
ROUND llA,llB,llC,x4,7
ROUND llB,llC,llA,x5,7
ROUND llC,llA,llB,x6,7
ROUND llA,llB,llC,x7,7
KEY_SCHEDULE
ROUND llB,llC,llA,x0,9
ROUND llC,llA,llB,x1,9
ROUND llA,llB,llC,x2,9
ROUND llB,llC,llA,x3,9
ROUND llC,llA,llB,x4,9
ROUND llA,llB,llC,x5,9
ROUND llB,llC,llA,x6,9
ROUND llC,llA,llB,x7,9
mov esi,offset TigerDigest
XOR64 esi[0*8],llA
SUB64 llB,esi[1*8]
MOV64 esi[1*8],llB
ADD64 [esi+2*8],llC
add esp,Tigerlocals
popad
ret
TigerTransform endp
TigerBURN macro
xor eax,eax
mov TigerIndex,eax
mov edi,Offset TigerHashBuf
mov ecx,(sizeof TigerHashBuf)/4
rep stosd
endm
align 4
TigerInit proc uses edi esi
xor eax,eax
mov TigerLen,eax
mov edi,Offset TigerDigest
mov esi,Offset TigerCHAIN
mov ecx,(sizeof TigerDigest)/4
rep movsd
TigerBURN
mov eax,Offset TigerDigest
ret
TigerInit endp
align 4
TigerUpdate proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
mov ebx,dwBufLen
add TigerLen,ebx
.while ebx
mov eax,TigerIndex
mov edx,64
sub edx,eax
.if edx <= ebx
lea edi, [TigerHashBuf+eax]
mov esi, lpBuffer
mov ecx, edx
rep movsb
sub ebx, edx
add lpBuffer, edx
call TigerTransform
TigerBURN
.else
lea edi, [TigerHashBuf+eax]
mov esi, lpBuffer
mov ecx, ebx
rep movsb
mov eax, TigerIndex
add eax, ebx
mov TigerIndex,eax
.break
.endif
.endw
ret
TigerUpdate endp
align 4
TigerFinal proc uses esi edi
mov ecx, TigerIndex
mov byte ptr [TigerHashBuf+ecx],01h
.if ecx >= 56
call TigerTransform
TigerBURN
.endif
mov eax,TigerLen
xor edx,edx
shld edx,eax,3
shl eax,3
mov dword ptr [TigerHashBuf+56],eax
mov dword ptr [TigerHashBuf+60],edx
call TigerTransform
mov eax,offset TigerDigest
xor ecx,ecx
; .repeat; DwSWAP
; mov esi,[eax+ecx].u64.Lo
; mov edi,[eax+ecx].u64.Hi
; bswap esi
; bswap edi
; mov [eax+ecx].u64.Hi,esi
; mov [eax+ecx].u64.Lo,edi
; add ecx,8
; .until ecx==192/8
ret
TigerFinal endp
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -