@@ -50,18 +50,27 @@ __contract__(
5050)
5151{
5252#if defined(MLD_USE_NATIVE_NTT_CUSTOM_ORDER )
53- /* TODO: proof */
54- unsigned int i ;
55- for (i = 0 ; i < MLDSA_K * MLDSA_L ; i ++ )
53+
54+ unsigned int i , j ;
55+ for (i = 0 ; i < MLDSA_K ; i ++ )
5656 __loop__ (
57- assigns (i , memory_slice (mat , sizeof (mld_polymat )))
58- invariant (i <= MLDSA_K * MLDSA_L )
57+ assigns (i , j , memory_slice (mat , sizeof (mld_polymat )))
58+ invariant (i <= MLDSA_K )
5959 invariant (forall (k1 , 0 , MLDSA_K , forall (l1 , 0 , MLDSA_L ,
6060 array_bound (mat -> vec [k1 ].vec [l1 ].coeffs , 0 , MLDSA_N , 0 , MLDSA_Q ))))
6161 )
6262 {
63- mld_poly_permute_bitrev_to_custom (
64- mat -> vec [i / MLDSA_L ].vec [i % MLDSA_L ].coeffs );
63+ for (j = 0 ; j < MLDSA_L ; j ++ )
64+ __loop__ (
65+ assigns (j , memory_slice (mat , sizeof (mld_polymat )))
66+ invariant (i <= MLDSA_K )
67+ invariant (j <= MLDSA_L )
68+ invariant (forall (k2 , 0 , MLDSA_K , forall (l2 , 0 , MLDSA_L ,
69+ array_bound (mat -> vec [k2 ].vec [l2 ].coeffs , 0 , MLDSA_N , 0 , MLDSA_Q ))))
70+ )
71+ {
72+ mld_poly_permute_bitrev_to_custom (mat -> vec [i ].vec [j ].coeffs );
73+ }
6574 }
6675
6776#else /* MLD_USE_NATIVE_NTT_CUSTOM_ORDER */
0 commit comments