eucrypt_ch6_kecca... 1
eucrypt_ch6_kecca... 2
eucrypt_ch6_kecca... 3
eucrypt_ch6_kecca... 4
eucrypt_ch6_kecca... 5
eucrypt_ch6_kecca... 6
eucrypt_ch6_kecca... 7
eucrypt_ch6_kecca... 8 package SMG_Keccak is
eucrypt_ch6_kecca... 9 pragma Pure(SMG_Keccak);
eucrypt_ch6_kecca... 10
eucrypt_ch6_kecca... 11
eucrypt_ch6_kecca... 12 Keccak_L: constant := 6;
eucrypt_ch6_kecca... 13
eucrypt_ch6_kecca... 14
eucrypt_ch6_kecca... 15
eucrypt_ch10_oaep... 16 Default_Bitrate: constant := 1344;
eucrypt_ch10_oaep... 17
eucrypt_ch10_oaep... 18
eucrypt_ch6_kecca... 19
eucrypt_ch6_kecca... 20 XY_Length: constant := 5;
eucrypt_ch6_kecca... 21 Z_Length: constant := 2**Keccak_L;
eucrypt_ch6_kecca... 22 Width: constant := XY_Length * XY_Length * Z_Length;
eucrypt_ch6_kecca... 23 N_Rounds: constant := 12 + 2*Keccak_L;
eucrypt_ch6_kecca... 24
eucrypt_ch6_kecca... 25
eucrypt_ch6_kecca... 26 type XYCoord is mod XY_Length;
eucrypt_ch6_kecca... 27 type ZCoord is mod Z_Length;
eucrypt_ch6_kecca... 28 type Round_Index is mod N_Rounds;
eucrypt_ch6_kecca... 29
eucrypt_ch6_kecca... 30 type ZWord is mod 2**Z_Length;
eucrypt_ch6_kecca... 31 type Plane is array(XYCoord) of ZWord;
eucrypt_ch6_kecca... 32 type State is array(XYCoord, XYCoord) of ZWord;
eucrypt_ch6_kecca... 33
eucrypt_ch6_kecca... 34 type Round_Constants is array(Round_Index) of ZWord;
eucrypt_ch6_kecca... 35
eucrypt_ch7_kecca... 36
eucrypt_ch7_kecca... 37
eucrypt_ch7_kecca... 38
eucrypt_ch7_kecca... 39 subtype Keccak_Rate is Positive range 1..Width;
eucrypt_ch7_kecca... 40
eucrypt_ch7_kecca... 41 type Bit is mod 2;
eucrypt_ch7_kecca... 42 type Bitstream is array( Natural range <> ) of Bit;
eucrypt_ch7_kecca... 43 subtype Bitword is Bitstream( 0..Z_Length - 1 );
eucrypt_ch7_kecca... 44
eucrypt_ch7_kecca... 45
eucrypt_ch9_kecca... 46 function BitsToWord( BWord : in Bitword ) return ZWord;
eucrypt_ch9_kecca... 47 function WordToBits( Word : in ZWord ) return Bitword;
eucrypt_ch9_kecca... 48
eucrypt_ch9_kecca... 49
eucrypt_ch9_kecca... 50 function FlipOctets( BWord : in Bitword ) return Bitword;
eucrypt_ch7_kecca... 51
eucrypt_ch7_kecca... 52
eucrypt_ch7_kecca... 53
eucrypt_ch7_kecca... 54
eucrypt_ch10_oaep... 55
eucrypt_ch7_kecca... 56
eucrypt_ch7_kecca... 57
eucrypt_ch7_kecca... 58 procedure Sponge(Input : in Bitstream;
eucrypt_ch10_oaep... 59 Output : out Bitstream;
eucrypt_ch10_oaep... 60 Block_Len : in Keccak_Rate := Default_Bitrate );
eucrypt_ch7_kecca... 61
eucrypt_ch6_kecca... 62 private
eucrypt_ch6_kecca... 63
eucrypt_ch6_kecca... 64
eucrypt_ch6_kecca... 65
eucrypt_ch7_kecca... 66
eucrypt_ch7_kecca... 67
eucrypt_ch7_kecca... 68
eucrypt_ch7_kecca... 69
eucrypt_ch7_kecca... 70 procedure SqueezeBlock( Block: out Bitstream; S: in State);
eucrypt_ch7_kecca... 71
eucrypt_ch7_kecca... 72
eucrypt_ch7_kecca... 73
eucrypt_ch7_kecca... 74
eucrypt_ch7_kecca... 75
eucrypt_ch7_kecca... 76 procedure AbsorbBlock( Block: in Bitstream; S: in out State );
eucrypt_ch7_kecca... 77
eucrypt_ch6_kecca... 78
eucrypt_ch6_kecca... 79 RC : constant Round_Constants :=
eucrypt_ch6_kecca... 80 (
eucrypt_ch6_kecca... 81 16#0000_0000_0000_0001#,
eucrypt_ch6_kecca... 82 16#0000_0000_0000_8082#,
eucrypt_ch6_kecca... 83 16#8000_0000_0000_808A#,
eucrypt_ch6_kecca... 84 16#8000_0000_8000_8000#,
eucrypt_ch6_kecca... 85 16#0000_0000_0000_808B#,
eucrypt_ch6_kecca... 86 16#0000_0000_8000_0001#,
eucrypt_ch6_kecca... 87 16#8000_0000_8000_8081#,
eucrypt_ch6_kecca... 88 16#8000_0000_0000_8009#,
eucrypt_ch6_kecca... 89 16#0000_0000_0000_008A#,
eucrypt_ch6_kecca... 90 16#0000_0000_0000_0088#,
eucrypt_ch6_kecca... 91 16#0000_0000_8000_8009#,
eucrypt_ch6_kecca... 92 16#0000_0000_8000_000A#,
eucrypt_ch6_kecca... 93 16#0000_0000_8000_808B#,
eucrypt_ch6_kecca... 94 16#8000_0000_0000_008B#,
eucrypt_ch6_kecca... 95 16#8000_0000_0000_8089#,
eucrypt_ch6_kecca... 96 16#8000_0000_0000_8003#,
eucrypt_ch6_kecca... 97 16#8000_0000_0000_8002#,
eucrypt_ch6_kecca... 98 16#8000_0000_0000_0080#,
eucrypt_ch6_kecca... 99 16#0000_0000_0000_800A#,
eucrypt_ch6_kecca... 100 16#8000_0000_8000_000A#,
eucrypt_ch6_kecca... 101 16#8000_0000_8000_8081#,
eucrypt_ch6_kecca... 102 16#8000_0000_0000_8080#,
eucrypt_ch6_kecca... 103 16#0000_0000_8000_0001#,
eucrypt_ch6_kecca... 104 16#8000_0000_8000_8008#
eucrypt_ch6_kecca... 105 );
eucrypt_ch6_kecca... 106
eucrypt_ch6_kecca... 107
eucrypt_ch6_kecca... 108 function Rotate_Left( Value : ZWord;
eucrypt_ch6_kecca... 109 Amount : Natural)
eucrypt_ch6_kecca... 110 return ZWord;
eucrypt_ch6_kecca... 111 pragma Import(Intrinsic, Rotate_Left);
eucrypt_ch6_kecca... 112
eucrypt_ch6_kecca... 113 function Shift_Right( Value : ZWord;
eucrypt_ch6_kecca... 114 Amount : Natural)
eucrypt_ch6_kecca... 115 return ZWord;
eucrypt_ch6_kecca... 116 pragma Import(Intrinsic, Shift_Right);
eucrypt_ch6_kecca... 117
eucrypt_ch9_kecca... 118 function Shift_Left( Value : ZWord;
eucrypt_ch9_kecca... 119 Amount : Natural)
eucrypt_ch9_kecca... 120 return ZWord;
eucrypt_ch9_kecca... 121 pragma Import(Intrinsic, Shift_Left);
eucrypt_ch9_kecca... 122
eucrypt_ch7_kecca... 123
eucrypt_ch6_kecca... 124 function Theta ( Input : in State) return State;
eucrypt_ch6_kecca... 125 function Rho ( Input : in State) return State;
eucrypt_ch6_kecca... 126 function Pi ( Input : in State) return State;
eucrypt_ch6_kecca... 127 function Chi ( Input : in State) return State;
eucrypt_ch6_kecca... 128 function Iota ( Round_Const : in ZWord; Input : in State) return State;
eucrypt_ch6_kecca... 129
eucrypt_ch7_kecca... 130
eucrypt_ch7_kecca... 131
eucrypt_ch6_kecca... 132
eucrypt_ch6_kecca... 133 function Keccak_Function(Input: in State) return State;
eucrypt_ch6_kecca... 134
eucrypt_ch6_kecca... 135 end SMG_Keccak;