1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| // Crypte un Tampon par un double Vernam avec Clé de 64 bits
procedure CrypteV64(Tp: pointer; Key: String; Size: longWord); register;
var Al1,Al2 : longInt;
procedure Alea;
asm
xor eax,eax
dec eax
imul edx,Al1,$08088405
inc edx
mov Al1,edx
mul edx
mov ebx,edx
xor eax,eax
dec eax
imul edx,Al2,$08088405
inc edx
mov Al2,edx
mul edx
mov eax,edx
end;
asm
push ebx
push esi
mov esi,eax
mov eax,Dword ptr[edx]
mov Al1,eax
mov eax,Dword ptr[edx+4]
mov Al2,eax
push ecx
shr ecx,$3
jz @Reste
@XorQWords:
call Alea
xor DWord ptr[esi],ebx
add esi,$4
xor DWord ptr[esi],eax
add esi,$4
loop @XorQWords
@Reste:
pop ecx
and ecx,$7
jz @Fin
call Alea
@XorBytes:
xor Byte ptr[esi],al
inc esi
mov al,bl
shr ebx,$8
ror eax,$8
loop @XorBytes
@Fin:
pop esi
pop ebx
end; |
Partager