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

📄 twofish.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	pop edi
	pop ebp
	ret 2*4
h_fun endp

copy_key macro i
	mov eax,[esi+i*8+0]
	mov edx,[esi+i*8+4]
	mov me_key[i*4],eax
	mov mo_key[i*4],edx
endm

; 3390 clk
align 16
TwofishInit proc in_key,key_len
	push ebp
	push edi
	push esi
	push ebx
	twofish_set_key_locals equ 4*4+4*4
	sub esp,twofish_set_key_locals
	me_key equ [esp+0*4]
	mo_key equ [esp+4*4]
	mov ebp,[esp+2*4][4*4+twofish_set_key_locals];key_len
	mov esi,[esp+1*4][4*4+twofish_set_key_locals];in_key
	shr ebp,3
	mov k_len,ebp
	copy_key 0
	copy_key 1
	sub ebp,2
	jz copy_key_done
	copy_key 2
	dec ebp
	jz copy_key_done
	copy_key 3
copy_key_done:
	mov ebp,offset l_key
	mov edi,-40*4
	xor ebx,ebx
	.repeat
		invoke h_fun,ebx,addr me_key
		mov esi,eax
		add ebx,001010101h
		invoke h_fun,ebx,addr mo_key
		rol eax,8
		add ebx,001010101h
		lea ecx,[esi+eax]
		lea edx,[esi+eax*2]
		rol edx,9
		mov [ebp+40*4+edi+0],ecx; = a + b;
		mov [ebp+40*4+edi+4],edx; = rotl(a + 2 * b, 9);		
		add edi,2*4
	.until zero?;edi>=40*4
	add esp,twofish_set_key_locals
	mov eax,ebp
	mov edx,sizeof l_key
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 2*4
TwofishInit endp

g_fun macro blk_x,blk_x_lo,blk_x_hi, blk_y,blk_y_lo,blk_y_hi, nx,ny
	;t0,t1 is esi,edi
	;blk is <eax,ebx,ecx,edx>
	movzx esi,blk_x_lo
	movzx ebp,blk_x_hi
	movzx edi,blk_y_lo
	mov esi,mk_tab[0*256*4][esi*4]
	xor esi,mk_tab[1*256*4][ebp*4]
	ror blk_x,16
	movzx ebp,blk_x_lo
	mov edi,mk_tab[1*256*4][edi*4]
	xor esi,mk_tab[2*256*4][ebp*4]
	movzx ebp,blk_x_hi
	xor esi,mk_tab[3*256*4][ebp*4]
	movzx ebp,blk_y_hi
	ror blk_y,16
	xor edi,mk_tab[2*256*4][ebp*4]
	movzx ebp,blk_y_lo
	xor edi,mk_tab[3*256*4][ebp*4]
	movzx ebp,blk_y_hi
	xor edi,mk_tab[0*256*4][ebp*4]
	ror blk_y,16
	ror blk_x,16
	add esi,edi
	add edi,esi
	add esi,l_key[(4*xi+nx)*4]
	add edi,l_key[(4*xi+ny)*4]
endm

; 312 clk
align 16
TwofishEncrypt proc pin_blk,pout_blk
	push ebp
	push edi
	push esi
	push ebx
	mov esi,[esp+1*4][4*4];pin_blk
	mov eax,l_key[0*4]
	mov ebx,l_key[1*4]
	mov ecx,l_key[2*4]
	mov edx,l_key[3*4]
	xor eax,[esi+0*4]
	xor ebx,[esi+1*4]
	xor ecx,[esi+2*4]
	xor edx,[esi+3*4]
	xi = 0
	rept 8
		g_fun eax,al,ah, ebx,bl,bh, 8,9
		xor ecx,esi
		ror ecx,1
		rol edx,1
		xor edx,edi
		g_fun ecx,cl,ch, edx,dl,dh, 10,11
		xor eax,esi
		ror eax,1
		rol ebx,1
		xor ebx,edi
		xi = xi + 1
	endm
	mov edi,[esp+2*4][4*4];pout_blk
	xor ecx,l_key[4*4]
	xor edx,l_key[5*4]
	xor eax,l_key[6*4]
	xor ebx,l_key[7*4]
	mov [edi+0*4],ecx
	mov [edi+1*4],edx
	mov [edi+2*4],eax
	mov [edi+3*4],ebx
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 2*4
TwofishEncrypt endp

; 306 clk
align 16
TwofishDecrypt proc pin_blk,pout_blk
	push ebp
	push edi
	push esi
	push ebx
	mov esi,[esp+1*4][4*4];pin_blk
	mov eax,l_key[4*4]
	mov ebx,l_key[5*4]
	mov ecx,l_key[6*4]
	mov edx,l_key[7*4]
	xor eax,[esi+0*4]
	xor ebx,[esi+1*4]
	xor ecx,[esi+2*4]
	xor edx,[esi+3*4]
	xi = 7
	rept 8
		g_fun eax,al,ah, ebx,bl,bh, 10,11
		xor edx,edi
		rol ecx,1
		ror edx,1
		xor ecx,esi
		g_fun ecx,cl,ch, edx,dl,dh, 8,9
		xor ebx,edi
		rol eax,1
		ror ebx,1
		xor eax,esi
		xi = xi - 1
	endm
	mov edi,[esp+2*4][4*4];pout_blk
	xor ecx,l_key[0*4]
	xor edx,l_key[1*4]
	xor eax,l_key[2*4]
	xor ebx,l_key[3*4]
	mov [edi+0*4],ecx
	mov [edi+1*4],edx
	mov [edi+2*4],eax
	mov [edi+3*4],ebx
	pop ebx
	pop esi
	pop edi
	pop ebp
	ret 2*4
TwofishDecrypt endp

OPTION PROLOGUE:PROLOGUEDEF
OPTION EPILOGUE:EPILOGUEDEF

end

⌨️ 快捷键说明

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