@@ -135,12 +135,10 @@ pub(crate) fn public_key_from_pkey(
135135) -> CryptographyResult < ECPublicKey > {
136136 let ec = pkey. ec_key ( ) ?;
137137 let curve = py_curve_from_curve ( py, ec. group ( ) ) ?;
138- check_key_infinity ( & ec) ?;
139- Ok ( ECPublicKey {
140- pkey : pkey. to_owned ( ) ,
141- curve : curve. into ( ) ,
142- } )
138+
139+ ECPublicKey :: new ( pkey. to_owned ( ) , curve. into ( ) )
143140}
141+
144142#[ pyo3:: pyfunction]
145143#[ pyo3( signature = ( curve, backend=None ) ) ]
146144fn generate_private_key (
@@ -198,10 +196,7 @@ fn from_public_bytes(
198196 let ec = openssl:: ec:: EcKey :: from_public_key ( & curve, & point) ?;
199197 let pkey = openssl:: pkey:: PKey :: from_ec_key ( ec) ?;
200198
201- Ok ( ECPublicKey {
202- pkey,
203- curve : py_curve. into ( ) ,
204- } )
199+ ECPublicKey :: new ( pkey, py_curve. into ( ) )
205200}
206201
207202#[ pyo3:: pymethods]
@@ -382,6 +377,18 @@ impl ECPrivateKey {
382377 }
383378}
384379
380+ impl ECPublicKey {
381+ fn new (
382+ pkey : openssl:: pkey:: PKey < openssl:: pkey:: Public > ,
383+ curve : pyo3:: Py < pyo3:: PyAny > ,
384+ ) -> CryptographyResult < ECPublicKey > {
385+ let ec = pkey. ec_key ( ) ?;
386+ check_key_infinity ( & ec) ?;
387+
388+ Ok ( ECPublicKey { pkey, curve } )
389+ }
390+ }
391+
385392#[ pyo3:: pymethods]
386393impl ECPublicKey {
387394 #[ getter]
@@ -628,10 +635,7 @@ impl EllipticCurvePublicNumbers {
628635
629636 let pkey = openssl:: pkey:: PKey :: from_ec_key ( public_key) ?;
630637
631- Ok ( ECPublicKey {
632- pkey,
633- curve : self . curve . clone_ref ( py) ,
634- } )
638+ ECPublicKey :: new ( pkey, self . curve . clone_ref ( py) )
635639 }
636640
637641 fn __eq__ (
0 commit comments