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

📄 rc5.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 ASM
字号:
;; RC5.ASM -- Implementation of RC5 in MASM
;; (C)opyLeft 2005 by drizz 

;; P2 533MHz
;; -----------------------------------------
;; RC5Init:     825 cycles (589 if unrolled)
;; RC5Encrypt:   99 cycles                  
;; RC5Decrypt:   91 cycles                  
;; -----------------------------------------


.686
.model flat,stdcall
option casemap:none

RC5Init       PROTO :DWORD
RC5Encrypt    PROTO :DWORD,:DWORD
RC5Decrypt    PROTO :DWORD,:DWORD

RC5UNROLL EQU <>

.const
	RC5ROUNDS equ 12
	RC5KEYLEN equ 16;bytes
	RC5KR equ (2*(RC5ROUNDS+1))
	RC5_P equ 0b7e15163h
	RC5_Q equ 09e3779b9h

.data?
	RC5_KEY dd RC5KR dup(?)

.code

; uses ecx
RC5SETUP macro A,B,kEy,_L
	add A,B
	add A,kEy
	rol A,3
	lea ecx,[A+B]
	mov kEy,A
	add B,A
	add B,_L
	rol B,cl
	mov _L,B
endm

OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE

RC5Init proc pKey:DWORD
	push ebp
	push edi
	push esi
	push ebx
	mov esi,[esp][1*4][4*4];pKey
	sub esp,RC5KEYLEN
	; copy to local buff
	mov eax,[esi+0*4]
	mov ebx,[esi+1*4]
	mov ecx,[esi+2*4]
	mov edx,[esi+3*4]
	mov [esp+0*4],eax
	mov [esp+1*4],ebx
	mov [esp+2*4],ecx
	mov [esp+3*4],edx
	mov eax,RC5_P
	mov edi,offset RC5_KEY
	mov ecx,RC5_P+RC5_Q
	xor edx,edx
	.repeat
		mov [edi][edx*4][0*4],eax
		mov [edi][edx*4][1*4],ecx
		add edx,1
		lea eax,[ecx+RC5_Q]
		add edx,1
		lea ecx,[eax+RC5_Q]
	.until edx == RC5KR
	IFDEF RC5UNROLL	
	xor eax,eax
	xor ebx,ebx
	_edx = 0
	_ebp = 0
	repeat (3*RC5KR)/2
		RC5SETUP eax,ebx,[edi][_edx*4][0*4],[esp][_ebp*4][0*4]
		RC5SETUP eax,ebx,[edi][_edx*4][1*4],[esp][_ebp*4][1*4]
		_edx = _edx + 2
		_ebp = _ebp + 2
		if _edx eq RC5KR
			_edx = 0
		endif
		_ebp = _ebp and 3
	endm
	ELSE
	xor eax,eax
	xor ebx,ebx
	xor edx,edx
	xor ebp,ebp
	xor esi,esi
	.repeat
		RC5SETUP eax,ebx,[edi+edx*4][0*4],[esp][ebp*4][0*4]
		RC5SETUP eax,ebx,[edi+edx*4][1*4],[esp][ebp*4][1*4]
		add edx,2
		add ebp,2
		cmp edx,RC5KR
		sbb ecx,ecx
		add esi,2
		and edx,ecx
		and ebp,3
	.until esi >= 3*RC5KR
	ENDIF
	add esp,RC5KEYLEN
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 1*4
RC5Init endp

RC5ENCAB macro key0,key1
	mov ecx,ebx
	xor eax,ebx
	rol eax,cl
	add eax,key0
	mov ecx,eax
	xor ebx,eax
	rol ebx,cl
	add ebx,key1
endm

RC5Encrypt proc pPlainText:DWORD,pCipherText:DWORD
	push ebp
	push edi
	push esi
	push ebx
	mov esi,[esp][1*4][4*4];pPlainText
	mov eax,[esi][0*4]
	mov ebx,[esi][1*4]
	add eax,[RC5_KEY][0*4]
	add ebx,[RC5_KEY][1*4]
	xi = 8
	REPT RC5ROUNDS/2
		mov ebp,[RC5_KEY+xi][0*4]
		mov edx,[RC5_KEY+xi][1*4]
		mov edi,[RC5_KEY+xi][2*4]
		mov esi,[RC5_KEY+xi][3*4]
		RC5ENCAB ebp,edx
		RC5ENCAB edi,esi
		xi = xi + 8*2
	ENDM
	mov edi,[esp][2*4][4*4];pCipherText
	mov [edi][0*4],eax
	mov [edi][1*4],ebx
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 2*4
RC5Encrypt endp

RC5DECAB macro key1,key0
	mov ecx,eax
	sub ebx,key1
	ror ebx,cl
	xor ebx,eax
	mov ecx,ebx
	sub eax,key0
	ror eax,cl
	xor eax,ebx
endm

RC5Decrypt proc pCipherText:DWORD,pPlainText:DWORD
	push ebp
	push edi
	push esi
	push ebx
	mov edx,[esp][1*4][4*4];pCipherText
	mov eax,[edx][0*4]
	mov ebx,[edx][1*4]
	xi = RC5ROUNDS*8
	REPT RC5ROUNDS/2
		mov ebp,[RC5_KEY+xi][1*4]
		mov edx,[RC5_KEY+xi][0*4]
		xi = xi - 8
		mov edi,[RC5_KEY+xi][1*4]
		mov esi,[RC5_KEY+xi][0*4]
		xi = xi - 8
		RC5DECAB ebp,edx
		RC5DECAB edi,esi
	ENDM
	sub eax,[RC5_KEY][0*4]
	sub ebx,[RC5_KEY][1*4]
	mov edx,[esp][2*4][4*4];pPlainText
	mov [edx][0*4],eax
	mov [edx][1*4],ebx
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 2*4
RC5Decrypt endp

OPTION PROLOGUE:PROLOGUEDEF
OPTION EPILOGUE:EPILOGUEDEF

end

⌨️ 快捷键说明

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