|
2 | 2 | // RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for |
3 | 3 | // Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526 |
4 | 4 |
|
5 | | -use lazy_static; |
6 | 5 | use num_bigint::BigUint; |
7 | 6 | use num_traits::{Num, Zero}; |
8 | 7 | use std::{ |
9 | 8 | collections::HashMap, |
| 9 | + sync::LazyLock, |
10 | 10 | time::{SystemTime, UNIX_EPOCH}, |
11 | 11 | }; |
12 | 12 |
|
13 | | -// Using lazy static to initialize statics that require code to be executed at runtime. |
14 | | -lazy_static! { |
15 | | - // A map of predefined prime numbers for different bit lengths, as specified in RFC 3526 |
16 | | - static ref PRIMES: HashMap<u8, BigUint> = { |
17 | | - let mut m:HashMap<u8, BigUint> = HashMap::new(); |
18 | | - m.insert( |
19 | | - // 1536-bit |
20 | | - 5, |
21 | | - BigUint::parse_bytes( |
22 | | - b"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\ |
23 | | - 29024E088A67CC74020BBEA63B139B22514A08798E3404DD\ |
24 | | - EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\ |
25 | | - E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\ |
26 | | - EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\ |
27 | | - C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\ |
28 | | - 83655D23DCA3AD961C62F356208552BB9ED529077096966D\ |
29 | | - 670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", |
30 | | - 16 |
31 | | - ).unwrap() |
32 | | - ); |
33 | | - m.insert( |
34 | | - // 2048-bit |
35 | | - 14, |
36 | | - BigUint::parse_bytes( |
37 | | - b"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\ |
| 13 | +// A map of predefined prime numbers for different bit lengths, as specified in RFC 3526 |
| 14 | +static PRIMES: LazyLock<HashMap<u8, BigUint>> = LazyLock::new(|| { |
| 15 | + let mut m:HashMap<u8, BigUint> = HashMap::new(); |
| 16 | + m.insert( |
| 17 | + // 1536-bit |
| 18 | + 5, |
| 19 | + BigUint::parse_bytes( |
| 20 | + b"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\ |
38 | 21 | 29024E088A67CC74020BBEA63B139B22514A08798E3404DD\ |
39 | 22 | EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\ |
40 | 23 | E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\ |
41 | 24 | EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\ |
42 | 25 | C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\ |
43 | 26 | 83655D23DCA3AD961C62F356208552BB9ED529077096966D\ |
44 | | - 670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\ |
45 | | - E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\ |
46 | | - DE2BCBF6955817183995497CEA956AE515D2261898FA0510\ |
47 | | - 15728E5A8AACAA68FFFFFFFFFFFFFFFF", |
48 | | - 16 |
49 | | - ).unwrap() |
50 | | - ); |
| 27 | + 670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", |
| 28 | + 16 |
| 29 | + ).unwrap() |
| 30 | + ); |
| 31 | + m.insert( |
| 32 | + // 2048-bit |
| 33 | + 14, |
| 34 | + BigUint::parse_bytes( |
| 35 | + b"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\ |
| 36 | + 29024E088A67CC74020BBEA63B139B22514A08798E3404DD\ |
| 37 | + EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\ |
| 38 | + E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\ |
| 39 | + EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\ |
| 40 | + C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\ |
| 41 | + 83655D23DCA3AD961C62F356208552BB9ED529077096966D\ |
| 42 | + 670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\ |
| 43 | + E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\ |
| 44 | + DE2BCBF6955817183995497CEA956AE515D2261898FA0510\ |
| 45 | + 15728E5A8AACAA68FFFFFFFFFFFFFFFF", |
| 46 | + 16 |
| 47 | + ).unwrap() |
| 48 | + ); |
51 | 49 |
|
52 | 50 | m.insert( |
53 | 51 | // 3072-bit |
@@ -188,8 +186,7 @@ lazy_static! { |
188 | 186 | ).unwrap() |
189 | 187 | ); |
190 | 188 | m |
191 | | - }; |
192 | | -} |
| 189 | +}); |
193 | 190 |
|
194 | 191 | /// Generating random number, should use num_bigint::RandomBits if possible. |
195 | 192 | fn rand() -> usize { |
|
0 commit comments