some fixes
This commit is contained in:
parent
67dfd890a7
commit
262194ad9d
|
@ -73,7 +73,7 @@ package body Crypto_Core_Types is
|
|||
|
||||
|
||||
function From_Hex(S : String) return u8_Array is
|
||||
A : u8_Array(1 .. (S'Length + 1) / 2);
|
||||
A : u8_Array(1 .. (S'Length + 1) / 2) := (others => 0);
|
||||
C : Character;
|
||||
V : Integer range -1 .. 15;
|
||||
Index : Positive := 1;
|
||||
|
@ -111,5 +111,35 @@ package body Crypto_Core_Types is
|
|||
return A;
|
||||
end From_Ascii;
|
||||
|
||||
procedure Bit_Clear(Buffer : in out u8_Array; Index : in Positive) is
|
||||
begin
|
||||
Buffer(Buffer'First + Integer(Index / 8)) := Buffer(Buffer'First + Integer(Index / 8)) and (not Shift_Left(1, 7 - (Index - 1) mod 8));
|
||||
end Bit_Clear;
|
||||
|
||||
procedure Bit_Set(Buffer : in out u8_Array; Index : in Positive) is
|
||||
begin
|
||||
Buffer(Integer(Buffer'First + Index / 8)) := Buffer(Buffer'First + Integer(Index / 8)) or Shift_Left(1, 7 - (Index - 1) mod 8);
|
||||
end Bit_Set;
|
||||
|
||||
procedure Bit_Toggle(Buffer : in out u8_Array; Index : in Positive) is
|
||||
begin
|
||||
Buffer(Integer(Buffer'First + Index / 8)) := Buffer(Buffer'First + Integer(Index / 8)) xor Shift_Left(1, 7 - (Index - 1) mod 8);
|
||||
end Bit_Toggle;
|
||||
|
||||
|
||||
procedure Bit_Set(Buffer : in out u8_Array; Index : in Positive; Value : in Bit) is
|
||||
begin
|
||||
if Value = 1 then
|
||||
Bit_Set(Buffer, Index);
|
||||
else
|
||||
Bit_Clear(Buffer, Index);
|
||||
end if;
|
||||
end Bit_Set;
|
||||
|
||||
function Bit_Get(Buffer : in u8_Array; Index : in Positive) return Bit is
|
||||
begin
|
||||
return Bit(Shift_Right(Buffer(Buffer'First + Index / 8), 7 - (Index - 1) mod 8) and 1);
|
||||
end Bit_Get;
|
||||
|
||||
|
||||
end Crypto_Core_types;
|
||||
|
|
|
@ -17,6 +17,9 @@ with Interfaces; use Interfaces;
|
|||
|
||||
package Crypto_Core_Types is
|
||||
|
||||
type Bit is mod 2;
|
||||
for Bit'Size use 1;
|
||||
|
||||
type u8 is new Unsigned_8;
|
||||
for u8'Size use 8;
|
||||
|
||||
|
@ -39,6 +42,9 @@ package Crypto_Core_Types is
|
|||
type u32_Array_Access is access all u32_Array;
|
||||
type u64_Array_Access is access all u64_Array;
|
||||
|
||||
subtype Block_32_Bit is u8_Array(1 .. 32 / 8);
|
||||
subtype Block_48_Bit is u8_Array(1 .. 48 / 8);
|
||||
subtype Block_56_Bit is u8_Array(1 .. 56 / 8);
|
||||
subtype Block_64_Bit is u8_Array(1 .. 64 / 8);
|
||||
subtype Block_96_Bit is u8_Array(1 .. 96 / 8);
|
||||
subtype Block_128_Bit is u8_Array(1 .. 128 / 8);
|
||||
|
@ -52,13 +58,22 @@ package Crypto_Core_Types is
|
|||
subtype Block_768_Bit is u8_Array(1 .. 768 / 8);
|
||||
subtype Block_1024_Bit is u8_Array(1 .. 1024 / 8);
|
||||
subtype Block_1536_Bit is u8_Array(1 .. 1536 / 8);
|
||||
subtype Block_2084_Bit is u8_Array(1 .. 2048 / 8);
|
||||
subtype Block_2048_Bit is u8_Array(1 .. 2048 / 8);
|
||||
subtype Block_4096_Bit is u8_Array(1 .. 4096 / 8);
|
||||
subtype Block_8192_Bit is u8_Array(1 .. 8192 / 8);
|
||||
|
||||
Wrong_Opertaion_Order : exception;
|
||||
Format_Violation : exception;
|
||||
|
||||
function To_Hex(A : u8) return String;
|
||||
function To_Hex(A : u8_Array) return String;
|
||||
function From_Hex(S : String) return u8_Array;
|
||||
function From_Ascii(S : String) return u8_Array;
|
||||
|
||||
procedure Bit_Clear(Buffer : in out u8_Array; Index : in Positive);
|
||||
procedure Bit_Set(Buffer : in out u8_Array; Index : in Positive);
|
||||
procedure Bit_Set(Buffer : in out u8_Array; Index : in Positive; Value : in Bit);
|
||||
procedure Bit_Toggle(Buffer : in out u8_Array; Index : in Positive);
|
||||
function Bit_Get(Buffer : in u8_Array; Index : in Positive) return Bit;
|
||||
|
||||
end Crypto_Core_Types;
|
||||
|
|
|
@ -89,7 +89,9 @@ package body Sha_Test_IO is
|
|||
when others => null;
|
||||
end case;
|
||||
end loop;
|
||||
if not End_Of_File(Context.File) then
|
||||
Goto_Data(Context.File);
|
||||
end if;
|
||||
if End_Of_File(Context.File) then
|
||||
Close(Context.File);
|
||||
Next := Finish;
|
||||
|
@ -137,7 +139,7 @@ package body Sha_Test_IO is
|
|||
f : Context_T;
|
||||
nt : Next_Type;
|
||||
count_val : Integer;
|
||||
dlen : Integer;
|
||||
dlen : Integer := DigestSize_Bits / 8;
|
||||
len, lenb : Integer;
|
||||
DigestSize_Bytes : constant Natural := (DigestSize_Bits + 7 ) / 8;
|
||||
digest, ref_Digest : u8_Array(1 .. DigestSize_Bytes) := (others => 0);
|
||||
|
@ -196,6 +198,8 @@ package body Sha_Test_IO is
|
|||
else
|
||||
fail_test := fail_test + 1;
|
||||
Put('!');
|
||||
Put_Line(" DBG: is: " & To_Hex(digest));
|
||||
Put_Line(" DBG: should: " & To_Hex(ref_digest));
|
||||
end if;
|
||||
when Message_Block =>
|
||||
declare
|
||||
|
@ -209,6 +213,7 @@ package body Sha_Test_IO is
|
|||
end if;
|
||||
num := num + 1;
|
||||
Get_Data(f, buf);
|
||||
-- Put_Line(" DBG: dlen = " & Integer'Image(dlen) & "; len = " & Integer'Image(len));
|
||||
Hash(buf, digest(1 .. dlen), len);
|
||||
end;
|
||||
end case;
|
||||
|
|
|
@ -53,8 +53,6 @@ package Sha_Test_IO is
|
|||
|
||||
|
||||
generic
|
||||
-- type Context_T is limited private;
|
||||
-- BlockSize_Bits : Natural;
|
||||
DigestSize_Bits : Natural;
|
||||
with procedure Hash(Data : in u8_Array; Digest : out u8_Array; Bits : in Integer := -1);
|
||||
procedure Test_With_File(FileName : in String);
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
-- Copyright (C) 2015 Daniel Otte <bg@nerilex.org>
|
||||
--
|
||||
-- This program is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
-- with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
|
||||
with Crypto_Core_Types; use Crypto_Core_Types;
|
||||
with Crypto_Types; use Crypto_Types;
|
||||
|
||||
with Sha3_Generic;
|
||||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
use Crypto_Types.Crypto_Types_u64;
|
||||
|
||||
procedure Test_Keccak is
|
||||
-- procedure Print_State(A : State_T) is
|
||||
-- c : Natural := 1;
|
||||
-- l : u8_Array(1 .. 8);
|
||||
-- begin
|
||||
-- for i in y_T'Range loop
|
||||
-- for j in x_T'Range loop
|
||||
-- Store_le(A => l,
|
||||
-- value => A(j, i));
|
||||
-- for z in l'Range loop
|
||||
-- Put(To_Hex(l(z)));
|
||||
-- Put(' ');
|
||||
-- if c mod 16 = 0 then
|
||||
-- New_Line;
|
||||
-- end if;
|
||||
-- c := c + 1;
|
||||
-- end loop;
|
||||
-- end loop;
|
||||
-- end loop;
|
||||
-- New_Line;
|
||||
-- end;
|
||||
|
||||
|
||||
-- A : State_T := ( 0 => ( 0 => 6, others => 0 ), 1 => ( 3 => 16#8000000000000000#, others => 0 ), others => ( others => 0 ));
|
||||
|
||||
package Sha3_224 is new Sha3_Generic(Capacity_Bits => 448);
|
||||
Digest : Sha3_224.Digest_T;
|
||||
begin
|
||||
-- Print_State(A);
|
||||
-- Permute(A);
|
||||
-- New_Line;
|
||||
-- Print_State(A);
|
||||
Sha3_224.Hash(u8_Array'( 1 => 16#13#), Digest, 5);
|
||||
Put_Line(To_Hex(Digest));
|
||||
end Test_Keccak;
|
|
@ -14,7 +14,6 @@
|
|||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
|
||||
with Crypto_Core_Types; use Crypto_Core_Types;
|
||||
with Crypto_Types; use Crypto_Types;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ with SHA2_224;
|
|||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
|
||||
procedure main is
|
||||
procedure Test_SHA224 is
|
||||
-- package u8_IO is new Crypto_Types.u8_Sequential_IO;
|
||||
|
||||
procedure Print_Hex(value : in u8) is
|
||||
|
@ -79,4 +79,4 @@ begin
|
|||
test_sha224("abc");
|
||||
test_sha224("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
|
||||
New_Line;
|
||||
end main;
|
||||
end Test_SHA224;
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
|
||||
with Crypto_Core_Types; use Crypto_Core_Types;
|
||||
with Crypto_Types; use Crypto_Types;
|
||||
|
||||
|
@ -23,40 +22,33 @@ with SHA2_256;
|
|||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
|
||||
procedure main is
|
||||
-- package u8_IO is new Crypto_Types.u8_Sequential_IO;
|
||||
|
||||
procedure Print_Hex(value : in u8_Array) is
|
||||
begin
|
||||
Put(To_Hex(value));
|
||||
Put(" ");
|
||||
end;
|
||||
procedure Test_SHA256 is
|
||||
|
||||
|
||||
procedure test_sha256(Data : in u8_Array; Bits : in Integer := -1) is
|
||||
Digest : Block_256_Bit;
|
||||
q : Integer := Bits;
|
||||
begin
|
||||
if q < 0 then
|
||||
q := Data'Length * 8;
|
||||
end if;
|
||||
Print_Hex(Data);
|
||||
Put(" (" & Integer'Image(q) & "): ");
|
||||
Sha2_256.Hash(Data, Digest, Bits);
|
||||
Print_Hex(Digest);
|
||||
New_Line;
|
||||
end test_sha256;
|
||||
-- procedure test_sha256(Data : in u8_Array; Bits : in Integer := -1) is
|
||||
-- Digest : Block_256_Bit;
|
||||
-- q : Integer := Bits;
|
||||
-- begin
|
||||
-- if q < 0 then
|
||||
-- q := Data'Length * 8;
|
||||
-- end if;
|
||||
-- Print_Hex(Data);
|
||||
-- Put(" (" & Integer'Image(q) & "): ");
|
||||
-- Sha2_256.Hash(Data, Digest, Bits);
|
||||
-- Print_Hex(Digest);
|
||||
-- New_Line;
|
||||
-- end test_sha256;
|
||||
|
||||
procedure test_sha256(Msg : in String) is
|
||||
Data : u8_Array(1 .. Msg'Length);
|
||||
begin
|
||||
Put("""" & Msg & """: ");
|
||||
for i in data'Range loop
|
||||
Data(i) := u8(Character'Pos(Msg(Msg'First + i - Data'First)));
|
||||
end loop;
|
||||
test_sha256(Data);
|
||||
New_Line;
|
||||
end test_sha256;
|
||||
-- procedure test_sha256(Msg : in String) is
|
||||
-- Data : u8_Array(1 .. Msg'Length);
|
||||
-- begin
|
||||
-- Put("""" & Msg & """: ");
|
||||
-- for i in data'Range loop
|
||||
-- Data(i) := u8(Character'Pos(Msg(Msg'First + i - Data'First)));
|
||||
-- end loop;
|
||||
-- test_sha256(Data);
|
||||
-- New_Line;
|
||||
-- end test_sha256;
|
||||
|
||||
procedure test_sha256_with_File is new Sha_Test_IO.Test_With_File(DigestSize_Bits => SHA2_256.DigestSize_Bits, Hash => SHA2_256.Hash);
|
||||
|
||||
|
@ -74,4 +66,4 @@ begin
|
|||
test_sha256_with_File("testvectors/sha2/byte/SHA256ShortMsg.rsp");
|
||||
test_sha256_with_File("testvectors/sha2/byte/SHA256LongMsg.rsp");
|
||||
test_sha256_with_File("testvectors/sha2/byte/SHA256Monte.rsp");
|
||||
end main;
|
||||
end Test_SHA256;
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
-- Copyright (C) 2015 Daniel Otte <bg@nerilex.org>
|
||||
--
|
||||
-- This program is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with Crypto_Core_Types; use Crypto_Core_Types;
|
||||
with Crypto_Types; use Crypto_Types;
|
||||
|
||||
with Sha_Test_IO;
|
||||
|
||||
with SHA3; use SHA3;
|
||||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
|
||||
procedure Test_SHA3 is
|
||||
|
||||
procedure test_sha3_224_with_File is new Sha_Test_IO.Test_With_File(DigestSize_Bits => SHA3_224.DigestSize_Bits, Hash => SHA3_224.Hash);
|
||||
procedure test_sha3_256_with_File is new Sha_Test_IO.Test_With_File(DigestSize_Bits => SHA3_256.DigestSize_Bits, Hash => SHA3_256.Hash);
|
||||
procedure test_sha3_384_with_File is new Sha_Test_IO.Test_With_File(DigestSize_Bits => SHA3_384.DigestSize_Bits, Hash => SHA3_384.Hash);
|
||||
procedure test_sha3_512_with_File is new Sha_Test_IO.Test_With_File(DigestSize_Bits => SHA3_512.DigestSize_Bits, Hash => SHA3_512.Hash);
|
||||
|
||||
begin
|
||||
New_Line;
|
||||
|
||||
test_sha3_224_with_File("testvectors/sha3/pre/ShortMsgKAT_SHA3-224.txt");
|
||||
test_sha3_256_with_File("testvectors/sha3/pre/ShortMsgKAT_SHA3-256.txt");
|
||||
test_sha3_384_with_File("testvectors/sha3/pre/ShortMsgKAT_SHA3-384.txt");
|
||||
test_sha3_512_with_File("testvectors/sha3/pre/ShortMsgKAT_SHA3-512.txt");
|
||||
|
||||
-- New_Line;
|
||||
-- test_sha3_224_with_File("testvectors/sha3/bit/sha3_224ShortMsg.rsp");
|
||||
-- test_sha3_224_with_File("testvectors/sha3/bit/sha3_224LongMsg.rsp");
|
||||
-- test_sha3_224_with_File("testvectors/sha3/bit/sha3_224Monte.rsp");
|
||||
-- test_sha3_224_with_File("testvectors/sha3/byte/sha3_224ShortMsg.rsp");
|
||||
-- test_sha3_224_with_File("testvectors/sha3/byte/sha3_224LongMsg.rsp");
|
||||
-- test_sha3_224_with_File("testvectors/sha3/byte/sha3_224Monte.rsp");
|
||||
--
|
||||
-- New_Line;
|
||||
-- test_sha3_256_with_File("testvectors/sha3/bit/sha3_256ShortMsg.rsp");
|
||||
-- test_sha3_256_with_File("testvectors/sha3/bit/sha3_256LongMsg.rsp");
|
||||
-- test_sha3_256_with_File("testvectors/sha3/bit/sha3_256Monte.rsp");
|
||||
-- test_sha3_256_with_File("testvectors/sha3/byte/sha3_256ShortMsg.rsp");
|
||||
-- test_sha3_256_with_File("testvectors/sha3/byte/sha3_256LongMsg.rsp");
|
||||
-- test_sha3_256_with_File("testvectors/sha3/byte/sha3_256Monte.rsp");
|
||||
--
|
||||
-- New_Line;
|
||||
-- test_sha3_384_with_File("testvectors/sha3/bit/sha3_284ShortMsg.rsp");
|
||||
-- test_sha3_384_with_File("testvectors/sha3/bit/sha3_284LongMsg.rsp");
|
||||
-- test_sha3_384_with_File("testvectors/sha3/bit/sha3_284Monte.rsp");
|
||||
-- test_sha3_384_with_File("testvectors/sha3/byte/sha3_284ShortMsg.rsp");
|
||||
-- test_sha3_384_with_File("testvectors/sha3/byte/sha3_284LongMsg.rsp");
|
||||
-- test_sha3_384_with_File("testvectors/sha3/byte/sha3_284Monte.rsp");
|
||||
--
|
||||
-- New_Line;
|
||||
-- test_sha3_512_with_File("testvectors/sha3/bit/SHA512ShortMsg.rsp");
|
||||
-- test_sha3_512_with_File("testvectors/sha3/bit/SHA512LongMsg.rsp");
|
||||
-- test_sha3_512_with_File("testvectors/sha3/bit/SHA512Monte.rsp");
|
||||
-- test_sha3_512_with_File("testvectors/sha3/byte/SHA512ShortMsg.rsp");
|
||||
-- test_sha3_512_with_File("testvectors/sha3/byte/SHA512LongMsg.rsp");
|
||||
-- test_sha3_512_with_File("testvectors/sha3/byte/SHA512Monte.rsp");
|
||||
|
||||
New_Line;
|
||||
|
||||
end Test_SHA3;
|
|
@ -22,7 +22,7 @@ with SHA2_384;
|
|||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
|
||||
procedure main is
|
||||
procedure Test_SHA384 is
|
||||
-- package u8_IO is new Crypto_Types.u8_Sequential_IO;
|
||||
|
||||
procedure Print_Hex(value : in u8) is
|
||||
|
@ -79,4 +79,4 @@ begin
|
|||
test_sha384("abc");
|
||||
test_sha384("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
|
||||
New_Line;
|
||||
end main;
|
||||
end Test_SHA384;
|
||||
|
|
|
@ -22,7 +22,7 @@ with SHA2_512;
|
|||
|
||||
use Crypto_Types.Crypto_Types_u8;
|
||||
|
||||
procedure main is
|
||||
procedure Test_SHA512 is
|
||||
-- package u8_IO is new Crypto_Types.u8_Sequential_IO;
|
||||
|
||||
procedure Print_Hex(value : in u8) is
|
||||
|
@ -79,4 +79,4 @@ begin
|
|||
test_sha512("abc");
|
||||
test_sha512("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
|
||||
New_Line;
|
||||
end main;
|
||||
end Test_SHA512;
|
||||
|
|
Loading…
Reference in New Issue