|
1 | 1 | //! [`BoxedUint`] bitwise right shift operations. |
2 | 2 |
|
3 | | -use crate::{BoxedUint, ConstChoice, ConstantTimeSelect, Limb, WrappingShr, Zero}; |
| 3 | +use crate::{BoxedUint, ConstantTimeSelect, Limb, WrappingShr, Zero}; |
4 | 4 | use core::ops::{Shr, ShrAssign}; |
5 | 5 | use subtle::{Choice, ConstantTimeLess}; |
6 | 6 |
|
@@ -115,24 +115,6 @@ impl BoxedUint { |
115 | 115 | Some(()) |
116 | 116 | } |
117 | 117 |
|
118 | | - /// Computes `self >> shift`. |
119 | | - /// Returns `None` if `shift >= self.bits_precision()`. |
120 | | - /// |
121 | | - /// NOTE: this operation is variable time with respect to `shift` *ONLY*. |
122 | | - /// |
123 | | - /// When used with a fixed `shift`, this function is constant-time with respect to `self`. |
124 | | - #[inline(always)] |
125 | | - pub fn shr_vartime(&self, shift: u32) -> (Self, ConstChoice) { |
126 | | - let mut result = Self::zero_with_precision(self.bits_precision()); |
127 | | - let success = self.shr_vartime_into(&mut result, shift); |
128 | | - // TODO: is this okay? |
129 | | - ( |
130 | | - result, |
131 | | - // If success, then return ConstChoice::False since it's not overflowing |
132 | | - success.map_or(ConstChoice::TRUE, |_| ConstChoice::FALSE), |
133 | | - ) |
134 | | - } |
135 | | - |
136 | 118 | /// Computes `self >> 1` in constant-time, returning a true [`Choice`] |
137 | 119 | /// if the least significant bit was set, and a false [`Choice::FALSE`] otherwise. |
138 | 120 | pub(crate) fn shr1_with_carry(&self) -> (Self, Choice) { |
@@ -221,9 +203,9 @@ mod tests { |
221 | 203 | #[test] |
222 | 204 | fn shr_vartime() { |
223 | 205 | let n = BoxedUint::from(0x80000000000000000u128); |
224 | | - assert_eq!(BoxedUint::zero(), n.shr_vartime(68).0); |
225 | | - assert_eq!(BoxedUint::one(), n.shr_vartime(67).0); |
226 | | - assert_eq!(BoxedUint::from(2u8), n.shr_vartime(66).0); |
227 | | - assert_eq!(BoxedUint::from(4u8), n.shr_vartime(65).0); |
| 206 | + assert_eq!(BoxedUint::zero(), n.overflowing_shr(68).0); |
| 207 | + assert_eq!(BoxedUint::one(), n.overflowing_shr(67).0); |
| 208 | + assert_eq!(BoxedUint::from(2u8), n.overflowing_shr(66).0); |
| 209 | + assert_eq!(BoxedUint::from(4u8), n.overflowing_shr(65).0); |
228 | 210 | } |
229 | 211 | } |
0 commit comments