From db34d7e3d9e6b13e549866324323e1df8a6e7777 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 02:15:08 +0100 Subject: added get_extension_for_class #2255 --- src/cryptography/x509/base.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py index 2b4eeb56..f58b5221 100644 --- a/src/cryptography/x509/base.py +++ b/src/cryptography/x509/base.py @@ -79,6 +79,13 @@ class Extensions(object): raise ExtensionNotFound("No {0} extension was found".format(oid), oid) + def get_extension_for_class(self, extclass): + for ext in self: + if type(ext.value) == extclass: + return ext + + raise ExtensionNotFound("No {0} extension was found".format(extclass), extclass) + def __iter__(self): return iter(self._extensions) -- cgit v1.2.3 From 754be60e2fb672950d97d1089df5ce2175e557b4 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 03:11:35 +0100 Subject: Corrected class checking #2255 --- src/cryptography/x509/extensions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 74e271ed..938a98e9 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -82,7 +82,7 @@ class Extensions(object): def get_extension_for_class(self, extclass): for ext in self: - if type(ext.value) == extclass: + if isinstance(ext.value, extclass): return ext raise ExtensionNotFound("No {0} extension was found".format(extclass), extclass) -- cgit v1.2.3 From 9fbb889347696db4a15e44b2c73d38aa47da8b97 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 03:51:33 +0100 Subject: added test for get_extension_for_class --- tests/test_x509_ext.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 2c5438a9..a05dc2a4 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -832,6 +832,16 @@ class TestExtensions(object): extensions = cert.extensions assert len(extensions) == 0 + def test_one_extension_get_for_class(self, backend): + cert = _load_cert( + os.path.join("x509", "custom", "basic_constraints_not_critical.pem"), + x509.load_pem_x509_certificate, + backend + ) + ext = cert.extensions.get_extension_for_class(x509.BasicConstraints) + assert ext is not None + + assert isinstance(ext.value, x509.BasicConstraints) @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) -- cgit v1.2.3 From 019b7f84c9284d27972ea0abfac8ebad24490b92 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 03:52:03 +0100 Subject: added docs for get_extension_for_class --- docs/x509/reference.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index 8d5d6a6f..efc2c8a9 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -889,6 +889,21 @@ X.509 Extensions >>> cert.extensions.get_extension_for_oid(ExtensionOID.BASIC_CONSTRAINTS) , critical=True, value=)> + .. method:: get_extension_for_class(extclass) + + :param extclass: An extension class. + + :returns: An instance of the extension class. + + :raises cryptography.x509.ExtensionNotFound: If the certificate does + not have the extension requested. + + .. doctest:: + + >>> from cryptography import x509 + >>> cert.extensions.get_extension_for_class(x509.BasicConstraints) + , critical=True, value=)> + .. class:: Extension .. versionadded:: 0.9 -- cgit v1.2.3 From 2cc111a18b615ccf3ecec9fe8918836d498e4b67 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 04:14:22 +0100 Subject: fixing pep8 errors #2255 --- src/cryptography/x509/extensions.py | 4 +++- tests/test_x509_ext.py | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 938a98e9..09d76501 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -85,7 +85,9 @@ class Extensions(object): if isinstance(ext.value, extclass): return ext - raise ExtensionNotFound("No {0} extension was found".format(extclass), extclass) + raise ExtensionNotFound( + "No {0} extension was found".format(extclass), extclass + ) def __iter__(self): return iter(self._extensions) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index a05dc2a4..2d3339c3 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -834,7 +834,9 @@ class TestExtensions(object): def test_one_extension_get_for_class(self, backend): cert = _load_cert( - os.path.join("x509", "custom", "basic_constraints_not_critical.pem"), + os.path.join( + "x509", "custom", "basic_constraints_not_critical.pem" + ), x509.load_pem_x509_certificate, backend ) @@ -843,6 +845,7 @@ class TestExtensions(object): assert isinstance(ext.value, x509.BasicConstraints) + @pytest.mark.requires_backend_interface(interface=RSABackend) @pytest.mark.requires_backend_interface(interface=X509Backend) class TestBasicConstraintsExtension(object): -- cgit v1.2.3 From ecae981f3a17236caee76bc95c5881db0b0d39b3 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 05:00:32 +0100 Subject: added test to raise error --- src/cryptography/x509/extensions.py | 2 +- tests/test_x509_ext.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 09d76501..0adf9e26 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -86,7 +86,7 @@ class Extensions(object): return ext raise ExtensionNotFound( - "No {0} extension was found".format(extclass), extclass + "No {0} extension was found".format(extclass), extclass.oid ) def __iter__(self): diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 2d3339c3..040347db 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -832,6 +832,22 @@ class TestExtensions(object): extensions = cert.extensions assert len(extensions) == 0 + def test_no_extensions_get_for_class(self, backend): + cert = _load_cert( + os.path.join( + "x509", "verisign_md2_root.pem" + ), + x509.load_pem_x509_certificate, + backend + ) + ext = cert.extensions + assert len(ext) == 0 + assert list(ext) == [] + with pytest.raises(x509.ExtensionNotFound) as exc: + ext.get_extension_for_class(x509.BasicConstraints) + + assert exc.value.oid == ExtensionOID.BASIC_CONSTRAINTS + def test_one_extension_get_for_class(self, backend): cert = _load_cert( os.path.join( -- cgit v1.2.3 From c93752b2f97b54ee3ea5f9b3c89151d06ef3a919 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 10:54:46 +0100 Subject: making tests more explicit --- tests/test_x509_ext.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 040347db..14df9a22 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -840,12 +840,10 @@ class TestExtensions(object): x509.load_pem_x509_certificate, backend ) - ext = cert.extensions - assert len(ext) == 0 - assert list(ext) == [] + exts = cert.extensions with pytest.raises(x509.ExtensionNotFound) as exc: - ext.get_extension_for_class(x509.BasicConstraints) - + ext = exts.get_extension_for_class(x509.BasicConstraints) + assert ext is None assert exc.value.oid == ExtensionOID.BASIC_CONSTRAINTS def test_one_extension_get_for_class(self, backend): @@ -858,7 +856,6 @@ class TestExtensions(object): ) ext = cert.extensions.get_extension_for_class(x509.BasicConstraints) assert ext is not None - assert isinstance(ext.value, x509.BasicConstraints) -- cgit v1.2.3 From e3c10077a395399d743faaffed42ca9fc33a5087 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 11:24:09 +0100 Subject: undid erroneous assertion --- tests/test_x509_ext.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 14df9a22..75fb914d 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -843,7 +843,6 @@ class TestExtensions(object): exts = cert.extensions with pytest.raises(x509.ExtensionNotFound) as exc: ext = exts.get_extension_for_class(x509.BasicConstraints) - assert ext is None assert exc.value.oid == ExtensionOID.BASIC_CONSTRAINTS def test_one_extension_get_for_class(self, backend): -- cgit v1.2.3 From 85fa546c4a7f68e2632034f28a1a07cb441de8a2 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 11:41:55 +0100 Subject: fixed pep8 error --- tests/test_x509_ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 75fb914d..043aaa7d 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -869,7 +869,7 @@ class TestBasicConstraintsExtension(object): x509.load_der_x509_certificate, backend ) - ext = cert.extensions.get_extension_for_oid( + cert.extensions.get_extension_for_oid( ExtensionOID.BASIC_CONSTRAINTS ) assert ext is not None -- cgit v1.2.3 From 062dec72a2a0d769328c575ae8cc11e21eed2f18 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 11:42:23 +0100 Subject: fixed pep8 error --- tests/test_x509_ext.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 043aaa7d..33da27ec 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -842,7 +842,7 @@ class TestExtensions(object): ) exts = cert.extensions with pytest.raises(x509.ExtensionNotFound) as exc: - ext = exts.get_extension_for_class(x509.BasicConstraints) + exts.get_extension_for_class(x509.BasicConstraints) assert exc.value.oid == ExtensionOID.BASIC_CONSTRAINTS def test_one_extension_get_for_class(self, backend): @@ -869,7 +869,7 @@ class TestBasicConstraintsExtension(object): x509.load_der_x509_certificate, backend ) - cert.extensions.get_extension_for_oid( + ext = cert.extensions.get_extension_for_oid( ExtensionOID.BASIC_CONSTRAINTS ) assert ext is not None -- cgit v1.2.3 From 6a603eb9e57cff560b9f0204d1f506219b60912b Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 14:14:49 +0100 Subject: Added ::versionadded 1.1 tag to get_extension_for_class --- docs/x509/reference.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst index efc2c8a9..62bdb3a9 100644 --- a/docs/x509/reference.rst +++ b/docs/x509/reference.rst @@ -891,6 +891,8 @@ X.509 Extensions .. method:: get_extension_for_class(extclass) + .. versionadded:: 1.1 + :param extclass: An extension class. :returns: An instance of the extension class. -- cgit v1.2.3 From cb5ec4e90ea06d0b5ee95c68c26927ab7623b588 Mon Sep 17 00:00:00 2001 From: Phoebe Queen Date: Wed, 12 Aug 2015 15:06:26 +0100 Subject: Swap test vector verisign for cryptography.io.pem --- tests/test_x509_ext.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 33da27ec..85373973 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -835,15 +835,15 @@ class TestExtensions(object): def test_no_extensions_get_for_class(self, backend): cert = _load_cert( os.path.join( - "x509", "verisign_md2_root.pem" + "x509", "cryptography.io.pem" ), x509.load_pem_x509_certificate, backend ) exts = cert.extensions with pytest.raises(x509.ExtensionNotFound) as exc: - exts.get_extension_for_class(x509.BasicConstraints) - assert exc.value.oid == ExtensionOID.BASIC_CONSTRAINTS + exts.get_extension_for_class(x509.IssuerAlternativeName) + assert exc.value.oid == ExtensionOID.ISSUER_ALTERNATIVE_NAME def test_one_extension_get_for_class(self, backend): cert = _load_cert( -- cgit v1.2.3