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

📄 rmd128.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?
RMD128HashBuf db 64 dup(?)
RMD128Len dd ?
RMD128Index dd ?
RMD128Digest dd 4 dup(?)

.code
RMD128FF 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
RMD128GG 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
RMD128HH 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
RMD128II 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
RMD128Transform proc
	pushad
	mov esi,offset RMD128Digest
	mov ebp,offset RMD128HashBuf
	mov eax,[esi+0*4]
	mov ebx,[esi+1*4]
	mov ecx,[esi+2*4]
	mov edx,[esi+3*4]
	;=====================================================
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 11
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+ 1*4], 14
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 15
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 12
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 4*4],  5
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  8
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  7
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+ 7*4],  9
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 11
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 13
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 14
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+11*4], 15
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+12*4],  6
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+13*4],  7
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+14*4],  9
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+15*4],  8
	;=================================================================
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+ 7*4],  7, 05A827999h 
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 4*4],  6, 05A827999h 
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+13*4],  8, 05A827999h 
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 13, 05A827999h 
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+10*4], 11, 05A827999h 
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  9, 05A827999h 
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+15*4],  7, 05A827999h 
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 15, 05A827999h 
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+12*4],  7, 05A827999h 
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 12, 05A827999h 
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+ 9*4], 15, 05A827999h 
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 5*4],  9, 05A827999h 
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+ 2*4], 11, 05A827999h 
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+14*4],  7, 05A827999h 
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+11*4], 13, 05A827999h 
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 12, 05A827999h
	;=================================================================
	RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 3*4], 11, 06ED9EBA1h
	RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+10*4], 13, 06ED9EBA1h 
	RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+14*4],  6, 06ED9EBA1h 
	RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  7, 06ED9EBA1h
	RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 14, 06ED9EBA1h  
	RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+15*4],  9, 06ED9EBA1h
	RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 8*4], 13, 06ED9EBA1h
	RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 15, 06ED9EBA1h
	RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 2*4], 14, 06ED9EBA1h
	RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+ 7*4],  8, 06ED9EBA1h
	RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 0*4], 13, 06ED9EBA1h
	RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+ 6*4],  6, 06ED9EBA1h
	RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+13*4],  5, 06ED9EBA1h
	RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+11*4], 12, 06ED9EBA1h
	RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 5*4],  7, 06ED9EBA1h
	RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+12*4],  5, 06ED9EBA1h
	;=================================================================
 	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 11, 08F1BBCDCh
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 12, 08F1BBCDCh
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+11*4], 14, 08F1BBCDCh
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+10*4], 15, 08F1BBCDCh
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 14, 08F1BBCDCh
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 15, 08F1BBCDCh
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+12*4],  9, 08F1BBCDCh
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  8, 08F1BBCDCh
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+13*4],  9, 08F1BBCDCh
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 3*4], 14, 08F1BBCDCh
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+ 7*4],  5, 08F1BBCDCh
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+15*4],  6, 08F1BBCDCh
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+14*4],  8, 08F1BBCDCh
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  6, 08F1BBCDCh
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  5, 08F1BBCDCh
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 12, 08F1BBCDCh
	;=================================================================
	pushad;  parallel
	mov eax,[esi+0*4]
	mov ebx,[esi+1*4]
	mov ecx,[esi+2*4]
	mov edx,[esi+3*4]
	;=================================================================
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+ 5*4],  8, 050A28BE6h
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+14*4],  9, 050A28BE6h
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+ 7*4],  9, 050A28BE6h
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 11, 050A28BE6h
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 13, 050A28BE6h
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 2*4], 15, 050A28BE6h
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+11*4], 15, 050A28BE6h
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+ 4*4],  5, 050A28BE6h
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+13*4],  7, 050A28BE6h
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  7, 050A28BE6h
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+15*4],  8, 050A28BE6h
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 11, 050A28BE6h
	RMD128II eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 14, 050A28BE6h
	RMD128II edx, eax, ebx, ecx, dword ptr [ebp+10*4], 14, 050A28BE6h
	RMD128II ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 12, 050A28BE6h
	RMD128II ebx, ecx, edx, eax, dword ptr [ebp+12*4],  6, 050A28BE6h
	;=================================================================
    RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 6*4],  9, 05C4DD124h
    RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+11*4], 13, 05C4DD124h
    RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 15, 05C4DD124h
    RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+ 7*4],  7, 05C4DD124h
    RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 12, 05C4DD124h
    RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+13*4],  8, 05C4DD124h
    RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 5*4],  9, 05C4DD124h
    RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+10*4], 11, 05C4DD124h
    RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+14*4],  7, 05C4DD124h
    RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+15*4],  7, 05C4DD124h
    RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 8*4], 12, 05C4DD124h
    RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+12*4],  7, 05C4DD124h
    RMD128HH eax, ebx, ecx, edx, dword ptr [ebp+ 4*4],  6, 05C4DD124h
    RMD128HH edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 15, 05C4DD124h
    RMD128HH ecx, edx, eax, ebx, dword ptr [ebp+ 1*4], 13, 05C4DD124h
    RMD128HH ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 11, 05C4DD124h
    ;=================================================================
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+15*4],  9, 06D703EF3h
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 5*4],  7, 06D703EF3h
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+ 1*4], 15, 06D703EF3h
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 11, 06D703EF3h
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+ 7*4],  8, 06D703EF3h
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+14*4],  6, 06D703EF3h
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+ 6*4],  6, 06D703EF3h
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 9*4], 14, 06D703EF3h
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+11*4], 12, 06D703EF3h
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 13, 06D703EF3h
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+12*4],  5, 06D703EF3h
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 14, 06D703EF3h
	RMD128GG eax, ebx, ecx, edx, dword ptr [ebp+10*4], 13, 06D703EF3h
	RMD128GG edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 13, 06D703EF3h
	RMD128GG ecx, edx, eax, ebx, dword ptr [ebp+ 4*4],  7, 06D703EF3h
	RMD128GG ebx, ecx, edx, eax, dword ptr [ebp+13*4],  5, 06D703EF3h
	;=================================================================
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 15
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+ 6*4],  5
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+ 4*4],  8
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 11
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 3*4], 14
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+11*4], 14
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+15*4],  6
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 14
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 5*4],  6
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+12*4],  9
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 12
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+13*4],  9
	RMD128FF eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 12
	RMD128FF edx, eax, ebx, ecx, dword ptr [ebp+ 7*4],  5
	RMD128FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 15
	RMD128FF ebx, ecx, edx, eax, dword ptr [ebp+14*4],  8
	;=====================================================
    mov edi,[esi+1*4]; update digest
    add eax,[esp+pushad_edx]
    add eax,[esi+2*4]
    add ebx,[esp+pushad_eax]
    add ebx,[esi+3*4]
	add	ecx,[esp+pushad_ebx]
	add ecx,[esi+0*4]
    add edx,[esp+pushad_ecx]
    add edx,edi
	mov [esi+1*4],eax
	mov [esi+2*4],ebx
	mov [esi+3*4],ecx
	mov [esi+0*4],edx
	popad
	popad
	ret
