⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha1.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 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 + -