Skip to content

Commit 774a4a1

Browse files
jtougasalex
andauthored
Only check DH key validity when loading a private key. (#9071) (#9319)
Fixes #9063 Co-authored-by: Alex Gaynor <[email protected]>
1 parent bfa4d95 commit 774a4a1

File tree

1 file changed

+11
-11
lines changed
  • src/rust/src/backend

1 file changed

+11
-11
lines changed

src/rust/src/backend/dh.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,7 @@ fn dh_parameters_from_numbers(
102102
.transpose()?;
103103
let g = utils::py_int_to_bn(py, numbers.getattr(pyo3::intern!(py, "g"))?)?;
104104

105-
let dh = openssl::dh::Dh::from_pqg(p, q, g)?;
106-
if !dh.check_key()? {
107-
return Err(CryptographyError::from(
108-
pyo3::exceptions::PyValueError::new_err(
109-
"DH private numbers did not pass safety checks.",
110-
),
111-
));
112-
}
113-
114-
Ok(dh)
105+
Ok(openssl::dh::Dh::from_pqg(p, q, g)?)
115106
}
116107

117108
#[pyo3::prelude::pyfunction]
@@ -127,7 +118,16 @@ fn from_private_numbers(
127118
let pub_key = utils::py_int_to_bn(py, public_numbers.getattr(pyo3::intern!(py, "y"))?)?;
128119
let priv_key = utils::py_int_to_bn(py, numbers.getattr(pyo3::intern!(py, "x"))?)?;
129120

130-
let pkey = openssl::pkey::PKey::from_dh(dh.set_key(pub_key, priv_key)?)?;
121+
let dh = dh.set_key(pub_key, priv_key)?;
122+
if !dh.check_key()? {
123+
return Err(CryptographyError::from(
124+
pyo3::exceptions::PyValueError::new_err(
125+
"DH private numbers did not pass safety checks.",
126+
),
127+
));
128+
}
129+
130+
let pkey = openssl::pkey::PKey::from_dh(dh)?;
131131
Ok(DHPrivateKey { pkey })
132132
}
133133

0 commit comments

Comments
 (0)