@@ -23,6 +23,7 @@ def ct_lt_u32(val_a, val_b):
2323
2424 return (val_a ^ ((val_a ^ val_b )| (((val_a - val_b )& 0xffffffff )^ val_b )))>> 31
2525
26+
2627def ct_gt_u32 (val_a , val_b ):
2728 """
2829 Return 1 if val_a > val_b, 0 otherwise. Constant time.
@@ -35,6 +36,7 @@ def ct_gt_u32(val_a, val_b):
3536 """
3637 return ct_lt_u32 (val_b , val_a )
3738
39+
3840def ct_le_u32 (val_a , val_b ):
3941 """
4042 Return 1 if val_a <= val_b, 0 otherwise. Constant time.
@@ -47,14 +49,26 @@ def ct_le_u32(val_a, val_b):
4749 """
4850 return 1 ^ ct_gt_u32 (val_a , val_b )
4951
52+
5053def ct_lsb_prop_u8 (val ):
51- """Propagate LSB to all 8 bits of the returned byte. Constant time."""
54+ """Propagate LSB to all 8 bits of the returned int. Constant time."""
55+ val &= 0x01
56+ val |= val << 1
57+ val |= val << 2
58+ val |= val << 4
59+ return val
60+
61+
62+ def ct_lsb_prop_u16 (val ):
63+ """Propagate LSB to all 16 bits of the returned int. Constant time."""
5264 val &= 0x01
5365 val |= val << 1
5466 val |= val << 2
5567 val |= val << 4
68+ val |= val << 8
5669 return val
5770
71+
5872def ct_isnonzero_u32 (val ):
5973 """
6074 Returns 1 if val is != 0, 0 otherwise. Constant time.
@@ -66,6 +80,7 @@ def ct_isnonzero_u32(val):
6680 val &= 0xffffffff
6781 return (val | (- val & 0xffffffff )) >> 31
6882
83+
6984def ct_neq_u32 (val_a , val_b ):
7085 """
7186 Return 1 if val_a != val_b, 0 otherwise. Constant time.
0 commit comments