ITADN

Consider adding an option for ECDSA keys

#559ClosedVincentVanlaer 创建于 2023-03-05
V
VincentVanlaercommented
ECDSA keys can be generated much faster. ### Benchmarks Benchmarks of the tests using `hyperfine`: #### RSA ``` Time (mean ± σ): 14.322 s ± 0.495 s [User: 14.252 s, System: 0.079 s] Range (min … max): 13.412 s … 14.958 s 10 runs ``` #### ECDSA (using secp521r1) ``` Time (mean ± σ): 776.9 ms ± 21.7 ms [User: 738.8 ms, System: 68.0 ms] Range (min … max): 753.7 ms … 823.5 ms 10 runs ``` For these last results, startup time becomes relevant, as `pytest` reports ~0.55s ### Diff for the ECDSA benchmarks ```diff diff --git a/tests/test_trustme.py b/tests/test_trustme.py index c9de4f8..324d8f9 100644 --- a/tests/test_trustme.py +++ b/tests/test_trustme.py @@ -69,7 +69,7 @@ def test_basics() -> None: today = datetime.datetime.today() - assert b"BEGIN RSA PRIVATE KEY" in ca.private_key_pem.bytes() + assert b"BEGIN EC PRIVATE KEY" in ca.private_key_pem.bytes() assert b"BEGIN CERTIFICATE" in ca.cert_pem.bytes() private_key = load_pem_private_key( @@ -80,9 +80,9 @@ def test_basics() -> None: assert ca_cert.not_valid_before <= today <= ca_cert.not_valid_after public_key1 = private_key.public_key().public_bytes( - Encoding.PEM, PublicFormat.PKCS1) + Encoding.PEM, PublicFormat.SubjectPublicKeyInfo) public_key2 = ca_cert.public_key().public_bytes( - Encoding.PEM, PublicFormat.PKCS1) + Encoding.PEM, PublicFormat.SubjectPublicKeyInfo) assert public_key1 == public_key2 assert ca_cert.issuer == ca_cert.subject diff --git a/trustme/__init__.py b/trustme/__init__.py index a00c960..3b416cb 100644 --- a/trustme/__init__.py +++ b/trustme/__init__.py @@ -12,7 +12,7 @@ import idna from cryptography import x509 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import rsa +from cryptography.hazmat.primitives.asymmetric import rsa, ec from cryptography.hazmat.primitives.serialization import ( PrivateFormat, NoEncryption ) @@ -219,11 +219,7 @@ class CA: organization_unit_name: Optional[str] = None, ) -> None: self.parent_cert = parent_cert - self._private_key = rsa.generate_private_key( - public_exponent=65537, - key_size=_KEY_SIZE, - backend=default_backend() - ) + self._private_key = ec.generate_private_key(ec.SECP521R1) self._path_length = path_length name = _name( @@ -353,11 +349,7 @@ class CA: "Must specify at least one identity or common name" ) - key = rsa.generate_private_key( - public_exponent=65537, - key_size=_KEY_SIZE, - backend=default_backend() - ) + key = ec.generate_private_key(ec.SECP521R1) ski_ext = self._certificate.extensions.get_extension_for_class( x509.SubjectKeyIdentifier) ```
关闭于 2023-04-19 5 条评论