Skip to content

Commit b01b42e

Browse files
authored
Use fake RNG only when necessary (#350)
* use fake rng only when necessary - Change tests to use CtrDrbg with OsEntropy as RNG by default. * fix ci
1 parent ca97af6 commit b01b42e

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

mbedtls/src/pk/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,7 +1235,7 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
12351235

12361236
#[test]
12371237
fn generate_rsa() {
1238-
let mut pk = Pk::generate_rsa(&mut crate::test_support::rand::test_rng(), 2048, 0x10001).unwrap();
1238+
let mut pk = Pk::generate_rsa(&mut crate::test_support::rand::test_deterministic_rng(), 2048, 0x10001).unwrap();
12391239
let generated = pk.write_private_pem_string().unwrap();
12401240
assert_eq!(0x10001, pk.rsa_public_exponent().unwrap());
12411241
assert_eq!(generated, TEST_PEM[..TEST_PEM.len() - 1]);
@@ -1257,19 +1257,19 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
12571257

12581258
#[test]
12591259
fn generate_ec_secp256r1() {
1260-
let mut key1 = Pk::generate_ec(&mut crate::test_support::rand::test_rng(), EcGroupId::SecP256R1).unwrap();
1260+
let mut key1 = Pk::generate_ec(&mut crate::test_support::rand::test_deterministic_rng(), EcGroupId::SecP256R1).unwrap();
12611261
let pem1 = key1.write_private_pem_string().unwrap();
12621262

12631263
let secp256r1 = EcGroup::new(EcGroupId::SecP256R1).unwrap();
1264-
let mut key2 = Pk::generate_ec(&mut crate::test_support::rand::test_rng(), secp256r1.clone()).unwrap();
1264+
let mut key2 = Pk::generate_ec(&mut crate::test_support::rand::test_deterministic_rng(), secp256r1.clone()).unwrap();
12651265
let pem2 = key2.write_private_pem_string().unwrap();
12661266

12671267
assert_eq!(pem1, pem2);
12681268

12691269
let mut key_from_components = Pk::private_from_ec_scalar_with_rng(
12701270
secp256r1.clone(),
12711271
key1.ec_private().unwrap(),
1272-
&mut crate::test_support::rand::test_rng(),
1272+
&mut crate::test_support::rand::test_deterministic_rng(),
12731273
)
12741274
.unwrap();
12751275
let pem3 = key_from_components.write_private_pem_string().unwrap();
@@ -1628,7 +1628,7 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
16281628

16291629
#[test]
16301630
fn private_from_rsa_components_sanity() {
1631-
let mut pk = Pk::generate_rsa(&mut crate::test_support::rand::test_rng(), 2048, 0x10001).unwrap();
1631+
let mut pk = Pk::generate_rsa(&mut crate::test_support::rand::test_deterministic_rng(), 2048, 0x10001).unwrap();
16321632
let components = RsaPrivateComponents::WithPrimes {
16331633
p: &pk.rsa_private_prime1().unwrap(),
16341634
q: &pk.rsa_private_prime2().unwrap(),

mbedtls/tests/support/rand.rs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ use mbedtls_sys::types::size_t;
1212
use rand::{Rng, XorShiftRng};
1313

1414
/// Not cryptographically secure!!! Use for testing only!!!
15-
pub struct TestRandom(XorShiftRng);
15+
pub struct TestInsecureRandom(XorShiftRng);
1616

17-
impl crate::mbedtls::rng::RngCallbackMut for TestRandom {
17+
impl crate::mbedtls::rng::RngCallbackMut for TestInsecureRandom {
1818
unsafe extern "C" fn call_mut(p_rng: *mut c_void, data: *mut c_uchar, len: size_t) -> c_int {
19-
(*(p_rng as *mut TestRandom))
19+
(*(p_rng as *mut TestInsecureRandom))
2020
.0
2121
.fill_bytes(core::slice::from_raw_parts_mut(data, len));
2222
0
@@ -27,9 +27,9 @@ impl crate::mbedtls::rng::RngCallbackMut for TestRandom {
2727
}
2828
}
2929

30-
impl crate::mbedtls::rng::RngCallback for TestRandom {
30+
impl crate::mbedtls::rng::RngCallback for TestInsecureRandom {
3131
unsafe extern "C" fn call(p_rng: *mut c_void, data: *mut c_uchar, len: size_t) -> c_int {
32-
(*(p_rng as *mut TestRandom))
32+
(*(p_rng as *mut TestInsecureRandom))
3333
.0
3434
.fill_bytes(core::slice::from_raw_parts_mut(data, len));
3535
0
@@ -40,7 +40,36 @@ impl crate::mbedtls::rng::RngCallback for TestRandom {
4040
}
4141
}
4242

43+
cfg_if::cfg_if! {
44+
if #[cfg(any(feature = "rdrand", target_env = "sgx", feature = "std"))]
45+
{
46+
pub type TestRandom = crate::mbedtls::rng::CtrDrbg;
47+
} else {
48+
pub type TestRandom = TestInsecureRandom;
49+
}
50+
}
51+
4352
/// Not cryptographically secure!!! Use for testing only!!!
4453
pub fn test_rng() -> TestRandom {
45-
TestRandom(XorShiftRng::new_unseeded())
54+
cfg_if::cfg_if! {
55+
if #[cfg(any(feature = "rdrand", target_env = "sgx", feature = "std"))]
56+
{
57+
#[cfg(feature = "std")]
58+
use std::sync::Arc;
59+
#[cfg(not(feature = "std"))]
60+
extern crate alloc as rust_alloc;
61+
#[cfg(not(feature = "std"))]
62+
use rust_alloc::sync::Arc;
63+
64+
let entropy = Arc::new(super::entropy::entropy_new());
65+
TestRandom::new(entropy, None).unwrap()
66+
} else {
67+
test_deterministic_rng()
68+
}
69+
}
70+
}
71+
72+
/// Not cryptographically secure!!! Use for testing only!!!
73+
pub fn test_deterministic_rng() -> TestInsecureRandom {
74+
TestInsecureRandom(XorShiftRng::new_unseeded())
4675
}

0 commit comments

Comments
 (0)