@@ -225,8 +225,23 @@ let LENGTH_POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_MC =
225225 REWRITE_CONV[poly_basemul_acc_montgomery_cached_k2_mc] `LENGTH poly_basemul_acc_montgomery_cached_k2_mc`
226226 |> CONV_RULE (RAND_CONV LENGTH_CONV);;
227227
228+ let POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_PREAMBLE_LENGTH = new_definition
229+ `POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_PREAMBLE_LENGTH = 20 `;;
230+
231+ let POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_POSTAMBLE_LENGTH = new_definition
232+ `POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_POSTAMBLE_LENGTH = 24 `;;
233+
234+ let POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_START = new_definition
235+ `POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_START = POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_PREAMBLE_LENGTH`;;
236+
237+ let POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_END = new_definition
238+ `POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_END = LENGTH poly_basemul_acc_montgomery_cached_k2_mc - POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_POSTAMBLE_LENGTH`;;
239+
228240let LENGTH_SIMPLIFY_CONV =
229- REWRITE_CONV[LENGTH_POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_MC];;
241+ REWRITE_CONV[LENGTH_POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_MC;
242+ POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_START; POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_END;
243+ POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_PREAMBLE_LENGTH; POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_POSTAMBLE_LENGTH] THENC
244+ NUM_REDUCE_CONV THENC REWRITE_CONV [ADD_0];;
230245
231246(* ------------------------------------------------------------------------- *)
232247(* Hacky tweaking conversion to write away non-free state component reads. *)
@@ -298,15 +313,15 @@ let poly_basemul_acc_montgomery_cached_k2_GOAL = `forall srcA srcB srcBt dst x0
298313 ==>
299314 ensures arm
300315 (\s. aligned_bytes_loaded s (word pc) poly_basemul_acc_montgomery_cached_k2_mc /\
301- read PC s = word (pc + 20 ) /\
316+ read PC s = word (pc + POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_START ) /\
302317 C_ARGUMENTS [dst; srcA; srcB; srcBt] s /\
303318 (!i. i < 256 ==> read(memory :> bytes16(word_add srcA (word (2 * i)))) s = x0 i) /\
304319 (!i. i < 256 ==> read(memory :> bytes16(word_add srcB (word (2 * i)))) s = y0 i) /\
305320 (!i. i < 128 ==> read(memory :> bytes16(word_add srcBt (word (2 * i)))) s = y0t i) /\
306321 (!i. i < 256 ==> read(memory :> bytes16(word_add srcA (word (512 + 2 * i)))) s = x1 i) /\
307322 (!i. i < 256 ==> read(memory :> bytes16(word_add srcB (word (512 + 2 * i)))) s = y1 i) /\
308323 (!i. i < 128 ==> read(memory :> bytes16(word_add srcBt (word (256 + 2 * i)))) s = y1t i))
309- (\s. read PC s = word (pc + 640 ) /\
324+ (\s. read PC s = word (pc + POLY_BASEMUL_ACC_MONTGOMERY_CACHED_K2_CORE_END ) /\
310325 ((!i. i < 256 ==> abs(ival(x0 i)) <= &2 pow 12 /\ abs(ival(x1 i)) <= &2 pow 12 )
311326 ==> (!i. i < 128
312327 ==> (ival(read(memory :> bytes16(word_add dst (word (4 * i)))) s) ==
@@ -434,7 +449,7 @@ let poly_basemul_acc_montgomery_cached_k2_SPEC' = prove(
434449 REWRITE_TAC[fst poly_basemul_acc_montgomery_cached_k2_EXEC] THEN
435450 CONV_TAC TWEAK_CONV THEN
436451 ARM_ADD_RETURN_STACK_TAC ~pre_post_nsteps:(5 ,5 ) poly_basemul_acc_montgomery_cached_k2_EXEC
437- (REWRITE_RULE[fst poly_basemul_acc_montgomery_cached_k2_EXEC] (CONV_RULE TWEAK_CONV poly_basemul_acc_montgomery_cached_k2_SPEC))
452+ (REWRITE_RULE[fst poly_basemul_acc_montgomery_cached_k2_EXEC] (CONV_RULE TWEAK_CONV (CONV_RULE LENGTH_SIMPLIFY_CONV poly_basemul_acc_montgomery_cached_k2_SPEC) ))
438453 `[D8; D9; D10; D11; D12; D13; D14; D15]` 64 THEN
439454 WORD_ARITH_TAC)
440455;;
0 commit comments