@@ -123,16 +123,58 @@ __contract__(
123123#define mld_pointwise_acc_l4_avx2 MLD_NAMESPACE(pointwise_acc_l4_avx2)
124124void mld_pointwise_acc_l4_avx2 (int32_t c [MLDSA_N ], const int32_t a [4 ][MLDSA_N ],
125125 const int32_t b [4 ][MLDSA_N ],
126- const int32_t * qdata );
126+ const int32_t * qdata )
127+ /* This must be kept in sync with the HOL-Light specification
128+ * in proofs/hol_light/x86_64/proofs/mldsa_pointwise_acc_l4.ml */
129+ __contract__ (
130+ requires (memory_no_alias (c , sizeof (int32_t ) * MLDSA_N ))
131+ requires (memory_no_alias (a , sizeof (int32_t ) * 4 * MLDSA_N ))
132+ requires (memory_no_alias (b , sizeof (int32_t ) * 4 * MLDSA_N ))
133+ /* check-magic: off */
134+ requires (forall (l0 , 0 , 4 , array_abs_bound (a [l0 ], 0 , MLDSA_N , 8380417 )))
135+ requires (forall (l1 , 0 , 4 , array_abs_bound (b [l1 ], 0 , MLDSA_N , 75423753 )))
136+ requires (qdata == mld_qdata )
137+ assigns (memory_slice (c , sizeof (int32_t ) * MLDSA_N ))
138+ ensures (array_abs_bound (c , 0 , MLDSA_N , 8380417 ))
139+ /* check-magic: on */
140+ );
127141
128142#define mld_pointwise_acc_l5_avx2 MLD_NAMESPACE(pointwise_acc_l5_avx2)
129143void mld_pointwise_acc_l5_avx2 (int32_t c [MLDSA_N ], const int32_t a [5 ][MLDSA_N ],
130144 const int32_t b [5 ][MLDSA_N ],
131- const int32_t * qdata );
145+ const int32_t * qdata )
146+ /* This must be kept in sync with the HOL-Light specification
147+ * in proofs/hol_light/x86_64/proofs/mldsa_pointwise_acc_l5.ml */
148+ __contract__ (
149+ requires (memory_no_alias (c , sizeof (int32_t ) * MLDSA_N ))
150+ requires (memory_no_alias (a , sizeof (int32_t ) * 5 * MLDSA_N ))
151+ requires (memory_no_alias (b , sizeof (int32_t ) * 5 * MLDSA_N ))
152+ /* check-magic: off */
153+ requires (forall (l0 , 0 , 5 , array_abs_bound (a [l0 ], 0 , MLDSA_N , 8380417 )))
154+ requires (forall (l1 , 0 , 5 , array_abs_bound (b [l1 ], 0 , MLDSA_N , 75423753 )))
155+ requires (qdata == mld_qdata )
156+ assigns (memory_slice (c , sizeof (int32_t ) * MLDSA_N ))
157+ ensures (array_abs_bound (c , 0 , MLDSA_N , 8380417 ))
158+ /* check-magic: on */
159+ );
132160
133161#define mld_pointwise_acc_l7_avx2 MLD_NAMESPACE(pointwise_acc_l7_avx2)
134162void mld_pointwise_acc_l7_avx2 (int32_t c [MLDSA_N ], const int32_t a [7 ][MLDSA_N ],
135163 const int32_t b [7 ][MLDSA_N ],
136- const int32_t * qdata );
164+ const int32_t * qdata )
165+ /* This must be kept in sync with the HOL-Light specification
166+ * in proofs/hol_light/x86_64/proofs/mldsa_pointwise_acc_l7.ml */
167+ __contract__ (
168+ requires (memory_no_alias (c , sizeof (int32_t ) * MLDSA_N ))
169+ requires (memory_no_alias (a , sizeof (int32_t ) * 7 * MLDSA_N ))
170+ requires (memory_no_alias (b , sizeof (int32_t ) * 7 * MLDSA_N ))
171+ /* check-magic: off */
172+ requires (forall (l0 , 0 , 7 , array_abs_bound (a [l0 ], 0 , MLDSA_N , 8380417 )))
173+ requires (forall (l1 , 0 , 7 , array_abs_bound (b [l1 ], 0 , MLDSA_N , 75423753 )))
174+ requires (qdata == mld_qdata )
175+ assigns (memory_slice (c , sizeof (int32_t ) * MLDSA_N ))
176+ ensures (array_abs_bound (c , 0 , MLDSA_N , 8380417 ))
177+ /* check-magic: on */
178+ );
137179
138180#endif /* !MLD_NATIVE_X86_64_SRC_ARITH_NATIVE_X86_64_H */
0 commit comments