Add reference implementation verification scripts

This commit is contained in:
2025-09-19 21:11:41 -07:00
parent 6287904204
commit 618c1331ce
4 changed files with 138 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
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"]);