📄 sha1.asm
字号:
.686
.model flat,stdcall
option casemap:none
.data?
SHA1HashBuf db 64 dup(?)
SHA1Len dd ?
SHA1Index dd ?
SHA1Digest dd 5 dup(?)
.code
SHA1F0 macro dwA, dwB, dwC, dwD, dwE, locX, constAC
mov edi, dwC
xor edi, dwD
and edi, dwB
xor edi, dwD
lea dwE, [dwE + constAC + edi]
rol dwB, 30
mov edi, dwA
rol edi, 05
add dwE, [locX]
add dwE, edi
ENDM
SHA1F1 macro dwA, dwB, dwC, dwD, dwE, locX, constAC
mov edi, dwC
xor edi, dwD
xor edi, dwB
lea dwE, [dwE + constAC + edi]
rol dwB, 30
mov edi, dwA
rol edi, 05
add dwE, [locX]
add dwE, edi
ENDM
SHA1F2 macro dwA, dwB, dwC, dwD, dwE, locX, constAC
mov edi,dwB
or edi,dwC
and edi,dwD
mov ebp,edi
mov edi,dwB
and edi,dwC
or edi,ebp
lea dwE,[dwE + constAC + edi]
rol dwB,30
mov edi,dwA
rol edi,05
add dwE,[locX]
add dwE,edi
ENDM
SHA1F3 macro dwA, dwB, dwC, dwD, dwE, locX, constAC
mov edi,dwC
xor edi,dwD
xor edi,dwB
lea dwE,[dwE + constAC + edi]
rol dwB,30
mov edi,dwA
rol edi,05
add dwE,[locX]
add dwE,edi
endm
align dword
SHA1Transform proc
pushad
SHA1locals equ 80*4
sub esp,SHA1locals
SHA1W equ dword ptr [esp]
mov edi,offset SHA1HashBuf
xor ebx,ebx
.repeat
mov eax,[edi+ebx*4]
mov ecx,[edi+ebx*4+4]
mov edx,[edi+ebx*4+32]
mov esi,[edi+ebx*4+32+4]
bswap eax
bswap edx
bswap ecx
bswap esi
mov SHA1W[ebx*4],eax
mov SHA1W[ebx*4+4],ecx
mov SHA1W[ebx*4+32],edx
mov SHA1W[ebx*4+32+4],esi
inc ebx
inc ebx
.until ebx==8
shl ebx,1
.repeat
mov eax,SHA1W[(4*ebx)-03*4]
mov edx,SHA1W[(4*ebx+4)-03*4]
xor eax,SHA1W[(4*ebx)-08*4]
xor edx,SHA1W[(4*ebx+4)-08*4]
xor eax,SHA1W[(4*ebx)-14*4]
xor edx,SHA1W[(4*ebx+4)-14*4]
xor eax,SHA1W[(4*ebx)-16*4]
xor edx,SHA1W[(4*ebx+4)-16*4]
rol eax,1
mov SHA1W[4*ebx],eax
rol edx,1
mov SHA1W[4*ebx+4],edx
inc ebx
inc ebx
.until ebx==80
mov edi,offset SHA1Digest
mov eax,[edi+0*4]
mov ebx,[edi+1*4]
mov ecx,[edi+2*4]
mov edx,[edi+3*4]
mov esi,[edi+4*4]
;========================================================
SHA1F0 eax, ebx, ecx, edx, esi, SHA1W[00*4], 05a827999h
SHA1F0 esi, eax, ebx, ecx, edx, SHA1W[01*4], 05a827999h
SHA1F0 edx, esi, eax, ebx, ecx, SHA1W[02*4], 05a827999h
SHA1F0 ecx, edx, esi, eax, ebx, SHA1W[03*4], 05a827999h
SHA1F0 ebx, ecx, edx, esi, eax, SHA1W[04*4], 05a827999h
SHA1F0 eax, ebx, ecx, edx, esi, SHA1W[05*4], 05a827999h
SHA1F0 esi, eax, ebx, ecx, edx, SHA1W[06*4], 05a827999h
SHA1F0 edx, esi, eax, ebx, ecx, SHA1W[07*4], 05a827999h
SHA1F0 ecx, edx, esi, eax, ebx, SHA1W[08*4], 05a827999h
SHA1F0 ebx, ecx, edx, esi, eax, SHA1W[09*4], 05a827999h
SHA1F0 eax, ebx, ecx, edx, esi, SHA1W[10*4], 05a827999h
SHA1F0 esi, eax, ebx, ecx, edx, SHA1W[11*4], 05a827999h
SHA1F0 edx, esi, eax, ebx, ecx, SHA1W[12*4], 05a827999h
SHA1F0 ecx, edx, esi, eax, ebx, SHA1W[13*4], 05a827999h
SHA1F0 ebx, ecx, edx, esi, eax, SHA1W[14*4], 05a827999h
SHA1F0 eax, ebx, ecx, edx, esi, SHA1W[15*4], 05a827999h
SHA1F0 esi, eax, ebx, ecx, edx, SHA1W[16*4], 05a827999h
SHA1F0 edx, esi, eax, ebx, ecx, SHA1W[17*4], 05a827999h
SHA1F0 ecx, edx, esi, eax, ebx, SHA1W[18*4], 05a827999h
SHA1F0 ebx, ecx, edx, esi, eax, SHA1W[19*4], 05a827999h
;========================================================
SHA1F1 eax, ebx, ecx, edx, esi, SHA1W[20*4], 06ed9eba1h
SHA1F1 esi, eax, ebx, ecx, edx, SHA1W[21*4], 06ed9eba1h
SHA1F1 edx, esi, eax, ebx, ecx, SHA1W[22*4], 06ed9eba1h
SHA1F1 ecx, edx, esi, eax, ebx, SHA1W[23*4], 06ed9eba1h
SHA1F1 ebx, ecx, edx, esi, eax, SHA1W[24*4], 06ed9eba1h
SHA1F1 eax, ebx, ecx, edx, esi, SHA1W[25*4], 06ed9eba1h
SHA1F1 esi, eax, ebx, ecx, edx, SHA1W[26*4], 06ed9eba1h
SHA1F1 edx, esi, eax, ebx, ecx, SHA1W[27*4], 06ed9eba1h
SHA1F1 ecx, edx, esi, eax, ebx, SHA1W[28*4], 06ed9eba1h
SHA1F1 ebx, ecx, edx, esi, eax, SHA1W[29*4], 06ed9eba1h
SHA1F1 eax, ebx, ecx, edx, esi, SHA1W[30*4], 06ed9eba1h
SHA1F1 esi, eax, ebx, ecx, edx, SHA1W[31*4], 06ed9eba1h
SHA1F1 edx, esi, eax, ebx, ecx, SHA1W[32*4], 06ed9eba1h
SHA1F1 ecx, edx, esi, eax, ebx, SHA1W[33*4], 06ed9eba1h
SHA1F1 ebx, ecx, edx, esi, eax, SHA1W[34*4], 06ed9eba1h
SHA1F1 eax, ebx, ecx, edx, esi, SHA1W[35*4], 06ed9eba1h
SHA1F1 esi, eax, ebx, ecx, edx, SHA1W[36*4], 06ed9eba1h
SHA1F1 edx, esi, eax, ebx, ecx, SHA1W[37*4], 06ed9eba1h
SHA1F1 ecx, edx, esi, eax, ebx, SHA1W[38*4], 06ed9eba1h
SHA1F1 ebx, ecx, edx, esi, eax, SHA1W[39*4], 06ed9eba1h
;========================================================
SHA1F2 eax, ebx, ecx, edx, esi, SHA1W[40*4], 08f1bbcdch
SHA1F2 esi, eax, ebx, ecx, edx, SHA1W[41*4], 08f1bbcdch
SHA1F2 edx, esi, eax, ebx, ecx, SHA1W[42*4], 08f1bbcdch
SHA1F2 ecx, edx, esi, eax, ebx, SHA1W[43*4], 08f1bbcdch
SHA1F2 ebx, ecx, edx, esi, eax, SHA1W[44*4], 08f1bbcdch
SHA1F2 eax, ebx, ecx, edx, esi, SHA1W[45*4], 08f1bbcdch
SHA1F2 esi, eax, ebx, ecx, edx, SHA1W[46*4], 08f1bbcdch
SHA1F2 edx, esi, eax, ebx, ecx, SHA1W[47*4], 08f1bbcdch
SHA1F2 ecx, edx, esi, eax, ebx, SHA1W[48*4], 08f1bbcdch
SHA1F2 ebx, ecx, edx, esi, eax, SHA1W[49*4], 08f1bbcdch
SHA1F2 eax, ebx, ecx, edx, esi, SHA1W[50*4], 08f1bbcdch
SHA1F2 esi, eax, ebx, ecx, edx, SHA1W[51*4], 08f1bbcdch
SHA1F2 edx, esi, eax, ebx, ecx, SHA1W[52*4], 08f1bbcdch
SHA1F2 ecx, edx, esi, eax, ebx, SHA1W[53*4], 08f1bbcdch
SHA1F2 ebx, ecx, edx, esi, eax, SHA1W[54*4], 08f1bbcdch
SHA1F2 eax, ebx, ecx, edx, esi, SHA1W[55*4], 08f1bbcdch
SHA1F2 esi, eax, ebx, ecx, edx, SHA1W[56*4], 08f1bbcdch
SHA1F2 edx, esi, eax, ebx, ecx, SHA1W[57*4], 08f1bbcdch
SHA1F2 ecx, edx, esi, eax, ebx, SHA1W[58*4], 08f1bbcdch
SHA1F2 ebx, ecx, edx, esi, eax, SHA1W[59*4], 08f1bbcdch
;========================================================
SHA1F3 eax, ebx, ecx, edx, esi, SHA1W[60*4], 0ca62c1d6h
SHA1F3 esi, eax, ebx, ecx, edx, SHA1W[61*4], 0ca62c1d6h
SHA1F3 edx, esi, eax, ebx, ecx, SHA1W[62*4], 0ca62c1d6h
SHA1F3 ecx, edx, esi, eax, ebx, SHA1W[63*4], 0ca62c1d6h
SHA1F3 ebx, ecx, edx, esi, eax, SHA1W[64*4], 0ca62c1d6h
SHA1F3 eax, ebx, ecx, edx, esi, SHA1W[65*4], 0ca62c1d6h
SHA1F3 esi, eax, ebx, ecx, edx, SHA1W[66*4], 0ca62c1d6h
SHA1F3 edx, esi, eax, ebx, ecx, SHA1W[67*4], 0ca62c1d6h
SHA1F3 ecx, edx, esi, eax, ebx, SHA1W[68*4], 0ca62c1d6h
SHA1F3 ebx, ecx, edx, esi, eax, SHA1W[69*4], 0ca62c1d6h
SHA1F3 eax, ebx, ecx, edx, esi, SHA1W[70*4], 0ca62c1d6h
SHA1F3 esi, eax, ebx, ecx, edx, SHA1W[71*4], 0ca62c1d6h
SHA1F3 edx, esi, eax, ebx, ecx, SHA1W[72*4], 0ca62c1d6h
SHA1F3 ecx, edx, esi, eax, ebx, SHA1W[73*4], 0ca62c1d6h
SHA1F3 ebx, ecx, edx, esi, eax, SHA1W[74*4], 0ca62c1d6h
SHA1F3 eax, ebx, ecx, edx, esi, SHA1W[75*4], 0ca62c1d6h
SHA1F3 esi, eax, ebx, ecx, edx, SHA1W[76*4], 0ca62c1d6h
SHA1F3 edx, esi, eax, ebx, ecx, SHA1W[77*4], 0ca62c1d6h
SHA1F3 ecx, edx, esi, eax, ebx, SHA1W[78*4], 0ca62c1d6h
SHA1F3 ebx, ecx, edx, esi, eax, SHA1W[79*4], 0ca62c1d6h
;========================================================
mov edi,offset SHA1Digest
add [edi+0*4],eax
add [edi+1*4],ebx
add [edi+2*4],ecx
add [edi+3*4],edx
add [edi+4*4],esi
add esp,SHA1locals
popad
ret
SHA1Transform endp
SHA1BURN macro
xor eax,eax
mov SHA1Index,eax
mov edi,Offset SHA1HashBuf
mov ecx,(sizeof SHA1HashBuf)/4
rep stosd
endm
align dword
SHA1Init proc uses edi
xor eax, eax
mov SHA1Len,eax
SHA1BURN
mov eax,offset SHA1Digest
mov dword ptr [eax+00],067452301h
mov dword ptr [eax+04],0efcdab89h
mov dword ptr [eax+08],098badcfeh
mov dword ptr [eax+12],010325476h
mov dword ptr [eax+16],0c3d2e1f0h
ret
SHA1Init endp
align dword
SHA1Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
mov ebx,dwBufLen
add SHA1Len,ebx
.while ebx
mov eax,SHA1Index
mov edx,64
sub edx,eax
.if edx <= ebx
lea edi, [SHA1HashBuf+eax]
mov esi, lpBuffer
mov ecx, edx
rep movsb
sub ebx, edx
add lpBuffer, edx
call SHA1Transform
SHA1BURN
.else
lea edi, [SHA1HashBuf+eax]
mov esi, lpBuffer
mov ecx, ebx
rep movsb
mov eax, SHA1Index
add eax, ebx
mov SHA1Index,eax
.break
.endif
.endw
ret
SHA1Update endp
align dword
SHA1Final proc uses esi edi
mov ecx, SHA1Index
mov byte ptr [SHA1HashBuf+ecx],80h
.if ecx >= 56
call SHA1Transform
SHA1BURN
.endif
mov eax,SHA1Len
xor edx,edx
shld edx,eax,3
shl eax,3
bswap edx; \
bswap eax; /
mov dword ptr [SHA1HashBuf+56],edx
mov dword ptr [SHA1HashBuf+60],eax
call SHA1Transform
mov eax,offset SHA1Digest
mov edx,[eax+0*4]
mov ecx,[eax+1*4]
mov esi,[eax+2*4]
mov edi,[eax+3*4]
bswap edx
bswap ecx
bswap edi
bswap esi
mov [eax+0*4],edx
mov [eax+1*4],ecx
mov [eax+2*4],esi
mov [eax+3*4],edi
mov edx,[eax+4*4]
bswap edx
mov [eax+4*4],edx
ret
SHA1Final endp
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -