diff options
author | Marti <marti@juffo.org> | 2016-08-02 04:03:25 +0300 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2016-08-02 09:03:25 +0800 |
commit | 4739cfca290c7e24b4ecbee9ccce09c788ba49f7 (patch) | |
tree | bea76544a9fafcafb87c65dedbccddc0e23d73bb /src | |
parent | 679a91484c32b5d8eda39e9c3b5c11685a94f08f (diff) | |
download | cryptography-4739cfca290c7e24b4ecbee9ccce09c788ba49f7.tar.gz cryptography-4739cfca290c7e24b4ecbee9ccce09c788ba49f7.tar.bz2 cryptography-4739cfca290c7e24b4ecbee9ccce09c788ba49f7.zip |
Add code style settings, new excludes, run 'test_x509_ext (Py3)' (#3041)
Fix DNSName wildcard encoding for NameConstraints
Previously '.example.com' would get normalised to 'example.com', making
it impossible to add wildcard NameConstraints.
Diffstat (limited to 'src')
-rw-r--r-- | src/cryptography/hazmat/backends/openssl/encode_asn1.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/encode_asn1.py b/src/cryptography/hazmat/backends/openssl/encode_asn1.py index b0e2e73e..944dedc6 100644 --- a/src/cryptography/hazmat/backends/openssl/encode_asn1.py +++ b/src/cryptography/hazmat/backends/openssl/encode_asn1.py @@ -358,6 +358,15 @@ def _encode_subject_key_identifier(backend, ski): return _encode_asn1_str_gc(backend, ski.digest, len(ski.digest)) +def _idna_encode(value): + # Retain prefixes '*.' for common/alt names and '.' for name constraints + for prefix in ['*.', '.']: + if value.startswith(prefix): + value = value[len(prefix):] + return prefix.encode('ascii') + idna.encode(value) + return idna.encode(value) + + def _encode_general_name(backend, name): if isinstance(name, x509.DNSName): gn = backend._lib.GENERAL_NAME_new() @@ -366,11 +375,7 @@ def _encode_general_name(backend, name): ia5 = backend._lib.ASN1_IA5STRING_new() backend.openssl_assert(ia5 != backend._ffi.NULL) - - if name.value.startswith(u"*."): - value = b"*." + idna.encode(name.value[2:]) - else: - value = idna.encode(name.value) + value = _idna_encode(name.value) res = backend._lib.ASN1_STRING_set(ia5, value, len(value)) backend.openssl_assert(res == 1) |