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

📄 tea.inc

📁 The dinamyc link library that contains an implementation of SHA1, SHA512, CRC32, CRC32b, Adler32, Tw
💻 INC
字号:

; ----------------------------------------------------- ;
;       TEA Encryption Algorithm ( Block Cipher )       ;
;         by David J. Wheeler, Roger M. Needham         ;
;                                                       ;
; Block Size: 64 bits                                   ;
; Max Key Size: 128 bits                                ;
; ----------------------------------------------------- ;

delta  = $9E3779B9 ; sqr(5)-1 * 2^31
decsum = $C6EF3720 ; delta shl 5
rounds = 32

align 4
proc TEA_Init uses ebx esi edi,Key:PBYTE,KeySize:DWORD
     mov esi,[Key]
     mov ecx,[KeySize]
     lea edi,[teakey]
     shr ecx,3
     mov ebx,sizeof._KEY128
     cmp ecx,ebx
     cmova ecx,ebx
     sub ebx,ecx
     cld
     rep movsb
     xor eax,eax
     mov ecx,ebx
     rep stosb
     lea edi,[teakey]
     mov eax,[edi+_KEY128.k0]
     bswap eax
     mov [edi+_KEY128.k0],eax
     mov eax,[edi+_KEY128.k1]
     bswap eax
     mov [edi+_KEY128.k1],eax
     mov eax,[edi+_KEY128.k2]
     bswap eax
     mov [edi+_KEY128.k2],eax
     mov eax,[edi+_KEY128.k3]
     bswap eax
     mov [edi+_KEY128.k3],eax
     ret
endp

align 4
proc TEA_EncryptBlock uses ebx esi edi,Block:PBLOCK64
     mov ebx,[Block]
     mov eax,[ebx+_BLOCK64.x]
     bswap eax
     mov edi,eax
     mov eax,[ebx+_BLOCK64.y]
     bswap eax
     mov esi,eax
     xor edx,edx
     mov ecx,rounds
@@:  add edx,delta
     mov eax,esi
     shl eax,4
     add edi,eax
     mov eax,esi
     xor eax,[teakey.k0]
     add edi,eax
     mov eax,esi
     shr eax,5
     xor eax,edx
     add edi,eax
     add edi,[teakey.k1]
     mov eax,edi
     shl eax,4
     add esi,eax
     mov eax,edi
     xor eax,[teakey.k2]
     add esi,eax
     mov eax,edi
     shr eax,5
     xor eax,edx
     add esi,eax
     add esi,[teakey.k3]
     dec ecx
     jne @r
     mov eax,edi
     bswap eax
     mov [ebx+_BLOCK64.x],eax
     mov eax,esi
     bswap eax
     mov [ebx+_BLOCK64.y],eax
     ret
endp

align 4
proc TEA_DecryptBlock uses ebx esi edi,Block:PBLOCK64
     mov ebx,[Block]
     mov eax,[ebx+_BLOCK64.x]
     bswap eax
     mov edi,eax
     mov eax,[ebx+_BLOCK64.y]
     bswap eax
     mov esi,eax
     mov edx,decsum
     mov ecx,rounds
@@:  mov eax,edi
     shl eax,4
     sub esi,eax
     mov eax,edi
     xor eax,[teakey.k2]
     sub esi,eax
     mov eax,edi
     shr eax,5
     xor eax,edx
     sub esi,eax
     sub esi,[teakey.k3]
     mov eax,esi
     shl eax,4
     sub edi,eax
     mov eax,esi
     xor eax,[teakey.k0]
     sub edi,eax
     mov eax,esi
     shr eax,5
     xor eax,edx
     sub edi,eax
     sub edi,[teakey.k1]
     sub edx,delta
     dec ecx
     jne @r
     mov eax,edi
     bswap eax
     mov [ebx+_BLOCK64.x],eax
     mov eax,esi
     bswap eax
     mov [ebx+_BLOCK64.y],eax
     ret
endp

⌨️ 快捷键说明

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