with Ada.Text_IO;
with Ada.Integer_Text_IO;
with WolfSSL;
procedure AES_Verify_Main is
use type WolfSSL.Byte_Type;
procedure Put (Text : String) renames Ada.Text_IO.Put;
procedure Put (Value : Integer) is
begin
Ada.Integer_Text_IO.Put (Value);
end Put;
procedure New_Line is
begin
Ada.Text_IO.New_Line;
end New_Line;
type Unsigned_8 is mod 2 ** 8;
function To_C (Value : Unsigned_8) return WolfSSL.Byte_Type is
begin
return WolfSSL.Byte_Type'Val (Value);
end To_C;
RNG : WolfSSL.RNG_Type;
Salt_Size : constant := 8;
Salt : WolfSSL.Byte_Array (1 .. 8);
AES : WolfSSL.AES_Type;
R : Integer;
Pad : Integer := 3;
procedure Cleanup is
RR : Integer := 0;
begin
if WolfSSL.Is_Valid (AES) then
WolfSSL.AES_Free (AES => AES,
Result => RR);
end if;
if WolfSSL.Is_Valid (RNG) then
WolfSSL.Free_RNG (Key => RNG);
end if;
end Cleanup;
begin
WolfSSL.Create_RNG (Key => RNG,
Result => R);
if R /= 0 then
Put ("Attaining RNG key instance failed");
New_Line;
Cleanup;
return;
end if;
WolfSSL.RNG_Generate_Block (RNG => RNG,
Output => Salt,
Result => R);
if R /= 0 then
Put ("Generating random salt");
New_Line;
Cleanup;
return;
end if;
if Pad = 0 then
Salt (1) := To_C (0);
elsif Salt (1) = To_C (0) then
Salt (1) := To_C (1);
end if;
-- Create_AES signature no longer requires Index when AES objects are
-- dynamically allocated.
WolfSSL.Create_AES (Device => WolfSSL.Invalid_Device,
AES => AES,
Result => R);
if R /= 0 then
Put ("Attaining AES key instance failed");
New_Line;
Cleanup;
return;
end if;
-- WolfSSL.PBKDF2 (Output => ,
-- Password => ,
-- Salt => ,
-- Iterations => ,
-- Key_Length => ,
-- HMAC => ,
-- Result => R);
-- if R /= 0 then
-- Put ("Attaining AES key instance failed");
-- New_Line;
-- Cleanup;
-- return;
-- end if;
Cleanup;
end AES_Verify_Main;