Стоп-стоп-стоп...
А мне показалось, что основные функции там в этом коде:
(** XTEA3.PAS by Alexander Myasnikov **)
(** XTEA-3 by Tom St Denis implementation for Delphi programmers **)
(** XTEA-3 encrypts 128 bit block with 256 bit key **)
(** XTEA-3 is based on original TEA , but with large key and block **)
(** It seems to be much secure version **)
(** Implemented by Alexander Myasnikov **)
(** WEB: www.darksoftware.narod.ru **)
{$Q-}
library libxtea3;
type
t128buf = array [0..3] of longword;
type
p128buf = ^t128buf;
var
key: array [0..7] of longword;
const
ITERATIONS = 32;
function rol (N, R: longword): longword;
asm
MOV EAX,N
MOV ECX, R
ROL EAX, CL
end;
procedure crypt (plain: p128buf); stdcall; export;
var
a, b, c, d, sum, r, t: longword;
begin
sum := 0;
a := plain[0] + key[0];
b := plain[1] + key[1];
c := plain[2] + key[2];
d := plain[3] + key[3];
for r := 0 to ITERATIONS - 1 do
begin
a := a + (((b shl 4) + rol(key[(sum mod 4) + 4], b)) xor
(d + sum) xor ((b shr 5) + rol(key[sum mod 4], b shr 27)));
sum := sum + $9E3779B9;
c := c + (((d shl 4) + rol(key[((sum shr 11) mod 4) + 4], d)) xor
(b + sum) xor ((d shr 5) + rol(key[(sum shr 11) mod 4], d shr 27)));
t := a;
a := b;
b := c;
c := d;
d := t;
end;
plain[0] := a xor key[4];
plain[1] := b xor key[5];
plain[2] := c xor key[6];
plain[3] := d xor key[7];
end;
procedure decrypt (plain: p128buf); stdcall; export;
var
a, b, c, d, delta, sum, r, t: longword;
begin
delta := $9E3779B9;
sum := delta * ITERATIONS;
d := plain[3] xor key[7];
c := plain[2] xor key[6];
b := plain[1] xor key[5];
a := plain[0] xor key[4];
for r := ITERATIONS - 1 downto 0 do
begin
t := d;
d := c;
c := b;
b := a;
a := t;
c := c - (((d shl 4) + rol(key[((sum shr 11) mod 4) + 4], d)) xor
(b + sum) xor ((d shr 5) + rol(key[(sum shr 11) mod 4], d shr 27)));
sum := sum - $9E3779B9;
a := a - (((b shl 4) + rol(key[(sum mod 4) + 4], b)) xor
(d + sum) xor ((b shr 5) + rol(key[sum mod 4], b shr 27)));
end;
plain[3] := d - key[3];
plain[2] := c - key[2];
plain[1] := b - key[1];
plain[0] := a - key[0];
end;
procedure setup (k: pointer); stdcall; export;
begin
move(k^, key, 32);
end;
exports
crypt,
decrypt,
setup;
end.