BSOne.SFC/Tocsg.Lib/VCL/EncLib/AES/t_ecbcts.pas

63 lines
1.4 KiB
Plaintext

{-Test prog for AES ECB cipher text stealing, we Sep.2003}
program T_ECBCTS;
{$i STD.INC}
{$ifdef APPCONS}
{$apptype console}
{$endif}
uses
{$ifdef WINCRT}
wincrt,
{$endif}
aes_type, aes_ECB, mem_util;
const
BSIZE = $400;
var
Context: TAESContext;
i,n,Err: integer;
pt, pt0, ct, ct0, pd: array[1..BSIZE+2] of byte;
const
key128 : array[0..15] of byte = ($2b,$7e,$15,$16,$28,$ae,$d2,$a6,
$ab,$f7,$15,$88,$09,$cf,$4f,$3c);
begin
writeln;
writeln('=====================================');
writeln('Test for AES-ECB cipher text stealing');
for i:=1 to BSIZE do pt0[i] := random(256);
pt := pt0;
for n:=1 to BSIZE do begin
Err := AES_ECB_Init_Encr(key128, 128, context);
Err := Err or AES_ECB_Encrypt(@pt, @ct, n, context);
if not compmem(@pt,@pt0,n+2) then begin
writeln('Encr: src overwrite, n: ',n);
halt;
end;
if Err=0 then begin
ct0 := ct;
Err := AES_ECB_Init_Decr(key128, 128, context);
Err := Err or AES_ECB_Decrypt(@ct, @pd, n, context);
if Err=0 then begin
if not CompMem(@pt, @pd, n) then writeln(n:6, ' Diff');
end;
if not compmem(@ct,@ct0,n+2) then begin
writeln('Decr: src overwrite, n: ',n);
halt;
end;
end;
if Err<>0 then begin
write(n:6, ' Error: ', Err);
if (n<AESBLKSIZE) and (Err=AES_Err_Invalid_Length) then write(' (OK)');
writeln;
end;
end;
end.