eucrypt_crc32_div... 1
eucrypt_crc32_div... 2
eucrypt_crc32_div... 3
eucrypt_crc32_div... 4
eucrypt_crc32_div... 5
eucrypt_crc32_div... 6
eucrypt_crc32_div... 7
eucrypt_crc32_div... 8
eucrypt_crc32_div... 9
eucrypt_crc32_div... 10
eucrypt_crc32_div... 11
eucrypt_crc32_div... 12
eucrypt_crc32_div... 13
eucrypt_crc32_div... 14
eucrypt_crc32_div... 15
eucrypt_crc32_div... 16
eucrypt_crc32_div... 17
eucrypt_crc32_div... 18
eucrypt_crc32_div... 19
eucrypt_crc32_div... 20
eucrypt_crc32_div... 21
eucrypt_crc32_div... 22
eucrypt_crc32_div... 23
eucrypt_crc32_div... 24
eucrypt_crc32_div... 25
eucrypt_crc32_div... 26
eucrypt_crc32_div... 27
eucrypt_crc32_div... 28
eucrypt_crc32_div... 29
eucrypt_crc32_div... 30
eucrypt_crc32_div... 31
eucrypt_crc32_div... 32
eucrypt_crc32_div... 33
eucrypt_crc32_div... 34
eucrypt_crc32_div... 35
eucrypt_crc32_div... 36
eucrypt_crc32_div... 37
eucrypt_crc32_div... 38
eucrypt_crc32_div... 39
eucrypt_crc32_div... 40
eucrypt_crc32_div... 41
eucrypt_crc32_div... 42
eucrypt_crc32_div... 43
eucrypt_crc32_div... 44
eucrypt_crc32_div... 45
eucrypt_crc32_div... 46
eucrypt_crc32_div... 47
eucrypt_crc32_div... 48
eucrypt_crc32_div... 49
eucrypt_crc32_div... 50
eucrypt_crc32_div... 51
eucrypt_crc32_div... 52
eucrypt_crc32_div... 53
eucrypt_crc32_div... 54
eucrypt_crc32_div... 55
eucrypt_crc32_div... 56
eucrypt_crc32_div... 57
eucrypt_crc32_div... 58
eucrypt_crc32_div... 59
eucrypt_crc32_div... 60
eucrypt_crc32_div... 61
eucrypt_crc32_div... 62
eucrypt_crc32_div... 63
eucrypt_crc32_div... 64
eucrypt_crc32_div... 65
eucrypt_crc32_div... 66 package body CRC32 is
eucrypt_crc32_div... 67
eucrypt_crc32_div... 68 function CRC ( S : in String ) return CRC32 is
eucrypt_crc32_div... 69
eucrypt_crc32_div... 70 R : CRC32 := 16#FF_FF_FF_FF#;
eucrypt_crc32_div... 71
eucrypt_crc32_div... 72 begin
eucrypt_crc32_div... 73
eucrypt_crc32_div... 74 for I in Integer range S'First .. S'Last loop
eucrypt_crc32_div... 75 declare
eucrypt_crc32_div... 76 C : CRC32 := Character'Pos (S (I));
eucrypt_crc32_div... 77 begin
eucrypt_crc32_div... 78 CRC_Step(C, R);
eucrypt_crc32_div... 79 end;
eucrypt_crc32_div... 80 end loop;
eucrypt_crc32_div... 81
eucrypt_crc32_div... 82 R := Bits_Reverse(R);
eucrypt_crc32_div... 83
eucrypt_crc32_div... 84
eucrypt_crc32_div... 85 R := R xor 16#FF_FF_FF_FF#;
eucrypt_crc32_div... 86 return R;
eucrypt_crc32_div... 87
eucrypt_crc32_div... 88 end CRC;
eucrypt_crc32_div... 89
eucrypt_crc32_div... 90 function CRC ( Data: in Octet_Array ) return CRC32 is
eucrypt_crc32_div... 91
eucrypt_crc32_div... 92 R : CRC32 := 16#FF_FF_FF_FF#;
eucrypt_crc32_div... 93
eucrypt_crc32_div... 94 begin
eucrypt_crc32_div... 95
eucrypt_crc32_div... 96 for I in Integer range Data'First .. Data'Last loop
eucrypt_crc32_div... 97 declare
eucrypt_crc32_div... 98 C : CRC32 := CRC32'Val( Data (I) );
eucrypt_crc32_div... 99 begin
eucrypt_crc32_div... 100 CRC_Step(C, R);
eucrypt_crc32_div... 101 end;
eucrypt_crc32_div... 102 end loop;
eucrypt_crc32_div... 103
eucrypt_crc32_div... 104 R := Bits_Reverse(R);
eucrypt_crc32_div... 105
eucrypt_crc32_div... 106
eucrypt_crc32_div... 107 R := R xor 16#FF_FF_FF_FF#;
eucrypt_crc32_div... 108 return R;
eucrypt_crc32_div... 109
eucrypt_crc32_div... 110 end CRC;
eucrypt_crc32_div... 111
eucrypt_crc32_div... 112
eucrypt_crc32_div... 113
eucrypt_crc32_div... 114
eucrypt_crc32_div... 115
eucrypt_crc32_div... 116 procedure CRC_Step(C : in out CRC32; R : in out CRC32) is
eucrypt_crc32_div... 117 D : constant CRC32 := 16#04_C1_1D_B7#;
eucrypt_crc32_div... 118 begin
eucrypt_crc32_div... 119 for J in Integer range 1 .. 8 loop
eucrypt_crc32_div... 120 declare
eucrypt_crc32_div... 121 Bit31Set : CRC32 := 0;
eucrypt_crc32_div... 122 Bit1 : constant CRC32 := Rotate_Right(1 and C, 1);
eucrypt_crc32_div... 123 begin
eucrypt_crc32_div... 124 R := R xor Bit1;
eucrypt_crc32_div... 125 Bit31Set := Rotate_Left(Bit31 and R, 1);
eucrypt_crc32_div... 126 R := Shift_Left (R, 1);
eucrypt_crc32_div... 127
eucrypt_crc32_div... 128
eucrypt_crc32_div... 129
eucrypt_crc32_div... 130
eucrypt_crc32_div... 131
eucrypt_crc32_div... 132
eucrypt_crc32_div... 133
eucrypt_crc32_div... 134
eucrypt_crc32_div... 135 R := R xor ((not (Bit31Set - 1)) and D);
eucrypt_crc32_div... 136
eucrypt_crc32_div... 137
eucrypt_crc32_div... 138 C := Shift_Right (C, 1);
eucrypt_crc32_div... 139
eucrypt_crc32_div... 140 end;
eucrypt_crc32_div... 141 end loop;
eucrypt_crc32_div... 142 end CRC_Step;
eucrypt_crc32_div... 143
eucrypt_crc32_div... 144 function Bits_Reverse(A : in CRC32) return CRC32 is
eucrypt_crc32_div... 145 R : CRC32 := 16#00_00_00_00#;
eucrypt_crc32_div... 146 B : CRC32 := A;
eucrypt_crc32_div... 147 begin
eucrypt_crc32_div... 148 for I in Integer range 1 .. 32 loop
eucrypt_crc32_div... 149 declare
eucrypt_crc32_div... 150 Bit : constant CRC32 := (1 and B);
eucrypt_crc32_div... 151 begin
eucrypt_crc32_div... 152 B := Shift_Right (B, 1);
eucrypt_crc32_div... 153 R := Shift_Left (R, 1);
eucrypt_crc32_div... 154 R := R or Bit;
eucrypt_crc32_div... 155 end;
eucrypt_crc32_div... 156 end loop;
eucrypt_crc32_div... 157 return R;
eucrypt_crc32_div... 158 end Bits_Reverse;
eucrypt_crc32_div... 159 end CRC32;
eucrypt_crc32_div... 160