From 34d5c39a9c1efa6c2f2c9f473890ebe44816e85a Mon Sep 17 00:00:00 2001 From: Colleen Murphy Date: Sat, 4 Jun 2016 09:09:08 -0700 Subject: Add convenience methods to sign and verify w/ RSA (#2945) This patch adds wrapper methods to allow the user to sign and verify a single message block without having to go through the multi-step process of creating a signer or verifier, updating it with the one message, and finalizing the result. This will make signing and verifying data more user-friendly when only using small messages. Partial bug #1529 --- src/cryptography/hazmat/backends/openssl/rsa.py | 11 +++++++++++ src/cryptography/hazmat/primitives/asymmetric/rsa.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) (limited to 'src') diff --git a/src/cryptography/hazmat/backends/openssl/rsa.py b/src/cryptography/hazmat/backends/openssl/rsa.py index fa23bf89..10c51fee 100644 --- a/src/cryptography/hazmat/backends/openssl/rsa.py +++ b/src/cryptography/hazmat/backends/openssl/rsa.py @@ -611,6 +611,12 @@ class _RSAPrivateKey(object): self._rsa_cdata ) + def sign(self, data, padding, algorithm): + signer = self.signer(padding, algorithm) + signer.update(data) + signature = signer.finalize() + return signature + @utils.register_interface(RSAPublicKeyWithSerialization) class _RSAPublicKey(object): @@ -661,3 +667,8 @@ class _RSAPublicKey(object): self._evp_pkey, self._rsa_cdata ) + + def verify(self, signature, data, padding, algorithm): + verifier = self.verifier(signature, padding, algorithm) + verifier.update(data) + verifier.verify() diff --git a/src/cryptography/hazmat/primitives/asymmetric/rsa.py b/src/cryptography/hazmat/primitives/asymmetric/rsa.py index 41b0089e..2cb89515 100644 --- a/src/cryptography/hazmat/primitives/asymmetric/rsa.py +++ b/src/cryptography/hazmat/primitives/asymmetric/rsa.py @@ -40,6 +40,12 @@ class RSAPrivateKey(object): The RSAPublicKey associated with this private key. """ + @abc.abstractmethod + def sign(self, data, padding, algorithm): + """ + Signs the data. + """ + @six.add_metaclass(abc.ABCMeta) class RSAPrivateKeyWithSerialization(RSAPrivateKey): @@ -88,6 +94,12 @@ class RSAPublicKey(object): Returns the key serialized as bytes. """ + @abc.abstractmethod + def verify(self, signature, data, padding, algorithm): + """ + Verifies the signature of the data. + """ + RSAPublicKeyWithSerialization = RSAPublicKey -- cgit v1.2.3