Skip to content

Commit d58a4ea

Browse files
committed
Constant-time: Use value barriers in decompose
Signed-off-by: Matthias J. Kannwischer <[email protected]>
1 parent 316f4ba commit d58a4ea

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

mldsa/rounding.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
#include <stdint.h>
66

7+
#include "ct.h"
78
#include "rounding.h"
89

910

@@ -23,7 +24,7 @@ void mld_decompose(int32_t *a0, int32_t *a1, int32_t a)
2324
*a1 = (*a1 * 11275 + (1 << 23)) >> 24;
2425
cassert(*a1 >= 0 && *a1 <= 44);
2526

26-
*a1 ^= ((43 - *a1) >> 31) & *a1;
27+
*a1 = mld_ct_sel_int32(0, *a1, mld_ct_cmask_neg_i32(43 - *a1));
2728
cassert(*a1 >= 0 && *a1 <= 43);
2829
#else /* MLDSA_MODE == 2 */
2930
*a1 = (*a1 * 1025 + (1 << 21)) >> 22;
@@ -35,7 +36,8 @@ void mld_decompose(int32_t *a0, int32_t *a1, int32_t a)
3536
#endif /* MLDSA_MODE != 2 */
3637

3738
*a0 = a - *a1 * 2 * MLDSA_GAMMA2;
38-
*a0 -= (((MLDSA_Q - 1) / 2 - *a0) >> 31) & MLDSA_Q;
39+
*a0 = mld_ct_sel_int32(*a0 - MLDSA_Q, *a0,
40+
mld_ct_cmask_neg_i32((MLDSA_Q - 1) / 2 - *a0));
3941
}
4042

4143
unsigned int mld_make_hint(int32_t a0, int32_t a1)

0 commit comments

Comments
 (0)