📄 tea.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 + -