src/HOL/SPARK/Examples/RIPEMD-160/rmd.adb
author wenzelm
Mon, 13 Apr 2020 22:08:14 +0200
changeset 71751 abf3e80bd815
parent 41561 d1318f3c86ba
permissions -rw-r--r--
tuned NEWS;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     1
package body RMD is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     2
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     3
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     4
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     5
   function F(J : Round_Index; X,Y,Z : Word) return Word
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     6
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     7
      Result: Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     8
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     9
      if     0 <= J and J <= 15 then Result := X xor Y xor Z;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    10
      elsif 16 <= J and J <= 31 then Result := (X and Y) or (not X and Z);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    11
      elsif 32 <= J and J <= 47 then Result := (X or not Y) xor Z;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    12
      elsif 48 <= J and J <= 63 then Result := (X and Z) or (Y and not Z);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    13
      else                           Result := X xor (Y or not Z);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    14
      end if;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    15
      return Result;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    16
   end F;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    17
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    18
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    19
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    20
   function K_L(J : Round_Index) return Word
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    21
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    22
      K: Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    23
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    24
      if     0 <= J and J <= 15 then K := 16#0000_0000#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    25
      elsif 16 <= J and J <= 31 then K := 16#5A82_7999#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    26
      elsif 32 <= J and J <= 47 then K := 16#6ED9_EBA1#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    27
      elsif 48 <= J and J <= 63 then K := 16#8F1B_BCDC#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    28
      else                           K := 16#A953_FD4E#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    29
      end if;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    30
      return K;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    31
   end K_L;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    32
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    33
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    34
   function K_R(J : Round_Index) return Word
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    35
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    36
      K: Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    37
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    38
      if     0 <= J and J <= 15 then K := 16#50A2_8BE6#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    39
      elsif 16 <= J and J <= 31 then K := 16#5C4D_D124#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    40
      elsif 32 <= J and J <= 47 then K := 16#6D70_3EF3#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    41
      elsif 48 <= J and J <= 63 then K := 16#7A6D_76E9#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    42
      else                           K := 16#0000_0000#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    43
      end if;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    44
      return K;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    45
   end K_R;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    46
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    47
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    48
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    49
   function R_L(J : Round_Index) return Block_Index
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    50
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    51
      R_Values : constant Block_Permutation := Block_Permutation'
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    52
        (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    53
         7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    54
         3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    55
         1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    56
         4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    57
      --# for R_Values declare rule;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    58
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    59
      return R_Values(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    60
   end R_L;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    61
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    62
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    63
   function R_R(J : Round_Index) return Block_Index
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    64
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    65
      R_Values : constant Block_Permutation := Block_Permutation'
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    66
        (5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    67
         6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    68
         15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    69
         8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    70
         12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    71
      --# for R_Values declare rule;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    72
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    73
      return R_Values(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    74
   end R_R;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    75
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    76
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    77
   function S_L(J : Round_Index) return Rotate_Amount
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    78
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    79
      S_Values : constant Rotate_Definition := Rotate_Definition'
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    80
        (11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    81
         7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    82
         11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    83
         11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    84
         9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    85
      --# for S_Values declare rule;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    86
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    87
      return S_Values(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    88
   end S_L;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    89
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    90
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    91
   function S_R(J : Round_Index) return Rotate_Amount
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    92
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    93
      S_Values : constant Rotate_Definition := Rotate_Definition'
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    94
        (8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    95
         9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    96
         9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    97
         15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    98
         8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    99
      --# for S_Values declare rule;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   100
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   101
      return S_Values(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   102
   end S_R;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   103
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   104
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   105
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   106
   procedure Round(CA, CB, CC, CD, CE : in out Word; X : in Block)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   107
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   108
      CLA, CLB, CLC, CLD, CLE, CRA, CRB, CRC, CRD, CRE : Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   109
      T : Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   110
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   111
      CLA := CA;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   112
      CLB := CB;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   113
      CLC := CC;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   114
      CLD := CD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   115
      CLE := CE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   116
      CRA := CA;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   117
      CRB := CB;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   118
      CRC := CC;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   119
      CRD := CD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   120
      CRE := CE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   121
      for J in Round_Index range 0..79
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   122
      loop
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   123
         -- left
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   124
         T := Wordops.Rotate(S_L(J),
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   125
                             CLA +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   126
                               F(J, CLB, CLC, CLD) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   127
                               X(R_L(J)) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   128
                               K_L(J)) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   129
           CLE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   130
         CLA := CLE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   131
         CLE := CLD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   132
         CLD := Wordops.Rotate(10, CLC);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   133
         CLC := CLB;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   134
         CLB := T;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   135
         -- right
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   136
         T := Wordops.Rotate(S_R(J),
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   137
                             CRA +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   138
                               F(79 - J, CRB, CRC, CRD) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   139
                               X(R_R(J)) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   140
                               K_R(J)) +
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   141
           CRE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   142
         CRA := CRE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   143
         CRE := CRD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   144
         CRD := Wordops.Rotate(10, CRC);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   145
         CRC := CRB;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   146
         CRB := T;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   147
         --# assert Chain_Pair'(Chain'(CLA, CLB, CLC, CLD, CLE),
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   148
         --#                    Chain'(CRA, CRB, CRC, CRD, CRE)) =
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   149
         --#   steps(Chain_Pair'(Chain'(CA~, CB~, CC~, CD~, CE~),
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   150
         --#                    Chain'(CA~, CB~, CC~, CD~, CE~)), J + 1, X)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   151
         --# and CA = CA~ and CB = CB~ and CC = CC~ and CD = CD~ and CE = CE~;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   152
      end loop;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   153
      T    := CB + CLC + CRD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   154
      CB := CC + CLD + CRE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   155
      CC := CD + CLE + CRA;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   156
      CD := CE + CLA + CRB;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   157
      CE := CA + CLB + CRC;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   158
      CA := T;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   159
   end Round;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   160
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   161
   function Hash(X : Message) return Chain
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   162
   is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   163
      CA_Init : constant Word := 16#6745_2301#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   164
      CB_Init : constant Word := 16#EFCD_AB89#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   165
      CC_Init : constant Word := 16#98BA_DCFE#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   166
      CD_Init : constant Word := 16#1032_5476#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   167
      CE_Init : constant Word := 16#C3D2_E1F0#;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   168
      CA, CB, CC, CD, CE : Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   169
   begin
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   170
      CA := CA_Init;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   171
      CB := CB_Init;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   172
      CC := CC_Init;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   173
      CD := CD_Init;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   174
      CE := CE_Init;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   175
      for I in Message_Index range X'First..X'Last
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   176
      loop
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   177
         Round(CA, CB, CC, CD, CE, X(I));
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   178
         --# assert Chain'(CA, CB, CC, CD, CE) = rounds(
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   179
         --#    Chain'(CA_Init, CB_Init, CC_Init, CD_Init, CE_Init),
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   180
         --#    I + 1,
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   181
         --#    X);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   182
      end loop;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   183
      return Chain'(CA, CB, CC, CD, CE);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   184
   end Hash;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   185
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   186
end RMD;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
   187