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

📄 sha256.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 ASM
字号:
.686
.model flat,stdcall
option casemap:none

.data?
SHA256HashBuf db 64 dup(?)
SHA256Len dd ?
SHA256Index dd ?
SHA256Digest dd 8 dup(?)

.code
SHA256R macro A, B, C, D, E, F, G, H, locX, constAC
	mov edi,E
	mov ebp,edi
	ror edi,6
	mov esi,edi
	ror esi,5;11
	xor esi,edi
	rol ebp,32-25
	xor ebp,esi
    mov esi,F
    xor esi,G
    and esi,E
    xor esi,G
    add esi,ebp
    add esi,H
	add esi,constAC
    add esi,locX
    mov SHA256tmp,esi; T1
	mov edi,A
	mov ebp,edi
	ror edi,2
	mov esi,A
	ror esi,13
	xor edi,esi
	rol ebp,32-22
	xor ebp,edi 
	mov edi,A
	or edi,B
	and edi,C
	mov esi,A
	and esi,B
	or edi,esi
	add edi,ebp
	mov esi,SHA256tmp
	add edi,esi
	mov H,edi
	add D,esi
ENDM

align dword
SHA256Transform proc
	pushad
	SHA256locals equ 4*4+1*4+64*4
	sub esp,SHA256locals
	dwE equ dword ptr [esp+0*4]
	dwF equ dword ptr [esp+1*4]
	dwG equ dword ptr [esp+2*4]
	dwH equ dword ptr [esp+3*4]
	SHA256tmp equ dword ptr [esp+4*4]
	SHA256W equ dword ptr [esp+5*4]
	dwA equ eax
	dwB equ ebx
	dwC equ ecx
	dwD equ edx
	mov edi,offset SHA256HashBuf
	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 SHA256W[ebx*4],eax
		mov SHA256W[ebx*4+4],ecx
		mov SHA256W[ebx*4+32],edx
		mov SHA256W[ebx*4+32+4],esi
		inc ebx
		inc ebx
	.until ebx==8
	shl ebx,1
	.repeat
		mov esi,SHA256W[4*ebx-02*4]
		mov ecx,esi
		ror ecx,17
		mov edx,esi
		ror edx,19
		xor edx,ecx
		shr esi,10
		xor esi,edx
		mov eax,SHA256W[4*ebx-15*4]
		mov ecx,eax
		ror ecx,07
		mov edx,eax
		ror edx,18
		xor edx,ecx
		shr eax,3
		add esi,SHA256W[4*ebx-07*4]
		xor eax,edx
		add eax,esi
		add eax,SHA256W[4*ebx-16*4]
		inc ebx
		mov SHA256W[4*ebx-4],eax
	.until ebx==64
	mov edi,offset SHA256Digest
	mov eax,[edi+7*4]
	mov ebx,[edi+6*4]
	mov ecx,[edi+5*4]
	mov edx,[edi+4*4]; e
	mov dwH,eax
	mov dwG,ebx
	mov dwF,ecx
	mov dwE,edx
	mov eax,[edi+0*4]
	mov ebx,[edi+1*4]
	mov ecx,[edi+2*4]
	mov edx,[edi+3*4]
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*00], 0428A2F98h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*01], 071374491h
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*02], 0B5C0FBCFh
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*03], 0E9B5DBA5h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*04], 03956C25Bh
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*05], 059F111F1h
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*06], 0923F82A4h
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*07], 0AB1C5ED5h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*08], 0D807AA98h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*09], 012835B01h
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*10], 0243185BEh
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*11], 0550C7DC3h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*12], 072BE5D74h
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*13], 080DEB1FEh
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*14], 09BDC06A7h
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*15], 0C19BF174h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*16], 0E49B69C1h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*17], 0EFBE4786h
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*18], 00FC19DC6h
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*19], 0240CA1CCh
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*20], 02DE92C6Fh
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*21], 04A7484AAh
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*22], 05CB0A9DCh
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*23], 076F988DAh
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*24], 0983E5152h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*25], 0A831C66Dh
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*26], 0B00327C8h
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*27], 0BF597FC7h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*28], 0C6E00BF3h
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*29], 0D5A79147h
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*30], 006CA6351h
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*31], 014292967h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*32], 027B70A85h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*33], 02E1B2138h
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*34], 04D2C6DFCh
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*35], 053380D13h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*36], 0650A7354h
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*37], 0766A0ABBh
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*38], 081C2C92Eh
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*39], 092722C85h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*40], 0A2BFE8A1h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*41], 0A81A664Bh
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*42], 0C24B8B70h
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*43], 0C76C51A3h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*44], 0D192E819h
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*45], 0D6990624h
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*46], 0F40E3585h
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*47], 0106AA070h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*48], 019A4C116h
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*49], 01E376C08h
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*50], 02748774Ch
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*51], 034B0BCB5h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*52], 0391C0CB3h
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*53], 04ED8AA4Ah
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*54], 05B9CCA4Fh
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*55], 0682E6FF3h
	;==========================================================================
	SHA256R dwA, dwB, dwC, dwD, dwE, dwF, dwG, dwH, SHA256W[4*56], 0748F82EEh
	SHA256R dwH, dwA, dwB, dwC, dwD, dwE, dwF, dwG, SHA256W[4*57], 078A5636Fh
	SHA256R dwG, dwH, dwA, dwB, dwC, dwD, dwE, dwF, SHA256W[4*58], 084C87814h
	SHA256R dwF, dwG, dwH, dwA, dwB, dwC, dwD, dwE, SHA256W[4*59], 08CC70208h
	SHA256R dwE, dwF, dwG, dwH, dwA, dwB, dwC, dwD, SHA256W[4*60], 090BEFFFAh
	SHA256R dwD, dwE, dwF, dwG, dwH, dwA, dwB, dwC, SHA256W[4*61], 0A4506CEBh
	SHA256R dwC, dwD, dwE, dwF, dwG, dwH, dwA, dwB, SHA256W[4*62], 0BEF9A3F7h
	SHA256R dwB, dwC, dwD, dwE, dwF, dwG, dwH, dwA, SHA256W[4*63], 0C67178F2h
	;==========================================================================
	mov edi,offset SHA256Digest
	add [edi+0*4],eax
	add [edi+1*4],ebx
	add [edi+2*4],ecx
	add [edi+3*4],edx
	mov eax,dwH
	mov ebx,dwG
	mov ecx,dwF
	mov edx,dwE
	add [edi+7*4],eax
	add [edi+6*4],ebx
	add [edi+5*4],ecx
	add [edi+4*4],edx
	add esp,SHA256locals
	popad
	ret
SHA256Transform endp

SHA256BURN macro
	xor eax,eax
	mov SHA256Index,eax
	mov edi,Offset SHA256HashBuf
	mov ecx,(sizeof SHA256HashBuf)/4
	rep stosd
endm

align dword
SHA256Init proc uses edi
	xor eax, eax
	mov SHA256Len,eax
	SHA256BURN
	mov eax,offset SHA256Digest
	mov	dword ptr [eax+0*4], 06a09e667h 
	mov	dword ptr [eax+1*4], 0bb67ae85h
	mov	dword ptr [eax+2*4], 03c6ef372h
	mov	dword ptr [eax+3*4], 0a54ff53ah
	mov	dword ptr [eax+4*4], 0510e527fh	
	mov	dword ptr [eax+5*4], 09b05688ch
	mov	dword ptr [eax+6*4], 01f83d9abh
	mov	dword ptr [eax+7*4], 05be0cd19h
	ret
SHA256Init endp

align dword
SHA256Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
	mov ebx,dwBufLen
	add SHA256Len,ebx
	.while ebx
		mov eax,SHA256Index
		mov edx,64
		sub edx,eax
		.if edx <= ebx
			lea edi, [SHA256HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, edx
			rep movsb
			sub ebx, edx
			add lpBuffer, edx
			call SHA256Transform
			SHA256BURN
		.else
			lea edi, [SHA256HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, ebx
			rep movsb
			mov eax, SHA256Index
			add eax, ebx
			mov SHA256Index,eax
			.break
		.endif
	.endw
	ret
SHA256Update endp

align dword
SHA256Final proc uses esi edi
	mov ecx, SHA256Index
	mov byte ptr [SHA256HashBuf+ecx],80h
	.if ecx >= 56
		call SHA256Transform
		SHA256BURN
	.endif
	mov eax,SHA256Len
	xor edx,edx
	shld edx,eax,3
	shl eax,3
	bswap edx; \
	bswap eax; /
	mov dword ptr [SHA256HashBuf+56],edx
	mov dword ptr [SHA256HashBuf+60],eax
	call SHA256Transform
	mov eax,offset SHA256Digest	
	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]
	mov ecx,[eax+5*4]
	mov esi,[eax+6*4]
	mov edi,[eax+7*4]
	bswap edx
	bswap ecx
	bswap edi
	bswap esi
	mov [eax+4*4],edx
	mov [eax+5*4],ecx
	mov [eax+6*4],esi
	mov [eax+7*4],edi
	ret
SHA256Final endp

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -