src/HOL/SPARK/Examples/RIPEMD-160/rmd.ads
author wenzelm
Wed, 04 Oct 2017 12:00:53 +0200
changeset 66787 64b47495676d
parent 41561 d1318f3c86ba
permissions -rw-r--r--
obsolete;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41561
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     1
with Wordops;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     2
use type Wordops.Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     3
--# inherit Wordops;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     4
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     5
package RMD
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     6
is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     7
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     8
   -- Types
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
     9
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    10
   subtype Word is Wordops.Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    11
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    12
   type Chain is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    13
     record
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    14
        H0, H1, H2, H3, H4 : Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    15
     end record;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    16
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    17
   type Block_Index is range 0..15;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    18
   type Block is array(Block_Index) of Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    19
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    20
   type Message_Index is range 0..2**32;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    21
   type Message is array(Message_Index range <>) of Block;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    22
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    23
   -- Isabelle specification
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    24
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    25
   --# function rmd_hash(X : Message; L : Message_Index) return Chain;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    26
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    27
   function Hash(X : Message) return Chain;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    28
   --# pre X'First = 0;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    29
   --# return rmd_hash(X, X'Last + 1);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    30
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    31
private
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    32
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    33
   -- Types
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    34
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    35
   type Round_Index is range 0..79;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    36
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    37
   type Chain_Pair is
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    38
      record
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    39
         Left, Right : Chain;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    40
      end record;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    41
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    42
   type Block_Permutation is array(Round_Index) of Block_Index;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    43
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    44
   subtype Rotate_Amount is Wordops.Rotate_Amount;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    45
   type Rotate_Definition is array(Round_Index) of Rotate_Amount;
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
   -- Isabelle proof functions
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    49
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    50
   --# function f_spec(J : Round_Index; X,Y,Z : Word) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    51
   --# function K_l_spec(J : Round_Index) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    52
   --# function K_r_spec(J : Round_Index) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    53
   --# function r_l_spec(J : Round_Index) return Block_Index;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    54
   --# function r_r_spec(J : Round_Index) return Block_Index;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    55
   --# function s_l_spec(J : Round_Index) return Rotate_Amount;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    56
   --# function s_r_spec(J : Round_Index) return Rotate_Amount;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    57
   --# function steps(CS : Chain_Pair; I : Round_Index; B : Block)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    58
   --#    return Chain_Pair;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    59
   --# function round_spec(C : Chain; B : Block) return Chain;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    60
   --# function rounds(C : Chain; I : Message_Index; X : Message)
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    61
   --#    return Chain;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    62
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    63
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    64
   -- Spark Implementation
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    65
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    66
   function F(J : Round_Index; X,Y,Z : Word) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    67
   --# return f_spec(J, X, Y, Z);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    68
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    69
   function K_L(J : Round_Index) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    70
   --# return K_l_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    71
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    72
   function K_R(J : Round_Index) return Word;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    73
   --# return K_r_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    74
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    75
   function R_L(J : Round_Index) return Block_Index;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    76
   --# return r_l_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    77
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    78
   function R_R(J : Round_Index) return Block_Index;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    79
   --# return r_r_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    80
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    81
   function S_L(J : Round_Index) return Rotate_Amount;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    82
   --# return s_l_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    83
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    84
   function S_R(J : Round_Index) return Rotate_Amount;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    85
   --# return s_r_spec(J);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    86
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    87
   procedure Round(CA, CB, CC, CD, CE : in out Word; X: in Block);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    88
   --# derives CA, CB, CC, CD, CE from X, CA, CB, CC, CD, CE;
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    89
   --# post Chain'(CA, CB, CC, CD, CE) =
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    90
   --#        round_spec(Chain'(CA~, CB~, CC~, CD~, CE~), X);
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    91
d1318f3c86ba Added new SPARK verification environment.
berghofe
parents:
diff changeset
    92
end RMD;