@@ -256,25 +256,39 @@ fn pow_bench(b: &mut Bencher) {
256256 } ) ;
257257}
258258
259+
260+ /// This modulus is the prime from the 2048-bit MODP DH group:
261+ /// https://tools.ietf.org/html/rfc3526#section-3
262+ const RFC3526_2048BIT_MODP_GROUP : & ' static str = "\
263+ FFFFFFFF_FFFFFFFF_C90FDAA2_2168C234_C4C6628B_80DC1CD1\
264+ 29024E08_8A67CC74_020BBEA6_3B139B22_514A0879_8E3404DD\
265+ EF9519B3_CD3A431B_302B0A6D_F25F1437_4FE1356D_6D51C245\
266+ E485B576_625E7EC6_F44C42E9_A637ED6B_0BFF5CB6_F406B7ED\
267+ EE386BFB_5A899FA5_AE9F2411_7C4B1FE6_49286651_ECE45B3D\
268+ C2007CB8_A163BF05_98DA4836_1C55D39A_69163FA8_FD24CF5F\
269+ 83655D23_DCA3AD96_1C62F356_208552BB_9ED52907_7096966D\
270+ 670C354E_4ABC9804_F1746C08_CA18217C_32905E46_2E36CE3B\
271+ E39E772C_180E8603_9B2783A2_EC07A28F_B5C55DF0_6F4C52C9\
272+ DE2BCBF6_95581718_3995497C_EA956AE5_15D22618_98FA0510\
273+ 15728E5A_8AACAA68_FFFFFFFF_FFFFFFFF";
274+
259275#[ bench]
260276fn modpow ( b : & mut Bencher ) {
261277 let mut rng = get_rng ( ) ;
262278 let base = rng. gen_biguint ( 2048 ) ;
263279 let e = rng. gen_biguint ( 2048 ) ;
264- // This modulus is the prime from the 2048-bit MODP DH group:
265- // https://tools.ietf.org/html/rfc3526#section-3
266- let m = BigUint :: from_str_radix ( "\
267- FFFFFFFF_FFFFFFFF_C90FDAA2_2168C234_C4C6628B_80DC1CD1\
268- 29024E08_8A67CC74_020BBEA6_3B139B22_514A0879_8E3404DD\
269- EF9519B3_CD3A431B_302B0A6D_F25F1437_4FE1356D_6D51C245\
270- E485B576_625E7EC6_F44C42E9_A637ED6B_0BFF5CB6_F406B7ED\
271- EE386BFB_5A899FA5_AE9F2411_7C4B1FE6_49286651_ECE45B3D\
272- C2007CB8_A163BF05_98DA4836_1C55D39A_69163FA8_FD24CF5F\
273- 83655D23_DCA3AD96_1C62F356_208552BB_9ED52907_7096966D\
274- 670C354E_4ABC9804_F1746C08_CA18217C_32905E46_2E36CE3B\
275- E39E772C_180E8603_9B2783A2_EC07A28F_B5C55DF0_6F4C52C9\
276- DE2BCBF6_95581718_3995497C_EA956AE5_15D22618_98FA0510\
277- 15728E5A_8AACAA68_FFFFFFFF_FFFFFFFF", 16 ) . unwrap ( ) ;
280+ let m = BigUint :: from_str_radix ( RFC3526_2048BIT_MODP_GROUP , 16 ) . unwrap ( ) ;
281+
282+ b. iter ( || base. modpow ( & e, & m) ) ;
283+ }
284+
285+ #[ bench]
286+ fn modpow_even ( b : & mut Bencher ) {
287+ let mut rng = get_rng ( ) ;
288+ let base = rng. gen_biguint ( 2048 ) ;
289+ let e = rng. gen_biguint ( 2048 ) ;
290+ // Make the modulus even, so monty (base-2^32) doesn't apply.
291+ let m = BigUint :: from_str_radix ( RFC3526_2048BIT_MODP_GROUP , 16 ) . unwrap ( ) - 1u32 ;
278292
279293 b. iter ( || base. modpow ( & e, & m) ) ;
280294}
0 commit comments