53 lines
1.1 KiB
Plaintext
53 lines
1.1 KiB
Plaintext
import "/Users/emertens/Source/ascon/Ascon.cry";
|
|
|
|
let i8 = llvm_int 8;
|
|
let i64 = llvm_int 64;
|
|
let S_type = llvm_array 5 i64;
|
|
|
|
let fresh_alloc n t = do {
|
|
X <- llvm_fresh_var n t;
|
|
X_ptr <- llvm_alloc t;
|
|
llvm_points_to X_ptr (llvm_term X);
|
|
return (X, X_ptr);
|
|
};
|
|
|
|
let fresh_alloc_readonly n t = do {
|
|
X <- llvm_fresh_var n t;
|
|
X_ptr <- llvm_alloc_readonly t;
|
|
llvm_points_to X_ptr (llvm_term X);
|
|
return (X, X_ptr);
|
|
};
|
|
|
|
thm_ROUND <- llvm_verify
|
|
m "ROUND"
|
|
[]
|
|
false
|
|
do {
|
|
(S, S_ptr) <- fresh_alloc "S" S_type;
|
|
C <- llvm_fresh_var "C" i8;
|
|
llvm_execute_func [S_ptr, llvm_term C];
|
|
llvm_points_to S_ptr (llvm_term {{ round S (zext C) }});
|
|
}
|
|
rme;
|
|
|
|
let mk_P12 = llvm_verify
|
|
m "P12"
|
|
[thm_ROUND]
|
|
false
|
|
do {
|
|
(S, S_ptr) <- fresh_alloc "S" S_type;
|
|
llvm_execute_func [S_ptr];
|
|
llvm_points_to S_ptr (llvm_term {{ Ascon_p`{12} S }});
|
|
}
|
|
(w4_unint_rme ["Ascon::round"]);
|
|
|
|
let mk_P8 = llvm_verify
|
|
m "P8"
|
|
[thm_ROUND]
|
|
false
|
|
do {
|
|
(S, S_ptr) <- fresh_alloc "S" S_type;
|
|
llvm_execute_func [S_ptr];
|
|
llvm_points_to S_ptr (llvm_term {{ Ascon_p`{8} S }});
|
|
}
|
|
(w4_unint_rme ["Ascon::round"]); |