diff options
Diffstat (limited to 'src/crypto-types.ads')
-rw-r--r-- | src/crypto-types.ads | 357 |
1 files changed, 0 insertions, 357 deletions
diff --git a/src/crypto-types.ads b/src/crypto-types.ads deleted file mode 100644 index ebcd6dc..0000000 --- a/src/crypto-types.ads +++ /dev/null @@ -1,357 +0,0 @@ --- 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 2 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, write to the Free Software --- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA --- 02111-1307, USA. - --- As a special exception, if other files instantiate generics from --- this unit, or you link this unit with other files to produce an --- executable, this unit does not by itself cause the resulting --- executable to be covered by the GNU General Public License. This --- exception does not however invalidate any other reasons why the --- executable file might be covered by the GNU Public License. - -package Crypto.Types is - - --------------------------------------------------------------------------- - ---------------------------TYPES------------------------------------------- - --------------------------------------------------------------------------- - - -- primary types; - - type Bit is mod 2; - for Bit'Size use 1; - - type Byte is mod 2 ** 8; - for Byte'Size use 8; - - type DByte is mod 2 ** 16; - for DByte'Size use 16; - - type TByte is mod 2 ** 24 with Size => 24; - - type Word is mod 2 ** 32; - for Word'Size use 32; - - type DWord is mod 2 ** 64; - for DWord'Size use 64; - - --package BIO is new Ada.Text_Io.Modular_IO (Byte); - --package WIO is new Ada.Text_Io.Modular_IO (Word); - --package DIO is new Ada.Text_Io.Modular_IO (DWord); - - -- Arrays of primary types - type Bits is array (Integer range <>) of Bit; - type Bytes is array (Integer range <>) of Byte; - type DBytes is array (Integer range <>) of DByte; - type Words is array (Integer range <>) of Word; - type DWords is array (Integer range <>) of DWord; - - subtype Byte_Word_Range is Natural range 0..3; - subtype Byte_DWord_Range is Natural range 0..7; - - subtype Byte_Word is Bytes (Byte_Word_Range); - subtype Byte_DWord is Bytes (Byte_DWord_Range); - - -- N : #bits - -- byte-blocks (B_BlockN): array of N/8 bytes - subtype B_Block32_Range is Natural range 0..3; - subtype B_Block48_Range is Natural range 0..5; - subtype B_Block56_Range is Natural range 0..6; - subtype B_Block64_Range is Natural range 0..7; - subtype B_Block128_Range is Natural range 0..15; - subtype B_Block160_Range is Natural range 0..19; - subtype B_Block192_Range is Natural range 0..23; - subtype B_Block256_Range is Natural range 0..31; - - type B_Block32 is array(B_Block32_Range) of Byte; - type B_Block48 is array(B_Block48_Range) of Byte; - type B_Block56 is array(B_Block56_Range) of Byte; - type B_Block64 is array(B_Block64_Range) of Byte; - type B_Block128 is array(B_Block128_Range) of Byte; - type B_Block160 is array(B_Block160_Range) of Byte; - type B_Block192 is array(B_Block192_Range) of Byte; - type B_Block256 is array(B_Block256_Range) of Byte; - - - -- word blocks (W_BlockN): array of N/32 Words - subtype W_Block128_Range is Natural range 0..3; - subtype W_Block160_Range is Natural range 0..4; - subtype W_Block192_Range is Natural range 0..5; - subtype W_Block256_Range is Natural range 0..7; - subtype W_Block512_Range is Natural range 0..15; - - type W_Block128 is array(W_Block128_Range) of Word; - type W_Block160 is array(W_Block160_Range) of Word; - type W_Block192 is array(W_Block192_Range) of Word; - type W_Block256 is array(W_Block256_Range) of Word; - type W_Block512 is array(W_Block512_Range) of Word; - - - -- double wordblocks (DW_BlockN): array of N/64 Words - subtype DW_Block128_Range is Natural range 0..1; - subtype DW_Block256_Range is Natural range 0..3; - subtype DW_Block384_Range is Natural range 0..5; - subtype DW_Block512_Range is Natural range 0..7; - subtype DW_Block1024_Range is Natural range 0..15; - subtype DW_Block8192_Range is Natural range 0..127; - - type DW_Block128 is array(DW_Block128_Range) of DWord; - type DW_Block256 is array(DW_Block256_Range) of DWord; - type DW_Block384 is array(DW_Block384_Range) of DWord; - type DW_Block512 is array(DW_Block512_Range) of DWord; - type DW_Block1024 is array(DW_Block1024_Range) of DWord; - type DW_Block8192 is array(DW_Block8192_Range) of DWord; - - - subtype Hex_Byte_Range is Natural range 1..2; - subtype Hex_Word_Range is Natural range 1..8; - subtype Hex_DWord_Range is Natural range 1..16; - - - subtype Hex_Byte is String (Hex_Byte_Range); - subtype Hex_Word is String (Hex_Word_Range); - subtype Hex_DWord is String (Hex_DWord_Range); - - subtype Message_Block_Length256 is Natural range 0 .. 32; - subtype Message_Block_Length512 is Natural range 0 .. 64; - subtype Message_Block_Length1024 is Natural range 0 .. 128; - - - - - - - - --------------------------------------------------------------------------- - ---------------------------FUNCTIONS--------------------------------------- - --------------------------------------------------------------------------- - - function Shift_Left (Value : Byte; Amount : Natural) return Byte; - function Shift_Right (Value : Byte; Amount : Natural) return Byte; - function Rotate_Left (Value : Byte; Amount : Natural) return Byte; - function Rotate_Right (Value : Byte; Amount : Natural) return Byte; - - function Shift_Left (Value : DByte; Amount : Natural) return DByte; - function Shift_Right (Value : DByte; Amount : Natural) return DByte; - function Rotate_Left (Value : DByte; Amount : Natural) return DByte; - function Rotate_Right (Value : DByte; Amount : Natural) return DByte; - - function Shift_Left (Value : Word; Amount : Natural) return Word; - function Shift_Right (Value : Word; Amount : Natural) return Word; - function Rotate_Left (Value : Word; Amount : Natural) return Word; - function Rotate_Right (Value : Word; Amount : Natural) return Word; - - function Shift_Left (Value : DWord; Amount : Natural) return DWord; - function Shift_Right (Value : DWord; Amount : Natural) return DWord; - function Rotate_Left (Value : DWord; Amount : Natural) return DWord; - function Rotate_Right (Value : DWord; Amount : Natural) return DWord; - - pragma Import (Intrinsic, Shift_Left); - pragma Import (Intrinsic, Shift_Right); - - function Shift_Left (Value : Bytes; Amount : Natural) return Bytes; - function Shift_Left (Value : B_Block128; Amount : Natural) return B_Block128; - function Shift_Right(Value : Bytes; Amount : Natural) return Bytes; - function Shift_Right(Value : B_Block128; Amount : Natural) return B_Block128; - - --Operations for Bytes - function "xor"(Left, Right : Bytes) return Bytes; - function "xor"(Left : Bytes; Right : Byte) return Bytes; - function "+"(Left : Bytes; Right : Byte) return Bytes; - function "+"(Left : Byte; Right : Bytes) return Bytes; - function "and"(Left, Right : Bytes) return Bytes; - - - -- Operations for Words - function "xor"(Left, Right : Words) return Words; - function "+"(Left : Words; Right : Word) return Words; - function "+"(Left : Word; Right : Words) return Words; - function "+"(Left : Words; Right : Byte) return Words; - - - -- Operations for DWords - function "xor"(Left, Right : DWords) return DWords; - function "+"(Left : DWords; Right : DWord) return DWords; - function "+"(Left : DWord; Right : DWords) return DWords; - function "+"(Left : DWords; Right : Byte) return DWords; - - -- Bytes to Word - function To_Word (A,B,C,D : Byte) return Word; - function To_Word (X : Byte_Word) return Word; - function R_To_Word (X : Byte_Word) return Word; -- reverse - function To_Words(Byte_Array : Bytes) return Words; - - -- Word to Bytes - function To_Bytes (X : Word) return Byte_Word; - function R_To_Bytes (X : Word) return Byte_Word; --reverse - function To_Bytes(Word_Array : Words) return Bytes; - - --Word = b_0 b_1 b2 b_3 - -- ByteX returns b_n - function Byte0 (W : Word) return Byte; - function Byte1 (W : Word) return Byte; - function Byte2 (W : Word) return Byte; - function Byte3 (W : Word) return Byte; - - -- Bytes to DWord - function To_DWord (X : Byte_DWord) return DWord; - function R_To_DWord (X : Byte_DWord) return DWord; - function To_DWords (Byte_Array : Bytes) return DWords; - - -- DWord to Bytes - function To_Bytes (X : DWord) return Byte_DWord; - function R_To_Bytes (X : DWord) return Byte_DWord; - function To_Bytes (DWord_Array : DWords) return Bytes; - - - --DWord = b_0 b_1 b2 b_3 b_4 b_5 b_6 b_7 - -- ByteX returns b_n - function Byte0 (D : DWord) return Byte; - function Byte1 (D : DWord) return Byte; - function Byte2 (D : DWord) return Byte; - function Byte3 (D : DWord) return Byte; - function Byte4 (D : DWord) return Byte; - function Byte5 (D : DWord) return Byte; - function Byte6 (D : DWord) return Byte; - function Byte7 (D : DWord) return Byte; - - -- To_Word - function To_Word (A,B,C,D : Character) return Word; - - -- String to Bytes - function To_Bytes(Message : String) return Bytes; - - -- Bytes to String - function To_String(ASCII : Bytes) return String; - - - -- To_Hex - function To_Hex(B : Byte) return Hex_Byte; - function To_Hex(W : Word) return Hex_Word; - function To_Hex(D : DWord) return Hex_DWord; - - -- To_Bytes - function Hex_To_Bytes(Hex : String) return Bytes; - - -- Is_Zero - -- returns only true if the "input array" X = (others => 0) - function Is_Zero(Byte_Array : Bytes) return Boolean; - function Is_Zero(Word_Array : Words) return Boolean; - function Is_Zero(DWord_Array : DWords) return Boolean; - - - -- Byte Blocks To Bytes. - -- Needed for generic packages to convert a specific byte block. - function To_Bytes(B : B_Block64) return Bytes; - function To_Bytes(B : B_Block128) return Bytes; - function To_Bytes(B : B_Block192) return Bytes; - function To_Bytes(B : B_Block256) return Bytes; - function To_Bytes(W : W_Block160) return Bytes; - function To_Bytes(W : W_Block256) return Bytes; - function To_Bytes(W : W_Block512) return Bytes; - function To_Bytes(D : DW_Block256) return Bytes; - function To_Bytes(D : DW_Block384) return Bytes; - function To_Bytes(D : DW_Block512) return Bytes; - function To_Bytes(D : DW_Block1024) return Bytes; - function To_Bytes(D : DW_Block8192) return Bytes; - - - -- Bytes To block of Bytes. - -- Needed for generic packages to convert a specific byte block. - function To_B_Block64(B : Bytes) return B_Block64; - function To_B_Block128(B : Bytes) return B_Block128; - function To_B_Block192(B : Bytes) return B_Block192; - function To_B_Block256(B : Bytes) return B_Block256; - - - -- Bytes To block of words. - -- Needed for generic packages to convert a specific byte block. - function To_W_Block160(B : Bytes) return W_Block160; - function To_W_Block256(B : Bytes) return W_Block256; - function To_W_Block512(B : Bytes) return W_Block512; - - - -- Bytes To block of double words. - -- Needed for generic packages to convert a specific byte block. - function To_DW_Block256(B : Bytes) return DW_Block256; - function To_DW_Block384(B : Bytes) return DW_Block384; - function To_DW_Block512(B : Bytes) return DW_Block512; - function To_DW_Block1024(B : Bytes) return DW_Block1024; - function To_DW_Block8192(B : Bytes) return DW_Block8192; - - -- Needed for generic packages to convert a specific byte block. - function "xor"(Left, Right : B_Block64) return B_Block64; - function "xor"(Left, Right : B_Block128) return B_Block128; - function "xor"(Left, Right : W_Block160) return W_Block160; - function "xor"(Left, Right : W_Block256) return W_Block256; - function "xor"(Left, Right : W_Block512) return W_Block512; - function "xor"(Left, Right : DW_Block512) return DW_Block512; - function "xor"(Left, Right : DW_Block1024) return DW_Block1024; - function "xor"(Left, Right : DW_Block8192) return DW_Block8192; - - function "+"(Left : B_Block128; Right : Byte) return B_Block128; - - - -- Splits byte array of length n into a left part of length - -- ceiling(n/2) and a right part of length floor(n/2). - function Left_Part(Block : in Bytes) return Bytes; - function Right_Part(Block : in Bytes) return Bytes; - - - - -- Nested generic package - generic - type T is mod <>; - type T_A is array (Integer range <>) of T; - with function Shift_Left (Value : T; Amount : Natural) return T is <>; - with function Shift_Right (Value : T; Amount : Natural) return T is <>; - - package Generic_Mod_Aux is - function "xor"(Left, Right : T_A) return T_A; - function "xor"(Left : T_A; Right : T) return T_A; - function "xor"(Left : T; Right : T_A) return T_A; - - function "and"(Left, Right : T_A) return T_A; - - function "+"(Left : T_A; Right : T) return T_A; - function "+"(Left : T; Right : T_A) return T_A; - - function Is_Zero(Item : T_A) return Boolean; - - function Left_Part (Block : in T_A) return T_A; - function Right_Part(Block : in T_A) return T_A; - - function Shift_Left(Value : T_A; Amount : Natural) return T_A; - function Shift_Right(Value : T_A; Amount : Natural) return T_A; - end Generic_Mod_Aux; - - - - --------------------------------------------------------------------------- - -------------------------------PRIVATE------------------------------------- - --------------------------------------------------------------------------- - -private - pragma Inline (To_B_Block128,To_B_Block192,To_B_Block256); - pragma Inline ("xor","+"); - pragma Inline (R_To_Bytes, To_Bytes); - pragma Inline (To_Word, Byte0, Byte1, Byte2, Byte3); - pragma Inline (Byte4, Byte5, Byte6, Byte7); - pragma Inline (To_DWord, R_To_DWord); - pragma Inline (Is_Zero); - pragma Inline (Left_Part, Right_Part); - pragma Import (Intrinsic, Rotate_Left); - pragma Import (Intrinsic, Rotate_Right); - - pragma Optimize(Time); -end Crypto.Types; |