aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-02-11 23:35:07 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-02-14 10:12:25 -0600
commit56da2a50cd96e7214f4fdb254610bc19d8c0f255 (patch)
tree5b47e66f3506e64fe35598a0728fa8933b949025 /src
parentb8dc2f03ff2af2139ef9d77552562b0dce18d6bd (diff)
downloadcryptography-56da2a50cd96e7214f4fdb254610bc19d8c0f255.tar.gz
cryptography-56da2a50cd96e7214f4fdb254610bc19d8c0f255.tar.bz2
cryptography-56da2a50cd96e7214f4fdb254610bc19d8c0f255.zip
add support for signature_algorithm in x509.Certificate
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/hazmat/backends/openssl/x509.py11
-rw-r--r--src/cryptography/hazmat/bindings/openssl/x509.py1
-rw-r--r--src/cryptography/x509.py34
3 files changed, 46 insertions, 0 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index 76dcf32f..a3dddc49 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -136,3 +136,14 @@ class _Certificate(object):
)
return x509.Name(attributes)
+
+ @property
+ def signature_algorithm(self):
+ buf_len = 50
+ buf = self._backend._ffi.new("char[]", buf_len)
+ res = self._backend._lib.OBJ_obj2txt(
+ buf, buf_len, self._x509.sig_alg.algorithm, 1
+ )
+ assert res <= 50 and res > 0
+ oid = self._backend._ffi.buffer(buf, res)[:].decode()
+ return x509.ObjectIdentifier(oid)
diff --git a/src/cryptography/hazmat/bindings/openssl/x509.py b/src/cryptography/hazmat/bindings/openssl/x509.py
index e30d23b7..bf689e33 100644
--- a/src/cryptography/hazmat/bindings/openssl/x509.py
+++ b/src/cryptography/hazmat/bindings/openssl/x509.py
@@ -65,6 +65,7 @@ typedef struct {
} X509_CRL;
typedef struct {
+ X509_ALGOR *sig_alg;
X509_CINF *cert_info;
...;
} X509;
diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py
index 8a888d2a..c4d87bb7 100644
--- a/src/cryptography/x509.py
+++ b/src/cryptography/x509.py
@@ -28,6 +28,19 @@ _OID_NAMES = {
"2.5.4.65": "pseudonym",
"0.9.2342.19200300.100.1.25": "domainComponent",
"1.2.840.113549.1.9.1": "emailAddress",
+ "1.2.840.113549.1.1.4": "md5WithRSA",
+ "1.2.840.113549.1.1.5": "sha1WithRSA",
+ "1.2.840.113549.1.1.14": "sha224WithRSAEncryption",
+ "1.2.840.113549.1.1.11": "sha256WithRSAEncryption",
+ "1.2.840.113549.1.1.12": "sha384WithRSAEncryption",
+ "1.2.840.113549.1.1.13": "sha512WithRSAEncryption",
+ "1.2.840.10045.4.3.1": "ecdsa_with_SHA224",
+ "1.2.840.10045.4.3.2": "ecdsa_with_SHA256",
+ "1.2.840.10045.4.3.3": "ecdsa_with_SHA384",
+ "1.2.840.10045.4.3.4": "ecdsa_with_SHA512",
+ "1.2.840.10040.4.3": "dsaWithSHA1",
+ "2.16.840.1.101.3.4.3.1": "dsa_with_SHA224",
+ "2.16.840.1.101.3.4.3.2": "dsa_with_SHA256",
}
@@ -143,6 +156,20 @@ OID_PSEUDONYM = ObjectIdentifier("2.5.4.65")
OID_DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25")
OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1")
+OID_MD5_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.4")
+OID_SHA1_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.5")
+OID_SHA224_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.14")
+OID_SHA256_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.11")
+OID_SHA384_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.12")
+OID_SHA512_WITH_RSA = ObjectIdentifier("1.2.840.113549.1.1.13")
+OID_ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1")
+OID_ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2")
+OID_ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3")
+OID_ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4")
+OID_DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3")
+OID_DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1")
+OID_DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2")
+
@six.add_metaclass(abc.ABCMeta)
class Certificate(object):
@@ -193,3 +220,10 @@ class Certificate(object):
"""
Returns the subject name object.
"""
+
+ @abc.abstractproperty
+ def signature_algorithm(self):
+ """
+ Returns an ObjectIdentifier corresponding to the signature algorithm of
+ the certificate.
+ """