?? sha1.asm
字號:
.486
.Model Flat, StdCall
Option Casemap :None
;SHA1_EnCode PROTO pSrc:DWORD,nSize:DWORD,nTotal:DWORD,pDest:DWORD,nSlice:DWORD
;參數(shù)說明:
; pSrc,用來計算的數(shù)據(jù)起始地址
; nSize,本次提交的數(shù)據(jù)字節(jié)數(shù)。當nSlice=1或2時,該值必須是64的整倍數(shù)
; nTotal,參加計算的數(shù)據(jù)總字節(jié)數(shù)。比如你想計算一個文件時,nTotal就是文件的總長度。
; pDest,用來輸出結(jié)果的 20 字節(jié)的緩沖區(qū)地址
; nSlice,提交數(shù)據(jù)分段,0=數(shù)據(jù)不分段,1=數(shù)據(jù)開始段,2=數(shù)據(jù)中間段,3=數(shù)據(jù)結(jié)束段,(當一次性提交時該值應(yīng)等于0)
;注意:數(shù)據(jù)開始段和中間段,nSize必須以64字節(jié)(40h)對齊
SHA1XOR4 macro
xor ebx,ebx
@@: add bl,8
and bl,3Fh
mov eax,@fx[ebx] ;off=2*4
add bl,18h
and bl,3Fh
xor eax,@fx[ebx] ;off=8*4
add bl,14h
and bl,3Fh
xor eax,@fx[ebx] ;off=13*4
sub bl,34h
and bl,3Fh
xor eax,@fx[ebx] ;off=0
rol eax,1
mov @fx[ebx],eax
add bl,4
test bl,3Fh
jnz @B
endm
;----------
SHA1FUNC1 macro p1,p2,p3,p4
rol ecx,5
xor edx,p1
and edx,p2
xor edx,p1
add edx,p3
add edx,ecx
add edx,p4
add edx,5A827999h ;2^30*sqr(2)
mov p4,edx
mov ecx,edx
mov edx,p2
rol edx,1Eh
mov p2,edx
endm
;----------
SHA1FUNC2 macro p1,p2,p3,p4
rol ecx,5
xor edx,p1
xor edx,p2
add edx,p3
add edx,ecx
add edx,p4
add edx,6ED9EBA1h ;2^30*sqr(3)
mov p4,edx
mov ecx,edx
mov edx,p2
rol edx,1Eh
mov p2,edx
endm
;----------
SHA1FUNC3 macro p1,p2,p3,p4,p5
rol ecx,5
mov eax,p2
or edx,eax
and edx,p1
and eax,p3
or edx,eax
add edx,p4
add edx,ecx
add edx,p5
add edx,8F1BBCDCh ;2^30*sqr(5)
mov p5,edx
mov ecx,edx
mov edx,p2
rol edx,1Eh
mov p2,edx
endm
;----------
SHA1FUNC4 macro p1,p2,p3,p4
rol ecx,5
xor edx,p1
xor edx,p2
add edx,p3
add edx,ecx
add edx,p4
add edx,0CA62C1D6h ;2^30*sqr(10)
mov p4,edx
mov ecx,edx
mov edx,p2
rol edx,1Eh
mov p2,edx
endm
;----------------
.code
SHA1_EnCode proc uses ebx esi edi pSrc,nSize,nTotal,pDest,nSlice
local @pRead,@End[4]:byte
local @fy[5]
local @fx[10h]
mov eax,nSlice
or eax,eax ;一次性提交?
jz setBeg
dec eax ;數(shù)據(jù)開始段?
jnz SkipBeg
setBeg: mov edi,pDest
mov dword ptr [edi],67452301h
mov dword ptr [edi+4],0EFCDAB89h
mov dword ptr [edi+8],98BADCFEh
mov dword ptr [edi+12],10325476h
mov dword ptr [edi+16],0C3D2E1F0h
SkipBeg: xor eax,eax
mov @pRead,eax
mov @End,al
LoopBlk: mov esi,pSrc
lea edi,@fx
mov ecx,10h ;每次提取64字節(jié),因此當文件未結(jié)束時,nSize必須以64字節(jié)(40h)對齊
mov ebx,@pRead
@@: lea edx,[ebx+4]
cmp edx,nSize
ja @F
mov eax,[esi+ebx]
bswap eax
stosd
mov ebx,edx
loop @B
mov @pRead,ebx
jmp Enc1
@@: mov eax,nSlice
or eax,eax ;一次性提交?
jz setEnd
cmp eax,3 ;數(shù)據(jù)結(jié)束段?
jnz Result
setEnd: mov edx,ecx
cmp ebx,nSize
ja Tail0
sub eax,eax
mov ch,4
@@: cmp ebx,nSize
jz @F
shl eax,8
mov al,[esi+ebx]
inc ebx
dec ch
jmp @B
@@: inc ebx
mov @pRead,ebx
shl eax,8
mov al,80h
@@: dec ch
jz @F
shl eax,8
jmp @B
@@: stosd
dec ecx
jz Enc1
Tail0: sub eax,eax
rep stosd
cmp dl,3
jb Enc1
mov al,8
mul nTotal
mov dword ptr @fx[38h],edx
mov dword ptr @fx[3Ch],eax
mov @End,1
;----------
Enc1: mov eax,pDest
mov edx,[eax+10h]
mov @fy[00h],edx
mov edx,[eax+0Ch]
mov @fy[04h],edx
mov edx,[eax+08h]
mov @fy[08h],edx
mov ecx,[eax+04h]
mov @fy[0Ch],ecx
mov ecx,[eax]
mov @fy[10h],ecx
;----------
SHA1FUNC1 @fy[04h],@fy[0Ch],@fx[00h],@fy[00h]
SHA1FUNC1 @fy[08h],@fy[10h],@fx[04h],@fy[04h]
SHA1FUNC1 @fy[0Ch],@fy[00h],@fx[08h],@fy[08h]
SHA1FUNC1 @fy[10h],@fy[04h],@fx[0Ch],@fy[0Ch]
SHA1FUNC1 @fy[00h],@fy[08h],@fx[10h],@fy[10h]
SHA1FUNC1 @fy[04h],@fy[0Ch],@fx[14h],@fy[00h]
SHA1FUNC1 @fy[08h],@fy[10h],@fx[18h],@fy[04h]
SHA1FUNC1 @fy[0Ch],@fy[00h],@fx[1Ch],@fy[08h]
SHA1FUNC1 @fy[10h],@fy[04h],@fx[20h],@fy[0Ch]
SHA1FUNC1 @fy[00h],@fy[08h],@fx[24h],@fy[10h]
SHA1FUNC1 @fy[04h],@fy[0Ch],@fx[28h],@fy[00h]
SHA1FUNC1 @fy[08h],@fy[10h],@fx[2Ch],@fy[04h]
SHA1FUNC1 @fy[0Ch],@fy[00h],@fx[30h],@fy[08h]
SHA1FUNC1 @fy[10h],@fy[04h],@fx[34h],@fy[0Ch]
SHA1FUNC1 @fy[00h],@fy[08h],@fx[38h],@fy[10h]
SHA1FUNC1 @fy[04h],@fy[0Ch],@fx[3Ch],@fy[00h]
SHA1XOR4
SHA1FUNC1 @fy[08h],@fy[10h],@fx[00h],@fy[04h]
SHA1FUNC1 @fy[0Ch],@fy[00h],@fx[04h],@fy[08h]
SHA1FUNC1 @fy[10h],@fy[04h],@fx[08h],@fy[0Ch]
SHA1FUNC1 @fy[00h],@fy[08h],@fx[0Ch],@fy[10h]
;----------
SHA1FUNC2 @fy[04h],@fy[0Ch],@fx[10h],@fy[00h]
SHA1FUNC2 @fy[08h],@fy[10h],@fx[14h],@fy[04h]
SHA1FUNC2 @fy[0Ch],@fy[00h],@fx[18h],@fy[08h]
SHA1FUNC2 @fy[10h],@fy[04h],@fx[1Ch],@fy[0Ch]
SHA1FUNC2 @fy[00h],@fy[08h],@fx[20h],@fy[10h]
SHA1FUNC2 @fy[04h],@fy[0Ch],@fx[24h],@fy[00h]
SHA1FUNC2 @fy[08h],@fy[10h],@fx[28h],@fy[04h]
SHA1FUNC2 @fy[0Ch],@fy[00h],@fx[2Ch],@fy[08h]
SHA1FUNC2 @fy[10h],@fy[04h],@fx[30h],@fy[0Ch]
SHA1FUNC2 @fy[00h],@fy[08h],@fx[34h],@fy[10h]
SHA1FUNC2 @fy[04h],@fy[0Ch],@fx[38h],@fy[00h]
SHA1FUNC2 @fy[08h],@fy[10h],@fx[3Ch],@fy[04h]
SHA1XOR4
SHA1FUNC2 @fy[0Ch],@fy[00h],@fx[00h],@fy[08h]
SHA1FUNC2 @fy[10h],@fy[04h],@fx[04h],@fy[0Ch]
SHA1FUNC2 @fy[00h],@fy[08h],@fx[08h],@fy[10h]
SHA1FUNC2 @fy[04h],@fy[0Ch],@fx[0Ch],@fy[00h]
SHA1FUNC2 @fy[08h],@fy[10h],@fx[10h],@fy[04h]
SHA1FUNC2 @fy[0Ch],@fy[00h],@fx[14h],@fy[08h]
SHA1FUNC2 @fy[10h],@fy[04h],@fx[18h],@fy[0Ch]
SHA1FUNC2 @fy[00h],@fy[08h],@fx[1Ch],@fy[10h]
;----------
SHA1FUNC3 @fy[04h],@fy[0Ch],@fy[08h],@fx[20h],@fy[00h]
SHA1FUNC3 @fy[08h],@fy[10h],@fy[0Ch],@fx[24h],@fy[04h]
SHA1FUNC3 @fy[0Ch],@fy[00h],@fy[10h],@fx[28h],@fy[08h]
SHA1FUNC3 @fy[10h],@fy[04h],@fy[00h],@fx[2Ch],@fy[0Ch]
SHA1FUNC3 @fy[00h],@fy[08h],@fy[04h],@fx[30h],@fy[10h]
SHA1FUNC3 @fy[04h],@fy[0Ch],@fy[08h],@fx[34h],@fy[00h]
SHA1FUNC3 @fy[08h],@fy[10h],@fy[0Ch],@fx[38h],@fy[04h]
SHA1FUNC3 @fy[0Ch],@fy[00h],@fy[10h],@fx[3Ch],@fy[08h]
SHA1XOR4
SHA1FUNC3 @fy[10h],@fy[04h],@fy[00h],@fx[00h],@fy[0Ch]
SHA1FUNC3 @fy[00h],@fy[08h],@fy[04h],@fx[04h],@fy[10h]
SHA1FUNC3 @fy[04h],@fy[0Ch],@fy[08h],@fx[08h],@fy[00h]
SHA1FUNC3 @fy[08h],@fy[10h],@fy[0Ch],@fx[0Ch],@fy[04h]
SHA1FUNC3 @fy[0Ch],@fy[00h],@fy[10h],@fx[10h],@fy[08h]
SHA1FUNC3 @fy[10h],@fy[04h],@fy[00h],@fx[14h],@fy[0Ch]
SHA1FUNC3 @fy[00h],@fy[08h],@fy[04h],@fx[18h],@fy[10h]
SHA1FUNC3 @fy[04h],@fy[0Ch],@fy[08h],@fx[1Ch],@fy[00h]
SHA1FUNC3 @fy[08h],@fy[10h],@fy[0Ch],@fx[20h],@fy[04h]
SHA1FUNC3 @fy[0Ch],@fy[00h],@fy[10h],@fx[24h],@fy[08h]
SHA1FUNC3 @fy[10h],@fy[04h],@fy[00h],@fx[28h],@fy[0Ch]
SHA1FUNC3 @fy[00h],@fy[08h],@fy[04h],@fx[2Ch],@fy[10h]
SHA1FUNC4 @fy[04h],@fy[0Ch],@fx[30h],@fy[00h]
SHA1FUNC4 @fy[08h],@fy[10h],@fx[34h],@fy[04h]
SHA1FUNC4 @fy[0Ch],@fy[00h],@fx[38h],@fy[08h]
SHA1FUNC4 @fy[10h],@fy[04h],@fx[3Ch],@fy[0Ch]
SHA1XOR4
SHA1FUNC4 @fy[00h],@fy[08h],@fx[00h],@fy[10h]
SHA1FUNC4 @fy[04h],@fy[0Ch],@fx[04h],@fy[00h]
SHA1FUNC4 @fy[08h],@fy[10h],@fx[08h],@fy[04h]
SHA1FUNC4 @fy[0Ch],@fy[00h],@fx[0Ch],@fy[08h]
SHA1FUNC4 @fy[10h],@fy[04h],@fx[10h],@fy[0Ch]
SHA1FUNC4 @fy[00h],@fy[08h],@fx[14h],@fy[10h]
SHA1FUNC4 @fy[04h],@fy[0Ch],@fx[18h],@fy[00h]
SHA1FUNC4 @fy[08h],@fy[10h],@fx[1Ch],@fy[04h]
SHA1FUNC4 @fy[0Ch],@fy[00h],@fx[20h],@fy[08h]
SHA1FUNC4 @fy[10h],@fy[04h],@fx[24h],@fy[0Ch]
SHA1FUNC4 @fy[00h],@fy[08h],@fx[28h],@fy[10h]
SHA1FUNC4 @fy[04h],@fy[0Ch],@fx[2Ch],@fy[00h]
SHA1FUNC4 @fy[08h],@fy[10h],@fx[30h],@fy[04h]
SHA1FUNC4 @fy[0Ch],@fy[00h],@fx[34h],@fy[08h]
SHA1FUNC4 @fy[10h],@fy[04h],@fx[38h],@fy[0Ch]
SHA1FUNC4 @fy[00h],@fy[08h],@fx[3Ch],@fy[10h]
mov eax,pDest
add [eax],ecx
mov ecx,@fy[0Ch]
add [eax+04h],ecx
add [eax+08h],edx
mov edx,@fy[04h]
add [eax+0Ch],edx
mov edx,@fy[00h]
add [eax+10h],edx
cmp @End,0
jz LoopBlk
mov edi,pDest
mov ecx,5
@@: mov eax,[edi]
bswap eax
stosd
loop @B
Result: ret
SHA1_EnCode endp
;--------------
SHA1_GetCode PROC PUBLIC pSrc:DWORD,nSize:DWORD,pDest:DWORD
invoke SHA1_EnCode,pSrc,nSize,nSize,pDest,0
ret
SHA1_GetCode ENDP
;--------------
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -