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

📄 rmd256.asm

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

.const
pushad_size equ 8*4
pushad_eax equ 7*4
pushad_ecx equ 6*4
pushad_edx equ 5*4
pushad_ebx equ 4*4
pushad_esp equ 3*4
pushad_ebp equ 2*4
pushad_esi equ 1*4
pushad_edi equ 0*4

.data?
RMD256HashBuf db 64 dup(?)
RMD256Len dd ?
RMD256Index dd ?
RMD256Digest dd 8 dup(?)

.code

RMD256FF macro dwA, dwB, dwC, dwD, locX, rolS
	mov edi,dwB
    xor edi,dwC
    xor edi,dwD
    add dwA,locX
    add dwA,edi
	rol dwA,rolS
endm

RMD256GG macro dwA, dwB, dwC, dwD, locX, rolS, constAC
	mov	edi,dwC
	xor	edi,dwD
	and	edi,dwB
	xor	edi,dwD
	add	dwA,[locX]
	lea	dwA,[dwA+edi+constAC]
	rol	dwA,rolS
ENDM

RMD256HH macro dwA, dwB, dwC, dwD, locX, rolS, constAC
	mov edi,dwC
	xor edi,-1
	or edi,dwB
	xor edi,dwD
	add dwA,[locX]
	lea dwA,[dwA+edi+constAC]
	rol dwA,rolS
endm

RMD256II macro dwA, dwB, dwC, dwD, locX, rolS, constAC
	mov	edi,dwC
	xor	edi,dwB
	and	edi,dwD
	xor	edi,dwC
	add	dwA,[locX]
	lea	dwA,[dwA+edi+constAC]
	rol	dwA,rolS
endm

align dword
RMD256Transform proc
	pushad
	mov esi,offset RMD256Digest
	mov ebp,offset RMD256HashBuf
	mov eax,[esi+0*4];a1
	mov ebx,[esi+1*4];b1
	mov ecx,[esi+2*4];c1
	mov edx,[esi+3*4];d1
	;=====================================================
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 11
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+ 1*4], 14
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 15
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 12
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 4*4],  5
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  8
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  7
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+ 7*4],  9
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 11
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 13
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 14
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+11*4], 15
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+12*4],  6
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+13*4],  7
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+14*4],  9
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+15*4],  8
	;=====================================================
	pushad; store a..d 1
	mov eax,[esi+4*4];a2
	mov ebx,[esi+5*4];b2
	mov ecx,[esi+6*4];c2
	mov edx,[esi+7*4];d2
	;=================================================================
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+ 5*4],  8, 050A28BE6H
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+14*4],  9, 050A28BE6H
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+ 7*4],  9, 050A28BE6H
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 11, 050A28BE6H
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 13, 050A28BE6H
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 2*4], 15, 050A28BE6H
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+11*4], 15, 050A28BE6H
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  5, 050A28BE6H
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+13*4],  7, 050A28BE6H
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  7, 050A28BE6H
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+15*4],  8, 050A28BE6H
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 11, 050A28BE6H
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 14, 050A28BE6H
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+10*4], 14, 050A28BE6H
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 12, 050A28BE6H
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+12*4],  6, 050A28BE6H
	;=================================================================
	mov edi,[esp+pushad_eax]
	mov [esp+pushad_eax],eax
	mov eax,edi
;	xchg eax,[esp+pushad_eax]
	pushad;store a..d 2
	mov eax,[esp+pushad_size+pushad_eax];a1
	mov ebx,[esp+pushad_size+pushad_ebx];b1
	mov ecx,[esp+pushad_size+pushad_ecx];c1
	mov edx,[esp+pushad_size+pushad_edx];d1
	;=================================================================
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+ 7*4],  7, 05A827999H   
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 4*4],  6, 05A827999H   
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+13*4],  8, 05A827999H   
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 13, 05A827999H   
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+10*4], 11, 05A827999H   
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  9, 05A827999H   
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+15*4],  7, 05A827999H   
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 15, 05A827999H   
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+12*4],  7, 05A827999H   
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 12, 05A827999H   
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+ 9*4], 15, 05A827999H   
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 5*4],  9, 05A827999H   
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+ 2*4], 11, 05A827999H   
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+14*4],  7, 05A827999H   
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+11*4], 13, 05A827999H   
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 12, 05A827999H
	;=================================================================
	mov [esp+pushad_size+pushad_eax],eax;a1
	mov [esp+pushad_size+pushad_ebx],ebx;b1
	mov [esp+pushad_size+pushad_ecx],ecx;c1
	mov [esp+pushad_size+pushad_edx],edx;d1
	mov eax,[esp+pushad_eax];a2
	mov ebx,[esp+pushad_ebx];b2
	mov ecx,[esp+pushad_ecx];c2
	mov edx,[esp+pushad_edx];d2
	;=================================================================
    RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 6*4],  9, 05C4DD124H
    RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+11*4], 13, 05C4DD124H
    RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 15, 05C4DD124H
    RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+ 7*4],  7, 05C4DD124H
    RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 12, 05C4DD124H
    RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+13*4],  8, 05C4DD124H
    RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 5*4],  9, 05C4DD124H
    RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+10*4], 11, 05C4DD124H
    RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+14*4],  7, 05C4DD124H
    RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+15*4],  7, 05C4DD124H
    RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 8*4], 12, 05C4DD124H
    RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+12*4],  7, 05C4DD124H
    RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 4*4],  6, 05C4DD124H
    RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 15, 05C4DD124H
    RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 1*4], 13, 05C4DD124H
    RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 11, 05C4DD124H
    ;=================================================================
	mov edi,[esp+pushad_size+pushad_ebx]
	mov [esp+pushad_size+pushad_ebx],ebx
	mov ebx,edi
