Skip to content

Commit

Permalink
When failing to parse SANs or IANs, include which it was that failed (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
alex authored Oct 18, 2024
1 parent b7721e2 commit 8b3de53
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 2 deletions.
2 changes: 2 additions & 0 deletions docs/development/test-vectors.rst
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,8 @@ Custom X.509 Vectors
This is an invalid certificate per CA/B 7.1.2.7.6.
* ``empty-eku.pem`` - A leaf certificate containing an empty EKU extension.
This is an invalid certificate per :rfc:`5280` 4.2.1.12.
* ``malformed-san.pem`` - A certificate with a malformed SAN.
* ``malformed-ian.pem`` - A certificate with a malformed IAN.

Custom X.509 Request Vectors
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
8 changes: 6 additions & 2 deletions src/rust/src/x509/certificate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -737,14 +737,18 @@ pub fn parse_cert_ext<'p>(
) -> CryptographyResult<Option<pyo3::Bound<'p, pyo3::PyAny>>> {
match ext.extn_id {
oid::SUBJECT_ALTERNATIVE_NAME_OID => {
let gn_seq = ext.value::<SubjectAlternativeName<'_>>()?;
let gn_seq = ext.value::<SubjectAlternativeName<'_>>().map_err(|e| {
e.add_location(asn1::ParseLocation::Field("subject_alternative_name"))
})?;
let sans = x509::parse_general_names(py, &gn_seq)?;
Ok(Some(
types::SUBJECT_ALTERNATIVE_NAME.get(py)?.call1((sans,))?,
))
}
oid::ISSUER_ALTERNATIVE_NAME_OID => {
let gn_seq = ext.value::<IssuerAlternativeName<'_>>()?;
let gn_seq = ext.value::<IssuerAlternativeName<'_>>().map_err(|e| {
e.add_location(asn1::ParseLocation::Field("issuer_alternative_name"))
})?;
let ians = x509::parse_general_names(py, &gn_seq)?;
Ok(Some(
types::ISSUER_ALTERNATIVE_NAME.get(py)?.call1((ians,))?,
Expand Down
16 changes: 16 additions & 0 deletions tests/x509/test_x509_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -2324,6 +2324,14 @@ def test_uri(self, backend):
x509.UniformResourceIdentifier("http://path.to.root/root.crt"),
]

def test_malformed(self):
cert = _load_cert(
os.path.join("x509", "custom", "malformed-ian.pem"),
x509.load_pem_x509_certificate,
)
with pytest.raises(ValueError, match="issuer_alternative_name"):
cert.extensions


class TestCRLNumber:
def test_eq(self):
Expand Down Expand Up @@ -2709,6 +2717,14 @@ def test_certbuilder(self, rsa_key_2048: rsa.RSAPrivateKey, backend):
]
assert result == sans

def test_malformed(self):
cert = _load_cert(
os.path.join("x509", "custom", "malformed-san.pem"),
x509.load_pem_x509_certificate,
)
with pytest.raises(ValueError, match="subject_alternative_name"):
cert.extensions


class TestExtendedKeyUsageExtension:
def test_eku(self, backend):
Expand Down
11 changes: 11 additions & 0 deletions vectors/cryptography_vectors/x509/custom/malformed-ian.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-----BEGIN CERTIFICATE-----
MIIBlDCB/qADAgECAgo/X5syqzQbiVZiMA0GCSqGSIb3DQEBBQUAMAAwHhcNMTIw
OTI3MTEyNDQzWhcNMTcwOTI3MTEyNDQzWjAAMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDEyUkICYplDtDRdLjZV0nF5oK5tBjoXWPxnfx6Msg5Ywvxjh4jq8Jf
FRwn9oLYpFmnhPYaVNWO7fykCrYz8O6mMtYInUbodvIPniZXjoTlYOPUmLj/XcU0
iGhUmdo8yquPoe7TC9DDeSfaAwoLMDZjJoQjlBuRk+qTmfySJCNZrQIDAQABoxYw
FDASBgNVHRIECzAJoAcGA1UEAwwAMA0GCSqGSIb3DQEBBQUAA4GBAD5jUyH8eLrZ
tJtEJIVH/cvjtATXWwUnPX5NUGrgIBFwKx1f4csOFe6MIhA7j0VwSJ/iOd4xszLA
r8/2ijoBc+cPbThPSHLdOvOrGJsdrywOUYzGHRh/zoMEnT/FN9p7YbYnQIwFGqx1
HUFnXljOXCezE5ytzEcpQ/43EvT4u74O
-----END CERTIFICATE-----
11 changes: 11 additions & 0 deletions vectors/cryptography_vectors/x509/custom/malformed-san.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-----BEGIN CERTIFICATE-----
MIIBlDCB/qADAgECAgo/X5syqzQbiVZiMA0GCSqGSIb3DQEBBQUAMAAwHhcNMTIw
OTI3MTEyNDQzWhcNMTcwOTI3MTEyNDQzWjAAMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDEyUkICYplDtDRdLjZV0nF5oK5tBjoXWPxnfx6Msg5Ywvxjh4jq8Jf
FRwn9oLYpFmnhPYaVNWO7fykCrYz8O6mMtYInUbodvIPniZXjoTlYOPUmLj/XcU0
iGhUmdo8yquPoe7TC9DDeSfaAwoLMDZjJoQjlBuRk+qTmfySJCNZrQIDAQABoxYw
FDASBgNVHREECzAJoAcGA1UEAwwAMA0GCSqGSIb3DQEBBQUAA4GBAD5jUyH8eLrZ
tJtEJIVH/cvjtATXWwUnPX5NUGrgIBFwKx1f4csOFe6MIhA7j0VwSJ/iOd4xszLA
r8/2ijoBc+cPbThPSHLdOvOrGJsdrywOUYzGHRh/zoMEnT/FN9p7YbYnQIwFGqx1
HUFnXljOXCezE5ytzEcpQ/43EvT4u74O
-----END CERTIFICATE-----

0 comments on commit 8b3de53

Please sign in to comment.