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

154 lines
3.8 KiB
Plaintext

{-Test prog for AES CTR/CFB/OFB with full blocks first, we Jan.2004}
program T_FBModi;
{$i STD.INC}
{$ifdef APPCONS}
{$apptype console}
{$endif}
uses
{$ifdef WINCRT}
wincrt,
{$endif}
AES_type, AES_CTR, AES_CFB, AES_OFB, mem_util;
const
BSIZE = $400;
EXT = 15;
var
Context: TAESContext;
GErr,Err: integer;
pt, pt0, ct, ct0, pd: array[1..BSIZE+EXT] 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);
IV : TAESBlock = ($00,$01,$02,$03,$04,$05,$06,$07,
$08,$09,$0a,$0b,$0c,$0d,$0e,$0f);
{---------------------------------------------------------------------------}
procedure Test_CTR;
var
i,n: integer;
begin
GErr := 0;
writeln('- CTR with full blocks first');
for i:=1 to BSIZE do pt0[i] := random(256);
pt := pt0;
for n:=1 to BSIZE do begin
Err := AES_CTR_Init(key128, 128, IV, context);
Err := AES_CTR_Encrypt(@pt, @ct, n, context);
GErr:= GErr or Err;
if not compmem(@pt,@pt0,n+EXT) then begin
writeln(' Encr: src overwrite, n: ',n);
halt;
end;
if Err=0 then begin
ct0 := ct;
Err := AES_CTR_Init(key128, 128, IV, context);
Err := AES_CTR_Decrypt(@ct, @pd, n, context);
GErr:= GErr or Err;
if Err=0 then begin
if not CompMem(@pt, @pd, n) then writeln(' Diff:', n:6);
end;
if not compmem(@ct,@ct0,n+EXT) then begin
writeln(' Decr: src overwrite, n: ',n);
halt;
end;
end;
if Err<>0 then writeln(n:6, ' Error: ', Err);
end;
if GErr=0 then writeln(' OK.');
end;
{---------------------------------------------------------------------------}
procedure Test_CFB;
var
i,n: integer;
begin
GErr := 0;
writeln('- CFB with full blocks first');
for i:=1 to BSIZE do pt0[i] := random(256);
pt := pt0;
for n:=1 to BSIZE do begin
Err := AES_CFB_Init(key128, 128, IV, context);
Err := AES_CFB_Encrypt(@pt, @ct, n, context);
GErr:= GErr or Err;
if not compmem(@pt,@pt0,n+EXT) then begin
writeln(' Encr: src overwrite, n: ',n);
halt;
end;
if Err=0 then begin
ct0 := ct;
Err := AES_CFB_Init(key128, 128, IV, context);
Err := AES_CFB_Decrypt(@ct, @pd, n, context);
GErr:= GErr or Err;
if Err=0 then begin
if not CompMem(@pt, @pd, n) then writeln(' Diff:', n:6);
end;
if not compmem(@ct,@ct0,n+EXT) then begin
writeln(' Decr: src overwrite, n: ',n);
halt;
end;
end;
if Err<>0 then writeln(n:6, ' Error: ', Err);
end;
if GErr=0 then writeln(' OK.');
end;
{---------------------------------------------------------------------------}
procedure Test_OFB;
var
i,n: integer;
begin
GErr := 0;
writeln('- OFB with full blocks first');
for i:=1 to BSIZE do pt0[i] := random(256);
pt := pt0;
for n:=1 to BSIZE do begin
Err := AES_OFB_Init(key128, 128, IV, context);
Err := AES_OFB_Encrypt(@pt, @ct, n, context);
GErr:= GErr or Err;
if not compmem(@pt,@pt0,n+EXT) then begin
writeln(' Encr: src overwrite, n: ',n);
halt;
end;
if Err=0 then begin
ct0 := ct;
Err := AES_OFB_Init(key128, 128, IV, context);
Err := AES_OFB_Decrypt(@ct, @pd, n, context);
GErr:= GErr or Err;
if Err=0 then begin
if not CompMem(@pt, @pd, n) then writeln(' Diff:', n:6);
end;
if not compmem(@ct,@ct0,n+EXT) then begin
writeln(' Decr: src overwrite, n: ',n);
halt;
end;
end;
if Err<>0 then writeln(n:6, ' Error: ', Err);
end;
if GErr=0 then writeln(' OK.');
end;
begin
writeln;
writeln('Test AES CTR/CFB/OFB with full blocks first, WE Jan.2004');
Test_CTR;
Test_CFB;
Test_OFB;
end.