RMD128Transform endp

RMD128BURN macro
	xor eax,eax
	mov RMD128Index,eax
	mov edi,Offset RMD128HashBuf
	mov ecx,(sizeof RMD128HashBuf)/4
	rep stosd
endm

align dword
RMD128Init proc uses edi
	xor eax, eax
	mov RMD128Len,eax
	RMD128BURN
	mov eax,offset RMD128Digest
	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
	ret
RMD128Init endp

align dword
RMD128Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
	mov ebx,dwBufLen
	add RMD128Len,ebx
	.while ebx
		mov eax,RMD128Index
		mov edx,64
		sub edx,eax
		.if edx <= ebx
			lea edi, [RMD128HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, edx
			rep movsb
			sub ebx, edx
			add lpBuffer, edx
			call RMD128Transform
			RMD128BURN
		.else
			lea edi, [RMD128HashBuf+eax]	
			mov esi, lpBuffer
			mov ecx, ebx
			rep movsb
			mov eax, RMD128Index
			add eax, ebx
			mov RMD128Index,eax
			.break
		.endif
	.endw
	ret
RMD128Update endp

align dword
RMD128Final proc uses esi edi
	mov ecx, RMD128Index
	mov byte ptr [RMD128HashBuf+ecx],80h
	.if ecx >= 56
		call RMD128Transform
		RMD128BURN
	.endif
	mov eax,RMD128Len
	xor edx,edx
	shld edx,eax,3
	shl eax,3
	mov dword ptr [RMD128HashBuf+56],eax
	mov dword ptr [RMD128HashBuf+60],edx
	call RMD128Transform
	mov eax,offset RMD128Digest	
	ret
RMD128Final endp

end

⌨️ 快捷键说明

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