Skip to content

Commit 37fbeea

Browse files
authored
primefield: have test_primefield_constants! compute T (#1324)
...where `T` is `(modulus - 1) >> S`. Previously this was precomputed manually on a curve-by-curve basis. This commit changes it to compute `T` from the other constants.
1 parent 2fc7568 commit 37fbeea

File tree

21 files changed

+84
-247
lines changed

21 files changed

+84
-247
lines changed

bign256/src/arithmetic/field.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,6 @@ impl PrimeField for FieldElement {
123123

124124
#[cfg(test)]
125125
mod tests {
126-
use super::FieldElement;
127-
128-
// t = (modulus - 1) >> S
129-
const T: [u64; 4] = [
130-
0xffffffffffffffa1,
131-
0xffffffffffffffff,
132-
0xffffffffffffffff,
133-
0x7fffffffffffffff,
134-
];
135-
136-
primefield::test_primefield!(FieldElement, T);
126+
use super::{FieldElement, U256};
127+
primefield::test_primefield!(FieldElement, U256);
137128
}

bign256/src/arithmetic/scalar.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,6 @@ impl TryFrom<U256> for Scalar {
193193

194194
#[cfg(test)]
195195
mod tests {
196-
use super::Scalar;
197-
198-
// t = (modulus - 1) >> S
199-
const T: [u64; 4] = [
200-
0x3f2d5fcc931eb303,
201-
0xecae476b06fda6fe,
202-
0xffffffffffffffff,
203-
0x7fffffffffffffff,
204-
];
205-
206-
primefield::test_primefield!(Scalar, T);
196+
use super::{Scalar, U256};
197+
primefield::test_primefield!(Scalar, U256);
207198
}

bp256/src/arithmetic/field.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,16 +107,6 @@ impl PrimeField for FieldElement {
107107

108108
#[cfg(test)]
109109
mod tests {
110-
use super::FieldElement;
111-
112-
/// t = (modulus - 1) >> S
113-
/// 0x54fdabedd0f754de1f3305484ec1c6b9371dfb11ea9310141009a40e8fb729bb
114-
const T: [u64; 4] = [
115-
0x1009a40e8fb729bb,
116-
0x371dfb11ea931014,
117-
0x1f3305484ec1c6b9,
118-
0x54fdabedd0f754de,
119-
];
120-
121-
primefield::test_primefield!(FieldElement, T);
110+
use super::{FieldElement, U256};
111+
primefield::test_primefield!(FieldElement, U256);
122112
}

bp256/src/arithmetic/scalar.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,6 @@ impl TryFrom<U256> for Scalar {
156156

157157
#[cfg(test)]
158158
mod tests {
159-
use super::Scalar;
160-
161-
/// t = (modulus - 1) >> S
162-
/// 0x54fdabedd0f754de1f3305484ec1c6b8c61cbd51dab0d37bc80f07414ba42b53
163-
const T: [u64; 4] = [
164-
0xc80f07414ba42b53,
165-
0xc61cbd51dab0d37b,
166-
0x1f3305484ec1c6b8,
167-
0x54fdabedd0f754de,
168-
];
169-
170-
primefield::test_primefield!(Scalar, T);
159+
use super::{Scalar, U256};
160+
primefield::test_primefield!(Scalar, U256);
171161
}

bp384/src/arithmetic/field.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,18 +110,6 @@ impl PrimeField for FieldElement {
110110

111111
#[cfg(test)]
112112
mod tests {
113-
use super::FieldElement;
114-
115-
/// t = (modulus - 1) >> S
116-
/// 0x465c8f41519c369407aeb7bf287320ef8a97b884f6aa2b5a0958ed0cbfdb8891d669d394c80e8d38c3a380099883f629
117-
const T: [u64; 6] = [
118-
0xc3a380099883f629,
119-
0xd669d394c80e8d38,
120-
0x958ed0cbfdb8891,
121-
0x8a97b884f6aa2b5a,
122-
0x7aeb7bf287320ef,
123-
0x465c8f41519c3694,
124-
];
125-
126-
primefield::test_primefield!(FieldElement, T);
113+
use super::{FieldElement, U384};
114+
primefield::test_primefield!(FieldElement, U384);
127115
}

bp384/src/arithmetic/scalar.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,18 +164,6 @@ impl TryFrom<U384> for Scalar {
164164

165165
#[cfg(test)]
166166
mod tests {
167-
use super::Scalar;
168-
169-
/// t = (modulus - 1) >> S
170-
/// 0x232e47a0a8ce1b4a03d75bdf94399077c54bdc427b5515acc7c59b9b2b010969f3ceadabdadff0c40ee20c80ba411959
171-
const T: [u64; 6] = [
172-
0x0ee20c80ba411959,
173-
0xf3ceadabdadff0c4,
174-
0xc7c59b9b2b010969,
175-
0xc54bdc427b5515ac,
176-
0x03d75bdf94399077,
177-
0x232e47a0a8ce1b4a,
178-
];
179-
180-
primefield::test_primefield!(Scalar, T);
167+
use super::{Scalar, U384};
168+
primefield::test_primefield!(Scalar, U384);
181169
}

p192/src/arithmetic/field.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,6 @@ impl PrimeField for FieldElement {
112112

113113
#[cfg(test)]
114114
mod tests {
115-
use super::FieldElement;
116-
117-
/// t = (modulus - 1) >> S
118-
const T: [u64; 3] = [0x7fffffffffffffff, 0xffffffffffffffff, 0x7fffffffffffffff];
119-
120-
primefield::test_primefield!(FieldElement, T);
115+
use super::{FieldElement, U192};
116+
primefield::test_primefield!(FieldElement, U192);
121117
}

p192/src/arithmetic/scalar.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,6 @@ impl<'de> Deserialize<'de> for Scalar {
252252

253253
#[cfg(test)]
254254
mod tests {
255-
use super::Scalar;
256-
257-
/// t = (modulus - 1) >> S
258-
/// 0xffffffffffffffffffffffff99def836146bc9b1b4d2283
259-
const T: [u64; 3] = [0x6146bc9b1b4d2283, 0xfffffffff99def83, 0x0fffffffffffffff];
260-
261-
primefield::test_primefield!(Scalar, T);
255+
use super::{Scalar, U192};
256+
primefield::test_primefield!(Scalar, U192);
262257
}

p224/src/arithmetic/field.rs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,13 @@ use elliptic_curve::{
3434

3535
/// Constant representing the modulus serialized as hex.
3636
/// p = 2^{224} − 2^{96} + 1
37+
#[cfg(target_pointer_width = "32")]
3738
const MODULUS_HEX: &str = "ffffffffffffffffffffffffffffffff000000000000000000000001";
39+
#[cfg(target_pointer_width = "64")]
40+
const MODULUS_HEX: &str = "00000000ffffffffffffffffffffffffffffffff000000000000000000000001";
3841

39-
#[cfg(target_pointer_width = "32")]
4042
const MODULUS: Uint = Uint::from_be_hex(MODULUS_HEX);
4143

42-
#[cfg(target_pointer_width = "64")]
43-
const MODULUS: Uint =
44-
Uint::from_be_hex("00000000ffffffffffffffffffffffffffffffff000000000000000000000001");
45-
4644
/// Element of the secp224r1 base field used for curve coordinates.
4745
#[derive(Clone, Copy)]
4846
pub struct FieldElement(pub(super) Uint);
@@ -290,15 +288,6 @@ impl PrimeField for FieldElement {
290288

291289
#[cfg(test)]
292290
mod tests {
293-
use super::FieldElement;
294-
295-
/// t = (modulus - 1) >> S
296-
const T: [u64; 4] = [
297-
0xffffffffffffffff,
298-
0xffffffffffffffff,
299-
0x0000000000000000,
300-
0x0000000000000000,
301-
];
302-
303-
primefield::test_primefield!(FieldElement, T);
291+
use super::{FieldElement, Uint};
292+
primefield::test_primefield!(FieldElement, Uint);
304293
}

p224/src/arithmetic/scalar.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,6 @@ impl<'de> Deserialize<'de> for Scalar {
247247

248248
#[cfg(test)]
249249
mod tests {
250-
use super::Scalar;
251-
252-
/// t = (modulus - 1) >> S
253-
const T: [u64; 4] = [
254-
0x84f74a5157170a8f,
255-
0xffffc5a8b82e3c0f,
256-
0xffffffffffffffff,
257-
0x000000003fffffff,
258-
];
259-
260-
primefield::test_primefield!(Scalar, T);
250+
use super::{Scalar, Uint};
251+
primefield::test_primefield!(Scalar, Uint);
261252
}

0 commit comments

Comments
 (0)