;	xchg ebx,[esp+pushad_size+pushad_ebx]
	mov [esp+pushad_eax],eax;a2
	mov [esp+pushad_ebx],ebx;b2
	mov [esp+pushad_ecx],ecx;c2
	mov [esp+pushad_edx],edx;d2
	mov eax,[esp+pushad_size+pushad_eax];a1
	mov ebx,[esp+pushad_size+pushad_ebx];b1
	mov ecx,[esp+pushad_size+pushad_ecx];c1
	mov edx,[esp+pushad_size+pushad_edx];d1
	;=================================================================
	RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 3*4], 11, 06ED9EBA1H
	RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+10*4], 13, 06ED9EBA1H   
	RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+14*4],  6, 06ED9EBA1H   
	RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  7, 06ED9EBA1H
	RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 14, 06ED9EBA1H    
	RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+15*4],  9, 06ED9EBA1H
	RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 8*4], 13, 06ED9EBA1H
	RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 15, 06ED9EBA1H
	RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+ 2*4], 14, 06ED9EBA1H
	RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+ 7*4],  8, 06ED9EBA1H
	RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 0*4], 13, 06ED9EBA1H
	RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+ 6*4],  6, 06ED9EBA1H
	RMD256HH eax, ebx, ecx, edx, dword ptr [ebp+13*4],  5, 06ED9EBA1H
	RMD256HH edx, eax, ebx, ecx, dword ptr [ebp+11*4], 12, 06ED9EBA1H
	RMD256HH ecx, edx, eax, ebx, dword ptr [ebp+ 5*4],  7, 06ED9EBA1H
	RMD256HH ebx, ecx, edx, eax, dword ptr [ebp+12*4],  5, 06ED9EBA1H
	;=================================================================
	mov [esp+pushad_size+pushad_eax],eax;a1
	mov [esp+pushad_size+pushad_ebx],ebx;b1
	mov [esp+pushad_size+pushad_ecx],ecx;c1
	mov [esp+pushad_size+pushad_edx],edx;d1
	mov eax,[esp+pushad_eax];a2
	mov ebx,[esp+pushad_ebx];b2
	mov ecx,[esp+pushad_ecx];c2
	mov edx,[esp+pushad_edx];d2
	;=================================================================
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+15*4],  9, 06D703EF3H
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  7, 06D703EF3H
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+ 1*4], 15, 06D703EF3H
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 11, 06D703EF3H
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+ 7*4],  8, 06D703EF3H
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+14*4],  6, 06D703EF3H
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  6, 06D703EF3H
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 9*4], 14, 06D703EF3H
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+11*4], 12, 06D703EF3H
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 13, 06D703EF3H
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+12*4],  5, 06D703EF3H
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 14, 06D703EF3H
	RMD256GG eax, ebx, ecx, edx, dword ptr [ebp+10*4], 13, 06D703EF3H
	RMD256GG edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 13, 06D703EF3H
	RMD256GG ecx, edx, eax, ebx, dword ptr [ebp+ 4*4],  7, 06D703EF3H
	RMD256GG ebx, ecx, edx, eax, dword ptr [ebp+13*4],  5, 06D703EF3H
	;=================================================================
	mov edi,[esp+pushad_size+pushad_ecx]
	mov [esp+pushad_size+pushad_ecx],ecx
	mov ecx,edi
