30
30
_EllipticCurvePrivateKey ,
31
31
_EllipticCurvePublicKey ,
32
32
)
33
- from cryptography .hazmat .backends .openssl .ed448 import (
34
- _ED448_KEY_SIZE ,
35
- _Ed448PrivateKey ,
36
- _Ed448PublicKey ,
37
- )
38
33
from cryptography .hazmat .backends .openssl .hashes import _HashContext
39
34
from cryptography .hazmat .backends .openssl .hmac import _HMACContext
40
35
from cryptography .hazmat .backends .openssl .poly1305 import (
@@ -651,7 +646,9 @@ def _evp_pkey_to_private_key(
651
646
)
652
647
elif key_type == getattr (self ._lib , "EVP_PKEY_ED448" , None ):
653
648
# EVP_PKEY_ED448 is not present in CRYPTOGRAPHY_IS_LIBRESSL
654
- return _Ed448PrivateKey (self , evp_pkey )
649
+ return rust_openssl .ed448 .private_key_from_ptr (
650
+ int (self ._ffi .cast ("uintptr_t" , evp_pkey ))
651
+ )
655
652
else :
656
653
raise UnsupportedAlgorithm ("Unsupported key type." )
657
654
@@ -714,7 +711,9 @@ def _evp_pkey_to_public_key(self, evp_pkey) -> PublicKeyTypes:
714
711
)
715
712
elif key_type == getattr (self ._lib , "EVP_PKEY_ED448" , None ):
716
713
# EVP_PKEY_ED448 is not present in CRYPTOGRAPHY_IS_LIBRESSL
717
- return _Ed448PublicKey (self , evp_pkey )
714
+ return rust_openssl .ed448 .public_key_from_ptr (
715
+ int (self ._ffi .cast ("uintptr_t" , evp_pkey ))
716
+ )
718
717
else :
719
718
raise UnsupportedAlgorithm ("Unsupported key type." )
720
719
@@ -1503,12 +1502,9 @@ def _private_key_bytes(
1503
1502
write_bio = self ._lib .PEM_write_bio_RSAPrivateKey
1504
1503
elif key_type == self ._lib .EVP_PKEY_DSA :
1505
1504
write_bio = self ._lib .PEM_write_bio_DSAPrivateKey
1506
- elif key_type == self ._lib .EVP_PKEY_EC :
1507
- write_bio = self ._lib .PEM_write_bio_ECPrivateKey
1508
1505
else :
1509
- raise ValueError (
1510
- "Unsupported key type for TraditionalOpenSSL"
1511
- )
1506
+ assert key_type == self ._lib .EVP_PKEY_EC
1507
+ write_bio = self ._lib .PEM_write_bio_ECPrivateKey
1512
1508
return self ._private_key_bytes_via_bio (
1513
1509
write_bio , cdata , password
1514
1510
)
@@ -1523,12 +1519,9 @@ def _private_key_bytes(
1523
1519
write_bio = self ._lib .i2d_RSAPrivateKey_bio
1524
1520
elif key_type == self ._lib .EVP_PKEY_EC :
1525
1521
write_bio = self ._lib .i2d_ECPrivateKey_bio
1526
- elif key_type == self ._lib .EVP_PKEY_DSA :
1527
- write_bio = self ._lib .i2d_DSAPrivateKey_bio
1528
1522
else :
1529
- raise ValueError (
1530
- "Unsupported key type for TraditionalOpenSSL"
1531
- )
1523
+ assert key_type == self ._lib .EVP_PKEY_DSA
1524
+ write_bio = self ._lib .i2d_DSAPrivateKey_bio
1532
1525
return self ._bio_func_output (write_bio , cdata )
1533
1526
1534
1527
raise ValueError ("Unsupported encoding for TraditionalOpenSSL" )
@@ -1817,19 +1810,6 @@ def x25519_load_private_bytes(
1817
1810
) -> x25519 .X25519PrivateKey :
1818
1811
return rust_openssl .x25519 .from_private_bytes (data )
1819
1812
1820
- def _evp_pkey_keygen_gc (self , nid ):
1821
- evp_pkey_ctx = self ._lib .EVP_PKEY_CTX_new_id (nid , self ._ffi .NULL )
1822
- self .openssl_assert (evp_pkey_ctx != self ._ffi .NULL )
1823
- evp_pkey_ctx = self ._ffi .gc (evp_pkey_ctx , self ._lib .EVP_PKEY_CTX_free )
1824
- res = self ._lib .EVP_PKEY_keygen_init (evp_pkey_ctx )
1825
- self .openssl_assert (res == 1 )
1826
- evp_ppkey = self ._ffi .new ("EVP_PKEY **" )
1827
- res = self ._lib .EVP_PKEY_keygen (evp_pkey_ctx , evp_ppkey )
1828
- self .openssl_assert (res == 1 )
1829
- self .openssl_assert (evp_ppkey [0 ] != self ._ffi .NULL )
1830
- evp_pkey = self ._ffi .gc (evp_ppkey [0 ], self ._lib .EVP_PKEY_free )
1831
- return evp_pkey
1832
-
1833
1813
def x25519_generate_key (self ) -> x25519 .X25519PrivateKey :
1834
1814
return rust_openssl .x25519 .generate_key ()
1835
1815
@@ -1882,35 +1862,13 @@ def ed448_supported(self) -> bool:
1882
1862
)
1883
1863
1884
1864
def ed448_load_public_bytes (self , data : bytes ) -> ed448 .Ed448PublicKey :
1885
- utils ._check_bytes ("data" , data )
1886
- if len (data ) != _ED448_KEY_SIZE :
1887
- raise ValueError ("An Ed448 public key is 57 bytes long" )
1888
-
1889
- evp_pkey = self ._lib .EVP_PKEY_new_raw_public_key (
1890
- self ._lib .NID_ED448 , self ._ffi .NULL , data , len (data )
1891
- )
1892
- self .openssl_assert (evp_pkey != self ._ffi .NULL )
1893
- evp_pkey = self ._ffi .gc (evp_pkey , self ._lib .EVP_PKEY_free )
1894
-
1895
- return _Ed448PublicKey (self , evp_pkey )
1865
+ return rust_openssl .ed448 .from_public_bytes (data )
1896
1866
1897
1867
def ed448_load_private_bytes (self , data : bytes ) -> ed448 .Ed448PrivateKey :
1898
- utils ._check_byteslike ("data" , data )
1899
- if len (data ) != _ED448_KEY_SIZE :
1900
- raise ValueError ("An Ed448 private key is 57 bytes long" )
1901
-
1902
- data_ptr = self ._ffi .from_buffer (data )
1903
- evp_pkey = self ._lib .EVP_PKEY_new_raw_private_key (
1904
- self ._lib .NID_ED448 , self ._ffi .NULL , data_ptr , len (data )
1905
- )
1906
- self .openssl_assert (evp_pkey != self ._ffi .NULL )
1907
- evp_pkey = self ._ffi .gc (evp_pkey , self ._lib .EVP_PKEY_free )
1908
-
1909
- return _Ed448PrivateKey (self , evp_pkey )
1868
+ return rust_openssl .ed448 .from_private_bytes (data )
1910
1869
1911
1870
def ed448_generate_key (self ) -> ed448 .Ed448PrivateKey :
1912
- evp_pkey = self ._evp_pkey_keygen_gc (self ._lib .NID_ED448 )
1913
- return _Ed448PrivateKey (self , evp_pkey )
1871
+ return rust_openssl .ed448 .generate_key ()
1914
1872
1915
1873
def derive_scrypt (
1916
1874
self ,
0 commit comments