;	xchg ecx,[esp+pushad_size+pushad_ecx]
	mov [esp+pushad_eax],eax;a2
	mov [esp+pushad_ebx],ebx;b2
	mov [esp+pushad_ecx],ecx;c2
	mov [esp+pushad_edx],edx;d2
	mov eax,[esp+pushad_size+pushad_eax];a1
	mov ebx,[esp+pushad_size+pushad_ebx];b1
	mov ecx,[esp+pushad_size+pushad_ecx];c1
	mov edx,[esp+pushad_size+pushad_edx];d1
	;=================================================================
 	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 11, 08F1BBCDCH
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 12, 08F1BBCDCH
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+11*4], 14, 08F1BBCDCH
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+10*4], 15, 08F1BBCDCH
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 14, 08F1BBCDCH
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 15, 08F1BBCDCH
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+12*4],  9, 08F1BBCDCH
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  8, 08F1BBCDCH
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+13*4],  9, 08F1BBCDCH
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 3*4], 14, 08F1BBCDCH
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+ 7*4],  5, 08F1BBCDCH
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+15*4],  6, 08F1BBCDCH
	RMD256II eax, ebx, ecx, edx, dword ptr [ebp+14*4],  8, 08F1BBCDCH
	RMD256II edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  6, 08F1BBCDCH
	RMD256II ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  5, 08F1BBCDCH
	RMD256II ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 12, 08F1BBCDCH
	;=================================================================
	mov [esp+pushad_size+pushad_eax],eax;a1
	mov [esp+pushad_size+pushad_ebx],ebx;b1
	mov [esp+pushad_size+pushad_ecx],ecx;c1
	mov [esp+pushad_size+pushad_edx],edx;d1
	mov eax,[esp+pushad_eax];a2
	mov ebx,[esp+pushad_ebx];b2
	mov ecx,[esp+pushad_ecx];c2
	mov edx,[esp+pushad_edx];d2
	;=====================================================
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 15
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  5
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+ 4*4],  8
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 11
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 3*4], 14
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+11*4], 14
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+15*4],  6
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 14
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 5*4],  6
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+12*4],  9
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 12
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+13*4],  9
	RMD256FF eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 12
	RMD256FF edx, eax, ebx, ecx, dword ptr [ebp+ 7*4],  5
	RMD256FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 15
	RMD256FF ebx, ecx, edx, eax, dword ptr [ebp+14*4],  8
	;=====================================================
	mov edi,[esp+pushad_size+pushad_edx]
	mov [esp+pushad_size+pushad_edx],edx
	mov edx,edi
;	xchg edx,[esp+pushad_size+pushad_edx];b1<-->b2
	add [esi+4*4],eax;a2
	add [esi+5*4],ebx;...
	add [esi+6*4],ecx
	add [esi+7*4],edx
	popad
	popad
	add [esi+0*4],eax;a1
	add [esi+1*4],ebx;...
	add [esi+2*4],ecx
	add [esi+3*4],edx
	popad
	ret
RMD256Transform endp

RMD256BURN macro
	xor eax,eax
	mov RMD256Index,eax
	mov edi,Offset RMD256HashBuf
	mov ecx,(sizeof RMD256HashBuf)/4
	rep stosd
endm

align dword
RMD256Init proc uses edi
	xor eax, eax
	mov RMD256Len,eax
	RMD256BURN
	mov eax,offset RMD256Digest
	mov dword ptr [eax+0*4],067452301h
	mov dword ptr [eax+1*4],0efcdab89h
	mov dword ptr [eax+2*4],098badcfeh
	mov dword ptr [eax+3*4],010325476h
	mov dword ptr [eax+4*4],076543210h
	mov dword ptr [eax+5*4],0FEDCBA98h
	mov dword ptr [eax+6*4],089ABCDEFh
	mov dword ptr [eax+7*4],001234567h
	ret
RMD256Init endp

align dword
RMD256Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
	mov ebx,dwBufLen
	add RMD256Len,ebx
	.while ebx
		mov eax,RMD256Index
		mov edx,64
		sub edx,eax
		.if edx <= ebx
			lea edi, [RMD256HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, edx
			rep movsb
			sub ebx, edx
			add lpBuffer, edx
			call RMD256Transform
			RMD256BURN
		.else
			lea edi, [RMD256HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, ebx
			rep movsb
			mov eax, RMD256Index
			add eax, ebx
			mov RMD256Index,eax
			.break
		.endif
	.endw
	ret
RMD256Update endp

align dword
RMD256Final proc uses esi edi
	mov ecx, RMD256Index
	mov byte ptr [RMD256HashBuf+ecx],80h
	.if ecx >= 56
		call RMD256Transform
		RMD256BURN
	.endif
	mov eax,RMD256Len
	xor edx,edx
	shld edx,eax,3
	shl eax,3
	mov dword ptr [RMD256HashBuf+56],eax
	mov dword ptr [RMD256HashBuf+60],edx
	call RMD256Transform
	mov eax,offset RMD256Digest	
	ret
RMD256Final endp

end

⌨️ 快捷键说明

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