├── .circleci └── config.yml ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── SECURITY.md ├── asn1crypto ├── __init__.py ├── _errors.py ├── _inet.py ├── _int.py ├── _iri.py ├── _ordereddict.py ├── _teletex_codec.py ├── _types.py ├── algos.py ├── cms.py ├── core.py ├── crl.py ├── csr.py ├── keys.py ├── ocsp.py ├── parser.py ├── pdf.py ├── pem.py ├── pkcs12.py ├── tsp.py ├── util.py ├── version.py └── x509.py ├── changelog.md ├── dev ├── __init__.py ├── _import.py ├── _pep425.py ├── _task.py ├── build.py ├── ci-cleanup.py ├── ci-driver.py ├── ci.py ├── codecov.json ├── coverage.py ├── deps.py ├── lint.py ├── pyenv-install.py ├── python-install.py ├── release.py ├── tests.py └── version.py ├── docs ├── pem.md ├── readme.md └── universal_types.md ├── readme.md ├── requires ├── ci ├── coverage ├── lint └── release ├── run.py ├── setup.py ├── tests ├── LICENSE ├── __init__.py ├── __main__.py ├── _unittest_compat.py ├── fixtures │ ├── 9999-years-rsa-cert.pem │ ├── DSAParametersInheritedCACert.crt │ ├── admin.ch.crt │ ├── aesccm_algo.der │ ├── certbag.der │ ├── chromium │ │ ├── ndn.ca.crt │ │ ├── punycodetest.pem │ │ ├── readme.md │ │ └── subjectAltName_sanity_check.pem │ ├── cms-compressed.der │ ├── cms-compressed.pem │ ├── cms-digested.der │ ├── cms-digested.pem │ ├── cms-encrypted.der │ ├── cms-encrypted.pem │ ├── cms-enveloped.der │ ├── cms-enveloped.pem │ ├── cms-signed-digested.der │ ├── cms-signed-digested.pem │ ├── cms-signed-indefinite-length.der │ ├── cms-signed.der │ ├── cms-signed.pem │ ├── eid2011.crl │ ├── example-attr-cert.der │ ├── geotrust_certs │ │ ├── Equifax_Secure_Certificate_Authority.crt │ │ ├── Equifax_Secure_Certificate_Authority.pem │ │ ├── GeoTrust_EV_SSL_CA_-_G4.cer │ │ ├── GeoTrust_EV_SSL_CA_-_G4.crt │ │ ├── GeoTrust_Primary_CA.crt │ │ ├── GeoTrust_Primary_CA.pem │ │ ├── GeoTrust_Universal_CA.crt │ │ ├── GeoTrust_Universal_CA.pem │ │ ├── codex.crt │ │ └── readme.md │ ├── globalsign_example_keys │ │ ├── IssuingCA-der.cer │ │ ├── IssuingCA.cer │ │ ├── IssuingCA.key │ │ ├── SSL1-der.cer │ │ ├── SSL1.cer │ │ ├── SSL1.key │ │ ├── SSL2-der.cer │ │ ├── SSL2.cer │ │ ├── SSL2.key │ │ ├── SSL3-der.cer │ │ ├── SSL3.cer │ │ ├── SSL3.key │ │ ├── readme.md │ │ ├── rootCA-der.cer │ │ ├── rootCA.cer │ │ └── rootCA.key │ ├── invalid_email_tag.pem │ ├── keys │ │ ├── readme.md │ │ ├── test-aes128-der.key │ │ ├── test-aes128.key │ │ ├── test-der.crt │ │ ├── test-der.key │ │ ├── test-dsa-der.crt │ │ ├── test-dsa-der.key │ │ ├── test-dsa.crt │ │ ├── test-dsa.key │ │ ├── test-dsa.param │ │ ├── test-ec-der.crt │ │ ├── test-ec-der.key │ │ ├── test-ec-named-der.crt │ │ ├── test-ec-named-der.key │ │ ├── test-ec-named.crt │ │ ├── test-ec-named.key │ │ ├── test-ec.crt │ │ ├── test-ec.key │ │ ├── test-ed25519.crt │ │ ├── test-ed25519.key │ │ ├── test-ed448.crt │ │ ├── test-ed448.key │ │ ├── test-inter-der.crt │ │ ├── test-inter.crt │ │ ├── test-pkcs8-der.key │ │ ├── test-pkcs8-dsa-der.key │ │ ├── test-pkcs8-dsa.key │ │ ├── test-pkcs8-ec-der.key │ │ ├── test-pkcs8-ec-named-der.key │ │ ├── test-pkcs8-ec-named.key │ │ ├── test-pkcs8-ec.key │ │ ├── test-pkcs8.key │ │ ├── test-public-der.key │ │ ├── test-public-dsa-der.key │ │ ├── test-public-dsa.key │ │ ├── test-public-ec-der.key │ │ ├── test-public-ec-named-der.key │ │ ├── test-public-ec-named.key │ │ ├── test-public-ec.key │ │ ├── test-public-rsa-der.key │ │ ├── test-public-rsa.key │ │ ├── test-public-rsapss-der.key │ │ ├── test-public-rsapss.key │ │ ├── test-public.key │ │ ├── test-rc2.p12 │ │ ├── test-rsapss-der.key │ │ ├── test-rsapss.crt │ │ ├── test-rsapss.key │ │ ├── test-third-der.crt │ │ ├── test-third.crt │ │ ├── test-validity.crt │ │ ├── test.crt │ │ └── test.key │ ├── lets_encrypt │ │ ├── isrgrootx1.pem │ │ ├── letsencryptauthorityx1.pem │ │ ├── letsencryptauthorityx2.pem │ │ └── readme.md │ ├── meca2_compressed.der │ ├── message.der │ ├── message.pem │ ├── message.txt │ ├── mozilla-generated-by-openssl.pkcs7.der │ ├── ocsp-with-pkup.pem │ ├── ocsp_request │ ├── ocsp_response │ ├── pkcs7-signed-digested.der │ ├── pkcs7-signed-digested.pem │ ├── pkcs7-signed.der │ ├── pkcs7-signed.pem │ ├── rc2_algo.der │ ├── rc5_algo.der │ ├── readme.md │ ├── rfc3739.crt │ ├── scrypt_algo.der │ ├── self-signed-repeated-subject-fields.der │ ├── sender_dummycorp.com.crt │ ├── smime-signature-generated-by-thunderbird.p7s │ ├── test-inter-der.csr │ ├── test-inter.csr │ ├── test-third-der.csr │ ├── test-third.csr │ ├── test-tripledes.p12 │ ├── test-windows-host.csr │ ├── tsp_request │ ├── tsp_response │ └── universal │ │ └── object_identifier.der ├── readme.md ├── setup.py ├── test_algos.py ├── test_cms.py ├── test_core.py ├── test_crl.py ├── test_csr.py ├── test_init.py ├── test_keys.py ├── test_ocsp.py ├── test_parser.py ├── test_pem.py ├── test_pkcs12.py ├── test_tsp.py ├── test_util.py ├── test_x509.py └── unittest_data.py └── tox.ini /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | python2.7: 4 | machine: 5 | image: ubuntu-2004:202101-01 6 | resource_class: arm.medium 7 | steps: 8 | - checkout 9 | - run: python run.py deps 10 | - run: python run.py ci-driver 11 | python3.9: 12 | machine: 13 | image: ubuntu-2004:202101-01 14 | resource_class: arm.medium 15 | steps: 16 | - checkout 17 | - run: python run.py deps 18 | - run: python3 run.py ci-driver 19 | workflows: 20 | version: 2 21 | arm64: 22 | jobs: 23 | - python2.7 24 | - python3.9 25 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: wbond 4 | tidelift: "pypi/asn1crypto" 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .tox/ 2 | __pycache__/ 3 | build/ 4 | dist/ 5 | tests/output/ 6 | tmp/ 7 | *.egg-info/ 8 | *.pyc 9 | *.pyo 10 | .python-version 11 | .DS_Store 12 | .coverage 13 | coverage.xml 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2022 Will Bond 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## How to Report 4 | 5 | If you believe you've found an issue that has security implications, please do 6 | not post a public issue on GitHub. Instead, email the project lead, Will Bond, 7 | at will@wbond.net. 8 | 9 | You should receive a response within two business days, and follow up emails 10 | during the process of confirming the potential issue. 11 | 12 | ## Supported Versions 13 | 14 | The asn1crypto project only provides security patches for the most recent 15 | release. This is primarily a function of available resources. 16 | 17 | ## Disclosure Process 18 | 19 | The following process is used when handling a potential secuirty issue: 20 | 21 | 1. The report should be emailed to will@wbond.net, and NOT posted on the 22 | GitHub issue tracker. 23 | 2. Confirmation of receipt of the report should happen within two business 24 | days. 25 | 3. Information will be collected and an investigation will be performed to 26 | determine if a security issue exists. 27 | 4. If no security issue is found, the process will end. 28 | 5. A fix for the issue and announcement will be drafted. 29 | 6. A release schedule and accouncement will be negotiated between the 30 | reporter and the project 31 | 7. The security contacts for Arch Linux, Conda, Debian, Fedora, FreeBSD, 32 | Ubuntu, and Tidelift will be contacted to notify them of an upcoming 33 | security release. 34 | 8. Fixes for all vulnerabilities will be performed, and new releases made, 35 | but without mention of a security issue. These changes and releases will 36 | be published before the announcement. 37 | 9. An announcement will be made disclosing the vulnerability and the fix. 38 | -------------------------------------------------------------------------------- /asn1crypto/__init__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | from .version import __version__, __version_info__ 5 | 6 | __all__ = [ 7 | '__version__', 8 | '__version_info__', 9 | 'load_order', 10 | ] 11 | 12 | 13 | def load_order(): 14 | """ 15 | Returns a list of the module and sub-module names for asn1crypto in 16 | dependency load order, for the sake of live reloading code 17 | 18 | :return: 19 | A list of unicode strings of module names, as they would appear in 20 | sys.modules, ordered by which module should be reloaded first 21 | """ 22 | 23 | return [ 24 | 'asn1crypto._errors', 25 | 'asn1crypto._int', 26 | 'asn1crypto._ordereddict', 27 | 'asn1crypto._teletex_codec', 28 | 'asn1crypto._types', 29 | 'asn1crypto._inet', 30 | 'asn1crypto._iri', 31 | 'asn1crypto.version', 32 | 'asn1crypto.pem', 33 | 'asn1crypto.util', 34 | 'asn1crypto.parser', 35 | 'asn1crypto.core', 36 | 'asn1crypto.algos', 37 | 'asn1crypto.keys', 38 | 'asn1crypto.x509', 39 | 'asn1crypto.crl', 40 | 'asn1crypto.csr', 41 | 'asn1crypto.ocsp', 42 | 'asn1crypto.cms', 43 | 'asn1crypto.pdf', 44 | 'asn1crypto.pkcs12', 45 | 'asn1crypto.tsp', 46 | 'asn1crypto', 47 | ] 48 | -------------------------------------------------------------------------------- /asn1crypto/_errors.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | Exports the following items: 5 | 6 | - unwrap() 7 | - APIException() 8 | """ 9 | 10 | from __future__ import unicode_literals, division, absolute_import, print_function 11 | 12 | import re 13 | import textwrap 14 | 15 | 16 | class APIException(Exception): 17 | """ 18 | An exception indicating an API has been removed from asn1crypto 19 | """ 20 | 21 | pass 22 | 23 | 24 | def unwrap(string, *params): 25 | """ 26 | Takes a multi-line string and does the following: 27 | 28 | - dedents 29 | - converts newlines with text before and after into a single line 30 | - strips leading and trailing whitespace 31 | 32 | :param string: 33 | The string to format 34 | 35 | :param *params: 36 | Params to interpolate into the string 37 | 38 | :return: 39 | The formatted string 40 | """ 41 | 42 | output = textwrap.dedent(string) 43 | 44 | # Unwrap lines, taking into account bulleted lists, ordered lists and 45 | # underlines consisting of = signs 46 | if output.find('\n') != -1: 47 | output = re.sub('(?<=\\S)\n(?=[^ \n\t\\d\\*\\-=])', ' ', output) 48 | 49 | if params: 50 | output = output % params 51 | 52 | output = output.strip() 53 | 54 | return output 55 | -------------------------------------------------------------------------------- /asn1crypto/_inet.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import socket 5 | import struct 6 | 7 | from ._errors import unwrap 8 | from ._types import byte_cls, bytes_to_list, str_cls, type_name 9 | 10 | 11 | def inet_ntop(address_family, packed_ip): 12 | """ 13 | Windows compatibility shim for socket.inet_ntop(). 14 | 15 | :param address_family: 16 | socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6 17 | 18 | :param packed_ip: 19 | A byte string of the network form of an IP address 20 | 21 | :return: 22 | A unicode string of the IP address 23 | """ 24 | 25 | if address_family not in set([socket.AF_INET, socket.AF_INET6]): 26 | raise ValueError(unwrap( 27 | ''' 28 | address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s), 29 | not %s 30 | ''', 31 | repr(socket.AF_INET), 32 | repr(socket.AF_INET6), 33 | repr(address_family) 34 | )) 35 | 36 | if not isinstance(packed_ip, byte_cls): 37 | raise TypeError(unwrap( 38 | ''' 39 | packed_ip must be a byte string, not %s 40 | ''', 41 | type_name(packed_ip) 42 | )) 43 | 44 | required_len = 4 if address_family == socket.AF_INET else 16 45 | if len(packed_ip) != required_len: 46 | raise ValueError(unwrap( 47 | ''' 48 | packed_ip must be %d bytes long - is %d 49 | ''', 50 | required_len, 51 | len(packed_ip) 52 | )) 53 | 54 | if address_family == socket.AF_INET: 55 | return '%d.%d.%d.%d' % tuple(bytes_to_list(packed_ip)) 56 | 57 | octets = struct.unpack(b'!HHHHHHHH', packed_ip) 58 | 59 | runs_of_zero = {} 60 | longest_run = 0 61 | zero_index = None 62 | for i, octet in enumerate(octets + (-1,)): 63 | if octet != 0: 64 | if zero_index is not None: 65 | length = i - zero_index 66 | if length not in runs_of_zero: 67 | runs_of_zero[length] = zero_index 68 | longest_run = max(longest_run, length) 69 | zero_index = None 70 | elif zero_index is None: 71 | zero_index = i 72 | 73 | hexed = [hex(o)[2:] for o in octets] 74 | 75 | if longest_run < 2: 76 | return ':'.join(hexed) 77 | 78 | zero_start = runs_of_zero[longest_run] 79 | zero_end = zero_start + longest_run 80 | 81 | return ':'.join(hexed[:zero_start]) + '::' + ':'.join(hexed[zero_end:]) 82 | 83 | 84 | def inet_pton(address_family, ip_string): 85 | """ 86 | Windows compatibility shim for socket.inet_ntop(). 87 | 88 | :param address_family: 89 | socket.AF_INET for IPv4 or socket.AF_INET6 for IPv6 90 | 91 | :param ip_string: 92 | A unicode string of an IP address 93 | 94 | :return: 95 | A byte string of the network form of the IP address 96 | """ 97 | 98 | if address_family not in set([socket.AF_INET, socket.AF_INET6]): 99 | raise ValueError(unwrap( 100 | ''' 101 | address_family must be socket.AF_INET (%s) or socket.AF_INET6 (%s), 102 | not %s 103 | ''', 104 | repr(socket.AF_INET), 105 | repr(socket.AF_INET6), 106 | repr(address_family) 107 | )) 108 | 109 | if not isinstance(ip_string, str_cls): 110 | raise TypeError(unwrap( 111 | ''' 112 | ip_string must be a unicode string, not %s 113 | ''', 114 | type_name(ip_string) 115 | )) 116 | 117 | if address_family == socket.AF_INET: 118 | octets = ip_string.split('.') 119 | error = len(octets) != 4 120 | if not error: 121 | ints = [] 122 | for o in octets: 123 | o = int(o) 124 | if o > 255 or o < 0: 125 | error = True 126 | break 127 | ints.append(o) 128 | 129 | if error: 130 | raise ValueError(unwrap( 131 | ''' 132 | ip_string must be a dotted string with four integers in the 133 | range of 0 to 255, got %s 134 | ''', 135 | repr(ip_string) 136 | )) 137 | 138 | return struct.pack(b'!BBBB', *ints) 139 | 140 | error = False 141 | omitted = ip_string.count('::') 142 | if omitted > 1: 143 | error = True 144 | elif omitted == 0: 145 | octets = ip_string.split(':') 146 | error = len(octets) != 8 147 | else: 148 | begin, end = ip_string.split('::') 149 | begin_octets = begin.split(':') 150 | end_octets = end.split(':') 151 | missing = 8 - len(begin_octets) - len(end_octets) 152 | octets = begin_octets + (['0'] * missing) + end_octets 153 | 154 | if not error: 155 | ints = [] 156 | for o in octets: 157 | o = int(o, 16) 158 | if o > 65535 or o < 0: 159 | error = True 160 | break 161 | ints.append(o) 162 | 163 | return struct.pack(b'!HHHHHHHH', *ints) 164 | 165 | raise ValueError(unwrap( 166 | ''' 167 | ip_string must be a valid ipv6 string, got %s 168 | ''', 169 | repr(ip_string) 170 | )) 171 | -------------------------------------------------------------------------------- /asn1crypto/_int.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | 5 | def fill_width(bytes_, width): 6 | """ 7 | Ensure a byte string representing a positive integer is a specific width 8 | (in bytes) 9 | 10 | :param bytes_: 11 | The integer byte string 12 | 13 | :param width: 14 | The desired width as an integer 15 | 16 | :return: 17 | A byte string of the width specified 18 | """ 19 | 20 | while len(bytes_) < width: 21 | bytes_ = b'\x00' + bytes_ 22 | return bytes_ 23 | -------------------------------------------------------------------------------- /asn1crypto/_ordereddict.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2009 Raymond Hettinger 2 | # 3 | # Permission is hereby granted, free of charge, to any person 4 | # obtaining a copy of this software and associated documentation files 5 | # (the "Software"), to deal in the Software without restriction, 6 | # including without limitation the rights to use, copy, modify, merge, 7 | # publish, distribute, sublicense, and/or sell copies of the Software, 8 | # and to permit persons to whom the Software is furnished to do so, 9 | # subject to the following conditions: 10 | # 11 | # The above copyright notice and this permission notice shall be 12 | # included in all copies or substantial portions of the Software. 13 | # 14 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 18 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 19 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 | # OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | import sys 24 | 25 | if not sys.version_info < (2, 7): 26 | 27 | from collections import OrderedDict 28 | 29 | else: 30 | 31 | from UserDict import DictMixin 32 | 33 | class OrderedDict(dict, DictMixin): 34 | 35 | def __init__(self, *args, **kwds): 36 | if len(args) > 1: 37 | raise TypeError('expected at most 1 arguments, got %d' % len(args)) 38 | try: 39 | self.__end 40 | except AttributeError: 41 | self.clear() 42 | self.update(*args, **kwds) 43 | 44 | def clear(self): 45 | self.__end = end = [] 46 | end += [None, end, end] # sentinel node for doubly linked list 47 | self.__map = {} # key --> [key, prev, next] 48 | dict.clear(self) 49 | 50 | def __setitem__(self, key, value): 51 | if key not in self: 52 | end = self.__end 53 | curr = end[1] 54 | curr[2] = end[1] = self.__map[key] = [key, curr, end] 55 | dict.__setitem__(self, key, value) 56 | 57 | def __delitem__(self, key): 58 | dict.__delitem__(self, key) 59 | key, prev, next_ = self.__map.pop(key) 60 | prev[2] = next_ 61 | next_[1] = prev 62 | 63 | def __iter__(self): 64 | end = self.__end 65 | curr = end[2] 66 | while curr is not end: 67 | yield curr[0] 68 | curr = curr[2] 69 | 70 | def __reversed__(self): 71 | end = self.__end 72 | curr = end[1] 73 | while curr is not end: 74 | yield curr[0] 75 | curr = curr[1] 76 | 77 | def popitem(self, last=True): 78 | if not self: 79 | raise KeyError('dictionary is empty') 80 | if last: 81 | key = reversed(self).next() 82 | else: 83 | key = iter(self).next() 84 | value = self.pop(key) 85 | return key, value 86 | 87 | def __reduce__(self): 88 | items = [[k, self[k]] for k in self] 89 | tmp = self.__map, self.__end 90 | del self.__map, self.__end 91 | inst_dict = vars(self).copy() 92 | self.__map, self.__end = tmp 93 | if inst_dict: 94 | return (self.__class__, (items,), inst_dict) 95 | return self.__class__, (items,) 96 | 97 | def keys(self): 98 | return list(self) 99 | 100 | setdefault = DictMixin.setdefault 101 | update = DictMixin.update 102 | pop = DictMixin.pop 103 | values = DictMixin.values 104 | items = DictMixin.items 105 | iterkeys = DictMixin.iterkeys 106 | itervalues = DictMixin.itervalues 107 | iteritems = DictMixin.iteritems 108 | 109 | def __repr__(self): 110 | if not self: 111 | return '%s()' % (self.__class__.__name__,) 112 | return '%s(%r)' % (self.__class__.__name__, self.items()) 113 | 114 | def copy(self): 115 | return self.__class__(self) 116 | 117 | @classmethod 118 | def fromkeys(cls, iterable, value=None): 119 | d = cls() 120 | for key in iterable: 121 | d[key] = value 122 | return d 123 | 124 | def __eq__(self, other): 125 | if isinstance(other, OrderedDict): 126 | if len(self) != len(other): 127 | return False 128 | for p, q in zip(self.items(), other.items()): 129 | if p != q: 130 | return False 131 | return True 132 | return dict.__eq__(self, other) 133 | 134 | def __ne__(self, other): 135 | return not self == other 136 | -------------------------------------------------------------------------------- /asn1crypto/_types.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import inspect 5 | import sys 6 | 7 | 8 | if sys.version_info < (3,): 9 | str_cls = unicode # noqa 10 | byte_cls = str 11 | int_types = (int, long) # noqa 12 | 13 | def bytes_to_list(byte_string): 14 | return [ord(b) for b in byte_string] 15 | 16 | chr_cls = chr 17 | 18 | else: 19 | str_cls = str 20 | byte_cls = bytes 21 | int_types = int 22 | 23 | bytes_to_list = list 24 | 25 | def chr_cls(num): 26 | return bytes([num]) 27 | 28 | 29 | def type_name(value): 30 | """ 31 | Returns a user-readable name for the type of an object 32 | 33 | :param value: 34 | A value to get the type name of 35 | 36 | :return: 37 | A unicode string of the object's type name 38 | """ 39 | 40 | if inspect.isclass(value): 41 | cls = value 42 | else: 43 | cls = value.__class__ 44 | if cls.__module__ in set(['builtins', '__builtin__']): 45 | return cls.__name__ 46 | return '%s.%s' % (cls.__module__, cls.__name__) 47 | -------------------------------------------------------------------------------- /asn1crypto/csr.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | ASN.1 type classes for certificate signing requests (CSR). Exports the 5 | following items: 6 | 7 | - CertificationRequest() 8 | 9 | Other type classes are defined that help compose the types listed above. 10 | """ 11 | 12 | from __future__ import unicode_literals, division, absolute_import, print_function 13 | 14 | from .algos import SignedDigestAlgorithm 15 | from .core import ( 16 | Any, 17 | BitString, 18 | BMPString, 19 | Integer, 20 | ObjectIdentifier, 21 | OctetBitString, 22 | Sequence, 23 | SetOf, 24 | UTF8String 25 | ) 26 | from .keys import PublicKeyInfo 27 | from .x509 import DirectoryString, Extensions, Name 28 | 29 | 30 | # The structures in this file are taken from https://tools.ietf.org/html/rfc2986 31 | # and https://tools.ietf.org/html/rfc2985 32 | 33 | 34 | class Version(Integer): 35 | _map = { 36 | 0: 'v1', 37 | } 38 | 39 | 40 | class CSRAttributeType(ObjectIdentifier): 41 | _map = { 42 | '1.2.840.113549.1.9.7': 'challenge_password', 43 | '1.2.840.113549.1.9.9': 'extended_certificate_attributes', 44 | '1.2.840.113549.1.9.14': 'extension_request', 45 | # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/a5eaae36-e9f3-4dc5-a687-bfa7115954f1 46 | '1.3.6.1.4.1.311.13.2.2': 'microsoft_enrollment_csp_provider', 47 | # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/7c677cba-030d-48be-ba2b-01e407705f34 48 | '1.3.6.1.4.1.311.13.2.3': 'microsoft_os_version', 49 | # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wcce/64e5ff6d-c6dd-4578-92f7-b3d895f9b9c7 50 | '1.3.6.1.4.1.311.21.20': 'microsoft_request_client_info', 51 | } 52 | 53 | 54 | class SetOfDirectoryString(SetOf): 55 | _child_spec = DirectoryString 56 | 57 | 58 | class Attribute(Sequence): 59 | _fields = [ 60 | ('type', ObjectIdentifier), 61 | ('values', SetOf, {'spec': Any}), 62 | ] 63 | 64 | 65 | class SetOfAttributes(SetOf): 66 | _child_spec = Attribute 67 | 68 | 69 | class SetOfExtensions(SetOf): 70 | _child_spec = Extensions 71 | 72 | 73 | class MicrosoftEnrollmentCSProvider(Sequence): 74 | _fields = [ 75 | ('keyspec', Integer), 76 | ('cspname', BMPString), # cryptographic service provider name 77 | ('signature', BitString), 78 | ] 79 | 80 | 81 | class SetOfMicrosoftEnrollmentCSProvider(SetOf): 82 | _child_spec = MicrosoftEnrollmentCSProvider 83 | 84 | 85 | class MicrosoftRequestClientInfo(Sequence): 86 | _fields = [ 87 | ('clientid', Integer), 88 | ('machinename', UTF8String), 89 | ('username', UTF8String), 90 | ('processname', UTF8String), 91 | ] 92 | 93 | 94 | class SetOfMicrosoftRequestClientInfo(SetOf): 95 | _child_spec = MicrosoftRequestClientInfo 96 | 97 | 98 | class CRIAttribute(Sequence): 99 | _fields = [ 100 | ('type', CSRAttributeType), 101 | ('values', Any), 102 | ] 103 | 104 | _oid_pair = ('type', 'values') 105 | _oid_specs = { 106 | 'challenge_password': SetOfDirectoryString, 107 | 'extended_certificate_attributes': SetOfAttributes, 108 | 'extension_request': SetOfExtensions, 109 | 'microsoft_enrollment_csp_provider': SetOfMicrosoftEnrollmentCSProvider, 110 | 'microsoft_os_version': SetOfDirectoryString, 111 | 'microsoft_request_client_info': SetOfMicrosoftRequestClientInfo, 112 | } 113 | 114 | 115 | class CRIAttributes(SetOf): 116 | _child_spec = CRIAttribute 117 | 118 | 119 | class CertificationRequestInfo(Sequence): 120 | _fields = [ 121 | ('version', Version), 122 | ('subject', Name), 123 | ('subject_pk_info', PublicKeyInfo), 124 | ('attributes', CRIAttributes, {'implicit': 0, 'optional': True}), 125 | ] 126 | 127 | 128 | class CertificationRequest(Sequence): 129 | _fields = [ 130 | ('certification_request_info', CertificationRequestInfo), 131 | ('signature_algorithm', SignedDigestAlgorithm), 132 | ('signature', OctetBitString), 133 | ] 134 | -------------------------------------------------------------------------------- /asn1crypto/pdf.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | ASN.1 type classes for PDF signature structures. Adds extra oid mapping and 5 | value parsing to asn1crypto.x509.Extension() and asn1crypto.xms.CMSAttribute(). 6 | """ 7 | 8 | from __future__ import unicode_literals, division, absolute_import, print_function 9 | 10 | from .cms import CMSAttributeType, CMSAttribute 11 | from .core import ( 12 | Boolean, 13 | Integer, 14 | Null, 15 | ObjectIdentifier, 16 | OctetString, 17 | Sequence, 18 | SequenceOf, 19 | SetOf, 20 | ) 21 | from .crl import CertificateList 22 | from .ocsp import OCSPResponse 23 | from .x509 import ( 24 | Extension, 25 | ExtensionId, 26 | GeneralName, 27 | KeyPurposeId, 28 | ) 29 | 30 | 31 | class AdobeArchiveRevInfo(Sequence): 32 | _fields = [ 33 | ('version', Integer) 34 | ] 35 | 36 | 37 | class AdobeTimestamp(Sequence): 38 | _fields = [ 39 | ('version', Integer), 40 | ('location', GeneralName), 41 | ('requires_auth', Boolean, {'optional': True, 'default': False}), 42 | ] 43 | 44 | 45 | class OtherRevInfo(Sequence): 46 | _fields = [ 47 | ('type', ObjectIdentifier), 48 | ('value', OctetString), 49 | ] 50 | 51 | 52 | class SequenceOfCertificateList(SequenceOf): 53 | _child_spec = CertificateList 54 | 55 | 56 | class SequenceOfOCSPResponse(SequenceOf): 57 | _child_spec = OCSPResponse 58 | 59 | 60 | class SequenceOfOtherRevInfo(SequenceOf): 61 | _child_spec = OtherRevInfo 62 | 63 | 64 | class RevocationInfoArchival(Sequence): 65 | _fields = [ 66 | ('crl', SequenceOfCertificateList, {'explicit': 0, 'optional': True}), 67 | ('ocsp', SequenceOfOCSPResponse, {'explicit': 1, 'optional': True}), 68 | ('other_rev_info', SequenceOfOtherRevInfo, {'explicit': 2, 'optional': True}), 69 | ] 70 | 71 | 72 | class SetOfRevocationInfoArchival(SetOf): 73 | _child_spec = RevocationInfoArchival 74 | 75 | 76 | ExtensionId._map['1.2.840.113583.1.1.9.2'] = 'adobe_archive_rev_info' 77 | ExtensionId._map['1.2.840.113583.1.1.9.1'] = 'adobe_timestamp' 78 | ExtensionId._map['1.2.840.113583.1.1.10'] = 'adobe_ppklite_credential' 79 | Extension._oid_specs['adobe_archive_rev_info'] = AdobeArchiveRevInfo 80 | Extension._oid_specs['adobe_timestamp'] = AdobeTimestamp 81 | Extension._oid_specs['adobe_ppklite_credential'] = Null 82 | KeyPurposeId._map['1.2.840.113583.1.1.5'] = 'pdf_signing' 83 | CMSAttributeType._map['1.2.840.113583.1.1.8'] = 'adobe_revocation_info_archival' 84 | CMSAttribute._oid_specs['adobe_revocation_info_archival'] = SetOfRevocationInfoArchival 85 | -------------------------------------------------------------------------------- /asn1crypto/pkcs12.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | """ 4 | ASN.1 type classes for PKCS#12 files. Exports the following items: 5 | 6 | - CertBag() 7 | - CrlBag() 8 | - Pfx() 9 | - SafeBag() 10 | - SecretBag() 11 | 12 | Other type classes are defined that help compose the types listed above. 13 | """ 14 | 15 | from __future__ import unicode_literals, division, absolute_import, print_function 16 | 17 | from .algos import DigestInfo 18 | from .cms import ContentInfo, SignedData 19 | from .core import ( 20 | Any, 21 | BMPString, 22 | Integer, 23 | ObjectIdentifier, 24 | OctetString, 25 | ParsableOctetString, 26 | Sequence, 27 | SequenceOf, 28 | SetOf, 29 | ) 30 | from .keys import PrivateKeyInfo, EncryptedPrivateKeyInfo 31 | from .x509 import Certificate, KeyPurposeId 32 | 33 | 34 | # The structures in this file are taken from https://tools.ietf.org/html/rfc7292 35 | 36 | class MacData(Sequence): 37 | _fields = [ 38 | ('mac', DigestInfo), 39 | ('mac_salt', OctetString), 40 | ('iterations', Integer, {'default': 1}), 41 | ] 42 | 43 | 44 | class Version(Integer): 45 | _map = { 46 | 3: 'v3' 47 | } 48 | 49 | 50 | class AttributeType(ObjectIdentifier): 51 | _map = { 52 | # https://tools.ietf.org/html/rfc2985#page-18 53 | '1.2.840.113549.1.9.20': 'friendly_name', 54 | '1.2.840.113549.1.9.21': 'local_key_id', 55 | # https://support.microsoft.com/en-us/kb/287547 56 | '1.3.6.1.4.1.311.17.1': 'microsoft_local_machine_keyset', 57 | # https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java 58 | # this is a set of OIDs, representing key usage, the usual value is a SET of one element OID 2.5.29.37.0 59 | '2.16.840.1.113894.746875.1.1': 'trusted_key_usage', 60 | } 61 | 62 | 63 | class SetOfAny(SetOf): 64 | _child_spec = Any 65 | 66 | 67 | class SetOfBMPString(SetOf): 68 | _child_spec = BMPString 69 | 70 | 71 | class SetOfOctetString(SetOf): 72 | _child_spec = OctetString 73 | 74 | 75 | class SetOfKeyPurposeId(SetOf): 76 | _child_spec = KeyPurposeId 77 | 78 | 79 | class Attribute(Sequence): 80 | _fields = [ 81 | ('type', AttributeType), 82 | ('values', None), 83 | ] 84 | 85 | _oid_specs = { 86 | 'friendly_name': SetOfBMPString, 87 | 'local_key_id': SetOfOctetString, 88 | 'microsoft_csp_name': SetOfBMPString, 89 | 'trusted_key_usage': SetOfKeyPurposeId, 90 | } 91 | 92 | def _values_spec(self): 93 | return self._oid_specs.get(self['type'].native, SetOfAny) 94 | 95 | _spec_callbacks = { 96 | 'values': _values_spec 97 | } 98 | 99 | 100 | class Attributes(SetOf): 101 | _child_spec = Attribute 102 | 103 | 104 | class Pfx(Sequence): 105 | _fields = [ 106 | ('version', Version), 107 | ('auth_safe', ContentInfo), 108 | ('mac_data', MacData, {'optional': True}) 109 | ] 110 | 111 | _authenticated_safe = None 112 | 113 | @property 114 | def authenticated_safe(self): 115 | if self._authenticated_safe is None: 116 | content = self['auth_safe']['content'] 117 | if isinstance(content, SignedData): 118 | content = content['content_info']['content'] 119 | self._authenticated_safe = AuthenticatedSafe.load(content.native) 120 | return self._authenticated_safe 121 | 122 | 123 | class AuthenticatedSafe(SequenceOf): 124 | _child_spec = ContentInfo 125 | 126 | 127 | class BagId(ObjectIdentifier): 128 | _map = { 129 | '1.2.840.113549.1.12.10.1.1': 'key_bag', 130 | '1.2.840.113549.1.12.10.1.2': 'pkcs8_shrouded_key_bag', 131 | '1.2.840.113549.1.12.10.1.3': 'cert_bag', 132 | '1.2.840.113549.1.12.10.1.4': 'crl_bag', 133 | '1.2.840.113549.1.12.10.1.5': 'secret_bag', 134 | '1.2.840.113549.1.12.10.1.6': 'safe_contents', 135 | } 136 | 137 | 138 | class CertId(ObjectIdentifier): 139 | _map = { 140 | '1.2.840.113549.1.9.22.1': 'x509', 141 | '1.2.840.113549.1.9.22.2': 'sdsi', 142 | } 143 | 144 | 145 | class CertBag(Sequence): 146 | _fields = [ 147 | ('cert_id', CertId), 148 | ('cert_value', ParsableOctetString, {'explicit': 0}), 149 | ] 150 | 151 | _oid_pair = ('cert_id', 'cert_value') 152 | _oid_specs = { 153 | 'x509': Certificate, 154 | } 155 | 156 | 157 | class CrlBag(Sequence): 158 | _fields = [ 159 | ('crl_id', ObjectIdentifier), 160 | ('crl_value', OctetString, {'explicit': 0}), 161 | ] 162 | 163 | 164 | class SecretBag(Sequence): 165 | _fields = [ 166 | ('secret_type_id', ObjectIdentifier), 167 | ('secret_value', OctetString, {'explicit': 0}), 168 | ] 169 | 170 | 171 | class SafeContents(SequenceOf): 172 | pass 173 | 174 | 175 | class SafeBag(Sequence): 176 | _fields = [ 177 | ('bag_id', BagId), 178 | ('bag_value', Any, {'explicit': 0}), 179 | ('bag_attributes', Attributes, {'optional': True}), 180 | ] 181 | 182 | _oid_pair = ('bag_id', 'bag_value') 183 | _oid_specs = { 184 | 'key_bag': PrivateKeyInfo, 185 | 'pkcs8_shrouded_key_bag': EncryptedPrivateKeyInfo, 186 | 'cert_bag': CertBag, 187 | 'crl_bag': CrlBag, 188 | 'secret_bag': SecretBag, 189 | 'safe_contents': SafeContents 190 | } 191 | 192 | 193 | SafeContents._child_spec = SafeBag 194 | -------------------------------------------------------------------------------- /asn1crypto/version.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | 5 | __version__ = '1.5.1' 6 | __version_info__ = (1, 5, 1) 7 | -------------------------------------------------------------------------------- /dev/__init__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | 6 | 7 | package_name = "asn1crypto" 8 | 9 | other_packages = [ 10 | "oscrypto", 11 | "certbuilder", 12 | "certvalidator", 13 | "crlbuilder", 14 | "csrbuilder", 15 | "ocspbuilder" 16 | ] 17 | 18 | task_keyword_args = [] 19 | 20 | requires_oscrypto = False 21 | has_tests_package = True 22 | 23 | package_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) 24 | build_root = os.path.abspath(os.path.join(package_root, '..')) 25 | 26 | md_source_map = {} 27 | 28 | definition_replacements = {} 29 | -------------------------------------------------------------------------------- /dev/_task.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import ast 5 | import _ast 6 | import os 7 | import sys 8 | 9 | from . import package_root, task_keyword_args 10 | from ._import import _import_from 11 | 12 | 13 | if sys.version_info < (3,): 14 | byte_cls = str 15 | else: 16 | byte_cls = bytes 17 | 18 | 19 | def _list_tasks(): 20 | """ 21 | Fetches a list of all valid tasks that may be run, and the args they 22 | accept. Does not actually import the task module to prevent errors if a 23 | user does not have the dependencies installed for every task. 24 | 25 | :return: 26 | A list of 2-element tuples: 27 | 0: a unicode string of the task name 28 | 1: a list of dicts containing the parameter definitions 29 | """ 30 | 31 | out = [] 32 | dev_path = os.path.join(package_root, 'dev') 33 | for fname in sorted(os.listdir(dev_path)): 34 | if fname.startswith('.') or fname.startswith('_'): 35 | continue 36 | if not fname.endswith('.py'): 37 | continue 38 | name = fname[:-3] 39 | args = () 40 | 41 | full_path = os.path.join(package_root, 'dev', fname) 42 | with open(full_path, 'rb') as f: 43 | full_code = f.read() 44 | if sys.version_info >= (3,): 45 | full_code = full_code.decode('utf-8') 46 | 47 | task_node = ast.parse(full_code, filename=full_path) 48 | for node in ast.iter_child_nodes(task_node): 49 | if isinstance(node, _ast.Assign): 50 | if len(node.targets) == 1 \ 51 | and isinstance(node.targets[0], _ast.Name) \ 52 | and node.targets[0].id == 'run_args': 53 | args = ast.literal_eval(node.value) 54 | break 55 | 56 | out.append((name, args)) 57 | return out 58 | 59 | 60 | def show_usage(): 61 | """ 62 | Prints to stderr the valid options for invoking tasks 63 | """ 64 | 65 | valid_tasks = [] 66 | for task in _list_tasks(): 67 | usage = task[0] 68 | for run_arg in task[1]: 69 | usage += ' ' 70 | name = run_arg.get('name', '') 71 | if run_arg.get('required', False): 72 | usage += '{%s}' % name 73 | else: 74 | usage += '[%s]' % name 75 | valid_tasks.append(usage) 76 | 77 | out = 'Usage: run.py' 78 | for karg in task_keyword_args: 79 | out += ' [%s=%s]' % (karg['name'], karg['placeholder']) 80 | out += ' (%s)' % ' | '.join(valid_tasks) 81 | 82 | print(out, file=sys.stderr) 83 | sys.exit(1) 84 | 85 | 86 | def _get_arg(num): 87 | """ 88 | :return: 89 | A unicode string of the requested command line arg 90 | """ 91 | 92 | if len(sys.argv) < num + 1: 93 | return None 94 | arg = sys.argv[num] 95 | if isinstance(arg, byte_cls): 96 | arg = arg.decode('utf-8') 97 | return arg 98 | 99 | 100 | def run_task(): 101 | """ 102 | Parses the command line args, invoking the requested task 103 | """ 104 | 105 | arg_num = 1 106 | task = None 107 | args = [] 108 | kwargs = {} 109 | 110 | # We look for the task name, processing any global task keyword args 111 | # by setting the appropriate env var 112 | while True: 113 | val = _get_arg(arg_num) 114 | if val is None: 115 | break 116 | 117 | next_arg = False 118 | for karg in task_keyword_args: 119 | if val.startswith(karg['name'] + '='): 120 | os.environ[karg['env_var']] = val[len(karg['name']) + 1:] 121 | next_arg = True 122 | break 123 | 124 | if next_arg: 125 | arg_num += 1 126 | continue 127 | 128 | task = val 129 | break 130 | 131 | if task is None: 132 | show_usage() 133 | 134 | task_mod = _import_from('dev.%s' % task, package_root, allow_error=True) 135 | if task_mod is None: 136 | show_usage() 137 | 138 | run_args = task_mod.__dict__.get('run_args', []) 139 | max_args = arg_num + 1 + len(run_args) 140 | 141 | if len(sys.argv) > max_args: 142 | show_usage() 143 | 144 | for i, run_arg in enumerate(run_args): 145 | val = _get_arg(arg_num + 1 + i) 146 | if val is None: 147 | if run_arg.get('required', False): 148 | show_usage() 149 | break 150 | 151 | if run_arg.get('cast') == 'int' and val.isdigit(): 152 | val = int(val) 153 | 154 | kwarg = run_arg.get('kwarg') 155 | if kwarg: 156 | kwargs[kwarg] = val 157 | else: 158 | args.append(val) 159 | 160 | run = task_mod.__dict__.get('run') 161 | 162 | result = run(*args, **kwargs) 163 | sys.exit(int(not result)) 164 | -------------------------------------------------------------------------------- /dev/build.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | import tarfile 6 | import zipfile 7 | 8 | import setuptools.sandbox 9 | 10 | from . import package_root, package_name, has_tests_package 11 | from ._import import _import_from 12 | 13 | 14 | def _list_zip(filename): 15 | """ 16 | Prints all of the files in a .zip file 17 | """ 18 | 19 | zf = zipfile.ZipFile(filename, 'r') 20 | for name in zf.namelist(): 21 | print(' %s' % name) 22 | 23 | 24 | def _list_tgz(filename): 25 | """ 26 | Prints all of the files in a .tar.gz file 27 | """ 28 | 29 | tf = tarfile.open(filename, 'r:gz') 30 | for name in tf.getnames(): 31 | print(' %s' % name) 32 | 33 | 34 | def run(): 35 | """ 36 | Creates a sdist .tar.gz and a bdist_wheel --univeral .whl 37 | 38 | :return: 39 | A bool - if the packaging process was successful 40 | """ 41 | 42 | setup = os.path.join(package_root, 'setup.py') 43 | tests_root = os.path.join(package_root, 'tests') 44 | tests_setup = os.path.join(tests_root, 'setup.py') 45 | 46 | # Trying to call setuptools.sandbox.run_setup(setup, ['--version']) 47 | # resulted in a segfault, so we do this instead 48 | package_dir = os.path.join(package_root, package_name) 49 | version_mod = _import_from('%s.version' % package_name, package_dir, 'version') 50 | 51 | pkg_name_info = (package_name, version_mod.__version__) 52 | print('Building %s-%s' % pkg_name_info) 53 | 54 | sdist = '%s-%s.tar.gz' % pkg_name_info 55 | whl = '%s-%s-py2.py3-none-any.whl' % pkg_name_info 56 | setuptools.sandbox.run_setup(setup, ['-q', 'sdist']) 57 | print(' - created %s' % sdist) 58 | _list_tgz(os.path.join(package_root, 'dist', sdist)) 59 | setuptools.sandbox.run_setup(setup, ['-q', 'bdist_wheel', '--universal']) 60 | print(' - created %s' % whl) 61 | _list_zip(os.path.join(package_root, 'dist', whl)) 62 | setuptools.sandbox.run_setup(setup, ['-q', 'clean']) 63 | 64 | if has_tests_package: 65 | print('Building %s_tests-%s' % (package_name, version_mod.__version__)) 66 | 67 | tests_sdist = '%s_tests-%s.tar.gz' % pkg_name_info 68 | tests_whl = '%s_tests-%s-py2.py3-none-any.whl' % pkg_name_info 69 | setuptools.sandbox.run_setup(tests_setup, ['-q', 'sdist']) 70 | print(' - created %s' % tests_sdist) 71 | _list_tgz(os.path.join(tests_root, 'dist', tests_sdist)) 72 | setuptools.sandbox.run_setup(tests_setup, ['-q', 'bdist_wheel', '--universal']) 73 | print(' - created %s' % tests_whl) 74 | _list_zip(os.path.join(tests_root, 'dist', tests_whl)) 75 | setuptools.sandbox.run_setup(tests_setup, ['-q', 'clean']) 76 | 77 | dist_dir = os.path.join(package_root, 'dist') 78 | tests_dist_dir = os.path.join(tests_root, 'dist') 79 | os.rename( 80 | os.path.join(tests_dist_dir, tests_sdist), 81 | os.path.join(dist_dir, tests_sdist) 82 | ) 83 | os.rename( 84 | os.path.join(tests_dist_dir, tests_whl), 85 | os.path.join(dist_dir, tests_whl) 86 | ) 87 | os.rmdir(tests_dist_dir) 88 | 89 | return True 90 | -------------------------------------------------------------------------------- /dev/ci-cleanup.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | import shutil 6 | 7 | from . import build_root, other_packages 8 | 9 | 10 | def run(): 11 | """ 12 | Cleans up CI dependencies - used for persistent GitHub Actions 13 | Runners since they don't clean themselves up. 14 | """ 15 | 16 | print("Removing ci dependencies") 17 | deps_dir = os.path.join(build_root, 'modularcrypto-deps') 18 | if os.path.exists(deps_dir): 19 | shutil.rmtree(deps_dir, ignore_errors=True) 20 | 21 | print("Removing modularcrypto packages") 22 | for other_package in other_packages: 23 | pkg_dir = os.path.join(build_root, other_package) 24 | if os.path.exists(pkg_dir): 25 | shutil.rmtree(pkg_dir, ignore_errors=True) 26 | print() 27 | 28 | return True 29 | -------------------------------------------------------------------------------- /dev/ci-driver.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | import platform 6 | import sys 7 | import subprocess 8 | 9 | 10 | run_args = [ 11 | { 12 | 'name': 'cffi', 13 | 'kwarg': 'cffi', 14 | }, 15 | { 16 | 'name': 'openssl', 17 | 'kwarg': 'openssl', 18 | }, 19 | { 20 | 'name': 'winlegacy', 21 | 'kwarg': 'winlegacy', 22 | }, 23 | ] 24 | 25 | 26 | def _write_env(env, key, value): 27 | sys.stdout.write("%s: %s\n" % (key, value)) 28 | sys.stdout.flush() 29 | if sys.version_info < (3,): 30 | env[key.encode('utf-8')] = value.encode('utf-8') 31 | else: 32 | env[key] = value 33 | 34 | 35 | def run(**_): 36 | """ 37 | Runs CI, setting various env vars 38 | 39 | :return: 40 | A bool - if the CI ran successfully 41 | """ 42 | 43 | env = os.environ.copy() 44 | options = set(sys.argv[2:]) 45 | 46 | newline = False 47 | if 'cffi' not in options: 48 | _write_env(env, 'OSCRYPTO_USE_CTYPES', 'true') 49 | newline = True 50 | if 'openssl' in options and sys.platform == 'darwin': 51 | mac_version_info = tuple(map(int, platform.mac_ver()[0].split('.')[:2])) 52 | if mac_version_info < (10, 15): 53 | _write_env(env, 'OSCRYPTO_USE_OPENSSL', '/usr/lib/libcrypto.dylib,/usr/lib/libssl.dylib') 54 | else: 55 | _write_env(env, 'OSCRYPTO_USE_OPENSSL', '/usr/lib/libcrypto.35.dylib,/usr/lib/libssl.35.dylib') 56 | newline = True 57 | if 'openssl3' in options and sys.platform == 'darwin': 58 | _write_env( 59 | env, 60 | 'OSCRYPTO_USE_OPENSSL', 61 | '/usr/local/opt/openssl@3/lib/libcrypto.dylib,/usr/local/opt/openssl@3/lib/libssl.dylib' 62 | ) 63 | if 'winlegacy' in options: 64 | _write_env(env, 'OSCRYPTO_USE_WINLEGACY', 'true') 65 | newline = True 66 | 67 | if newline: 68 | sys.stdout.write("\n") 69 | 70 | proc = subprocess.Popen( 71 | [ 72 | sys.executable, 73 | 'run.py', 74 | 'ci', 75 | ], 76 | env=env 77 | ) 78 | proc.communicate() 79 | return proc.returncode == 0 80 | -------------------------------------------------------------------------------- /dev/ci.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | import site 6 | import sys 7 | 8 | from . import build_root, requires_oscrypto 9 | from ._import import _preload 10 | 11 | 12 | deps_dir = os.path.join(build_root, 'modularcrypto-deps') 13 | if os.path.exists(deps_dir): 14 | site.addsitedir(deps_dir) 15 | # In case any of the deps are installed system-wide 16 | sys.path.insert(0, deps_dir) 17 | 18 | if sys.version_info[0:2] not in [(2, 6), (3, 2)]: 19 | from .lint import run as run_lint 20 | else: 21 | run_lint = None 22 | 23 | if sys.version_info[0:2] != (3, 2): 24 | from .coverage import run as run_coverage 25 | from .coverage import coverage 26 | run_tests = None 27 | 28 | else: 29 | from .tests import run as run_tests 30 | run_coverage = None 31 | 32 | 33 | def run(): 34 | """ 35 | Runs the linter and tests 36 | 37 | :return: 38 | A bool - if the linter and tests ran successfully 39 | """ 40 | 41 | _preload(requires_oscrypto, True) 42 | 43 | if run_lint: 44 | print('') 45 | lint_result = run_lint() 46 | else: 47 | lint_result = True 48 | 49 | if run_coverage: 50 | print('\nRunning tests (via coverage.py %s)' % coverage.__version__) 51 | sys.stdout.flush() 52 | tests_result = run_coverage(ci=True) 53 | else: 54 | print('\nRunning tests') 55 | sys.stdout.flush() 56 | tests_result = run_tests(ci=True) 57 | sys.stdout.flush() 58 | 59 | return lint_result and tests_result 60 | -------------------------------------------------------------------------------- /dev/codecov.json: -------------------------------------------------------------------------------- 1 | { 2 | "slug": "wbond/asn1crypto", 3 | "token": "98876f5e-6517-4def-85ce-c6e508eee35a", 4 | "disabled": true 5 | } 6 | -------------------------------------------------------------------------------- /dev/lint.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | 6 | from . import package_name, package_root 7 | 8 | import flake8 9 | if not hasattr(flake8, '__version_info__') or flake8.__version_info__ < (3,): 10 | from flake8.engine import get_style_guide 11 | else: 12 | from flake8.api.legacy import get_style_guide 13 | 14 | 15 | def run(): 16 | """ 17 | Runs flake8 lint 18 | 19 | :return: 20 | A bool - if flake8 did not find any errors 21 | """ 22 | 23 | print('Running flake8 %s' % flake8.__version__) 24 | 25 | flake8_style = get_style_guide(config_file=os.path.join(package_root, 'tox.ini')) 26 | 27 | paths = [] 28 | for _dir in [package_name, 'dev', 'tests']: 29 | for root, _, filenames in os.walk(_dir): 30 | for filename in filenames: 31 | if not filename.endswith('.py'): 32 | continue 33 | paths.append(os.path.join(root, filename)) 34 | report = flake8_style.check_files(paths) 35 | success = report.total_errors == 0 36 | if success: 37 | print('OK') 38 | return success 39 | -------------------------------------------------------------------------------- /dev/python-install.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import os 5 | import shutil 6 | import subprocess 7 | import sys 8 | from urllib.parse import urlparse 9 | from urllib.request import urlopen 10 | 11 | 12 | run_args = [ 13 | { 14 | 'name': 'version', 15 | 'kwarg': 'version', 16 | }, 17 | { 18 | 'name': 'arch', 19 | 'kwarg': 'arch', 20 | }, 21 | ] 22 | 23 | 24 | def run(version=None, arch=None): 25 | """ 26 | Installs a version of Python on Windows 27 | 28 | :return: 29 | A bool - if Python was installed successfully 30 | """ 31 | 32 | if sys.platform != 'win32': 33 | raise ValueError('python-install is only designed for Windows') 34 | 35 | if version not in set(['2.6', '2.7', '3.3']): 36 | raise ValueError('Invalid version: %r' % version) 37 | 38 | if arch not in set(['x86', 'x64']): 39 | raise ValueError('Invalid arch: %r' % arch) 40 | 41 | if version == '2.6': 42 | if arch == 'x64': 43 | url = 'https://www.python.org/ftp/python/2.6.6/python-2.6.6.amd64.msi' 44 | else: 45 | url = 'https://www.python.org/ftp/python/2.6.6/python-2.6.6.msi' 46 | elif version == '2.7': 47 | if arch == 'x64': 48 | url = 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi' 49 | else: 50 | url = 'https://www.python.org/ftp/python/2.7.18/python-2.7.18.msi' 51 | else: 52 | if arch == 'x64': 53 | url = 'https://www.python.org/ftp/python/3.3.5/python-3.3.5.amd64.msi' 54 | else: 55 | url = 'https://www.python.org/ftp/python/3.3.5/python-3.3.5.msi' 56 | 57 | home = os.environ.get('USERPROFILE') 58 | msi_filename = os.path.basename(urlparse(url).path) 59 | msi_path = os.path.join(home, msi_filename) 60 | install_path = os.path.join(os.environ.get('LOCALAPPDATA'), 'Python%s-%s' % (version, arch)) 61 | 62 | if os.path.exists(os.path.join(install_path, 'python.exe')): 63 | print(install_path) 64 | return True 65 | 66 | try: 67 | with urlopen(url) as r, open(msi_path, 'wb') as f: 68 | shutil.copyfileobj(r, f) 69 | 70 | proc = subprocess.Popen( 71 | 'msiexec /passive /a %s TARGETDIR=%s' % (msi_filename, install_path), 72 | shell=True, 73 | cwd=home 74 | ) 75 | proc.communicate() 76 | 77 | finally: 78 | if os.path.exists(msi_path): 79 | os.unlink(msi_path) 80 | 81 | print(install_path) 82 | return True 83 | -------------------------------------------------------------------------------- /dev/release.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import subprocess 5 | import sys 6 | 7 | import twine.cli 8 | 9 | from . import package_name, package_root, has_tests_package 10 | from .build import run as build 11 | 12 | 13 | def run(): 14 | """ 15 | Creates a sdist .tar.gz and a bdist_wheel --univeral .whl and uploads 16 | them to pypi 17 | 18 | :return: 19 | A bool - if the packaging and upload process was successful 20 | """ 21 | 22 | git_wc_proc = subprocess.Popen( 23 | ['git', 'status', '--porcelain', '-uno'], 24 | stdout=subprocess.PIPE, 25 | stderr=subprocess.STDOUT, 26 | cwd=package_root 27 | ) 28 | git_wc_status, _ = git_wc_proc.communicate() 29 | 30 | if len(git_wc_status) > 0: 31 | print(git_wc_status.decode('utf-8').rstrip(), file=sys.stderr) 32 | print('Unable to perform release since working copy is not clean', file=sys.stderr) 33 | return False 34 | 35 | git_tag_proc = subprocess.Popen( 36 | ['git', 'tag', '-l', '--contains', 'HEAD'], 37 | stdout=subprocess.PIPE, 38 | stderr=subprocess.PIPE, 39 | cwd=package_root 40 | ) 41 | tag, tag_error = git_tag_proc.communicate() 42 | 43 | if len(tag_error) > 0: 44 | print(tag_error.decode('utf-8').rstrip(), file=sys.stderr) 45 | print('Error looking for current git tag', file=sys.stderr) 46 | return False 47 | 48 | if len(tag) == 0: 49 | print('No git tag found on HEAD', file=sys.stderr) 50 | return False 51 | 52 | tag = tag.decode('ascii').strip() 53 | 54 | build() 55 | 56 | twine.cli.dispatch(['upload', 'dist/%s-%s*' % (package_name, tag)]) 57 | if has_tests_package: 58 | twine.cli.dispatch(['upload', 'dist/%s_tests-%s*' % (package_name, tag)]) 59 | 60 | return True 61 | -------------------------------------------------------------------------------- /dev/tests.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import unittest 5 | import re 6 | import sys 7 | import warnings 8 | 9 | from . import requires_oscrypto 10 | from ._import import _preload 11 | 12 | from tests import test_classes 13 | 14 | if sys.version_info < (3,): 15 | range = xrange # noqa 16 | from cStringIO import StringIO 17 | else: 18 | from io import StringIO 19 | 20 | 21 | run_args = [ 22 | { 23 | 'name': 'regex', 24 | 'kwarg': 'matcher', 25 | }, 26 | { 27 | 'name': 'repeat_count', 28 | 'kwarg': 'repeat', 29 | 'cast': 'int', 30 | }, 31 | ] 32 | 33 | 34 | def run(matcher=None, repeat=1, ci=False): 35 | """ 36 | Runs the tests 37 | 38 | :param matcher: 39 | A unicode string containing a regular expression to use to filter test 40 | names by. A value of None will cause no filtering. 41 | 42 | :param repeat: 43 | An integer - the number of times to run the tests 44 | 45 | :param ci: 46 | A bool, indicating if the tests are being run as part of CI 47 | 48 | :return: 49 | A bool - if the tests succeeded 50 | """ 51 | 52 | _preload(requires_oscrypto, not ci) 53 | 54 | warnings.filterwarnings("error") 55 | 56 | loader = unittest.TestLoader() 57 | # We have to manually track the list of applicable tests because for 58 | # some reason with Python 3.4 on Windows, the tests in a suite are replaced 59 | # with None after being executed. This breaks the repeat functionality. 60 | test_list = [] 61 | for test_class in test_classes(): 62 | if matcher: 63 | names = loader.getTestCaseNames(test_class) 64 | for name in names: 65 | if re.search(matcher, name): 66 | test_list.append(test_class(name)) 67 | else: 68 | test_list.append(loader.loadTestsFromTestCase(test_class)) 69 | 70 | stream = sys.stdout 71 | verbosity = 1 72 | if matcher and repeat == 1: 73 | verbosity = 2 74 | elif repeat > 1: 75 | stream = StringIO() 76 | 77 | for _ in range(0, repeat): 78 | suite = unittest.TestSuite() 79 | for test in test_list: 80 | suite.addTest(test) 81 | result = unittest.TextTestRunner(stream=stream, verbosity=verbosity).run(suite) 82 | 83 | if len(result.errors) > 0 or len(result.failures) > 0: 84 | if repeat > 1: 85 | print(stream.getvalue()) 86 | return False 87 | 88 | if repeat > 1: 89 | stream.truncate(0) 90 | 91 | return True 92 | -------------------------------------------------------------------------------- /dev/version.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import codecs 5 | import os 6 | import re 7 | 8 | from . import package_root, package_name, has_tests_package 9 | 10 | 11 | run_args = [ 12 | { 13 | 'name': 'pep440_version', 14 | 'required': True 15 | }, 16 | ] 17 | 18 | 19 | def run(new_version): 20 | """ 21 | Updates the package version in the various locations 22 | 23 | :param new_version: 24 | A unicode string of the new library version as a PEP 440 version 25 | 26 | :return: 27 | A bool - if the version number was successfully bumped 28 | """ 29 | 30 | # We use a restricted form of PEP 440 versions 31 | version_match = re.match( 32 | r'(\d+)\.(\d+)\.(\d)+(?:\.((?:dev|a|b|rc)\d+))?$', 33 | new_version 34 | ) 35 | if not version_match: 36 | raise ValueError('Invalid PEP 440 version: %s' % new_version) 37 | 38 | new_version_info = ( 39 | int(version_match.group(1)), 40 | int(version_match.group(2)), 41 | int(version_match.group(3)), 42 | ) 43 | if version_match.group(4): 44 | new_version_info += (version_match.group(4),) 45 | 46 | version_path = os.path.join(package_root, package_name, 'version.py') 47 | setup_path = os.path.join(package_root, 'setup.py') 48 | setup_tests_path = os.path.join(package_root, 'tests', 'setup.py') 49 | tests_path = os.path.join(package_root, 'tests', '__init__.py') 50 | 51 | file_paths = [version_path, setup_path] 52 | if has_tests_package: 53 | file_paths.extend([setup_tests_path, tests_path]) 54 | 55 | for file_path in file_paths: 56 | orig_source = '' 57 | with codecs.open(file_path, 'r', encoding='utf-8') as f: 58 | orig_source = f.read() 59 | 60 | found = 0 61 | new_source = '' 62 | for line in orig_source.splitlines(True): 63 | if line.startswith('__version__ = '): 64 | found += 1 65 | new_source += '__version__ = %r\n' % new_version 66 | elif line.startswith('__version_info__ = '): 67 | found += 1 68 | new_source += '__version_info__ = %r\n' % (new_version_info,) 69 | elif line.startswith('PACKAGE_VERSION = '): 70 | found += 1 71 | new_source += 'PACKAGE_VERSION = %r\n' % new_version 72 | else: 73 | new_source += line 74 | 75 | if found == 0: 76 | raise ValueError('Did not find any versions in %s' % file_path) 77 | 78 | s = 's' if found > 1 else '' 79 | rel_path = file_path[len(package_root) + 1:] 80 | was_were = 'was' if found == 1 else 'were' 81 | if new_source != orig_source: 82 | print('Updated %d version%s in %s' % (found, s, rel_path)) 83 | with codecs.open(file_path, 'w', encoding='utf-8') as f: 84 | f.write(new_source) 85 | else: 86 | print('%d version%s in %s %s up-to-date' % (found, s, rel_path, was_were)) 87 | 88 | return True 89 | -------------------------------------------------------------------------------- /docs/pem.md: -------------------------------------------------------------------------------- 1 | # PEM Decoder and Encoder 2 | 3 | Often times DER-encoded data is wrapped in PEM encoding. This allows the binary 4 | DER data to be identified and reliably sent over various communication channels. 5 | 6 | The `asn1crypto.pem` module includes three functions: 7 | 8 | - `detect(byte_string)` 9 | - `unarmor(pem_bytes, multiple=False)` 10 | - `armor(type_name, der_bytes, headers=None)` 11 | 12 | ## detect() 13 | 14 | The `detect()` function accepts a byte string and looks for a `BEGIN` block 15 | line. This is useful to determine in a byte string needs to be PEM-decoded 16 | before parsing. 17 | 18 | ```python 19 | from asn1crypto import pem, x509 20 | 21 | with open('/path/to/cert', 'rb') as f: 22 | der_bytes = f.read() 23 | if pem.detect(der_bytes): 24 | _, _, der_bytes = pem.unarmor(der_bytes) 25 | ``` 26 | 27 | ## unarmor() 28 | 29 | The `unarmor()` function accepts a byte string and the flag to indicates if 30 | more than one PEM block may be contained in the byte string. The result is 31 | a three-element tuple. 32 | 33 | - The first element is a unicode string of the type of PEM block. Examples 34 | include: `CERTIFICATE`, `PRIVATE KEY`, `PUBLIC KEY`. 35 | - The second element is a `dict` of PEM block headers. Headers are typically 36 | only used by encrypted OpenSSL private keys, and are in the format 37 | `Name: Value`. 38 | - The third element is a byte string of the decoded block contents. 39 | 40 | ```python 41 | from asn1crypto import pem, x509 42 | 43 | with open('/path/to/cert', 'rb') as f: 44 | der_bytes = f.read() 45 | if pem.detect(der_bytes): 46 | type_name, headers, der_bytes = pem.unarmor(der_bytes) 47 | 48 | cert = x509.Certificate.load(der_bytes) 49 | ``` 50 | 51 | If the `multiple` keyword argument is set to `True`, a generator will be 52 | returned. 53 | 54 | ```python 55 | from asn1crypto import pem, x509 56 | 57 | certs = [] 58 | with open('/path/to/ca_certs', 'rb') as f: 59 | for type_name, headers, der_bytes in pem.unarmor(f.read(), multiple=True): 60 | certs.append(x509.Certificate.load(der_bytes)) 61 | ``` 62 | 63 | ## armor() 64 | 65 | The `armor()` function accepts three parameters: a unicode string of the block 66 | type name, a byte string to encode and an optional keyword argument `headers`, 67 | that should be a `dict` of headers to add after the `BEGIN` line. Headers are 68 | typically only used by encrypted OpenSSL private keys. 69 | 70 | ```python 71 | from asn1crypto import pem, x509 72 | 73 | # cert is an instance of x509.Certificate 74 | 75 | with open('/path/to/cert', 'wb') as f: 76 | der_bytes = cert.dump() 77 | pem_bytes = pem.armor('CERTIFICATE', der_bytes) 78 | f.write(pem_bytes) 79 | ``` 80 | -------------------------------------------------------------------------------- /docs/readme.md: -------------------------------------------------------------------------------- 1 | # asn1crypto Documentation 2 | 3 | The documentation for *asn1crypto* is composed of tutorials on basic usage and 4 | links to the source for the various pre-defined type classes. 5 | 6 | ## Tutorials 7 | 8 | - [Universal Types with BER/DER Decoder and DER Encoder](universal_types.md) 9 | - [PEM Decoder and Encoder](pem.md) 10 | 11 | ## Reference 12 | 13 | - [Universal types](../asn1crypto/core.py), `asn1crypto.core` 14 | - [Digest, HMAC, signed digest and encryption algorithms](../asn1crypto/algos.py), `asn1crypto.algos` 15 | - [Private and public keys](../asn1crypto/keys.py), `asn1crypto.keys` 16 | - [X.509 certificates](../asn1crypto/x509.py), `asn1crypto.x509` 17 | - [Certificate revocation lists (CRLs)](../asn1crypto/crl.py), `asn1crypto.crl` 18 | - [Online certificate status protocol (OCSP)](../asn1crypto/ocsp.py), `asn1crypto.ocsp` 19 | - [Certificate signing requests (CSRs)](../asn1crypto/csr.py), `asn1crypto.csr` 20 | - [Private key/certificate containers (PKCS#12)](../asn1crypto/pkcs12.py), `asn1crypto.pkcs12` 21 | - [Cryptographic message syntax (CMS, PKCS#7)](../asn1crypto/cms.py), `asn1crypto.cms` 22 | - [Time stamp protocol (TSP)](../asn1crypto/tsp.py), `asn1crypto.tsp` 23 | - [PDF signatures](../asn1crypto/pdf.py), `asn1crypto.pdf` 24 | -------------------------------------------------------------------------------- /requires/ci: -------------------------------------------------------------------------------- 1 | setuptools == 36.8.0 ; python_version == '2.6' 2 | setuptools == 44.1.1 ; python_version == '2.7' and (sys_platform == 'win32' or sys_platform == 'darwin') 3 | setuptools == 18.4 ; python_version == '3.2' 4 | setuptools == 39.2.0 ; python_version == '3.3' 5 | https://github.com/wbond/asn1crypto/archive/master.zip 6 | -r ./coverage 7 | -r ./lint 8 | # cffi 3.15.0 is required for Python 3.10 9 | cffi == 1.15.0 ; (python_version == '2.7' or python_version >= '3.6') and sys_platform == 'darwin' 10 | pycparser == 2.19 ; (python_version == '2.7' or python_version >= '3.6') and sys_platform == 'darwin' 11 | -------------------------------------------------------------------------------- /requires/coverage: -------------------------------------------------------------------------------- 1 | coverage == 4.4.1 ; python_version == '2.6' 2 | coverage == 4.5.4 ; python_version == '3.3' or python_version == '3.4' 3 | coverage == 5.5 ; python_version == '2.7' or python_version == '3.5' or python_version == '3.6' 4 | coverage == 6.5.0 ; python_version == '3.7' 5 | coverage == 7.3.0 ; python_version >= '3.8' 6 | -------------------------------------------------------------------------------- /requires/lint: -------------------------------------------------------------------------------- 1 | setuptools >= 39.0.1 ; python_version == '2.7' or python_version >= '3.3' 2 | enum34 == 1.1.6 ; python_version == '2.7' or python_version == '3.3' 3 | configparser == 3.5.0 ; python_version == '2.7' 4 | mccabe == 0.6.1 ; python_version == '3.3' 5 | pycodestyle == 2.3.1 ; python_version == '3.3' 6 | pyflakes == 1.6.0 ; python_version == '3.3' 7 | flake8 == 3.5.0 ; python_version == '3.3' 8 | mccabe == 0.6.1 ; python_version == '2.7' or python_version >= '3.4' 9 | pycodestyle == 2.5.0 ; python_version == '2.7' or python_version >= '3.4' 10 | pyflakes == 2.1.1 ; python_version == '2.7' or python_version >= '3.4' 11 | functools32 == 3.2.3-2 ; python_version == '2.7' 12 | typing == 3.7.4.1 ; python_version == '2.7' or python_version == '3.4' 13 | entrypoints == 0.3 ; python_version == '2.7' or python_version >= '3.4' 14 | flake8 == 3.7.9 ; python_version == '2.7' or python_version >= '3.4' 15 | -------------------------------------------------------------------------------- /requires/release: -------------------------------------------------------------------------------- 1 | wheel >= 0.31.0 2 | twine >= 1.11.0 3 | setuptools >= 38.6.0 4 | -------------------------------------------------------------------------------- /run.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | from __future__ import unicode_literals, division, absolute_import, print_function 4 | 5 | from dev._task import run_task 6 | 7 | 8 | run_task() 9 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import codecs 2 | import os 3 | import shutil 4 | import sys 5 | import warnings 6 | 7 | import setuptools 8 | from setuptools import setup, Command 9 | from setuptools.command.egg_info import egg_info 10 | 11 | 12 | PACKAGE_NAME = 'asn1crypto' 13 | PACKAGE_VERSION = '1.5.1' 14 | PACKAGE_ROOT = os.path.dirname(os.path.abspath(__file__)) 15 | 16 | 17 | # setuptools 38.6.0 and newer know about long_description_content_type, but 18 | # distutils still complains about it, so silence the warning 19 | sv = setuptools.__version__ 20 | svi = tuple(int(o) if o.isdigit() else o for o in sv.split('.')) 21 | if svi >= (38, 6): 22 | warnings.filterwarnings( 23 | 'ignore', 24 | "Unknown distribution option: 'long_description_content_type'", 25 | module='distutils.dist' 26 | ) 27 | 28 | 29 | # Try to load the tests first from the source repository layout. If that 30 | # doesn't work, we assume this file is in the release package, and the tests 31 | # are part of the package {PACKAGE_NAME}_tests. 32 | if os.path.exists(os.path.join(PACKAGE_ROOT, 'tests')): 33 | tests_require = [] 34 | test_suite = 'tests.make_suite' 35 | else: 36 | tests_require = ['%s_tests' % PACKAGE_NAME] 37 | test_suite = '%s_tests.make_suite' % PACKAGE_NAME 38 | 39 | 40 | # This allows us to send the LICENSE and docs when creating a sdist. Wheels 41 | # automatically include the LICENSE, and don't need the docs. For these 42 | # to be included, the command must be "python setup.py sdist". 43 | package_data = {} 44 | if sys.argv[1:] == ['sdist'] or sorted(sys.argv[1:]) == ['-q', 'sdist']: 45 | package_data[PACKAGE_NAME] = [ 46 | '../LICENSE', 47 | '../*.md', 48 | '../docs/*.md', 49 | ] 50 | 51 | 52 | # Ensures a copy of the LICENSE is included with the egg-info for 53 | # install and bdist_egg commands 54 | class EggInfoCommand(egg_info): 55 | def run(self): 56 | egg_info_path = os.path.join( 57 | PACKAGE_ROOT, 58 | '%s.egg-info' % PACKAGE_NAME 59 | ) 60 | if not os.path.exists(egg_info_path): 61 | os.mkdir(egg_info_path) 62 | shutil.copy2( 63 | os.path.join(PACKAGE_ROOT, 'LICENSE'), 64 | os.path.join(egg_info_path, 'LICENSE') 65 | ) 66 | egg_info.run(self) 67 | 68 | 69 | class CleanCommand(Command): 70 | user_options = [ 71 | ('all', 'a', '(Compatibility with original clean command)'), 72 | ] 73 | 74 | def initialize_options(self): 75 | self.all = False 76 | 77 | def finalize_options(self): 78 | pass 79 | 80 | def run(self): 81 | sub_folders = ['build', 'temp', '%s.egg-info' % PACKAGE_NAME] 82 | if self.all: 83 | sub_folders.append('dist') 84 | for sub_folder in sub_folders: 85 | full_path = os.path.join(PACKAGE_ROOT, sub_folder) 86 | if os.path.exists(full_path): 87 | shutil.rmtree(full_path) 88 | for root, dirs, files in os.walk(os.path.join(PACKAGE_ROOT, PACKAGE_NAME)): 89 | for filename in files: 90 | if filename[-4:] == '.pyc': 91 | os.unlink(os.path.join(root, filename)) 92 | for dirname in list(dirs): 93 | if dirname == '__pycache__': 94 | shutil.rmtree(os.path.join(root, dirname)) 95 | 96 | 97 | readme = '' 98 | with codecs.open(os.path.join(PACKAGE_ROOT, 'readme.md'), 'r', 'utf-8') as f: 99 | readme = f.read() 100 | 101 | 102 | setup( 103 | name=PACKAGE_NAME, 104 | version=PACKAGE_VERSION, 105 | 106 | description=( 107 | 'Fast ASN.1 parser and serializer with definitions for private keys, ' 108 | 'public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, ' 109 | 'PKCS#12, PKCS#5, X.509 and TSP' 110 | ), 111 | long_description=readme, 112 | long_description_content_type='text/markdown', 113 | 114 | url='https://github.com/wbond/asn1crypto', 115 | 116 | author='wbond', 117 | author_email='will@wbond.net', 118 | 119 | license='MIT', 120 | 121 | classifiers=[ 122 | 'Development Status :: 5 - Production/Stable', 123 | 124 | 'Intended Audience :: Developers', 125 | 126 | 'License :: OSI Approved :: MIT License', 127 | 128 | 'Programming Language :: Python', 129 | 'Programming Language :: Python :: 2', 130 | 'Programming Language :: Python :: 2.6', 131 | 'Programming Language :: Python :: 2.7', 132 | 'Programming Language :: Python :: 3', 133 | 'Programming Language :: Python :: 3.2', 134 | 'Programming Language :: Python :: 3.3', 135 | 'Programming Language :: Python :: 3.4', 136 | 'Programming Language :: Python :: 3.5', 137 | 'Programming Language :: Python :: 3.6', 138 | 'Programming Language :: Python :: 3.7', 139 | 'Programming Language :: Python :: 3.8', 140 | 'Programming Language :: Python :: 3.9', 141 | 'Programming Language :: Python :: 3.10', 142 | 'Programming Language :: Python :: 3.11', 143 | 'Programming Language :: Python :: 3.12', 144 | 'Programming Language :: Python :: Implementation :: CPython', 145 | 'Programming Language :: Python :: Implementation :: PyPy', 146 | 147 | 'Topic :: Security :: Cryptography', 148 | ], 149 | 150 | keywords='asn1 crypto pki x509 certificate rsa dsa ec dh', 151 | 152 | packages=[PACKAGE_NAME], 153 | package_data=package_data, 154 | 155 | tests_require=tests_require, 156 | test_suite=test_suite, 157 | 158 | cmdclass={ 159 | 'clean': CleanCommand, 160 | 'egg_info': EggInfoCommand, 161 | } 162 | ) 163 | -------------------------------------------------------------------------------- /tests/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2019 Will Bond 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /tests/__main__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import sys 5 | import unittest 6 | 7 | from . import test_classes 8 | 9 | 10 | suite = unittest.TestSuite() 11 | loader = unittest.TestLoader() 12 | for test_class in test_classes(): 13 | suite.addTest(loader.loadTestsFromTestCase(test_class)) 14 | unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(suite) 15 | -------------------------------------------------------------------------------- /tests/_unittest_compat.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import sys 5 | import unittest 6 | import re 7 | 8 | 9 | if sys.version_info < (3,): 10 | str_cls = unicode # noqa 11 | else: 12 | str_cls = str 13 | 14 | 15 | _non_local = {'patched': False} 16 | 17 | 18 | def patch(): 19 | if sys.version_info >= (3, 0): 20 | return 21 | 22 | if _non_local['patched']: 23 | return 24 | 25 | if sys.version_info < (2, 7): 26 | unittest.TestCase.assertIsInstance = _assert_is_instance 27 | unittest.TestCase.assertRegex = _assert_regex 28 | unittest.TestCase.assertRaises = _assert_raises 29 | unittest.TestCase.assertRaisesRegex = _assert_raises_regex 30 | unittest.TestCase.assertGreaterEqual = _assert_greater_equal 31 | unittest.TestCase.assertLess = _assert_less 32 | unittest.TestCase.assertLessEqual = _assert_less_equal 33 | unittest.TestCase.assertIn = _assert_in 34 | unittest.TestCase.assertNotIn = _assert_not_in 35 | else: 36 | unittest.TestCase.assertRegex = unittest.TestCase.assertRegexpMatches 37 | unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp 38 | _non_local['patched'] = True 39 | 40 | 41 | def _safe_repr(obj): 42 | try: 43 | return repr(obj) 44 | except Exception: 45 | return object.__repr__(obj) 46 | 47 | 48 | def _format_message(msg, standard_msg): 49 | return msg or standard_msg 50 | 51 | 52 | def _assert_greater_equal(self, a, b, msg=None): 53 | if not a >= b: 54 | standard_msg = '%s not greater than or equal to %s' % (_safe_repr(a), _safe_repr(b)) 55 | self.fail(_format_message(msg, standard_msg)) 56 | 57 | 58 | def _assert_less(self, a, b, msg=None): 59 | if not a < b: 60 | standard_msg = '%s not less than %s' % (_safe_repr(a), _safe_repr(b)) 61 | self.fail(_format_message(msg, standard_msg)) 62 | 63 | 64 | def _assert_less_equal(self, a, b, msg=None): 65 | if not a <= b: 66 | standard_msg = '%s not less than or equal to %s' % (_safe_repr(a), _safe_repr(b)) 67 | self.fail(_format_message(msg, standard_msg)) 68 | 69 | 70 | def _assert_is_instance(self, obj, cls, msg=None): 71 | if not isinstance(obj, cls): 72 | if not msg: 73 | msg = '%s is not an instance of %r' % (obj, cls) 74 | self.fail(msg) 75 | 76 | 77 | def _assert_in(self, member, container, msg=None): 78 | if member not in container: 79 | standard_msg = '%s not found in %s' % (_safe_repr(member), _safe_repr(container)) 80 | self.fail(_format_message(msg, standard_msg)) 81 | 82 | 83 | def _assert_not_in(self, member, container, msg=None): 84 | if member in container: 85 | standard_msg = '%s found in %s' % (_safe_repr(member), _safe_repr(container)) 86 | self.fail(_format_message(msg, standard_msg)) 87 | 88 | 89 | def _assert_regex(self, text, expected_regexp, msg=None): 90 | """Fail the test unless the text matches the regular expression.""" 91 | if isinstance(expected_regexp, str_cls): 92 | expected_regexp = re.compile(expected_regexp) 93 | if not expected_regexp.search(text): 94 | msg = msg or "Regexp didn't match" 95 | msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) 96 | self.fail(msg) 97 | 98 | 99 | def _assert_raises(self, excClass, callableObj=None, *args, **kwargs): # noqa 100 | context = _AssertRaisesContext(excClass, self) 101 | if callableObj is None: 102 | return context 103 | with context: 104 | callableObj(*args, **kwargs) 105 | 106 | 107 | def _assert_raises_regex(self, expected_exception, expected_regexp, callable_obj=None, *args, **kwargs): 108 | if expected_regexp is not None: 109 | expected_regexp = re.compile(expected_regexp) 110 | context = _AssertRaisesContext(expected_exception, self, expected_regexp) 111 | if callable_obj is None: 112 | return context 113 | with context: 114 | callable_obj(*args, **kwargs) 115 | 116 | 117 | class _AssertRaisesContext(object): 118 | def __init__(self, expected, test_case, expected_regexp=None): 119 | self.expected = expected 120 | self.failureException = test_case.failureException 121 | self.expected_regexp = expected_regexp 122 | 123 | def __enter__(self): 124 | return self 125 | 126 | def __exit__(self, exc_type, exc_value, tb): 127 | if exc_type is None: 128 | try: 129 | exc_name = self.expected.__name__ 130 | except AttributeError: 131 | exc_name = str(self.expected) 132 | raise self.failureException( 133 | "{0} not raised".format(exc_name)) 134 | if not issubclass(exc_type, self.expected): 135 | # let unexpected exceptions pass through 136 | return False 137 | self.exception = exc_value # store for later retrieval 138 | if self.expected_regexp is None: 139 | return True 140 | 141 | expected_regexp = self.expected_regexp 142 | if not expected_regexp.search(str(exc_value)): 143 | raise self.failureException( 144 | '"%s" does not match "%s"' % 145 | (expected_regexp.pattern, str(exc_value)) 146 | ) 147 | return True 148 | -------------------------------------------------------------------------------- /tests/fixtures/9999-years-rsa-cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDwTCCAyqgAwIBAgICDh4wDQYJKoZIhvcNAQEFBQAwgZsxCzAJBgNVBAYTAkpQ 3 | MQ4wDAYDVQQIEwVUb2t5bzEQMA4GA1UEBxMHQ2h1by1rdTERMA8GA1UEChMIRnJh 4 | bms0REQxGDAWBgNVBAsTD1dlYkNlcnQgU3VwcG9ydDEYMBYGA1UEAxMPRnJhbms0 5 | REQgV2ViIENBMSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGZyYW5rNGRkLmNvbTAi 6 | GA8wMDAwMDEwMTAwMDAwMVoYDzk5OTkxMjMxMjM1OTU5WjCBgTELMAkGA1UEBhMC 7 | SlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQKEwhGcmFuazRERDEQMA4GA1UECxMH 8 | U3VwcG9ydDEiMCAGCSqGSIb3DQEJARYTcHVibGljQGZyYW5rNGRkLmNvbTEZMBcG 9 | A1UEAxMQd3d3LmZyYW5rNGRkLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC 10 | gYEA4rkBL30FzR2ZHZ1vpF9kGBO0DMwhu2pcrkcLJ0SEuf52ggo+md0tPis8f1KN 11 | Tchxj6DtxWT3c7ECW0c1ALpu6mNVE+GaM94KsckSDehoPfbLjT9Apcc/F0mqvDsC 12 | N6fPdDixWrjx6xKT7xXi3lCy1yIKRMHA6Ha+T4qPyyCyMPECAwEAAaOCASYwggEi 13 | MAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgWgMB0GA1UdDgQWBBRWKE5tXPIyS0pC 14 | fE5taGO5Q84gyTCB0AYDVR0jBIHIMIHFgBRi83vtBtSx1Zx/SOXvxckVYf3ZEaGB 15 | oaSBnjCBmzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRAwDgYDVQQHEwdD 16 | aHVvLWt1MREwDwYDVQQKEwhGcmFuazRERDEYMBYGA1UECxMPV2ViQ2VydCBTdXBw 17 | b3J0MRgwFgYDVQQDEw9GcmFuazRERCBXZWIgQ0ExIzAhBgkqhkiG9w0BCQEWFHN1 18 | cHBvcnRAZnJhbms0ZGQuY29tggkAxscECbwiW6AwEwYDVR0lBAwwCgYIKwYBBQUH 19 | AwEwDQYJKoZIhvcNAQEFBQADgYEAfXCfXcePJwnMKc06qLa336cEPpXEsPed1bw4 20 | xiIXfgZ39duBnN+Nv4a49Yl2kbh4JO8tcr5h8WYAI/a/69w8qBFQBUAjTEY/+lcw 21 | 9/6wU7UA3kh7yexeqDiNTRflnPUv3sfiVdLDTjqLWWAxGS8L26PjVaCUFfJLNiYJ 22 | jerREgM= 23 | -----END CERTIFICATE----- 24 | -------------------------------------------------------------------------------- /tests/fixtures/DSAParametersInheritedCACert.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/DSAParametersInheritedCACert.crt -------------------------------------------------------------------------------- /tests/fixtures/admin.ch.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/admin.ch.crt -------------------------------------------------------------------------------- /tests/fixtures/aesccm_algo.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/aesccm_algo.der -------------------------------------------------------------------------------- /tests/fixtures/certbag.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/certbag.der -------------------------------------------------------------------------------- /tests/fixtures/chromium/ndn.ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIGBjCCA+4CCQDbt8YGR683ojANBgkqhkiG9w0BAQUFADCBxDELMAkGA1UEBhMC 3 | VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMR8w 4 | HQYDVQQKExZOZXcgRHJlYW0gTmV0d29yaywgTExDMREwDwYDVQQLEwhTZWN1cml0 5 | eTEwMC4GA1UEAxMnTmV3IERyZWFtIE5ldHdvcmsgQ2VydGlmaWNhdGUgQXV0aG9y 6 | aXR5MSQwIgYJKoZIhvcNAQkBFhVzdXBwb3J0QGRyZWFtaG9zdC5jb20wHhcNMDYw 7 | ODIyMjExMjU4WhcNMTYwODE5MjExMjU4WjCBxDELMAkGA1UEBhMCVVMxEzARBgNV 8 | BAgTCkNhbGlmb3JuaWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMR8wHQYDVQQKExZO 9 | ZXcgRHJlYW0gTmV0d29yaywgTExDMREwDwYDVQQLEwhTZWN1cml0eTEwMC4GA1UE 10 | AxMnTmV3IERyZWFtIE5ldHdvcmsgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSQwIgYJ 11 | KoZIhvcNAQkBFhVzdXBwb3J0QGRyZWFtaG9zdC5jb20wggIiMA0GCSqGSIb3DQEB 12 | AQUAA4ICDwAwggIKAoICAQDHykL2vz70nbj827iARXxgBK41yXUy7oBcoG5TA+MD 13 | GjXVqV+szQWgQz6C6uPPp+O4cUVxnAIfXvCo7VjsYYsDcmCWAlV27ZRN3Ek7HvIv 14 | 4rHaht0y/E/DgKOZiiy7kJMvqDZSuD9NxSlIOTDBS6aDyORNZKubWdg0l+Axk3Yn 15 | YhmVhPtqupO8HzQjR0s2wgwKdz3m96RqjJDBng0wLEv/iCGN0ogBBV1TePuKcodF 16 | TQivkjvVcITRVWIBKNfg0uDeM+cHIYGp44WM3gBX0W3AaG9JH/1tYWmgVrk/cmwK 17 | oMq3PKVr/Usp7nR3PTyn1rpcJjPZDSNOleO+KilI4vbwFgnydbm97eTf/BFy548j 18 | SPi9HINufNDSajXCRvyQ04CQVpAzH2mPVcykoL6++M2u2nNO5tLWa2ix96RNPrV/ 19 | K00KbmIODPoqRVmoL7UvD4w2AM26l7Ol20cLqU8G4bZGe1DoKpF1CxwQlBzY6iJN 20 | PiEY+eAII54w7cnHdAp2mOKvJBVUzCROc7g4W0n3/JCHEaXDnfXlqevCckAaDbes 21 | AM7w9epOd7rUWpbSxOuKsgIyXvhM9VwxI7L5TdgULqKXq57jMAK8irsOalEt+5pJ 22 | 8RGFDOgJsbR+eJ3En//11OJzgz1bdW0lSUD72hoNdLyJtP7dn8+FrIfGBw9mwWMG 23 | MwIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQAVUa0xn7/bDpyxdqJrr3np5HKDKaL6 24 | CL4KNgBS1hKHLIqxwKGTO+nCm1sVgK9fIh7hF5sG7f5hc5ZPp9usOeqwewB5drYZ 25 | jPyk2e5WX0fjdB2pFPxhPS8vzNJRBtpPnUoiOuwXI4K12V7xj3SC/S4tqNfBM/p9 26 | sk15XfWiS8rMqDGg6oMFeM4BZ7YaZOXY/upqofg+MEbVdLBngwUPI/a1rR8OYUBr 27 | NhsSZpXwg22IwDE45M7wxgRvj0hojRAAxVS75ogitx040tf2Lp8DJgtSGvOHtuW9 28 | 87MXd8Ev8xf/7d9EXw4ghwKvyWglrw0Bpoh9OP9DOwoRFIzdBz5aUmAx6PNIvZ0Y 29 | xQ+QRUxj+Kx2Xl6hpsk8URsfxKDHR2sZwcSqjD+JJGJee26An7btAst1/grAYw5X 30 | tEfcXyXiDBHXPY6t0NZOzfQUggwIU0fiWhvT43Skob6pCc0dUBeEhFK0dpyDE3AM 31 | 4LwF/ECGfPn/UzzB/Lax4WaY2yGccBrikRfIkZARrJbvBCAxchH+HCeBV0B0BlOi 32 | 2R0RxwH0gKBEHxhMaq5J/rTaE7V5wd8OsxzcxUgW+te6hc0bbuhPiYhtvQ0N7+oF 33 | z89JuuwocsTbNekeBwHB5wpsCPA29mYId8uvVl7LThvut9+szsWetmVua7P9t10h 34 | GX3cdJCMZUwypA== 35 | -----END CERTIFICATE----- 36 | -------------------------------------------------------------------------------- /tests/fixtures/chromium/punycodetest.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDGzCCAgOgAwIBAgIJAPNKm+KwszDJMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNV 3 | BAMMEnhuLS13Z3Y3MWExMTllLmNvbTAeFw0xNDA4MjUyMzM1NTJaFw0yNDA4MjIy 4 | MzM1NTJaMB0xGzAZBgNVBAMMEnhuLS13Z3Y3MWExMTllLmNvbTCCASIwDQYJKoZI 5 | hvcNAQEBBQADggEPADCCAQoCggEBAM3+IZdIMy92S+iPB0BBD2QPdymlha2GROuN 6 | KSO1tVa0CfxZNf/Q3/4B9eXGxu6OM0X9/abUreB7z/1ajYnAh7y5XN0ZFtR9G0jA 7 | KdZ//8dPIuk1Mu5+da2Z5q5z1vrb7Lp7E7JtXvsxY2p/gJtvqwL/3Y6o3fd092ce 8 | 51MHsrJVqGvfJFqxijXxW+qjKP7XU0RQxrSLLchtcUpDVwuBZoJl9ttLMkDpQzrg 9 | qvV8Yth6fiHJD9qQESwUFmot/Y7zz0rtb0UjywRWlemekc+Tv+9sVxzAZDd2ejhd 10 | lEwdeehjpIDqUfYoN9JvPHC5lzJ5whiUZvMZ86wPoC+gZp3TDjcCAwEAAaNeMFww 11 | DwYDVR0TAQH/BAUwAwEB/zBJBgNVHREEQjBAghJ4bi0td2d2NzFhMTE5ZS5jb22C 12 | FCoueG4tLXdndjcxYTExOWUuY29tghRibGFoYmxhaGJsYWhibGFoLmNvbTANBgkq 13 | hkiG9w0BAQsFAAOCAQEAfSlwzuxgmTCCxLrDzHL4O7/jXA1FeiPVhanbqfT8EQ1Z 14 | 1T7wsKbbgt2IYdEXaqmnZLAL/bbW1bpNg3LIobVbo/sXeBSGWAktNR6oGXUlVTjl 15 | jXQqxf0RlUNBp9gbULdaIDmOvQYoStbTKD0dRsxkmwseEshkGrW4b5lGeMrjwR8M 16 | cms44n+GhxQLE9GbZFDUweY2XsBmKT3kYXvQ4pSPYNaRSjE28OZwdZ8C89aQahIQ 17 | qDUOq3Cnxjoh58LstEIftUPrk7hg7pOjF6rjIyo0dJ2xkXiCj2uFbpSdAE9lhd7J 18 | MOIibmB6xph+j3Y/LBgJS5GVU2dmwEQengqhwXGHng== 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /tests/fixtures/chromium/readme.md: -------------------------------------------------------------------------------- 1 | Various certificates from 2 | https://chromium.googlesource.com/chromium/src.git/+/master/net/data/ssl/certificates/. 3 | -------------------------------------------------------------------------------- /tests/fixtures/chromium/subjectAltName_sanity_check.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDyDCCArCgAwIBAgIJAITNX/V3KEBxMA0GCSqGSIb3DQEBCwUAMGAxCzAJBgNV 3 | BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW 4 | aWV3MRAwDgYDVQQKDAdUZXN0IENBMRIwEAYDVQQDDAkxMjcuMC4wLjEwHhcNMTQw 5 | ODE5MjI1NTA2WhcNMjQwODE2MjI1NTA2WjBgMQswCQYDVQQGEwJVUzETMBEGA1UE 6 | CAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwH 7 | VGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC 8 | AQ8AMIIBCgKCAQEAvcYPQtxlkgsHAGCaTrCE8PH6C2WMxkXtvM6vpFxPeG8wTJdC 9 | ZsytZkoRSrWKV/BYpFQf+ayCZ/h8VTbXwLFaBvolwgc2ZKdUwmJnLREwd+82O9kv 10 | miwucSvXY/ca/em4yEqh0rnU3AbKaFLij2nvK6R7Hkzb5VKyF7bn9v2REfJPCNWd 11 | f7YLHY//F15vK+97bqMsvKnQw/TxJmVKIx51Hq7Wb4htCqTCljTg1CbyLdMWJqM8 12 | rBq0vu/AhGqVTnHGvuPEFVVelMOoA0A0IXZIVh7kJgXAR2dEWQRHsjjgLWkR3ppr 13 | GH9XVm98bNr/psXbsFaigd6uykugs2Yd95ZBMwIDAQABo4GEMIGBMA8GA1UdEwEB 14 | /wQFMAMBAf8wbgYDVR0RBGcwZYcEfwAAAocQ/oAAAAAAAAAAAAAAAAAAAYIMdGVz 15 | dC5leGFtcGxlgRF0ZXN0QHRlc3QuZXhhbXBsZaASBgMqAwSgCwwJaWdub3JlIG1l 16 | pBYwFDESMBAGA1UEAwwJMTI3LjAuMC4zMA0GCSqGSIb3DQEBCwUAA4IBAQCcuKQm 17 | iG8bvpNNP4nSy7i5eh62sGaK33mhN8O6khcZu07TSiHieMMnbErUEeC/kDi6mjz4 18 | VNGsVjJPsdFsuZK/mKXQVZH813R0Mz354vKXCjJbBeQu+UGmLCzcZ1iBZ7WEw/KU 19 | nc4rgM5I7AgqAXhM9YwDK4cGHe01UwnH5QavO/psQqW+Ht3O+My/DsU0kXxMtS8H 20 | tK92vLMixuvXsEcA5InvjP6++G4VH/ms3rc+3MLgZXzQi12QDmg+UStcdPD9ahRt 21 | R6RF6OW6vqy4pa8PwKyZtwxw0rRTSlueOyEduq2ssQp5U8Od2dYfp9NfmZo13YUd 22 | jq336kKdqfNHQxET 23 | -----END CERTIFICATE----- 24 | -------------------------------------------------------------------------------- /tests/fixtures/cms-compressed.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-compressed.der -------------------------------------------------------------------------------- /tests/fixtures/cms-compressed.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MGsGCyqGSIb3DQEJEAEJoFwwWgIBADANBgsqhkiG9w0BCRADCDBGBgkqhkiG9w0B 3 | BwGgOQQ3eJwLycgsVgCikoxUhdzU4uLE9FSFknyF1LzkxILi0pzEklSFzDyFAG/n 4 | YGVzfWffYC4Atc8QcQ== 5 | -----END CMS----- 6 | -------------------------------------------------------------------------------- /tests/fixtures/cms-digested.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-digested.der -------------------------------------------------------------------------------- /tests/fixtures/cms-digested.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MHMGCSqGSIb3DQEHBaBmMGQCAQAwBwYFKw4DAhowQAYJKoZIhvcNAQcBoDMEMVRo 3 | aXMgaXMgdGhlIG1lc3NhZ2UgdG8gZW5jYXBzdWxhdGUgaW4gUEtDUyM3L0NNUwoE 4 | FFPJ28Ft2zQ7KE7vpgMOAmR5Ma/7 5 | -----END CMS----- 6 | -------------------------------------------------------------------------------- /tests/fixtures/cms-encrypted.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-encrypted.der -------------------------------------------------------------------------------- /tests/fixtures/cms-encrypted.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MIGABgkqhkiG9w0BBwagczBxAgEAMGwGCSqGSIb3DQEHATAdBglghkgBZQMEAQIE 3 | EBqIsppjB6o+f3Sg7LyvJryAQL68WX9DaEsZR5WzD5pQpj1sUCQ8lCHXfiISF/p+ 4 | Jw1F8o40U42rIwxsdB8ogmfUv5JBh9tg9N8m19p/Sxzaq/A= 5 | -----END CMS----- 6 | -------------------------------------------------------------------------------- /tests/fixtures/cms-enveloped.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-enveloped.der -------------------------------------------------------------------------------- /tests/fixtures/cms-enveloped.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MIICPwYJKoZIhvcNAQcDoIICMDCCAiwCAQAxggHIMIIBxAIBADCBqzCBnTELMAkG 3 | A1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB05ld2J1 4 | cnkxHjAcBgNVBAoTFUNvZGV4IE5vbiBTdWZmaWNpdCBMQzEQMA4GA1UECxMHVGVz 5 | dGluZzESMBAGA1UEAxMJV2lsbCBCb25kMR4wHAYJKoZIhvcNAQkBFg93aWxsQGNv 6 | ZGV4bnMuaW8CCQC95dmkEDFcgjANBgkqhkiG9w0BAQEFAASCAQAymb244S2S7UzU 7 | TkgCLEWMJUUAOtK9ohuHdVMuu4bhnrg9Eic/sjyX97mFTEH8DSR6spYoTAjDMc8s 8 | 1SUUI75XDtds8OuBh49nG1FZDyqEC1KIjstUPlh1uDZOlW1O6KWkyEwO1/h3W/eh 9 | XYKQ8GWJ0il+qJqDx503Uaa9Y9B15XykkLsMVkXlJ6xhRIIJPJDlzeL8tgQXgt/u 10 | VluLmpTLh4WjMSPlya6VsZj/1+u1N1uA5uVAF2EfZpa/sC9XMHDv5erK5eMy4zmP 11 | o/f1wgyU5kb90kJ2bbYIcoRguWHU+LGZkIgodVT6siGlAVkqts7wk9Pa0DVhOynA 12 | M54ogatiMFsGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI3WDWf/x1nJKAOBmYUh+T 13 | dQihPsfvvp/htl1WNztPcVoeb+yuuaQRKFtLYIEST5KvGVps3gJGWfmgr52jn3nM 14 | LiFS 15 | -----END CMS----- 16 | -------------------------------------------------------------------------------- /tests/fixtures/cms-signed-digested.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-signed-digested.der -------------------------------------------------------------------------------- /tests/fixtures/cms-signed-digested.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MIIHRAYJKoZIhvcNAQcCoIIHNTCCBzECAQIxDTALBglghkgBZQMEAgEwdQYJKoZI 3 | hvcNAQcFoGgEZjBkAgEAMAcGBSsOAwIaMEAGCSqGSIb3DQEHAaAzBDFUaGlzIGlz 4 | IHRoZSBtZXNzYWdlIHRvIGVuY2Fwc3VsYXRlIGluIFBLQ1MjNy9DTVMKBBRTydvB 5 | bds0OyhO76YDDgJkeTGv+6CCBMswggTHMIIDr6ADAgECAgkAveXZpBAxXIIwDQYJ 6 | KoZIhvcNAQELBQAwgZ0xCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNl 7 | dHRzMRAwDgYDVQQHEwdOZXdidXJ5MR4wHAYDVQQKExVDb2RleCBOb24gU3VmZmlj 8 | aXQgTEMxEDAOBgNVBAsTB1Rlc3RpbmcxEjAQBgNVBAMTCVdpbGwgQm9uZDEeMBwG 9 | CSqGSIb3DQEJARYPd2lsbEBjb2RleG5zLmlvMB4XDTE1MDUwNjE0MzcxNloXDTI1 10 | MDUwMzE0MzcxNlowgZ0xCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNl 11 | dHRzMRAwDgYDVQQHEwdOZXdidXJ5MR4wHAYDVQQKExVDb2RleCBOb24gU3VmZmlj 12 | aXQgTEMxEDAOBgNVBAsTB1Rlc3RpbmcxEjAQBgNVBAMTCVdpbGwgQm9uZDEeMBwG 13 | CSqGSIb3DQEJARYPd2lsbEBjb2RleG5zLmlvMIIBIjANBgkqhkiG9w0BAQEFAAOC 14 | AQ8AMIIBCgKCAQEAvVsoB3Ti5kosAiq9UN54F6rsUDZ+lLnGRZyodtqvO8PX/8Qb 15 | +QJCKsmvfTae6yMkXF2OLdpUNEY/HT5ZbAZqPL6Ta9ibS3uZI/9uZUYIzTqh+8Nl 16 | QxZXUt3hLIiceu5LVCPjEeUHv9n6YBZikK52YAUgkSC2UcPN7Oq7qQsRU0HWVssf 17 | 6U83K6fBcL0VJhaF6SMDIFp+UUGShBX3SNd+5Mbs+HSbgMB9mfmfmv9im+YoQOQ+ 18 | RpbWYC3yp6XhvxGSUCHy3y9NJ+9C5N7LDcYVwp7srKYochoMPHDCcAt8ZY1re3ti 19 | hVk/19WuCGRHvcMEKccjHba4MdROTAGYh1QvXwIDAQABo4IBBjCCAQIwHQYDVR0O 20 | BBYEFL5ChT3M/+P5KAKPflhWtP0DXOpLMIHSBgNVHSMEgcowgceAFL5ChT3M/+P5 21 | KAKPflhWtP0DXOpLoYGjpIGgMIGdMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFz 22 | c2FjaHVzZXR0czEQMA4GA1UEBxMHTmV3YnVyeTEeMBwGA1UEChMVQ29kZXggTm9u 23 | IFN1ZmZpY2l0IExDMRAwDgYDVQQLEwdUZXN0aW5nMRIwEAYDVQQDEwlXaWxsIEJv 24 | bmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhucy5pb4IJAL3l2aQQMVyCMAwG 25 | A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAD/l+a9ZIxFaoPolqWs2vdJq 26 | Kjn5z8vPFtDuRllfUQfkGj6+EPo9+zqWuHMTk5VLzqw4i09O1PYpAgTTBPE19f3B 27 | DON6QfhDaxlGlZoq8rpwf5jOpQqfcOIgKm7y9q7jAcOuV9X8LZeEp/m7mogH5LI6 28 | EYOj5eFjRyOCH8VLb//X+obGt/FN44fGhE3lgfjIo0Y1qkvdcX662nBUV12ZJFRY 29 | IGvsWh/1EmXM8JxU/+y9MBcOL/J2Ed688SvbWhipfQqcklrQm8nH3YrxgoVNWPbH 30 | k88Kf2rN7kL9F78kVsIi7CruRxfdZBF35L3Mdu0b/iDcOcaJt1zNLD3nb19lnDcx 31 | ggHVMIIB0QIBATCBqzCBnTELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1 32 | c2V0dHMxEDAOBgNVBAcTB05ld2J1cnkxHjAcBgNVBAoTFUNvZGV4IE5vbiBTdWZm 33 | aWNpdCBMQzEQMA4GA1UECxMHVGVzdGluZzESMBAGA1UEAxMJV2lsbCBCb25kMR4w 34 | HAYJKoZIhvcNAQkBFg93aWxsQGNvZGV4bnMuaW8CCQC95dmkEDFcgjALBglghkgB 35 | ZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEAcLwYgkHW2Odc3EInpaiqixYVYTrlR1P9 36 | j0WjguJyRAfRy7+0hUoqFhne3FMVz5juXA7f3sh5zis4YTawocuU1k/Ng+8MySOg 37 | e4tlQFw9qD7MDR8XI/N0n36I+PO+ThmVD+uVVWm0qsMqNgOTHNzlZT9OXgPIVthX 38 | j+gthTLa/XnU3YjKoxRB5DsDiA4rdtxEPU3/ssjDg7EzN1NRM0vKGq1+arxhi4Tb 39 | f89hsh0hg8+4P8aY7dhmBs8DMJadtHoW326nMOt390AT+/KsQXmd3MDtS4sZ7gU9 40 | YSA5foAdOiNpSENgiz5jrQF63m8BulHzSxS/a3caMsIMk8w1vGbGaQ== 41 | -----END CMS----- 42 | -------------------------------------------------------------------------------- /tests/fixtures/cms-signed-indefinite-length.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-signed-indefinite-length.der -------------------------------------------------------------------------------- /tests/fixtures/cms-signed.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/cms-signed.der -------------------------------------------------------------------------------- /tests/fixtures/cms-signed.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | 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 42 | -----END CMS----- 43 | -------------------------------------------------------------------------------- /tests/fixtures/eid2011.crl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/eid2011.crl -------------------------------------------------------------------------------- /tests/fixtures/example-attr-cert.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/example-attr-cert.der -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/Equifax_Secure_Certificate_Authority.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/geotrust_certs/Equifax_Secure_Certificate_Authority.crt -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/Equifax_Secure_Certificate_Authority.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV 3 | UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy 4 | dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 5 | MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx 6 | dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B 7 | AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f 8 | BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A 9 | cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC 10 | AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ 11 | MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm 12 | aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw 13 | ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj 14 | IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF 15 | MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA 16 | A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 17 | 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 18 | 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 19 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_EV_SSL_CA_-_G4.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEbjCCA1agAwIBAgIQboqQ68/wRIpyDQgF0IKlRDANBgkqhkiG9w0BAQsFADBY 3 | MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo 4 | R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMzEw 5 | MzEwMDAwMDBaFw0yMzEwMzAyMzU5NTlaMEcxCzAJBgNVBAYTAlVTMRYwFAYDVQQK 6 | Ew1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdHZW9UcnVzdCBFViBTU0wgQ0EgLSBH 7 | NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANm0BfI4Zw8J53z1Yyrl 8 | uV6oEa51cdlMhGetiV38KD0qsKXV1OYwCoTU5BjLhTfFRnHrHHtp22VpjDAFPgfh 9 | bzzBC2HmOET8vIwvTnVX9ZaZfD6HHw+QS3DDPzlFOzpry7t7QFTRi0uhctIE6eBy 10 | GpMRei/xq52cmFiuLOp3Xy8uh6+4a+Pi4j/WPeCWRN8RVWNSL/QmeMQPIE0KwGhw 11 | FYY47rd2iKsYj081HtSMydt+PUTUNozBN7VZW4f56fHUxSi9HdzMlnLReqGnILW4 12 | r/hupWB7K40f7vQr1mnNr8qAWCnoTAAgikkKbo6MqNEAEoS2xeKVosA7pGvwgtCW 13 | XSUCAwEAAaOCAUMwggE/MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD 14 | AgEGMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL2cyLnN5bWNi 15 | LmNvbTBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93 16 | d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9jcHMwNAYDVR0fBC0wKzApoCegJYYj 17 | aHR0cDovL2cxLnN5bWNiLmNvbS9HZW9UcnVzdFBDQS5jcmwwKQYDVR0RBCIwIKQe 18 | MBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTM4MB0GA1UdDgQWBBTez1xQt64C 19 | HxUXqhboDbUonWpa8zAfBgNVHSMEGDAWgBQs1VBBlxWL8I82YVtK+2vZmckzkjAN 20 | BgkqhkiG9w0BAQsFAAOCAQEAtI69B7mahew7Z70HYGHmhNHU7+sbuguCS5VktmZT 21 | I723hN3ke40J2s+y9fHDv4eEvk6mqMLnEjkoNOCkVkRADJ+IoxXT6NNe4xwEYPtp 22 | Nk9qfgwqKMHzqlgObM4dB8NKwJyNw3SxroLwGuH5Tim9Rt63Hfl929kPhMuSRcwc 23 | sxj2oM9xbwwum9Its5mTg0SsFaqbLmfsT4hpBVZ7i7JDqTpsHBMzJRv9qMhXAvsc 24 | 4NG9O1ZEZcNj9Rvv7DDZ424uE+k5CCoMcvOazPYnKYTT70zHhBFlH8bjgQPbh8x4 25 | 97Wdlj5qf7wRhXp15kF9Dc/55YVpJY/HjQct+GkPy0FTAA== 26 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_EV_SSL_CA_-_G4.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/geotrust_certs/GeoTrust_EV_SSL_CA_-_G4.crt -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_Primary_CA.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/geotrust_certs/GeoTrust_Primary_CA.crt -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_Primary_CA.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY 3 | MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo 4 | R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx 5 | MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK 6 | Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp 7 | ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC 8 | AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 9 | AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA 10 | ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 11 | 7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W 12 | kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI 13 | mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G 14 | A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ 15 | KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 16 | 6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl 17 | 4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K 18 | oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj 19 | UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU 20 | AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= 21 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_Universal_CA.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/geotrust_certs/GeoTrust_Universal_CA.crt -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/GeoTrust_Universal_CA.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | 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 31 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/codex.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIGizCCBXOgAwIBAgIQYg46WU6Gb9G2jdI/8qVAIjANBgkqhkiG9w0BAQsFADBH 3 | MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMX 4 | R2VvVHJ1c3QgRVYgU1NMIENBIC0gRzQwHhcNMTQxMjE3MDAwMDAwWhcNMTUxMDI5 5 | MjM1OTU5WjCB1DETMBEGCysGAQQBgjc8AgEDEwJVUzEeMBwGCysGAQQBgjc8AgEC 6 | FA1NYXNzYWNodXNldHRzMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjES 7 | MBAGA1UEBRMJNDcxNzE0NjM5MQswCQYDVQQGEwJVUzEWMBQGA1UECBQNTWFzc2Fj 8 | aHVzZXR0czEQMA4GA1UEBxQHTmV3YnVyeTEeMBwGA1UEChQVQ29kZXggTm9uIFN1 9 | ZmZpY2l0IExDMRMwEQYDVQQDFApjb2RleG5zLmlvMIIBIjANBgkqhkiG9w0BAQEF 10 | AAOCAQ8AMIIBCgKCAQEAn1IWBm9rvLbYyxu10iBprifB5hVJEWa7mQaXqU54v3up 11 | llfcZzqpL2Bk0MHIfPTbxwg1n3B9m4+Ey1HOgWeiVFxOHA8dI6SgXCSAOvxPVLsT 12 | cy82iNBVpBvJ+Ci1u3lLUh8UzS0j2eci8U+3rVrwrMjiaboexCIV1bXQteiOihWh 13 | YnEpsqHivPXX8DQ6rvG9PMBXCVPkwqJLA0GAzGdwvddyqMa5760Yv2170XpwNg7v 14 | wih3AH3pMKX39Cgd+Jn8zhzuB0RgYdkQuEcqI8V3O24DwBW6hLyVL3ajFDr1VQb1 15 | kLT219G6rMND8PzSfaNiYvitPSjsHbDNFmD8hHppBwIDAQABo4IC4zCCAt8wUgYD 16 | VR0RBEswSYIOZGV2LmNvZGV4bnMuaW+CDXJjLmNvZGV4bnMuaW+CEXBhY2thZ2Vj 17 | b250cm9sLmlvggl3Ym9uZC5uZXSCCmNvZGV4bnMuaW8wCQYDVR0TBAIwADAOBgNV 18 | HQ8BAf8EBAMCBaAwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2dtLnN5bWNiLmNv 19 | bS9nbS5jcmwwgaAGA1UdIASBmDCBlTCBkgYJKwYBBAHwIgEGMIGEMD8GCCsGAQUF 20 | BwIBFjNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9zaXRv 21 | cnkvbGVnYWwwQQYIKwYBBQUHAgIwNQwzaHR0cHM6Ly93d3cuZ2VvdHJ1c3QuY29t 22 | L3Jlc291cmNlcy9yZXBvc2l0b3J5L2xlZ2FsMB0GA1UdJQQWMBQGCCsGAQUFBwMB 23 | BggrBgEFBQcDAjAfBgNVHSMEGDAWgBTez1xQt64CHxUXqhboDbUonWpa8zBXBggr 24 | BgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9nbS5zeW1jZC5jb20wJgYI 25 | KwYBBQUHMAKGGmh0dHA6Ly9nbS5zeW1jYi5jb20vZ20uY3J0MIIBAwYKKwYBBAHW 26 | eQIEAgSB9ASB8QDvAHUApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAA 27 | AAFKVctwzgAABAMARjBEAiBhrEBQ6LfRQnQ2EQvOlsFtTu906MGMT+eXpr8RiJQ5 28 | bAIgesSFdYX7Qqs5AmV4/A6UQswos0iUc9NrvkUjnCe5+FMAdgBo9pj4H2SCvjqM 29 | 7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAUpVy3D0AAAEAwBHMEUCIGJv8m9tSDUh 30 | b8Cx/+GKLZbgqhoR5KvmwqnUkomve8BUAiEAjDx9OdDiIpoFNTrabIAqFy4l9/z8 31 | AcGY8ZYJNLjl5YIwDQYJKoZIhvcNAQELBQADggEBAFk2w3U4Rxa3pHBjuuq26ZZx 32 | S38UV2MSGon2Vr0pNtsRs4A0lcfqwX63CljuEWVCWQcLap00CgnfL4Lk0Nvt3HNB 33 | Vh3/rXzxyOUXvPzWhatyMmjl19y/iO6JGnEfPkk9Xzv6iLfCB0aZhm9V0pswbbKg 34 | bST1kUrftEBMeAqOQYgK0wvFu2TB5wD1dnI5fziLsvBndq2jScvBr20XVpMrORQ/ 35 | K7+RlP1jWhlfoE3WMm9DlShpq+b67vP8JxySbeY8JJtG61W5re8TMFrDZXbnWJOt 36 | 4QVPZgEO87IX3vyrTu9XBmJ/vknv8NY1khUXpE/F/ONWZ4wDltEGOOr8jDOWCp8= 37 | -----END CERTIFICATE----- 38 | -------------------------------------------------------------------------------- /tests/fixtures/geotrust_certs/readme.md: -------------------------------------------------------------------------------- 1 | Example EV certificate and chain. 2 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/IssuingCA-der.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/globalsign_example_keys/IssuingCA-der.cer -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/IssuingCA.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIE6jCCA9KgAwIBAgIGJ5o5Cj9oMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNVBAYT 3 | AlVTMQswCQYDVQQIDAJNQTEPMA0GA1UEBwwGQm9zdG9uMRQwEgYDVQQKDAtFeGFt 4 | cGxlIExMQzEQMA4GA1UECwwHUm9vdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENB 5 | MB4XDTEzMDcxNzE0NDUzMVoXDTE4MDcxODE0NDUzMVowcDELMAkGA1UEBhMCVVMx 6 | CzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFDASBgNVBAoMC0V4YW1wbGUg 7 | TExDMRMwEQYDVQQLDApJc3N1aW5nIENBMRgwFgYDVQQDDA9UZXN0IElzc3Vpbmcg 8 | Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCxf7DkFf5wnKo9v9Rs 9 | fVJ0Vw6F2rNhkN5PzYg44Hw+Ned1Hp+N2CJhAVgleTecCcsEMcCzuvOUorvXqJI+ 10 | QRnGC51APNIPqowA2H3VMpl7MxlLdhCS/e5dEWbTK74CDqUJfHqlALX4AWmVwUD6 11 | Rh6SX7Y+Hx4OVHEDStM4K1YBJPj5mRl0SvAK3UNHxAezISmLOf8mYaVlYzXMqXgP 12 | LqZZGATIKfwEJg5fOzDq59++EOWCDHxmHQEPt0UYVfpZhTfsTe9WhLkyvtFGGxDZ 13 | lCSnxWQHYQmcU5+12xNFqD/3GU1ayIrpcl4KSW/v1h8aiIs7zWJWPvCHGekylr8R 14 | aiOfAgMBAAGjggGOMIIBijAdBgNVHQ4EFgQUJ/gv6V3XDfSo6oeZPf2Os55A0JEw 15 | HwYDVR0jBBgwFoAUZHxc4eBgOE5InwW8VWN+P65N9x4wDwYDVR0TAQH/BAUwAwEB 16 | /zAOBgNVHQ8BAf8EBAMCAQYwTAYDVR0gBEUwQzBBBgkrBgEEAaAyATwwNDAyBggr 17 | BgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8w 18 | QAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9ncy90 19 | cnVzdHJvb3RjYXRnMi5jcmwwgZYGA1UdHgSBjjCBi6BXMA6CDG9ubHl0aGlzLmNv 20 | bTBFpEMwQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1BMQ8wDQYDVQQHEwZCb3N0 21 | b24xFDASBgNVBAoTC0V4YW1wbGUgTExDoTAwCocIAAAAAAAAAAAwIocgAAAAAAAA 22 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwDQYJKoZIhvcNAQEFBQADggEBALDg 23 | An3XGGE8zPgRZT7enszDZZdw0+8l5ZKoEWqr2xjkYRXGipcI79KOX4ncxzsnc5f5 24 | dSPqJVEF2ezn0qQsn+c8irbe4OIb/1cYWvRZbk1s5mWHzbr+ODvzUOTec0cUffC5 25 | SbPVdrCWxkatBktLV2ByEJBjLMkPR0pvs6+S1Vf/X8wACaTuIvSzoELUAYAuRnOO 26 | FQZbDHKlRJ989nunrcVeZlGwucEm44CAq8/9JO+dqk+dBxL5Yud26A3Xs3v5Jmlp 27 | yZdglK8H7yQRg3j2j55t/RqjGEuuqEaZ/BZORbtkpyOHMoELkoVosd65nczUQn0i 28 | Q6ri1isyJNSKOUO/irI= 29 | -----END CERTIFICATE----- 30 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/IssuingCA.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAsX+w5BX+cJyqPb/UbH1SdFcOhdqzYZDeT82IOOB8PjXndR6f 3 | jdgiYQFYJXk3nAnLBDHAs7rzlKK716iSPkEZxgudQDzSD6qMANh91TKZezMZS3YQ 4 | kv3uXRFm0yu+Ag6lCXx6pQC1+AFplcFA+kYekl+2Ph8eDlRxA0rTOCtWAST4+ZkZ 5 | dErwCt1DR8QHsyEpizn/JmGlZWM1zKl4Dy6mWRgEyCn8BCYOXzsw6uffvhDlggx8 6 | Zh0BD7dFGFX6WYU37E3vVoS5Mr7RRhsQ2ZQkp8VkB2EJnFOftdsTRag/9xlNWsiK 7 | 6XJeCklv79YfGoiLO81iVj7whxnpMpa/EWojnwIDAQABAoIBAAiyU+1o8nV8B49M 8 | 9dB293JBzbFbPMy791h7noAC57N4mqWPYYvmmhCcqz/yx3m6tRq4gVONBmAy9Pcl 9 | CD1KnUOp0AOUt0oTNhbYhJnMh96Ua1naKAe7r1EaCCqyivW41/c2BSBOf5vuHck7 10 | lb5tbxQG4nv6tFNJadwab2ziGq2lmDV9qxS0nXcLdijhM2I+5GmIWj80ydFpU6J0 11 | QraB1NqGD+YtLI+8BaksUlkAZmDjShOCgASylAcsmc4E9WmFyGAiemsLPKftb5Px 12 | 8Ra8wVqibbylPif5JSXBH7JbJN/eGEmKh6KfYjdPo/yBufPf9kybzPGGCqBwtzKy 13 | ea/pBiECgYEA15ADtdv2rT4TmegwHy9w+jnd5MCixeL/mgH+2wKwq4K4Enyp/qaK 14 | 05WLw/U9qrjzCIykdpYSl78oD+Ww7QrQ6raZG+Org/anCaqrYKDZF/1dRYDEt5mi 15 | dPCHNugLL5HDIPcuSLcmL4BQm0X9IgvaHQ9bBYxLou8JXq8Hvb4/4u8CgYEA0su8 16 | aL9W4NgI8p1BxQAyuTW2sHoSqcIUHj2jvmSLvmB3gvp+GODeU85j9p7dCr4HEHpD 17 | d1Oe4goce92EK6UILnExjZEr/MaRzMJNFaiZPQc5nAIv/RXNYWQeujRobTInrkqp 18 | thsYiEFF+1GdKEz0QaQbfzRiv3vk4U1zY60KClECgYEA02iIWwkZShrBeoX++/a5 19 | JI8wEbLjcJQJ/e7LFdvzjKGtCWR+DCMlsBDQfCS+j/rHT7EvcqYIIg71qXGpLTEY 20 | Z7khO/rzMX7rn01kumXFxANWQF3jj/T7IRjsY2r73XFlH6WMHQCSUK/VXhMsCQH6 21 | rdlreWt4mpk4ZUXfn7VATr0CgYAlOiHeBdyb/Msnvan91pkeqGPJKuXc4Q+Yf55J 22 | Y4xiZLr2gLKARkY9WrfAuDGlUgYBXPZJPpVSqiJ5pZdP9edJ/GeZ7sdr7s2U8cOX 23 | TZ0yb/I2oRREh/MrffkHPXYrwq3LVBhAtuxQM+beCX3Nvjls1kSc5G2ED6dOOtVk 24 | Bw084QKBgQCmrqzaRmIt7ojggcGoNSc246q45bHpNJRZ+xEl1WLLW37KH2beO3ya 25 | VNoZVfTQR4fUv0r5gtKRC8McIxvyUu6de5PZP3NPeaUfO+mipwFe6Z2P1G01jgP8 26 | BgBFq13mv1H3fbFcFyhdkw5KWKkveFfUi5Cm9c2LC6MebaxUU8Fm0g== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL1-der.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/globalsign_example_keys/SSL1-der.cer -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL1.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEYjCCA0qgAwIBAgIFYv0+d6owDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMC 3 | VVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFDASBgNVBAoMC0V4YW1w 4 | bGUgTExDMRMwEQYDVQQLDApJc3N1aW5nIENBMRgwFgYDVQQDDA9UZXN0IElzc3Vp 5 | bmcgQ0EwHhcNMTMwNzE3MTQyNTQwWhcNMTMwODMxMTQyNTQwWjAAMIIBIjANBgkq 6 | hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwe6NSvHnvvL06kAvamgbnHdcdvZInPoz 7 | qZ+E7T1PmBAe/HNAWtkbdb45PNV5sNG9b25QkJCHZkYuzNVDnZMDzU+ecevnu8H2 8 | i7qOgxrik5SjnhvjUKpqrLT+n8ypTKu1gYrt0eVrHVVOzCGWCyQsIX/x2oIzc12V 9 | dRGYZYtr68+x9SXRkuGkZINjDx7nwRGajCRwCJ6vzB0QV/nnQ0461KhNyBmdQSvU 10 | INXLOIyjRHtWa0zND7FGWgdmoaHftptHkEbrZvQT0EMzsVOGv7ZHNNfP1KRGxvWZ 11 | 1rQlrfko8UxMDJR9rG3BzrArSIUo1qztnkXhbCqcMc1kIRLF5Tq3DQIDAQABo4IB 12 | cTCCAW0wDgYDVR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMBBggr 13 | BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSUYQSSBEzm/2iolq950vMy 14 | hK5bzzAfBgNVHSMEGDAWgBQn+C/pXdcN9Kjqh5k9/Y6znkDQkTAfBgNVHREEGDAW 15 | ghRhbnl0aGluZy5leGFtcGxlLmNvbTB8BggrBgEFBQcBAQRwMG4wKAYIKwYBBQUH 16 | MAGGHGh0dHA6Ly9vY3NwLmV4YW1wbGVvdmNhLmNvbS8wQgYIKwYBBQUHMAKGNmh0 17 | dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3RydXN0cm9vdGNhdGcy 18 | LmNydDBMBgNVHSAERTBDMEEGCSsGAQQBoDIBPDA0MDIGCCsGAQUFBwIBFiZodHRw 19 | czovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQUF 20 | AAOCAQEAZpyLnjpPpgMJY5eD9+3vNhqptmSS6+m84DI7+iq88vtKyT5sbY2o9WU7 21 | m3J0ZfpIz3cuMDpvTsR4B0P7RKUIE+qgBmu3lreYk5r72WOopXCYH19ZuQsEYo+S 22 | kU3sDM8vfpVOX/oOEJ+XwRbxwrIGL21s8yKuTKSdY1OmbeTvlAaN5cqaBxO/jiP0 23 | hVAgFPSfufvg8LBFmsjILqFzBPwZ0hWTCiJzRzu2PFGTYYQMZD+s+VX1Wbcpxiz3 24 | LkmWj/GGgMAZtWh/g7mKQe/tsL3APebsfXbMMs2uy3TU2zAzbI5s/rYAaEOH7s65 25 | aUGW6khL6LspncsQ36eg+pusb7LF/g== 26 | -----END CERTIFICATE----- 27 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL1.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAwe6NSvHnvvL06kAvamgbnHdcdvZInPozqZ+E7T1PmBAe/HNA 3 | Wtkbdb45PNV5sNG9b25QkJCHZkYuzNVDnZMDzU+ecevnu8H2i7qOgxrik5Sjnhvj 4 | UKpqrLT+n8ypTKu1gYrt0eVrHVVOzCGWCyQsIX/x2oIzc12VdRGYZYtr68+x9SXR 5 | kuGkZINjDx7nwRGajCRwCJ6vzB0QV/nnQ0461KhNyBmdQSvUINXLOIyjRHtWa0zN 6 | D7FGWgdmoaHftptHkEbrZvQT0EMzsVOGv7ZHNNfP1KRGxvWZ1rQlrfko8UxMDJR9 7 | rG3BzrArSIUo1qztnkXhbCqcMc1kIRLF5Tq3DQIDAQABAoIBAAgXGZHc0Zwnqovz 8 | LYc03KIEYLkdwR27WlhjLTpwalefpItHi5G+qOSakOy2wyLbPRne8kF1phBgMSee 9 | Zfm23lu8TJHYE4zDpLNjjvptLrKVatX3t93vng+iZVTpRs7KAwJqd01gUr2gh28A 10 | n6/LTIQBQGerMtZHOyrtFvx1eoUVzHCWPg0Xfbd4cwr0FnNvvzd13XtHXC11j1oF 11 | 7RFs8NzvwO/wYvMMge6qkF+A4rWAmw0jZnBhjJ0i0LbnHaEp4eqpoTlyITht7lOZ 12 | 2jBXaXYMFs4KRueNdSk4n8kDQyPD5+fpRA3Lzy+3fIvALeExx38a3WkiWrnnWnCT 13 | 2+0VNwECgYEA41NK4gBt6ilhqTkbfKUq5TcZ5xw466mCQSBDNnHsilI4L1FfqCkc 14 | Qtkz7jL00Gj2IH+3UJRY442hsb5VL39n6WHuLv3FYV2NogVn0UQteGnNN5oOuq74 15 | 7q84Hax3tOCuNv4acC3nevk0sozT0YRx0v+XXVQi4vZRDIrEa49CFi0CgYEA2mTt 16 | mm0KZ73U5YaxEyLPzNC564Iixh5Scl671QWhJcC92TO/HijHYErE+Rsy3U7xlsN3 17 | MBh3kS11E6xx588fmm5vl/rAtNSLXLezvATXevI5JTtrUp4KFdXaskUDN9rF0IhH 18 | 3gPf4z/6CuBUfTVsSqpyKpQGnO4im2LHSHTzkGECgYEAuATpDWJDl9a/0/kCozgh 19 | LUQZl9hky4CAjK/NOPmn/aDpEoTQ5pPA6Oxi+WQOgdc1xsEcaAJuomY4imYFF1oP 20 | iAFainernFHbIVk23VRParZbBbOUUNLreGwnBP5kOOvYm3O/eyftxsKNQix2G5kX 21 | ezKkGUzOoOO8YGbE8j0ZxlECgYALEtEFYoADkJmJ5dF2se4taWvz6A5RU1pE2E7X 22 | 10g7fNFjgP8wzUqGtGPWaa2jkQwo49JYSvVNFCv6imTgJx1oHC9mWl2JDbnfQqVH 23 | ZEt0vXFuVNv1PXQvdT94iI1IOLyM/Uv/kty4ThcklAlUq+/IvWm6hPTs4ho5HMIU 24 | B3IOIQKBgDx81STXvlCHW5K4Xp7WXMeztabKEn1anEQFt4c3Y4aWkFpCxBJ7SfNL 25 | MXeK26YTUCjk+DA6lSG6P/wIChYDAooc4/CMkabmLaOGp06ff3XirdaGJ4/K5jvY 26 | 31o8fBPEDJTlwMrc+5BRIp0ZufT2NCXEHRvsWpB3dYXrO4BsAIaP 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL2-der.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/globalsign_example_keys/SSL2-der.cer -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL2.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEujCCA6KgAwIBAgIFYv0+d6owDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMC 3 | VVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFDASBgNVBAoMC0V4YW1w 4 | bGUgTExDMRMwEQYDVQQLDApJc3N1aW5nIENBMRgwFgYDVQQDDA9UZXN0IElzc3Vp 5 | bmcgQ0EwHhcNMTMwNzE3MTQyNTQ1WhcNMTMwODMxMTQyNTQ1WjBYMQswCQYDVQQG 6 | EwJVUzELMAkGA1UECAwCTUExDzANBgNVBAcMBkJvc3RvbjEUMBIGA1UECgwLRXhh 7 | bXBsZSBMTEMxFTATBgNVBAMMDCouZ29vZ2xlLmNvbTCCASIwDQYJKoZIhvcNAQEB 8 | BQADggEPADCCAQoCggEBAK5070sRytJr8Og0m64H5QILBNaHSZMr+1laKaMl340l 9 | 0sui22+1bqD65QVDdyioofkeAFcSZBMGPQVlcbhOCNfu11FvTpAnnD0nQUA8XhCg 10 | +BPHVpyt6Ec7NnQRbBl3+OxXqOsiOHWxcYV7m6jVoCLTRXwBEnbY+hmsTEDtZpqM 11 | eqkikQKSLiKHRlFQ7LKIQDdiQrEgK9jO3sPX8SR7iTOflSHL8Gx7pM4ea7Hsqtvx 12 | lq2WX/RaNiBxBPOO6Wjy0K8muOCCXlVqREy9YjbLB5PRXJYm4vOeosEzhhjjn58p 13 | j6Qks5BywY8XG+ycDmZX0fcYDt/ZbZA2ixdaFDz2+KMCAwEAAaOCAXEwggFtMA4G 14 | A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw 15 | DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU0rcVf2QwByhwg8oo+oiW3p78ij0wHwYD 16 | VR0jBBgwFoAUJ/gv6V3XDfSo6oeZPf2Os55A0JEwHwYDVR0RBBgwFoIUYW55dGhp 17 | bmcuZXhhbXBsZS5jb20wfAYIKwYBBQUHAQEEcDBuMCgGCCsGAQUFBzABhhxodHRw 18 | Oi8vb2NzcC5leGFtcGxlb3ZjYS5jb20vMEIGCCsGAQUFBzAChjZodHRwOi8vc2Vj 19 | dXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC90cnVzdHJvb3RjYXRnMi5jcnQwTAYD 20 | VR0gBEUwQzBBBgkrBgEEAaAyATwwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cu 21 | Z2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQEFBQADggEBAEGv 22 | 7ndOdEaASijk6kFupDEakCWDLm1HWGwEQ1+mjuatqGcA1MII8BbEjHb7irnvfIOT 23 | OS/cU7CbgsZVQNEPtFmQVeuRAHX869nDTjSbLmQSwJXT1IP9ApGCGKeMYnzXSAAT 24 | 9qO8B5jcMu83xkT6UZV5K/xkKtIcCUk3ToaN1H+lc0PGDYtOxQ5He/n7Dlx9mGtb 25 | M8uZyuuOja4Fyk+q5RI2HYVcW6w35aqEMIIsFv4P232PVy5acTmRhZZ4XenAhHzS 26 | F3Y/Hs1WJK98UUjlWEyrkKo7l51D0p8dHvoIHKAnhNswuIbZgJRlsg/tESNK9jAg 27 | L6Di/FIgN3DqzNOPmfI= 28 | -----END CERTIFICATE----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL2.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEogIBAAKCAQEArnTvSxHK0mvw6DSbrgflAgsE1odJkyv7WVopoyXfjSXSy6Lb 3 | b7VuoPrlBUN3KKih+R4AVxJkEwY9BWVxuE4I1+7XUW9OkCecPSdBQDxeEKD4E8dW 4 | nK3oRzs2dBFsGXf47Feo6yI4dbFxhXubqNWgItNFfAESdtj6GaxMQO1mmox6qSKR 5 | ApIuIodGUVDssohAN2JCsSAr2M7ew9fxJHuJM5+VIcvwbHukzh5rseyq2/GWrZZf 6 | 9Fo2IHEE847paPLQrya44IJeVWpETL1iNssHk9Fclibi856iwTOGGOOfnymPpCSz 7 | kHLBjxcb7JwOZlfR9xgO39ltkDaLF1oUPPb4owIDAQABAoIBABR/7yJ+G7wwLOXM 8 | UMLZcKKV0uK2kQG3OFjejGf8alF2sVd2cpyk0DQgZ0sAC39+mVHhoZ6ZraLCp+b7 9 | bap/mPBuw2RxVOUBko1pEHTQ4yjHEX+Ze+b7VIESRyrKZU50145GGrZOlh3WVQWf 10 | acIkICYXd2HD6nyGsJTVtzwl6VmdmJSQQlRREEFtqXA2BYJkyAbzjR7NRJ6erK/b 11 | ZaB1oamoRiOQNh2DUHJl6QkbaPsrnNouEgMuoXih7u7fAqGFNgsVV5yAKaLvjkE9 12 | MyOeOARGvSkTZM1WscUxSr+2JBC9298w6wGgnvuFhCDDlNGR/IPbzLetJeAc7rMD 13 | tKa60dECgYEA24MQRprbrh/zSWiwLVwzZHqeqB29kclyqTDDvuGixjux9tgSsUmg 14 | /0zMeYSRJgYoF14zvAVl5/YV9BYZ2xgqdbkEuQ1wjdQfRruwk1bqa5Ao0Q20WImu 15 | SXMvCQDxRvKZIZsr/dQkZx/SQd2uOR44fZZZQP1NroUD3o6HaRmXwSkCgYEAy3Sg 16 | 7//zP4lg/5sGWHipR7e5qXTjkYU6ZDqvORShkzkE3I51E7sOkpEIKqfOzPwyE8cY 17 | CbaeyLi4OcJ/4FLZUs6pRd8cYYnc86JJqZUi8LMWOwamiTFX/sGQ8JxjYMoE/ZuC 18 | 2+E3seQIdkFVkDtuJQM5URO3Rof/FoNbkmywaOsCgYAcoz6uV2mtj9GHlDbX1B2I 19 | UE7+k9K1gFiLJieDcaBwyDzxfUMDCh4M8JIEkHz3PvpgAhQxxWqEFqDKlU+OO9re 20 | POMW2WADwNbLvZTNxBsVKVuJ2oXavyuTvYk3XX4cyW2c6seUd+a/5XDi0u712LF6 21 | APFn/yPxTr0wfdvApGwd8QKBgBEzoivIgyN7FQVncQjn4sAai4sFQ/xYvFAfGhOE 22 | aAjPiFaxgLqTVS8VLhCVMYnpRL6hVan0k8Y6v/C6Ph+UQaWbrXon2/lvM4wxy3KY 23 | FmUtbxK8hDYTQvJaIUwGnOxhCDz8+fpnN1NGCWUeLwLL04szk5QES7md4/ZeUs61 24 | e9DTAoGASlUCBD7hlknR/JYplouCxkL/h9169kIcGIkRVmvmZNy4u00kYGXjnZMk 25 | Moma8Q66+9qGmTtoSVrtzAhMtA/zwzcjPIizeSn2R7WegPXTKXkSXMULHLO7Zkln 26 | fc59/oYiv0ArEa5O/y+f+/C2dVEobKslx1feQ+8vcz8Kz89O38Y= 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL3-der.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/globalsign_example_keys/SSL3-der.cer -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL3.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEqjCCA5KgAwIBAgIFYv0+d6owDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMC 3 | VVMxCzAJBgNVBAgMAk1BMQ8wDQYDVQQHDAZCb3N0b24xFDASBgNVBAoMC0V4YW1w 4 | bGUgTExDMRMwEQYDVQQLDApJc3N1aW5nIENBMRgwFgYDVQQDDA9UZXN0IElzc3Vp 5 | bmcgQ0EwHhcNMTMwNzE3MTQyODE0WhcNMTMwODMxMTQyODE0WjBpMQswCQYDVQQG 6 | EwJVUzELMAkGA1UECAwCTUExDzANBgNVBAcMBkJvc3RvbjEUMBIGA1UECgwLRXhh 7 | bXBsZSBMTEMxDzANBgNVBAoMBkdvb2dsZTEVMBMGA1UEAwwMKi5nb29nbGUuY29t 8 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAowZIZZpk8P4YJkpiS2 9 | IcRrY2XjfklqbEz7JxjvB3qP0QvWYoru5vYcVEMjnFPZgbdUuxUhmh8atLp9Xj40 10 | t3J4st3YhMvmpTN0LCAG4yMDigxdBSkrkR8e3m8EFowmKNwo0XwGBYFVVXQwKrWu 11 | cb28GEst4LCBH+TVPjJUgdfTowdPRr/k30mvw22J5aJRI53GnZ8V+hn3izb5zAZw 12 | NhbAjjoHFTDnowEkhRyochmXv/2aSsoacqiaZnmH+WsWYR2BgqSrwOlPEuIw6QOM 13 | XYGOB200mRlXjifR+fPOfmM71+0PqAnwkb+t10IJzbARoeqrEaWgRqlu9jZ8W8IE 14 | 2QIDAQABo4IBUDCCAUwwDgYDVR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsG 15 | AQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRH3qTn6mDn 16 | 7jbI8dWwRgcHnkJozjAfBgNVHSMEGDAWgBQn+C/pXdcN9Kjqh5k9/Y6znkDQkTB8 17 | BggrBgEFBQcBAQRwMG4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmV4YW1wbGVv 18 | dmNhLmNvbS8wQgYIKwYBBQUHMAKGNmh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5j 19 | b20vY2FjZXJ0L3RydXN0cm9vdGNhdGcyLmNydDBMBgNVHSAERTBDMEEGCSsGAQQB 20 | oDIBPDA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9y 21 | ZXBvc2l0b3J5LzANBgkqhkiG9w0BAQUFAAOCAQEArh/qtAvF8NIBg+274/SLrqPA 22 | QUttAKGYX22hunJdwctE57Kvh8XK2bq1ZuL+egEPvQ/18KzxRUxdt4OLcUA0hh6z 23 | CoMalBT2t0ogILUZSLYXKwe6Ywk/UPbSGB225YHDeFLIK35T9AFaf45s5IQmOemi 24 | 2O2mIOADO7BnyoNOcx6aL42yuj4bn4/8bQ9zcE/6TdGi0IhaAeydS49Ir9Y9Iu4d 25 | SARdBFm62hggIgOpw8d5UNnjNXYMfWwj5oSCmfWZcwTtwFUipnJhyfzZK+1kTT2w 26 | NjgKxZ3QJ8bUAp7nfPtfh8424oablZ3kbOpusTVv0JN9YwvMxBkIrU7oEe2C1A== 27 | -----END CERTIFICATE----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/SSL3.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAwAowZIZZpk8P4YJkpiS2IcRrY2XjfklqbEz7JxjvB3qP0QvW 3 | Yoru5vYcVEMjnFPZgbdUuxUhmh8atLp9Xj40t3J4st3YhMvmpTN0LCAG4yMDigxd 4 | BSkrkR8e3m8EFowmKNwo0XwGBYFVVXQwKrWucb28GEst4LCBH+TVPjJUgdfTowdP 5 | Rr/k30mvw22J5aJRI53GnZ8V+hn3izb5zAZwNhbAjjoHFTDnowEkhRyochmXv/2a 6 | SsoacqiaZnmH+WsWYR2BgqSrwOlPEuIw6QOMXYGOB200mRlXjifR+fPOfmM71+0P 7 | qAnwkb+t10IJzbARoeqrEaWgRqlu9jZ8W8IE2QIDAQABAoIBAB5RvYAxgffy5ZP6 8 | DT/57dN4+mdwD7HBj47XvJNYqWxp2kjr8IYQX1WRp7lZ/EZTKrUDJ9p9pJd7r7C2 9 | /NIjShlodkvvIJ8eviR48i+BQvUbcxSZjRoifOFlo28E4gVZTTEISV2BkkXOPJXI 10 | SU6E7qzAgvDm9bBSzaAmddBjC9qP3amvSZRik2ywLUNVEf7GJxxPCMRyzRiKAGHI 11 | hS7nhv8VVLlUYP1v8UvNM2z9qrwWu/Nq+vJqhM0dk/o2JxeXg6DD+I7te9ZnCy9u 12 | h+3ptIeHbThoopuKgnQOCCQjA2333SJB+GiKGVX9fRZV3L7McpBOSR1VumP3/6hL 13 | DMUJdT0CgYEA5UES0DkTHQcKJv3tkNJqCIooVg8Kzp4C/xe57eoe0JzrnmRM8azL 14 | O5ykgExj2iu27u/kS8HLgEJNxJ/kvquFGJD20cXnEmTFhvHuP47V6UPBcPkVFtHh 15 | IpVIyngz1mlHNTHrrWoWYkhcuBP18FTqbTX3u7IUhXZzOwrm3hHKSF8CgYEA1nGq 16 | yPCGj03OBYe2UmVInaYycBmDZD/VIqpXvLMAimE4TPmUJ6WVoKZtSXC7+r3NBaOd 17 | inlSWMgPZWFipxGDo3/y/lfrB7wEEslmXPd4BhXd+49mN/NH/fuOV7CU56eSXKWV 18 | DJMMq+ZmeKyipKajUR+NEGNILHYkpUcCmLhPHccCgYA0Zr9qIOGhjO5hI0GeDLp3 19 | 4Tx/D0klGTEOJdo164HHpVamCb8crqZ1pcRkHxHj2IIj82l3d4CQfJdSDko22vW9 20 | O8VvBZFfvvD3e2090eRLQVWCAS003hxbz0uoG/mdVMsV+acpKEqdhHTNDqL0oDRF 21 | akSJ/pZ6OyzznfZPZDmceQKBgQC6QTvPD2owKanZj8hBxIrPsrx4NRC0D+U1GLLf 22 | yLGdf1eBM/0EeoN9Z0/gy7PZ0uSyEywQS9PEHO+SZIVlCodFiSoq033l193J23e3 23 | I5Hx5yhJCIIF8p4C8WzuqQaMNjWflongxA/rdlBmW7tgOwP6v+ar5y+Wvn6Rtx2A 24 | PAUrnQKBgGxXbN7rik57gXwrKGz98LmTGrEc6vfdqyI5t9pq3sDqWsrIh7wxbgCK 25 | zJJWqHwFnTFPNkj71i+KcHdob6HQI/m8+ouuNg+m2Vy7Z7O6rPP7iqJ6JlQzsuPW 26 | bebeeBKqRk5ZnFYPbVekd7d2O69xT02zMTbMRlqi3YzCv0DVs2ki 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/readme.md: -------------------------------------------------------------------------------- 1 | Valid and invalid certificates using name constraints. From 2 | https://cabforum.org/pipermail/public/2013-July/001839.html. 3 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/rootCA-der.cer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/globalsign_example_keys/rootCA-der.cer -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/rootCA.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIID2zCCAsOgAwIBAgIHATeD1RoXvDANBgkqhkiG9w0BAQUFADBqMQswCQYDVQQG 3 | EwJVUzELMAkGA1UECAwCTUExDzANBgNVBAcMBkJvc3RvbjEUMBIGA1UECgwLRXhh 4 | bXBsZSBMTEMxEDAOBgNVBAsMB1Jvb3QgQ0ExFTATBgNVBAMMDFRlc3QgUm9vdCBD 5 | QTAeFw0xMzA3MTcxNDE4MzZaFw0yMzA3MTkxNDE4MzZaMGoxCzAJBgNVBAYTAlVT 6 | MQswCQYDVQQIDAJNQTEPMA0GA1UEBwwGQm9zdG9uMRQwEgYDVQQKDAtFeGFtcGxl 7 | IExMQzEQMA4GA1UECwwHUm9vdCBDQTEVMBMGA1UEAwwMVGVzdCBSb290IENBMIIB 8 | IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt7Oj0dJlpWQyy6mTH1hfqMSs 9 | V30jqyjPktzbEQ5VnVbEHLQejGHGk7LVwx9UgYrnreV2qFJAMoBguIcXDNZN7tj1 10 | xEFsSaG8DA+44BMUNzJQSjDchnKCcgdbux8InrC9GLgJrbgKuZBRXplrycdsfhkA 11 | 7YlL7DnecKVwMTuNCywDtppHghQhKqBjxcUqgb2tgeF/F6c91PJ53q9AfrK2u5rs 12 | tXALxuqqrf/yKfOyLQP2h3KAhXHf5xfEf/kuW/8SLiieZ1fLv0amp/t/uLjSgfq6 13 | 3BDPeh+OCg0V2txczfJOzlGa4vYWJYij+U6jJG7qEAodKvOONHzXp5CVGmBIcQID 14 | AQABo4GFMIGCMB0GA1UdDgQWBBRkfFzh4GA4TkifBbxVY34/rk33HjAPBgNVHRMB 15 | Af8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjBABgNVHR8EOTA3MDWgM6Axhi9odHRw 16 | Oi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzL3RydXN0cm9vdGNhdGcyLmNybDANBgkq 17 | hkiG9w0BAQUFAAOCAQEAj18a0Ld9HnMKxxMZ4elz00W1LDcx8j5UD13+6C4W/NnP 18 | o+sIoKJnUbzcxe8XVzjcTHt1RHx2niVq1BCLR6kJjEjY2c3QhXDficYB88VnctWd 19 | CW3sTFlcl5WYJcbXwQ0k1DPMyNY0sz3s8QlFrn46l4WGq9YxMaboP4m6ZDkCrNC1 20 | Jq+QJdrKRPSint/Trwq++9PPENBJIrSckWwNGloATWCTgbBPfMxS1VpLciekzEKT 21 | 7Nc8t/akcqJjN2QFRNVj8GgcyPgGAN3RWStFjygI4IBQfH62GAcigDVRaF4+ieN4 22 | KnnYVcdSLlj3MQ3/grcy2h98h1GJD+STvYjB116/PA== 23 | -----END CERTIFICATE----- 24 | -------------------------------------------------------------------------------- /tests/fixtures/globalsign_example_keys/rootCA.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAt7Oj0dJlpWQyy6mTH1hfqMSsV30jqyjPktzbEQ5VnVbEHLQe 3 | jGHGk7LVwx9UgYrnreV2qFJAMoBguIcXDNZN7tj1xEFsSaG8DA+44BMUNzJQSjDc 4 | hnKCcgdbux8InrC9GLgJrbgKuZBRXplrycdsfhkA7YlL7DnecKVwMTuNCywDtppH 5 | ghQhKqBjxcUqgb2tgeF/F6c91PJ53q9AfrK2u5rstXALxuqqrf/yKfOyLQP2h3KA 6 | hXHf5xfEf/kuW/8SLiieZ1fLv0amp/t/uLjSgfq63BDPeh+OCg0V2txczfJOzlGa 7 | 4vYWJYij+U6jJG7qEAodKvOONHzXp5CVGmBIcQIDAQABAoIBABwcjGw2g0GNFMzf 8 | 1VjNoE3mUu1MhCHUK/ewfoGcrPNX7Mjrs2UOLWI60sV6TOdKB2wwGjll5NcVmDeE 9 | zL01KlXrs6hlzplx+6Ho4gTARq6vr2O7GHQmn9mtUJdRB3OpXjajKy//YvzEnf8Z 10 | AUqujua5EtBG22x56pVYa9PM5ieYQPjujwjBg54RRh4Qu8Q6UNAszolbSAX1Gugn 11 | URZgSib4Y/QYNibmD6KZ/ObQt300kWSDejj85Qd/orEaOgU9WIrxqhKwajRJvFsz 12 | HPTicEvhXqYdCkHVf+fJErSYiA2N/NGS+OyPJS8JW7tx0Vmt+snehdIaPhjupVo8 13 | K+2No9UCgYEA8Ma9nbx1i0yWoay9EWXAVilgEyvauBI4D0IAwP2L2vUqNk7++TIm 14 | qOqxjrkoxMCeFIHG3wleCqx/cMvtUCnJL0UT+6Ar7WunAj9UZJAQOxXG5znANy8C 15 | Mn1ySOFV1JJU38siu8UADMuxZV6KMl7hHyzx7bgVMdqVKEfcjN64TNcCgYEAw1ET 16 | rCnSCUfsMcPoBCdLp2H1uatGHllNeZ1dePPA+IlKrkVA8yfkVaznbelI94ig1Ses 17 | og9VdbNd8bc9O2e0Hiykf/OZgVfWQFk/pTQO/0ESc2OHY8OhBvlyr9UekuaJLpiX 18 | inWXCRDFiRGgtZpA3u3IK1k9KLuzmtQWm/wBY/cCgYBHD4C64voWCJ6UTLToQ42G 19 | YGO4hMLifI4LAsHSM4JpNt4kdSAPT9vVEp8grkj3+JkvGDYncU5N/CcIlUcO16ZG 20 | yy5gnx8XzSPXJ/WyUEpaBc1URNkT8E3HtPpbxBVezWk7O2qe3D9th1htwH8s6o+q 21 | cctdC21F72sCHmNbOAhQtQKBgB+ODbuW1hQhxosTt3xUTOix7t0cSqvEibvILL3J 22 | w7djlukozyF5pG4jDRC4y80SCcnmKwHTsF7fp6HRlNbwHi1x0PHLDVXUNw0WXi32 23 | hyW+AZkaz1jS1kUmL90wdUwOasNYa8M21DvmtcM7UdeFIE3j5J78P+FA0feFpFF3 24 | GVJpAoGBAIiCTK+yZKjc+dRgnP2Hr4h5nlSMkQkVRAweGbNUT+YjaWRdolzBsf97 25 | ze3i9Nxj7VfnnZDPGMfHOa1EK11a92lFNLgcbDanG+R018L+Jkxng5Xffigoqn9b 26 | xZQe0aZ7j//i8nOpTYi9Peoeie+wxq9GherAb5AtqublOuGju5s6 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/invalid_email_tag.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDvjCCAqigAwIBAgIEVXFPzTALBgkqhkiG9w0BAQUwgaExCzAJBgNVBAYMAkRFMRMwEQYDVQQIDAp 3 | UaHVlcmluZ2VuMQ8wDQYDVQQHDAZFcmZ1cnQxEjAQBgNVBAoMCUtleXdlYiBBRzEWMBQGA1UECwwNS2 4 | V5SGVscCBQYW5lbDEhMB8GA1UEAwwYa20zNDkyNy0wMS5rZXltYWNoaW5lLmRlMR0wGwYJKoZIhvcNA 5 | QkBDA5pbmZvQGtleXdlYi5kZTAiGA8yMDE1MDYwNTA3MjkxN1oYDzIwMjUwNjA1MDcyOTE3WjCBoTEL 6 | MAkGA1UEBgwCREUxEzARBgNVBAgMClRodWVyaW5nZW4xDzANBgNVBAcMBkVyZnVydDESMBAGA1UECgw 7 | JS2V5d2ViIEFHMRYwFAYDVQQLDA1LZXlIZWxwIFBhbmVsMSEwHwYDVQQDDBhrbTM0OTI3LTAxLmtleW 8 | 1hY2hpbmUuZGUxHTAbBgkqhkiG9w0BCQEMDmluZm9Aa2V5d2ViLmRlMIIBIDALBgkqhkiG9w0BAQEDg 9 | gEPADCCAQoCggEBAK4HS2XPemRfn+wARSP885DfHn05+JDQe6KChNwMlKWwGMnwIwJh1ysyvgcNAYyB 10 | 1uAB3DbAS0qkeVCGr7spQApD8DIk5GpuNmsrWm7s4/auwDiaUxxpj2tDGBGSNeaN36c+f1vKpED3SQd 11 | vTPLeKX0X3mx/yQbylQsfKrydgUr4nlfXa+QZHLHS+FvCDV+h1FzDb5Wdu4lLF0mdudo7rOBQsTVacc 12 | EfvCT79r1NocWL0/J6wpa4/Qs0cbxkTHCwgr9X7YpMBWtTmQl1wr/eN+yf9bx6xzCmRGJMD9Sjp2MUU 13 | TEfrQcLkB6aGWGgFYzHqUggX3kJPMHxw9pQq6Nz7ecCAwEAATALBgkqhkiG9w0BAQUDggEBAGE05k2e 14 | j7uKWTfkc6I0snDD/nqYlECCpkgAtZO0HKasihrICHewlyZt7hTMQVo77gZ3oeH5X1uJGGV5ITrrWDV 15 | HciYDGAeYSKWjYnZ2KtaC4UQN5+UBUkd59YDF+SYN34pqE+5N+UmfQDPOJX7C9v+sWiK9HouVKjNRNH 16 | At0Ncz/Huwh5GOxMJfPaMFD5yJC4HYtj0uh5nTMppm+N/EKU3hXGtERXcRbRep8ovcwz1PpOkp+pnW9 17 | FJFjFfKRYdctzZ57g+GpQef2REUjasYJDXXObu9GDeanluZqINhd/7Qsoeygk5bcbsjOdpNJE/+aGCl 18 | tJBWsWFfkSV1KM4Rg1E= 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /tests/fixtures/keys/readme.md: -------------------------------------------------------------------------------- 1 | Certificates generated by hand with OpenSSL for testing various algorithms 2 | and encodings 3 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-aes128-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-aes128-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-aes128.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-128-CBC,01F6EE04516C912788B11BD7377626C2 4 | 5 | 73aqVra5MCRJyYTjaqnm8d8OTBSdKvs8hTamsyIcHKe+hy8c/A5XaxQy6GZhGqze 6 | gpu1E8sRpvCHI5WpNflnzuiySamR5iC2OEoMtxHi4j9K0xw/jSdWn2H+uj4grPOo 7 | xIyMj8X9jyLHTa9N12Msvevdd6Zp6HCB6v8K9yi89Q6jl8B929sldQEftcHzLALi 8 | iI9QBs2uH47WyRY4PfZC3HHSynfZSE2Q5hm/Si3b7OGx14VZx78fPfVfBlwRGne6 9 | 7ZPQdpQm8HP1FR9XmfotZh6PjkcNEkfi6k8c3LPEcpOsRb0LdlHB3/H2+a6YAKOu 10 | ipA6HpDD3C6f8fq7n6S1pih681iTlVxaUMJkHEmTJPdKdc4tThAQ4V9rutqNIfhv 11 | y/FrmN/1klnulvwyGIbwaPatcrZyvPBbFt5hJYh55sGLzPq7pumaDSd+8jlTRr70 12 | KC/ivwGXxFNRah76S52v/tSVuiBxCc5q5tYE2dKHdrqNZGUjE80PUGQQEunCNjY9 13 | CFq84wDXZ4VZsPGMBQlhZmx/nyC9dQ8UGBwrLgfyFfp/W9j7o4xbAyremfgWVFvs 14 | ChYifyw5BErF0cfbfF1nGmMDH26mLcSLD18/dipzL1vUGLH5mJegPeD7KHScDUpy 15 | 4t/3wddEnbU4w9BUZhI4zqlSiAnxARO4maEFFgsuJNuwYwd7CSfIVQpYQS+2qVSZ 16 | Qp6pYzfmJFJ0CSqOtkK88clb7pKjOCBYHhfdcm84K8v0hhgDviVQ92HG9p7VmwDo 17 | gzNhUFwJ/mSkZQKz/CLy7dGoW0fD3xiseGTlsR658wcJcR7l8qkUBGF3D3hi4t83 18 | fiTCR9j8MBhezgqO6ATSxgN3rqKQUBVphYMgNsVBlSKr2h8TwJAADo8xVGS5TRR4 19 | OrY3TOminoG2Bn0KyavMiwIVQI/6U0Y5OrLDgl666NHVtjWMfK5NXD4pMTPRuLVF 20 | Snnsi1b0fxGMHtXLLA96iLNtyy5H91xqek1vFou2bsN9PW9TTihNMyTLO/BAi3oy 21 | kpRv99swSE6LaEBXKD1HvGJ3pyLarTRQvLE1YilBz8aHVM06Hh/MZIsQ1x6O9lZI 22 | 5mQSeFgcD/SAOrgxIE3tNnPSHHcBiRbUFxgfZQDlo4+WgYZl5WOTBuoqJKb0Zeeh 23 | ubH2I+EGW2kCQo87t4kt7fKEU+k+DfCMoLF+WoEo/s9jU/k5kuCC8iEnITUC8ew8 24 | 9ppGkcEf086WDVI4lG/Q7LNHyIZuzPNVf+ZpVDRYL8I/j6dgq5OWCv2uXFjZCE+q 25 | H664h31DV2TbaSZUsETzvVbzKmvYjzD1QayFrJIKtrgxlWxlw0HmucCm+K+Kbjk7 26 | SeJE21KbKkxl4dxjhrtsxXp9uhL4IgebeXBV88UetkdqvYtDTRHUtyPCnf8VQjJp 27 | DelBSgLahhZuuHcXBBrk5KUKzKMZElsYkS+RdR+P5nESseFtXqJH2kjsAJKGLra5 28 | 3dDeOMPluHKQKHtwYUaO9QpWwAwJu3V2l+Tmo20JyQAZJujDfQ1WECCES+Kb8VIN 29 | khp52v9TVhFKSTSLKNFyt8ytEX4wCR2T56Vv3Gwe9/6e6lDljx3eRgmGFhw1Fa6h 30 | -----END RSA PRIVATE KEY----- 31 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-dsa-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-dsa-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-dsa-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-dsa-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-dsa.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | 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 39 | jtP1bbo4zQ== 40 | -----END CERTIFICATE----- 41 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-dsa.key: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIE1gIBAAKCAYEAxs9NJJSz/AsqFZNtes5PpXWGqaHygvzHcb+Ur1UCqqa+1BIQ 3 | jxAp/5MCxo6CrW8vJv7NwydmNf+fS4mYUfEWTxVBju95Z8b4LjEWmNZSjFtWd2JX 4 | J9sGMowPuLUiMVuDa7ddiULw4ZWKJz4zWKo1smrByP2it8kjJVZW9YMNbeDQn4rA 5 | tCSHYM1l3OfPTjO7FiM7cxBRrPhBIwldATlYvFn0TI2kbqPYcPhL+S2zE8u6xCuA 6 | SuYT3DHRcEztUhTMcSaKVJGn5fzytc8jWMta2Kw1g4qKj4XA0Lf9VPp37xlKCrwY 7 | hB3x9U+Ou7+VDFIsy4JSeBFgnmB1P+7UJnqdxQn/G7skmWM5jL4HivGpxSrI7pBr 8 | cUMHJ7wjw/2y05uHr2zSiCt9IyEXACAg/jlycgLFNvOMvdjDuDlumtHc2ptrxqsP 9 | c5qYzWZYrb57wnLksO7dvNrcv6aCakcS0I24LKKqY8MGDgnpoGEpQjSe10NP5FKx 10 | 0z62xgpfGL8dCwpJAiEAnkVJjX/zoVIpoUK4QYH6qB8plXAfUcRa+CcKV1BpXbsC 11 | ggGAIY19GLDlLFQmkbkjKyQXHa/DXroSGZpzyBj1jK618blAP12y2Btpnh6eLi+1 12 | 7psdGoQChtcnPWTNdlFvnGZtRpn/moGR3CVADKtcf8On82isvu6i1OMrrVXtLgRP 13 | WeeZpfWIlrijf1yvSAOh/uyuAuYLQihQh/XdcLokyxFmzgfj3mG9Df1Gw36qLuPc 14 | v2IlhBtpQLsGBkM2KyhG4RakCRM8PnGzG1+m4PObXgAo2jOhtQj75LQSCZMIzOq8 15 | bhsxjfMBbqE5P8AgUPLd1t91yEvqJExB5G2OhM+OsmDQx/iLSWq5bWWlgPyNN6ZT 16 | Ko8JQCqVK13GqZPsCp8j97E60pokLz1mGtK94i34OPH1ODTv1Skv1g2AiLi/nVcH 17 | DERciN4uBs1cEKphi8zBalQCsNRsQMJ9Jf5WfRpGKAMtoNQ5nxjVy/FeyCEarnc/ 18 | zlb76F235fpUX6WmSVCfc3g6C2v1+CQCkyZdysNGgo9E/6xjlXfgcdJBaziPX4i6 19 | NF1qAoIBgCkqtuFV45W0iPrr+yMROcoZJdgpcKB5Gfm5lCdAeR8TOeLB0x5C57WM 20 | XInwOn+aGYDdmRF/Ul33JiUGxWMaYhKpux8HCsDVV5GQFNblisQOWvX7W5lgDtkV 21 | F+36GpeRMF+AFqV29vUDyokFVhK/hIPLrkuRQD7TaH05zmQWfv9eaAmmu/JBEMD1 22 | z/1EISyryIjXKm6kSNexz5vB2gKr+Qa5+5vLDCoi9G8DPlbF/MbqrpAdiQ1VQ2nX 23 | mtaDaBOeulFFmWrIvbNN3u3THjPVJu0CwEVsHkr8Ka+chfxSaY0+FoUmHkofruNK 24 | lbKvKJTNRKQzdW7q16D2A1x9H5Geo0Ae2FHeJhOKl67dV1biHsaEyrLdymO9BYLB 25 | YpJJK1JBtDNhltf+U6Mzz7cl2R92gKctp2gDPjPHBi1TB8RLQ10obClW2KfdTNYC 26 | UxyIO2w1kx/3lGh9vYTWTbbnDtGYvSO9b7GmDTmtio62035sXw2/i/rrIkW2ujzy 27 | AxN8y2+ZRAIhAJUN+c1g4U0Po+7Wx2LUiiZhEHwwn4c/ItFl1L631UoM 28 | -----END DSA PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-dsa.param: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PARAMETERS----- 2 | MIIDLAKCAYEAxs9NJJSz/AsqFZNtes5PpXWGqaHygvzHcb+Ur1UCqqa+1BIQjxAp 3 | /5MCxo6CrW8vJv7NwydmNf+fS4mYUfEWTxVBju95Z8b4LjEWmNZSjFtWd2JXJ9sG 4 | MowPuLUiMVuDa7ddiULw4ZWKJz4zWKo1smrByP2it8kjJVZW9YMNbeDQn4rAtCSH 5 | YM1l3OfPTjO7FiM7cxBRrPhBIwldATlYvFn0TI2kbqPYcPhL+S2zE8u6xCuASuYT 6 | 3DHRcEztUhTMcSaKVJGn5fzytc8jWMta2Kw1g4qKj4XA0Lf9VPp37xlKCrwYhB3x 7 | 9U+Ou7+VDFIsy4JSeBFgnmB1P+7UJnqdxQn/G7skmWM5jL4HivGpxSrI7pBrcUMH 8 | J7wjw/2y05uHr2zSiCt9IyEXACAg/jlycgLFNvOMvdjDuDlumtHc2ptrxqsPc5qY 9 | zWZYrb57wnLksO7dvNrcv6aCakcS0I24LKKqY8MGDgnpoGEpQjSe10NP5FKx0z62 10 | xgpfGL8dCwpJAiEAnkVJjX/zoVIpoUK4QYH6qB8plXAfUcRa+CcKV1BpXbsCggGA 11 | IY19GLDlLFQmkbkjKyQXHa/DXroSGZpzyBj1jK618blAP12y2Btpnh6eLi+17psd 12 | GoQChtcnPWTNdlFvnGZtRpn/moGR3CVADKtcf8On82isvu6i1OMrrVXtLgRPWeeZ 13 | pfWIlrijf1yvSAOh/uyuAuYLQihQh/XdcLokyxFmzgfj3mG9Df1Gw36qLuPcv2Il 14 | hBtpQLsGBkM2KyhG4RakCRM8PnGzG1+m4PObXgAo2jOhtQj75LQSCZMIzOq8bhsx 15 | jfMBbqE5P8AgUPLd1t91yEvqJExB5G2OhM+OsmDQx/iLSWq5bWWlgPyNN6ZTKo8J 16 | QCqVK13GqZPsCp8j97E60pokLz1mGtK94i34OPH1ODTv1Skv1g2AiLi/nVcHDERc 17 | iN4uBs1cEKphi8zBalQCsNRsQMJ9Jf5WfRpGKAMtoNQ5nxjVy/FeyCEarnc/zlb7 18 | 6F235fpUX6WmSVCfc3g6C2v1+CQCkyZdysNGgo9E/6xjlXfgcdJBaziPX4i6NF1q 19 | -----END DSA PARAMETERS----- 20 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ec-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ec-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-named-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ec-named-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-named-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ec-named-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-named.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICgzCCAimgAwIBAgIJAOWsWhjG4kOgMAoGCCqGSM49BAMCMIGdMQswCQYDVQQG 3 | EwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czEQMA4GA1UEBwwHTmV3YnVyeTEe 4 | MBwGA1UECgwVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLDAdUZXN0aW5n 5 | MRIwEAYDVQQDDAlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhu 6 | cy5pbzAeFw0xNTA2MTcxNTQ5MDNaFw0xNTA3MTcxNTQ5MDNaMIGdMQswCQYDVQQG 7 | EwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czEQMA4GA1UEBwwHTmV3YnVyeTEe 8 | MBwGA1UECgwVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLDAdUZXN0aW5n 9 | MRIwEAYDVQQDDAlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhu 10 | cy5pbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIWbAAvPCfySlPRi3IxJ//es 11 | 1oz5ISNlGbiZKSDFRmQUuGMvuNHLcxV65xlabTQCtU06tWXhO19oKUFGEfqjfvuj 12 | UDBOMB0GA1UdDgQWBBQjje7uR0gq5DVUuP1WaBZf4qrNgTAfBgNVHSMEGDAWgBQj 13 | je7uR0gq5DVUuP1WaBZf4qrNgTAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0gA 14 | MEUCIQDGxGHBYh2VpgzM6GFctdVxwEo8oumb+Mv/2G9YyNH/bgIgVO4qPsVFvE6G 15 | hY9L6tWXKiU4OD8E7GrySzDBRqjhIDU= 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec-named.key: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIIQtgbLFPj1EGIBWhUjb8MKem8OaYkgy1mtqzxacT+n3oAoGCCqGSM49 3 | AwEHoUQDQgAEhZsAC88J/JKU9GLcjEn/96zWjPkhI2UZuJkpIMVGZBS4Yy+40ctz 4 | FXrnGVptNAK1TTq1ZeE7X2gpQUYR+qN++w== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDeDCCAx2gAwIBAgIJANwFLdPfoenEMAoGCCqGSM49BAMCMIGdMQswCQYDVQQG 3 | EwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czEQMA4GA1UEBwwHTmV3YnVyeTEe 4 | MBwGA1UECgwVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLDAdUZXN0aW5n 5 | MRIwEAYDVQQDDAlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhu 6 | cy5pbzAeFw0xNTA1MjAxMjU2NDZaFw0yNTA1MTcxMjU2NDZaMIGdMQswCQYDVQQG 7 | EwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czEQMA4GA1UEBwwHTmV3YnVyeTEe 8 | MBwGA1UECgwVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLDAdUZXN0aW5n 9 | MRIwEAYDVQQDDAlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhu 10 | cy5pbzCCAUswggEDBgcqhkjOPQIBMIH3AgEBMCwGByqGSM49AQECIQD/////AAAA 11 | AQAAAAAAAAAAAAAAAP///////////////zBbBCD/////AAAAAQAAAAAAAAAAAAAA 12 | AP///////////////AQgWsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsD 13 | FQDEnTYIhucEk2pmeOETnSa3gZ9+kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLesz 14 | oPShOUXYmMKWT+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD///// 15 | AAAAAP//////////vOb6racXnoTzucrC/GMlUQIBAQNCAASLXUxx99bGo0ljQlxH 16 | n8tzJB3J3dEt8TqftwTeINBYAJNU9onHL4cr9/k9OzTtnnsOPVdC33gDC8wxxgPX 17 | n2ABo1AwTjAdBgNVHQ4EFgQUVKpUcGw0Gm3rXZfXHvzVJDyKDtcwHwYDVR0jBBgw 18 | FoAUVKpUcGw0Gm3rXZfXHvzVJDyKDtcwDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQD 19 | AgNJADBGAiEA9D5hQQo7QqQNufAlMB4Dq0RWytRShGgp2gu5C6BCSJ0CIQDE6YAV 20 | vKH2xayaPtml3X1TP+BmNORDjILENbGqBPaJ9Q== 21 | -----END CERTIFICATE----- 22 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ec.key: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PARAMETERS----- 2 | MIH3AgEBMCwGByqGSM49AQECIQD/////AAAAAQAAAAAAAAAAAAAAAP////////// 3 | /////zBbBCD/////AAAAAQAAAAAAAAAAAAAAAP///////////////AQgWsY12Ko6 4 | k+ez671VdpiGvGUdBrDMU7D2O848PifSYEsDFQDEnTYIhucEk2pmeOETnSa3gZ9+ 5 | kARBBGsX0fLhLEJH+Lzm5WOkQPJ3A32BLeszoPShOUXYmMKWT+NC4v4af5uO5+tK 6 | fA+eFivOM1drMV7Oy7ZAaDe/UfUCIQD/////AAAAAP//////////vOb6racXnoTz 7 | ucrC/GMlUQIBAQ== 8 | -----END EC PARAMETERS----- 9 | -----BEGIN EC PRIVATE KEY----- 10 | MIIBaAIBAQQg6OWPI5AB6xIvibu6NwIv2Myye+QfQp4+U/mJ0GmFQ12ggfowgfcC 11 | AQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAAAAAAAAAAAAAA//////////////// 12 | MFsEIP////8AAAABAAAAAAAAAAAAAAAA///////////////8BCBaxjXYqjqT57Pr 13 | vVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSdNgiG5wSTamZ44ROdJreBn36QBEEE 14 | axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54W 15 | K84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8 16 | YyVRAgEBoUQDQgAEi11McffWxqNJY0JcR5/LcyQdyd3RLfE6n7cE3iDQWACTVPaJ 17 | xy+HK/f5PTs07Z57Dj1XQt94AwvMMcYD159gAQ== 18 | -----END EC PRIVATE KEY----- 19 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ed25519.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ed25519.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ed25519.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ed25519.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ed448.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ed448.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-ed448.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-ed448.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-inter-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-inter-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-inter.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEBDCCAuygAwIBAgIDGEN5MA0GCSqGSIb3DQEBCwUAMIGdMQswCQYDVQQGEwJV 3 | UzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHTmV3YnVyeTEeMBwG 4 | A1UEChMVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLEwdUZXN0aW5nMRIw 5 | EAYDVQQDEwlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhucy5p 6 | bzAeFw0xNTA1MDkwMDQxMzlaFw0yNTA1MDYwMDQxMzlaMIGYMQswCQYDVQQGEwJV 7 | UzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEeMBwGA1UEChMVQ29kZXggTm9uIFN1 8 | ZmZpY2l0IExDMR0wGwYDVQQLExRUZXN0aW5nIEludGVybWVkaWF0ZTESMBAGA1UE 9 | AxMJV2lsbCBCb25kMR4wHAYJKoZIhvcNAQkBFg93aWxsQGNvZGV4bnMuaW8wggEi 10 | MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/PVOdogtqe2gqXZ20dWB5NFxj 11 | JX6z6A57zGqT11OfiNmckIqxMRK8eToR69/DJmVNbQTJy/cFexZ33db+UrtEItxO 12 | klFFbG/6TjmqsOYF87TkJqGX7zXs/Z7D1Xl0/2CNh6vPPPbi/o1FHtKnk4HYOnyU 13 | LRMxxtt06O/u//wdnWXiSAOKOasLT7eP6Fuok28+BeQ29GB3UNL8oC7biyhv89yN 14 | VhDlHAkk+zfrGP4dNqxOY8SkwI0GYki9skEckwf7Nyz+vA8zVJaIymte/eRicCFF 15 | YFxh+QtQhyxF7DwsB5/XIgEWKRXnd/ivyORMlIVc83CHCM4ryvXgG0+I7WuZAgMB 16 | AAGjUDBOMB0GA1UdDgQWBBTSCv0uJdG3IddQfrukfb8071JeAjAfBgNVHSMEGDAW 17 | gBS+QoU9zP/j+SgCj35YVrT9A1zqSzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB 18 | CwUAA4IBAQAKnbphxDozjob2qobtO5QRfZNwIANr/Pyz6SoD8UnJDfZAg9y1jb/I 19 | OutcURjYfV4vyLKI5oyhepyBMkuwvnB/lRpLERAwv5lJgq4sIGDn5Sp56yYcxazC 20 | QXLyG5YJ2Q29kVuq9//IE/dkLVaP444iJZZ7IgrGN4EFQwvFRVa6toeVpwzp8kkn 21 | 5eQaiKQYt/1dVsQ5mv8ksT/gNJRMD4xJ7xvlats+Jc6cyygJk18h+JqMYDoFTTu6 22 | fJmjtnjPFg+XU0q9GnJfrW+FjxYGMv+5tv0pJrujEq7+8gz5A4viSCzHHoc4O/Qs 23 | 0Jt6dQ/xmGYswxjrR/ZgsSjPx3lib7XC 24 | -----END CERTIFICATE----- 25 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-pkcs8-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-dsa-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-pkcs8-dsa-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-dsa.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIDZQIBADCCAzkGByqGSM44BAEwggMsAoIBgQDGz00klLP8CyoVk216zk+ldYap 3 | ofKC/Mdxv5SvVQKqpr7UEhCPECn/kwLGjoKtby8m/s3DJ2Y1/59LiZhR8RZPFUGO 4 | 73lnxvguMRaY1lKMW1Z3Ylcn2wYyjA+4tSIxW4Nrt12JQvDhlYonPjNYqjWyasHI 5 | /aK3ySMlVlb1gw1t4NCfisC0JIdgzWXc589OM7sWIztzEFGs+EEjCV0BOVi8WfRM 6 | jaRuo9hw+Ev5LbMTy7rEK4BK5hPcMdFwTO1SFMxxJopUkafl/PK1zyNYy1rYrDWD 7 | ioqPhcDQt/1U+nfvGUoKvBiEHfH1T467v5UMUizLglJ4EWCeYHU/7tQmep3FCf8b 8 | uySZYzmMvgeK8anFKsjukGtxQwcnvCPD/bLTm4evbNKIK30jIRcAICD+OXJyAsU2 9 | 84y92MO4OW6a0dzam2vGqw9zmpjNZlitvnvCcuSw7t282ty/poJqRxLQjbgsoqpj 10 | wwYOCemgYSlCNJ7XQ0/kUrHTPrbGCl8Yvx0LCkkCIQCeRUmNf/OhUimhQrhBgfqo 11 | HymVcB9RxFr4JwpXUGlduwKCAYAhjX0YsOUsVCaRuSMrJBcdr8NeuhIZmnPIGPWM 12 | rrXxuUA/XbLYG2meHp4uL7Xumx0ahAKG1yc9ZM12UW+cZm1Gmf+agZHcJUAMq1x/ 13 | w6fzaKy+7qLU4yutVe0uBE9Z55ml9YiWuKN/XK9IA6H+7K4C5gtCKFCH9d1wuiTL 14 | EWbOB+PeYb0N/UbDfqou49y/YiWEG2lAuwYGQzYrKEbhFqQJEzw+cbMbX6bg85te 15 | ACjaM6G1CPvktBIJkwjM6rxuGzGN8wFuoTk/wCBQ8t3W33XIS+okTEHkbY6Ez46y 16 | YNDH+ItJarltZaWA/I03plMqjwlAKpUrXcapk+wKnyP3sTrSmiQvPWYa0r3iLfg4 17 | 8fU4NO/VKS/WDYCIuL+dVwcMRFyI3i4GzVwQqmGLzMFqVAKw1GxAwn0l/lZ9GkYo 18 | Ay2g1DmfGNXL8V7IIRqudz/OVvvoXbfl+lRfpaZJUJ9zeDoLa/X4JAKTJl3Kw0aC 19 | j0T/rGOVd+Bx0kFrOI9fiLo0XWoEIwIhAJUN+c1g4U0Po+7Wx2LUiiZhEHwwn4c/ 20 | ItFl1L631UoM 21 | -----END PRIVATE KEY----- 22 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-ec-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-pkcs8-ec-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-ec-named-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-pkcs8-ec-named-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-ec-named.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghC2BssU+PUQYgFaF 3 | SNvwwp6bw5piSDLWa2rPFpxP6fehRANCAASFmwALzwn8kpT0YtyMSf/3rNaM+SEj 4 | ZRm4mSkgxUZkFLhjL7jRy3MVeucZWm00ArVNOrVl4TtfaClBRhH6o377 5 | -----END PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8-ec.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB 3 | AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA 4 | ///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV 5 | AMSdNgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg 6 | 9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8A 7 | AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQg6OWPI5AB6xIv 8 | ibu6NwIv2Myye+QfQp4+U/mJ0GmFQ12hRANCAASLXUxx99bGo0ljQlxHn8tzJB3J 9 | 3dEt8TqftwTeINBYAJNU9onHL4cr9/k9OzTtnnsOPVdC33gDC8wxxgPXn2AB 10 | -----END PRIVATE KEY----- 11 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-pkcs8.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC9WygHdOLmSiwC 3 | Kr1Q3ngXquxQNn6UucZFnKh22q87w9f/xBv5AkIqya99Np7rIyRcXY4t2lQ0Rj8d 4 | PllsBmo8vpNr2JtLe5kj/25lRgjNOqH7w2VDFldS3eEsiJx67ktUI+MR5Qe/2fpg 5 | FmKQrnZgBSCRILZRw83s6rupCxFTQdZWyx/pTzcrp8FwvRUmFoXpIwMgWn5RQZKE 6 | FfdI137kxuz4dJuAwH2Z+Z+a/2Kb5ihA5D5GltZgLfKnpeG/EZJQIfLfL00n70Lk 7 | 3ssNxhXCnuyspihyGgw8cMJwC3xljWt7e2KFWT/X1a4IZEe9wwQpxyMdtrgx1E5M 8 | AZiHVC9fAgMBAAECggEATw0fSP2jPED63my5XGmD+V2CCnq1naFxBN7B9dyWC31X 9 | T4+vneUzeml4ue1zqvag1263TK05OhmZf7vn2RFUiMeHBB8JthmDdWPN0rnKMuOn 10 | fFO2kqthCVdYCh9+NFQHXrkcsvvKoG1/+V1fCMfM44lAb1YYx0nXTnEwpwHX2cmK 11 | OBjX0SD/2y81CrrDB8MAIoBhe6yjPwCkajNPpvz6jacg1AdoKCZ/mo9uDjgl9ff6 12 | TZ6vtsr6aTty6g4hY4Hki1J/KrgZ1ssz5db8YgaRyVdQ5ZEOaK252gsq2/la29iu 13 | xZ7WLOcciuUjLuAjWL1n5X2YRhv5pk8O2MHgq7L+AQKBgQDtUFKi/g6mHvzKIgjC 14 | YnpP7j611slDaXFXsa6xJWOPvq+ZkBI0nsSClHnCgfUA8TIeCdSShErx8ZQen4vG 15 | azautiK9yNdngNO+ln+pBUkE0nilXJaf6KruAuujbCi2IsMHN4b2ijjoLOfRAI6T 16 | u2h/FJtwSSGQ75S7BzdlKUQ59wKBgQDMRB8dA0XMEeqW89Vt/L34jGcb67fdYQpI 17 | yv7V6T+Fp7jf4Pi+d0FfUM+6FpZRqmxT0aADlghc6EIiufHgxsy9wGfnkJYh/sn5 18 | 0R09pQ4Y35i1htXb1TjmdfR1LhBfEE5VnCepQFEPCm1IVVoscNSs4Li+eRJPqJEe 19 | H84nkC4b2QKBgQCbz5ICLBZIIa5NtJzVq7yswDryPuxz00Y0kpek/WxqE4PNqlcZ 20 | r2hMZ9mtyI+pJ7OFH2UvMabXRYq/tHccNoZ3nWQgAT7UWTQtPTjiK3MutFW8FJdc 21 | tHGNxeMasEfmldpA4cc+FbCZV+p4QgpamsBYN5p61bkxJOwdA/bt93MxLwKBgDgN 22 | eXw8qaqWQAmsX6UO9hJ+dMz0oj/doTTYf5Wzq/rBS7ojwh6CGy5MvrQR/q3qVk+p 23 | 9n8FbMYR9hQRco57/zMS2XBx/MDXahVjjOKdqICq2vz1QzpQCI01UR/WxCdSEizr 24 | 7PZE7/lwowx2X4hSbgoCoK+kCaJSX4Akui2hIwYBAoGBAJxbCxNsycUmsHEdV7Tk 25 | Lxj8N5TUKPtOUoq5hKJ0BK6zQqEm/tuRIgQ3fHdEkUNWuQRbfQAf9v6gwodKOKV5 26 | Y/s0sJPhj939nJuFq+E7OKiXjTwaxk17phVPOT9RK39rhkErUrlGUeZOIVg1e95x 27 | erMeeTvs7MIywm215b+CvUAF 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-dsa-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-dsa-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-dsa.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIExjCCAzkGByqGSM44BAEwggMsAoIBgQDGz00klLP8CyoVk216zk+ldYapofKC 3 | /Mdxv5SvVQKqpr7UEhCPECn/kwLGjoKtby8m/s3DJ2Y1/59LiZhR8RZPFUGO73ln 4 | xvguMRaY1lKMW1Z3Ylcn2wYyjA+4tSIxW4Nrt12JQvDhlYonPjNYqjWyasHI/aK3 5 | ySMlVlb1gw1t4NCfisC0JIdgzWXc589OM7sWIztzEFGs+EEjCV0BOVi8WfRMjaRu 6 | o9hw+Ev5LbMTy7rEK4BK5hPcMdFwTO1SFMxxJopUkafl/PK1zyNYy1rYrDWDioqP 7 | hcDQt/1U+nfvGUoKvBiEHfH1T467v5UMUizLglJ4EWCeYHU/7tQmep3FCf8buySZ 8 | YzmMvgeK8anFKsjukGtxQwcnvCPD/bLTm4evbNKIK30jIRcAICD+OXJyAsU284y9 9 | 2MO4OW6a0dzam2vGqw9zmpjNZlitvnvCcuSw7t282ty/poJqRxLQjbgsoqpjwwYO 10 | CemgYSlCNJ7XQ0/kUrHTPrbGCl8Yvx0LCkkCIQCeRUmNf/OhUimhQrhBgfqoHymV 11 | cB9RxFr4JwpXUGlduwKCAYAhjX0YsOUsVCaRuSMrJBcdr8NeuhIZmnPIGPWMrrXx 12 | uUA/XbLYG2meHp4uL7Xumx0ahAKG1yc9ZM12UW+cZm1Gmf+agZHcJUAMq1x/w6fz 13 | aKy+7qLU4yutVe0uBE9Z55ml9YiWuKN/XK9IA6H+7K4C5gtCKFCH9d1wuiTLEWbO 14 | B+PeYb0N/UbDfqou49y/YiWEG2lAuwYGQzYrKEbhFqQJEzw+cbMbX6bg85teACja 15 | M6G1CPvktBIJkwjM6rxuGzGN8wFuoTk/wCBQ8t3W33XIS+okTEHkbY6Ez46yYNDH 16 | +ItJarltZaWA/I03plMqjwlAKpUrXcapk+wKnyP3sTrSmiQvPWYa0r3iLfg48fU4 17 | NO/VKS/WDYCIuL+dVwcMRFyI3i4GzVwQqmGLzMFqVAKw1GxAwn0l/lZ9GkYoAy2g 18 | 1DmfGNXL8V7IIRqudz/OVvvoXbfl+lRfpaZJUJ9zeDoLa/X4JAKTJl3Kw0aCj0T/ 19 | rGOVd+Bx0kFrOI9fiLo0XWoDggGFAAKCAYApKrbhVeOVtIj66/sjETnKGSXYKXCg 20 | eRn5uZQnQHkfEzniwdMeQue1jFyJ8Dp/mhmA3ZkRf1Jd9yYlBsVjGmISqbsfBwrA 21 | 1VeRkBTW5YrEDlr1+1uZYA7ZFRft+hqXkTBfgBaldvb1A8qJBVYSv4SDy65LkUA+ 22 | 02h9Oc5kFn7/XmgJprvyQRDA9c/9RCEsq8iI1ypupEjXsc+bwdoCq/kGufubywwq 23 | IvRvAz5WxfzG6q6QHYkNVUNp15rWg2gTnrpRRZlqyL2zTd7t0x4z1SbtAsBFbB5K 24 | /CmvnIX8UmmNPhaFJh5KH67jSpWyryiUzUSkM3Vu6teg9gNcfR+RnqNAHthR3iYT 25 | ipeu3VdW4h7GhMqy3cpjvQWCwWKSSStSQbQzYZbX/lOjM8+3JdkfdoCnLadoAz4z 26 | xwYtUwfES0NdKGwpVtin3UzWAlMciDtsNZMf95Rofb2E1k225w7RmL0jvW+xpg05 27 | rYqOttN+bF8Nv4v66yJFtro88gMTfMtvmUQ= 28 | -----END PUBLIC KEY----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-ec-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-ec-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-ec-named-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-ec-named-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-ec-named.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhZsAC88J/JKU9GLcjEn/96zWjPkh 3 | I2UZuJkpIMVGZBS4Yy+40ctzFXrnGVptNAK1TTq1ZeE7X2gpQUYR+qN++w== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-ec.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA 3 | AAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA//// 4 | ///////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSd 5 | NgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5 6 | RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA 7 | //////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABItdTHH31sajSWNCXEefy3Mk 8 | Hcnd0S3xOp+3BN4g0FgAk1T2iccvhyv3+T07NO2eew49V0LfeAMLzDHGA9efYAE= 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-rsa-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-rsa-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-rsa.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PUBLIC KEY----- 2 | MIIBCgKCAQEAvVsoB3Ti5kosAiq9UN54F6rsUDZ+lLnGRZyodtqvO8PX/8Qb+QJC 3 | KsmvfTae6yMkXF2OLdpUNEY/HT5ZbAZqPL6Ta9ibS3uZI/9uZUYIzTqh+8NlQxZX 4 | Ut3hLIiceu5LVCPjEeUHv9n6YBZikK52YAUgkSC2UcPN7Oq7qQsRU0HWVssf6U83 5 | K6fBcL0VJhaF6SMDIFp+UUGShBX3SNd+5Mbs+HSbgMB9mfmfmv9im+YoQOQ+RpbW 6 | YC3yp6XhvxGSUCHy3y9NJ+9C5N7LDcYVwp7srKYochoMPHDCcAt8ZY1re3tihVk/ 7 | 19WuCGRHvcMEKccjHba4MdROTAGYh1QvXwIDAQAB 8 | -----END RSA PUBLIC KEY----- 9 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-rsapss-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-public-rsapss-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public-rsapss.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIDALBgkqhkiG9w0BAQoDggEPADCCAQoCggEBAKEVLWOTtyNDiAZXb8NqFwmB 3 | PWVmm9mDMTNaptwozSd6OQXPJcXzu8zpwCwWdk3QehrWca3nN0qXN6Hq+pEVjD6/ 4 | QQRMxBQwJeHfTuh8Ci4nz8Xw7gMxR2k36kK01pN/6pdW2S4c4a1Zut7g9zbYIH9U 5 | U1jHMPcqP3I6zBrW5WO5n4XoH5ME+xpIlMJLWCd4X8/xSY2IhY0/ssYCnPLvMqGj 6 | Opw6nwurdPH9zwQvzE8K++8OtfmTQDBUyf4w861qiYjCCdBnj7sjCnTWFggKg9Tt 7 | ot5xPF7bStKEyC3N5HXz3Y8H5jBY8rIYqs2WE+wIBM4s7LxqJ5pyxCmE82dJ+fUC 8 | AwEAAQ== 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-public.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvVsoB3Ti5kosAiq9UN54 3 | F6rsUDZ+lLnGRZyodtqvO8PX/8Qb+QJCKsmvfTae6yMkXF2OLdpUNEY/HT5ZbAZq 4 | PL6Ta9ibS3uZI/9uZUYIzTqh+8NlQxZXUt3hLIiceu5LVCPjEeUHv9n6YBZikK52 5 | YAUgkSC2UcPN7Oq7qQsRU0HWVssf6U83K6fBcL0VJhaF6SMDIFp+UUGShBX3SNd+ 6 | 5Mbs+HSbgMB9mfmfmv9im+YoQOQ+RpbWYC3yp6XhvxGSUCHy3y9NJ+9C5N7LDcYV 7 | wp7srKYochoMPHDCcAt8ZY1re3tihVk/19WuCGRHvcMEKccjHba4MdROTAGYh1Qv 8 | XwIDAQAB 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-rc2.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-rc2.p12 -------------------------------------------------------------------------------- /tests/fixtures/keys/test-rsapss-der.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-rsapss-der.key -------------------------------------------------------------------------------- /tests/fixtures/keys/test-rsapss.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDWzCCAhKgAwIBAgIURizKkLO5lJkypU9NL3yhfR8mUY0wPgYJKoZIhvcNAQEK 3 | MDGgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogQC 4 | AgDeMA0xCzAJBgNVBAMMAkNBMB4XDTE5MDkyMTEwMjcyNFoXDTI5MDkxODEwMjcy 5 | NFowDTELMAkGA1UEAwwCQ0EwggEgMAsGCSqGSIb3DQEBCgOCAQ8AMIIBCgKCAQEA 6 | oRUtY5O3I0OIBldvw2oXCYE9ZWab2YMxM1qm3CjNJ3o5Bc8lxfO7zOnALBZ2TdB6 7 | GtZxrec3Spc3oer6kRWMPr9BBEzEFDAl4d9O6HwKLifPxfDuAzFHaTfqQrTWk3/q 8 | l1bZLhzhrVm63uD3Ntggf1RTWMcw9yo/cjrMGtblY7mfhegfkwT7GkiUwktYJ3hf 9 | z/FJjYiFjT+yxgKc8u8yoaM6nDqfC6t08f3PBC/MTwr77w61+ZNAMFTJ/jDzrWqJ 10 | iMIJ0GePuyMKdNYWCAqD1O2i3nE8XttK0oTILc3kdfPdjwfmMFjyshiqzZYT7AgE 11 | zizsvGonmnLEKYTzZ0n59QIDAQABo1MwUTAdBgNVHQ4EFgQUR55Wi9L1KUAfez/M 12 | O/5Z+sDOmn8wHwYDVR0jBBgwFoAUR55Wi9L1KUAfez/MO/5Z+sDOmn8wDwYDVR0T 13 | AQH/BAUwAwEB/zA+BgkqhkiG9w0BAQowMaANMAsGCWCGSAFlAwQCAaEaMBgGCSqG 14 | SIb3DQEBCDALBglghkgBZQMEAgGiBAICAN4DggEBABz2Sub4E5RWr0VVSu/l1gLR 15 | /XmT13AJDqjJ6dyfjMWV8bxVHZAXXBhJk7OMxTkEpHINbcoBEsQdtbQ2lkX7S5fI 16 | 7Oyz+Du1ux5uCVRHVjeqEjVkmxuODxPVu4y57Ix6UDL2zDoqCeQcT3V4kw3SqyJn 17 | znv/1OaQ5+20QbHqWEQtjUYv2VyDBE3QqXylKWy1V5YxJJ8g3yBHQxN/+c7o8mti 18 | leTw6Nw2hyunVUmIE07uUwgbwrhck5DQGWqpmsI9D2HugJH0whlCvHjpQUVPEAkL 19 | aNYaelnJ56t6tnIXZEVrtPh7oOyEZWnnj6q3moR/annXkdox5NbQlGLRQDR3+EA= 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-rsapss.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAoRUtY5O3I0OIBldv 3 | w2oXCYE9ZWab2YMxM1qm3CjNJ3o5Bc8lxfO7zOnALBZ2TdB6GtZxrec3Spc3oer6 4 | kRWMPr9BBEzEFDAl4d9O6HwKLifPxfDuAzFHaTfqQrTWk3/ql1bZLhzhrVm63uD3 5 | Ntggf1RTWMcw9yo/cjrMGtblY7mfhegfkwT7GkiUwktYJ3hfz/FJjYiFjT+yxgKc 6 | 8u8yoaM6nDqfC6t08f3PBC/MTwr77w61+ZNAMFTJ/jDzrWqJiMIJ0GePuyMKdNYW 7 | CAqD1O2i3nE8XttK0oTILc3kdfPdjwfmMFjyshiqzZYT7AgEzizsvGonmnLEKYTz 8 | Z0n59QIDAQABAoIBAQCc76769u1UM/UQiJtgvbmYDwwsAJ4Sepiyub0bfbzym0d2 9 | +2yHwYDUkWAjE/dKtLRh9U9n6H6b81vGKtLYCzBJ6beEYu4d5RLjTtbn9gFNGoh5 10 | BtQ81AQI5Osc9maf6d46d+i73nOYmnVPs8nm6wYuR4+0TMzN4aFSvyofdAKk9qZP 11 | FWY1Vexi4diiChE+HytJ1jtQZIVmTd55oK5HG7tD1seYR7J2F91+KNg3CVC1/y3/ 12 | JhoTDtDeeWtwTnOKafdOqmI4xQu0mZgo0nt/w+PoFGo7pmUv7RWY70qHBO63txCs 13 | c7pX+tn9PERbCcOncAg5yNdC31TKMCSZT6vKz945AoGBAM6TThUqoB5UlrgfPL+1 14 | 6xqMomU4L5OA1M1N3PctiLfe9CmMO/8gh8j0uWsCJp9I6nlg4tIJAYyvd+sa/UzF 15 | Vmf5cyyDEEMuxFYo7UAz7AbcCho4QxSDYvrmp3muFKYRtF/tD69TWrGfq+/QCKXX 16 | 7CUElZDjlScqREhQioFJ/Xe7AoGBAMefdL103NlF15mqGD62ZkkZkoB08TDvxPPK 17 | /A3voqCDwpxYPSDSS7o04EphX4gCB6K90ZgHd53Ihox2osDDgcPht+xTICC4ETEL 18 | EST7KkDIhKVpjDRr5Tej7q1wsMbklvVMkVywZ2WQrfsis/tI4b9N10fI/hdj0iTr 19 | AvD2OYIPAoGBAKhc+pjZwuK1gpnSK8r8U/+xe3IP1wbbS5WAzoVOwU1LE6kBOKz5 20 | MHIiszR57kyIO0JuKq+Q04h8QrqFpsj5VTEs6CfxMkHvTeoDNUrMhqQYlstD67g+ 21 | VV+0ue68aOvpJh/AsLXus85tGs87uLCiST7qe5Q5SIlBM6HUsu4pBcKdAoGAUP+C 22 | ft1MP1z3foJmFAwutLqLl1PcCd9AKyvR2lXBxx+vd4DWTNsHnyaVW5jnCmjIcGBV 23 | Czr8bilPbu80WsL5hGGyH1IbVytYzm2PJ1JCcsbqC7QoD504BLufvQBculdGaYIH 24 | +XQagDuUXLJYFT4dW2JaV+ZWM2dtfU1ehCdkbkECgYAhcAkEP8F5W7uW9hgx/gAg 25 | 9gKA/YleJv0gwP+wxKMBkX1OlRuZViN04LcdiVh1uyqtnSa1EwNZn69OHq0bLTXa 26 | F986zj/zUuj4yFNKxnSq3FDISglMo5Ua6HDHT57Dn5vbUnln+Tiq0En5k/8neOJT 27 | TEIWZO5wFQeL1N0l4Nai0g== 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-third-der.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/keys/test-third-der.crt -------------------------------------------------------------------------------- /tests/fixtures/keys/test-third.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIID+zCCAuOgAwIBAgIFAJOEAykwDQYJKoZIhvcNAQELBQAwgZgxCzAJBgNVBAYT 3 | AlVTMRYwFAYDVQQIEw1NYXNzYWNodXNldHRzMR4wHAYDVQQKExVDb2RleCBOb24g 4 | U3VmZmljaXQgTEMxHTAbBgNVBAsTFFRlc3RpbmcgSW50ZXJtZWRpYXRlMRIwEAYD 5 | VQQDEwlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhucy5pbzAe 6 | Fw0xNTA1MTEyMTQyNTZaFw0yNTA1MDgyMTQyNTZaMIGgMQswCQYDVQQGEwJVUzEW 7 | MBQGA1UECBMNTWFzc2FjaHVzZXR0czEeMBwGA1UEChMVQ29kZXggTm9uIFN1ZmZp 8 | Y2l0IExDMSUwIwYDVQQLExxUZXN0IFRoaXJkLUxldmVsIENlcnRpZmljYXRlMRIw 9 | EAYDVQQDEwlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhucy5p 10 | bzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMAKLNVdAlEUbBeAKfSz 11 | 3Ymd78tt6l2jjEdz4QMqFkYDSbl5pMB0RP+yRKHVSr+gL99F3wAXHoMb81bFVItL 12 | dyx3vK1qK2FhMvmuw8yNUy3o4aIwE/Neobp4eWLWNWwdqmPyNpvc8g8HdVsnk97u 13 | 9ZUGoiHEblvLZ8uijvbxK5hbCkKHjOhHCDT5egtPKOyFqOWJ1WzINICRfEeIjZM0 14 | cuLUWVJmzb9QJ8CmN4O6R1rYK131eIZ6FWlJTpx1n7MvygTOmDiyVE0NMfJFTzdj 15 | a8kQxiwdyqN9I9OfHqRefh8TCQBuAguuwPUyAu9Ve45eDqzfeWrgoyinZ0KXiqrH 16 | 5DUCAwEAAaNCMEAwHQYDVR0OBBYEFEQ44OAmhb+Yhtwb4R31MjC+q6wNMB8GA1Ud 17 | IwQYMBaAFNIK/S4l0bch11B+u6R9vzTvUl4CMA0GCSqGSIb3DQEBCwUAA4IBAQAb 18 | Wq6ueTRDgY5hDAcVn3j5Eaco88rzhhzgfnH4GSES/QOQlOEFbj0/zzAk7LCgcXq3 19 | 7ud/cbA0tuoFmra9Q4D3YEcL0xHiDlXkvzcy2MJ6MysRiQftvHE9o1f8lxWqEfHK 20 | EtL3espMfVE8zisiA7kS07Jm4t7OSBte21JVwqC+dlqYca2T0coJ47Fw/yVvlaQU 21 | O5h6wvHuUS4L0myNdW+/V2yoUex8C9OK3qs8H61ULcgoVnvn/DJJerad53LBfJR3 22 | jmmamq6Pu7COWU07N7MOGkrG8bwal64ncdzwvTtBj9NdoDataw9LvjyAGxYDSY6X 23 | KiqBZoOHm108hjAfW+XC 24 | -----END CERTIFICATE----- 25 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test-validity.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDYjCCAkqgAwIBAgIJAOChyeZ0Qi1CMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV 3 | BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX 4 | aWRnaXRzIFB0eSBMdGQwIBcNMTgwMjIxMTIyNzM5WhgPMjExODAxMjgxMjI3Mzla 5 | MEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJ 6 | bnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw 7 | ggEKAoIBAQCTsr+GpZTdUCIvkIKVfhfV8GGMJaB1ctRaMXT9CqoZVfmogXemavbN 8 | KV8ezn3/Hul7btilksz/9rB8QPgWmBf4n0vUXhQyGWKUnfQr63knhuN13KyspD4o 9 | St8gFzHsZhHlIENLl9fafqSAKW8oqZA6ZeNTR4ZA7ye2IsGvBzwZwa4bxZSVcQ7o 10 | hacNCP9/gNI/UuVIOHhmpBFuIJ9qWYH8NTQrjY0DCgrfhMZjySWqm3BsDjsm2UPJ 11 | z83QzAcSMKGztWbJVzgY5X3Zykk5qfXMYeFJ8ro38Vah8KXEVto9cZinlNSpXmKE 12 | cKTq8hmXf97KgYyEayLOMHA46Kk6kpG7AgMBAAGjUzBRMB0GA1UdDgQWBBTbexgn 13 | 2KU8SP3YucrZS6Z/XOyLFzAfBgNVHSMEGDAWgBTbexgn2KU8SP3YucrZS6Z/XOyL 14 | FzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCFjzXXqtdlUGtF 15 | PKAMmBaQFgjKu98cTrXywcyVMBkw+dm532xuNR6Y2B95pewb1ctoAeLLDFJB5OxB 16 | /yPzEt79y1KCzI2FtU7ecLK0W5AZC80kru1Gmkt5mygTuzZfjj84ayrOfxR2wvkB 17 | rqItoYzc1+VeJWtO0RftoXtJRMBLYaW38NIMRsqdni6YCMa/xL38G7RMDJEgvOvs 18 | 16P57HGVvwRMPKRz26PKWdL7/Ewvjxn3P9NxQI/dkaFye4zwKaxMoDyRIrpt43pV 19 | VSFm1ro2TVFVkE2TTV8SA8NWhZB6n2u6sc0zGwGwH71sx37AYTga+PDBG/+FRGc/ 20 | JbQXTwyP 21 | -----END CERTIFICATE----- 22 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIExzCCA6+gAwIBAgIJAL3l2aQQMVyCMA0GCSqGSIb3DQEBCwUAMIGdMQswCQYD 3 | VQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHTmV3YnVy 4 | eTEeMBwGA1UEChMVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLEwdUZXN0 5 | aW5nMRIwEAYDVQQDEwlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29k 6 | ZXhucy5pbzAeFw0xNTA1MDYxNDM3MTZaFw0yNTA1MDMxNDM3MTZaMIGdMQswCQYD 7 | VQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHTmV3YnVy 8 | eTEeMBwGA1UEChMVQ29kZXggTm9uIFN1ZmZpY2l0IExDMRAwDgYDVQQLEwdUZXN0 9 | aW5nMRIwEAYDVQQDEwlXaWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29k 10 | ZXhucy5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL1bKAd04uZK 11 | LAIqvVDeeBeq7FA2fpS5xkWcqHbarzvD1//EG/kCQirJr302nusjJFxdji3aVDRG 12 | Px0+WWwGajy+k2vYm0t7mSP/bmVGCM06ofvDZUMWV1Ld4SyInHruS1Qj4xHlB7/Z 13 | +mAWYpCudmAFIJEgtlHDzezqu6kLEVNB1lbLH+lPNyunwXC9FSYWhekjAyBaflFB 14 | koQV90jXfuTG7Ph0m4DAfZn5n5r/YpvmKEDkPkaW1mAt8qel4b8RklAh8t8vTSfv 15 | QuTeyw3GFcKe7KymKHIaDDxwwnALfGWNa3t7YoVZP9fVrghkR73DBCnHIx22uDHU 16 | TkwBmIdUL18CAwEAAaOCAQYwggECMB0GA1UdDgQWBBS+QoU9zP/j+SgCj35YVrT9 17 | A1zqSzCB0gYDVR0jBIHKMIHHgBS+QoU9zP/j+SgCj35YVrT9A1zqS6GBo6SBoDCB 18 | nTELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcT 19 | B05ld2J1cnkxHjAcBgNVBAoTFUNvZGV4IE5vbiBTdWZmaWNpdCBMQzEQMA4GA1UE 20 | CxMHVGVzdGluZzESMBAGA1UEAxMJV2lsbCBCb25kMR4wHAYJKoZIhvcNAQkBFg93 21 | aWxsQGNvZGV4bnMuaW+CCQC95dmkEDFcgjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 22 | DQEBCwUAA4IBAQA/5fmvWSMRWqD6JalrNr3Saio5+c/LzxbQ7kZZX1EH5Bo+vhD6 23 | Pfs6lrhzE5OVS86sOItPTtT2KQIE0wTxNfX9wQzjekH4Q2sZRpWaKvK6cH+YzqUK 24 | n3DiICpu8vau4wHDrlfV/C2XhKf5u5qIB+SyOhGDo+XhY0cjgh/FS2//1/qGxrfx 25 | TeOHxoRN5YH4yKNGNapL3XF+utpwVFddmSRUWCBr7Fof9RJlzPCcVP/svTAXDi/y 26 | dhHevPEr21oYqX0KnJJa0JvJx92K8YKFTVj2x5PPCn9qze5C/Re/JFbCIuwq7kcX 27 | 3WQRd+S9zHbtG/4g3DnGibdczSw9529fZZw3 28 | -----END CERTIFICATE----- 29 | -------------------------------------------------------------------------------- /tests/fixtures/keys/test.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAvVsoB3Ti5kosAiq9UN54F6rsUDZ+lLnGRZyodtqvO8PX/8Qb 3 | +QJCKsmvfTae6yMkXF2OLdpUNEY/HT5ZbAZqPL6Ta9ibS3uZI/9uZUYIzTqh+8Nl 4 | QxZXUt3hLIiceu5LVCPjEeUHv9n6YBZikK52YAUgkSC2UcPN7Oq7qQsRU0HWVssf 5 | 6U83K6fBcL0VJhaF6SMDIFp+UUGShBX3SNd+5Mbs+HSbgMB9mfmfmv9im+YoQOQ+ 6 | RpbWYC3yp6XhvxGSUCHy3y9NJ+9C5N7LDcYVwp7srKYochoMPHDCcAt8ZY1re3ti 7 | hVk/19WuCGRHvcMEKccjHba4MdROTAGYh1QvXwIDAQABAoIBAE8NH0j9ozxA+t5s 8 | uVxpg/ldggp6tZ2hcQTewfXclgt9V0+Pr53lM3ppeLntc6r2oNdut0ytOToZmX+7 9 | 59kRVIjHhwQfCbYZg3VjzdK5yjLjp3xTtpKrYQlXWAoffjRUB165HLL7yqBtf/ld 10 | XwjHzOOJQG9WGMdJ105xMKcB19nJijgY19Eg/9svNQq6wwfDACKAYXusoz8ApGoz 11 | T6b8+o2nINQHaCgmf5qPbg44JfX3+k2er7bK+mk7cuoOIWOB5ItSfyq4GdbLM+XW 12 | /GIGkclXUOWRDmitudoLKtv5WtvYrsWe1iznHIrlIy7gI1i9Z+V9mEYb+aZPDtjB 13 | 4Kuy/gECgYEA7VBSov4Oph78yiIIwmJ6T+4+tdbJQ2lxV7GusSVjj76vmZASNJ7E 14 | gpR5woH1APEyHgnUkoRK8fGUHp+Lxms2rrYivcjXZ4DTvpZ/qQVJBNJ4pVyWn+iq 15 | 7gLro2wotiLDBzeG9oo46Czn0QCOk7tofxSbcEkhkO+Uuwc3ZSlEOfcCgYEAzEQf 16 | HQNFzBHqlvPVbfy9+IxnG+u33WEKSMr+1ek/hae43+D4vndBX1DPuhaWUapsU9Gg 17 | A5YIXOhCIrnx4MbMvcBn55CWIf7J+dEdPaUOGN+YtYbV29U45nX0dS4QXxBOVZwn 18 | qUBRDwptSFVaLHDUrOC4vnkST6iRHh/OJ5AuG9kCgYEAm8+SAiwWSCGuTbSc1au8 19 | rMA68j7sc9NGNJKXpP1sahODzapXGa9oTGfZrciPqSezhR9lLzGm10WKv7R3HDaG 20 | d51kIAE+1Fk0LT044itzLrRVvBSXXLRxjcXjGrBH5pXaQOHHPhWwmVfqeEIKWprA 21 | WDeaetW5MSTsHQP27fdzMS8CgYA4DXl8PKmqlkAJrF+lDvYSfnTM9KI/3aE02H+V 22 | s6v6wUu6I8IeghsuTL60Ef6t6lZPqfZ/BWzGEfYUEXKOe/8zEtlwcfzA12oVY4zi 23 | naiAqtr89UM6UAiNNVEf1sQnUhIs6+z2RO/5cKMMdl+IUm4KAqCvpAmiUl+AJLot 24 | oSMGAQKBgQCcWwsTbMnFJrBxHVe05C8Y/DeU1Cj7TlKKuYSidASus0KhJv7bkSIE 25 | N3x3RJFDVrkEW30AH/b+oMKHSjileWP7NLCT4Y/d/ZybhavhOziol408GsZNe6YV 26 | Tzk/USt/a4ZBK1K5RlHmTiFYNXvecXqzHnk77OzCMsJtteW/gr1ABQ== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /tests/fixtures/lets_encrypt/isrgrootx1.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | 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 31 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/lets_encrypt/letsencryptauthorityx1.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFjTCCA3WgAwIBAgIRAOeTkL6SBwNJGF95dYHlyoMwDQYJKoZIhvcNAQELBQAw 3 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 4 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTIwMDIw 5 | WhcNMjAwNjA0MTIwMDIwWjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg 6 | RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDEwggEi 7 | MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrX 8 | NSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf 9 | 89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHl 10 | Npi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7Dc 11 | Gu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgz 12 | uEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMB 13 | AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU 14 | BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB 15 | FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSo 16 | SmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js 17 | LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF 18 | BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG 19 | AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD 20 | VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB 21 | AGvM/XGv8yafGRGMPP6hnggoI9DGWGf4l0mzjBhuCkDVqoG/7rsH1ytzteePxiA3 22 | 7kqSBo0fXu5GmbWOw09GpwPYyAAY0iWOMU6ybrTJHS466Urzoe/4IwLQoQc219EK 23 | lh+4Ugu1q4KxNY1qMDA/1YX2Qm9M6AcAs1UvZKHSpJQAbsYrbN6obNoUGOeG6ONH 24 | Yr8KRQz5FMfZYcA49fmdDTwKn/pyLOkJFeA/dm/oP99UmKCFoeOa5w9YJr2Vi7ic 25 | Xd59CU8mprWhxFXnma1oU3T8ZNovjib3UHocjlEJfNbDy9zgKTYURcMVweo1dkbH 26 | NbLc5mIjIk/kJ+RPD+chR+gJjy3Gh9xMNkDrZQKfsIO93hxTsZMmgZQ4c+vujC1M 27 | jSak+Ai87YZeYQPh1fCGMSTno5III37DUCtIn8BJxJixuPeOMKsjLLD5AtMVy0fp 28 | d19lcUek4bjDY8/Ujb5/wfn2+Kk7z72SxWdekjtHOWBmKxqq8jDuuMw4ymg1g5n7 29 | R7TZ/Y3y4bTpWUDkBHFo03xNM21wBFDIrCZZeVhvDW4MtT6+Ass2bcpoHwYcGol2 30 | gaLDa5k2dkG41OGtXa0fY+TjdryY4cOcstJUKjv2MJku4yaTtjjECX1rJvFLnqYe 31 | wC+FmxjgWPuyRNuLDAWK30mmpcJZ3CmD6dFtAi4h7H37 32 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/lets_encrypt/letsencryptauthorityx2.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFjTCCA3WgAwIBAgIRAJY2TKc4C+SL3JDGzeC33mgwDQYJKoZIhvcNAQELBQAw 3 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 4 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTIwMDMx 5 | WhcNMjAwNjA0MTIwMDMxWjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg 6 | RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDIwggEi 7 | MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhJHRCe7eRMdlz/ziq2M5EXLc5 8 | CtxErg29RbmXN2evvVBPX9MQVGv3QdqOY+ZtW8DoQKmMQfzRA4n/YmEJYNYHBXia 9 | kL0aZD5P3M93L4lry2evQU3FjQDAa/6NhNy18pUxqOj2kKBDSpN0XLM+Q2lLiSJH 10 | dFE+mWTDzSQB+YQvKHcXIqfdw2wITGYvN3TFb5OOsEY3FmHRUJjIsA9PWFN8rPba 11 | LZZhUK1D3AqmT561Urmcju9O30azMdwg/GnCoyB1Puw4GzZOZmbS3/VmpJMve6YO 12 | lD5gPUpLHG+6tE0cPJFYbi9NxNpw2+0BOXbASefpNbUUBpDB5ZLiEP1rubSFAgMB 13 | AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU 14 | BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB 15 | FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBTF 16 | satOTLHNZDCTfsGEmQWr5gPiJTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js 17 | LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF 18 | BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG 19 | AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD 20 | VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB 21 | AA4eqMjSEJKCF6XRR5pEutkS/e7xgy2vCYYbw1ospQiGQ4FO5TtbvO+5K4v7WR3b 22 | 1peMQ03rX0Dr+ylmGNypZahNxTqDiO0X2sHBwJWj/k61+MYq3bRYxKwI6cduTDXb 23 | YQxilGTDNGZUIFKKIloz4zGAl68sj+8pLg534EqKgl8+rWSxclToS1KrydJezokE 24 | dQRXfxu79iscWA3PIj1vbaUBB16lnWJxA3LhTGhUrhZrCnFuOZ93KO8kCKPM7EVo 25 | 7c4FCYKI8eWDsf0FF49A4xMUmxPJAPIyZkwQ8KkjpzcTHOmT4CEXUhNu9eMI9qBK 26 | VSFDDMifJ8HzCaVLyMvY1Kf7iR+840EkX1EGC+Z39EaK1hjm314LYpLoYGvYYLJO 27 | /J76XAx8ZgpofqHz1gAEfiMLMLxLQkOjKLXqoUEd5KdnzaO3aLH91gnasy8aD4D5 28 | 9RfEO2xcaozD2rbYsoAMVzcZZHw0Smdmobaz2YazMBjFRcqGntg6s5Xqwusaleiy 29 | snjMCC/9mvIPqGyuVnBPTBaUDFDEhX6qD2MX4dzODL91Z0ogYDWcFLN+uLnZKHje 30 | 4JoNuzkJ2FXWOREcsW93KXb+3T8COjhTDKvK4H6ufdrZxxusx60ajJAMBzW0XTf5 31 | nm2yGEDtyVoMgJLp0rkiPlormgHxSkFDOJbY94J7yxRK 32 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /tests/fixtures/lets_encrypt/readme.md: -------------------------------------------------------------------------------- 1 | Certificates from https://letsencrypt.org/ 2 | -------------------------------------------------------------------------------- /tests/fixtures/meca2_compressed.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/meca2_compressed.der -------------------------------------------------------------------------------- /tests/fixtures/message.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/message.der -------------------------------------------------------------------------------- /tests/fixtures/message.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CMS----- 2 | MEEGCSqGSIb3DQEHAaA0BDJUaGlzIGlzIHRoZSBtZXNzYWdlIHRvIGVuY2Fwc3Vs 3 | YXRlIGluIFBLQ1MjNy9DTVMNCg== 4 | -----END CMS----- 5 | -------------------------------------------------------------------------------- /tests/fixtures/message.txt: -------------------------------------------------------------------------------- 1 | This is the message to encapsulate in PKCS#7/CMS 2 | -------------------------------------------------------------------------------- /tests/fixtures/mozilla-generated-by-openssl.pkcs7.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/mozilla-generated-by-openssl.pkcs7.der -------------------------------------------------------------------------------- /tests/fixtures/ocsp-with-pkup.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIF9TCCBN2gAwIBAgIEWOfTMzANBgkqhkiG9w0BAQsFADCBoDELMAkGA1UEBhMC 3 | VVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEnMCUGA1UECxMeRGVwYXJ0bWVu 4 | dCBvZiBWZXRlcmFucyBBZmZhaXJzMSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1 5 | dGhvcml0aWVzMSowKAYDVQQLEyFEZXBhcnRtZW50IG9mIFZldGVyYW5zIEFmZmFp 6 | cnMgQ0EwHhcNMTcwOTE4MTUxNzM2WhcNMTgwMTAxMDQxNDIxWjCBvzELMAkGA1UE 7 | BhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEnMCUGA1UECxMeRGVwYXJ0 8 | bWVudCBvZiBWZXRlcmFucyBBZmZhaXJzMSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9u 9 | IEF1dGhvcml0aWVzMSowKAYDVQQLEyFEZXBhcnRtZW50IG9mIFZldGVyYW5zIEFm 10 | ZmFpcnMgQ0ExHTAbBgNVBAMTFE9DU1AgU2lnbmVyIDRlMzk3ZjIyMIIBIjANBgkq 11 | hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvx21ftIpP7KLKtjogcSQ+QfU0hKTL6e6 12 | UXPkudhIjQTEQFmP5bpvMDm6jypS5ws+3ND9prICuqN688hzPedOrQkBMn3+gd93 13 | 3TnF0NIV1klR9HLfnvJd6wWv9otSplMKufCBWS6KRvcimqe2+4/2ksctgaAltkXI 14 | imrw/5QmudC+wIa+nBj7+DWCMqjqp4mAHdlcUzrWn5XrbhvFwSM2smnunjYePKVm 15 | OZrVU9CCOLsF1IWXaZxiceeM7ijD8eAD1jadkXBPEd1e1tlbii0+/zzaK9Q6i6ZO 16 | IYXTqatrJgjVADperqJbqPtdc7CupjhdulyhXZPJj4t+QLgmUIf/rwIDAQABo4IC 17 | FDCCAhAwDgYDVR0PAQH/BAQDAgeAMIHBBgNVHSAEgbkwgbYwDAYKYIZIAWUDAgED 18 | BjAMBgpghkgBZQMCAQMHMAwGCmCGSAFlAwIBAwgwDAYKYIZIAWUDAgEDDTAMBgpg 19 | hkgBZQMCAQMQMAwGCmCGSAFlAwIBAxEwDAYKYIZIAWUDAgEDJDAMBgpghkgBZQMC 20 | AQMnMAwGCmCGSAFlAwIBAygwDAYKYIZIAWUDAgEDKTAMBgpghkgBZQMCAQULMAwG 21 | CmCGSAFlAwIBBQowDAYKYIZIAWUDAgEFDDBDBggrBgEFBQcBAQQ3MDUwMwYIKwYB 22 | BQUHMAKGJ2h0dHA6Ly9wa2kudHJlYXN1cnkuZ292L3ZhY2FfZWVfYWlhLnA3YzAT 23 | BgNVHSUEDDAKBggrBgEFBQcDCTAPBgkrBgEFBQcwAQUEAgUAMDwGA1UdEQQ1MDOC 24 | FE9DU1AgU2lnbmVyIDRlMzk3ZjIygRtwa2lfb3BzQGZpc2NhbC50cmVhc3VyeS5n 25 | b3YwKwYDVR0QBCQwIoAPMjAxNzA5MTgxNTE3MzZagQ8yMDE4MDEwMTA0MTQyMVow 26 | HwYDVR0jBBgwFoAUz3k87U28GSXyRWlOEi+cKVPJp0YwHQYDVR0OBBYEFMIlFB4K 27 | dCvftTaEuessnxmWVjheMAkGA1UdEwQCMAAwGQYJKoZIhvZ9B0EABAwwChsEVjgu 28 | MQMCBDAwDQYJKoZIhvcNAQELBQADggEBAJl4L4BxTEUH1RSBnqluzQYvNNV352QJ 29 | W6kn0XUDPfCM46gLjB+3UxkcYi3wulPnUniPjkDSIODzMVdYTjMccdjeazl2Wlbg 30 | hCe64L8XhwWVBm8pfYxPpBLIlreDco4yEW1GHf46oRtyHvcSSnFnU4hN4WISifDc 31 | d7TuxFe2Hff9mGRRxpuZt9HLwkQHA88YV9GKJqWXM439+KVC6Tl+OVeQv49jhQ6Y 32 | zp/Da19nWb79/TN4avdL9vkGlpCXTKoh6ZlHo9w9VME/aFXUchXC5TShOhR4Lxhn 33 | /VrflrXQobt9qzCao5y1ZoO2QbCDLC21UcOO9dvbAkcN1GCLL0YZBQ4= 34 | -----END CERTIFICATE----- 35 | -------------------------------------------------------------------------------- /tests/fixtures/ocsp_request: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/ocsp_request -------------------------------------------------------------------------------- /tests/fixtures/ocsp_response: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/ocsp_response -------------------------------------------------------------------------------- /tests/fixtures/pkcs7-signed-digested.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/pkcs7-signed-digested.der -------------------------------------------------------------------------------- /tests/fixtures/pkcs7-signed-digested.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PKCS7----- 2 | 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 41 | -----END PKCS7----- 42 | -------------------------------------------------------------------------------- /tests/fixtures/pkcs7-signed.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/pkcs7-signed.der -------------------------------------------------------------------------------- /tests/fixtures/pkcs7-signed.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PKCS7----- 2 | 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 45 | -----END PKCS7----- 46 | -------------------------------------------------------------------------------- /tests/fixtures/rc2_algo.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/rc2_algo.der -------------------------------------------------------------------------------- /tests/fixtures/rc5_algo.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/rc5_algo.der -------------------------------------------------------------------------------- /tests/fixtures/readme.md: -------------------------------------------------------------------------------- 1 | # Fixtures 2 | 3 | Item of note: the files `cms-signed-digested.pem`, `cms-signed-digested.der`, 4 | `pkcs7-signed-digested.pem` and `pkcs7-signed-digested.der` all have invalid 5 | signatures since the structures were hand edited to highlight the one 6 | incompatibility between CMS and PKCS#7. 7 | -------------------------------------------------------------------------------- /tests/fixtures/rfc3739.crt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/rfc3739.crt -------------------------------------------------------------------------------- /tests/fixtures/scrypt_algo.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/scrypt_algo.der -------------------------------------------------------------------------------- /tests/fixtures/self-signed-repeated-subject-fields.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/self-signed-repeated-subject-fields.der -------------------------------------------------------------------------------- /tests/fixtures/sender_dummycorp.com.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN TRUSTED CERTIFICATE----- 2 | MIIFijCCA3ICAQEwDQYJKoZIhvcNAQEFBQAwgYoxCzAJBgNVBAYTAlVTMQswCQYD 3 | VQQIEwJWQTEQMA4GA1UEBxMHSGVybmRvbjEhMB8GA1UEChMYSW50ZXJuZXQgV2lk 4 | Z2l0cyBQdHkgTHRkMRQwEgYDVQQDEwtKb2huIERvZWJveTEjMCEGCSqGSIb3DQEJ 5 | ARYUam9obmRvZWJveUBnbWFpbC5jb20wHhcNMTUxMjA0MTgzMjMxWhcNMTYxMjAz 6 | MTgzMjMxWjCBijELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlZBMRAwDgYDVQQHEwdI 7 | ZXJuZG9uMSEwHwYDVQQKExhJbnRlcm5ldCBHYWRnZXRzIFB0eSBMdGQxFDASBgNV 8 | BAMTC0Zha2UgU2VuZGVyMSMwIQYJKoZIhvcNAQkBFhRzZW5kZXJAZHVtbXljb3Jw 9 | LmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL8ySfdlfwAoUHhX 10 | OLcNxpWDfn0uQ88uY/RDk+XMbS3t+UrGzdDMoe2gk7zjnMRpdHsg705DkEm24B+8 11 | vqideZD2CqWuF6oLnfvwQFaQplDVO4BFmYNNkaLfXO69KUgSa4EBc1FhLfELs8zV 12 | 3YfE1lAtzvCRwedCvFd2IqO4XjJO2u/DSpgt4zZVW6QyR15PMxF56qmqk8YjsBns 13 | 8dzKQRtxsY6KOVfHMjGLnmRrTsf+iaWMOfXEAS267xx9RMrna4P/TYiPOMo4Pvmn 14 | LuJwlWiBDoGsew7QU1HLIUbgiZZ6XptUMVzGloXx/M3HkMoCYmwtQYK7j2JDwoIR 15 | bhHdnuL5+jaZcVAkYBHx5xrMB4zUJcORtFxYJaF9NEHXfF1ompNZwp0Arq3+B3ua 16 | 26dcQoIz+ghVWS9y8cHR7Slsc/e6eJVinrRy86/GMbMUU5cisE/PXFe5pUMyWsAD 17 | L8M+xrtgcXuZEXsutPk2BA2mF78Y79C6mJQ7jIBhO5bbUSd8TtmtX7nJl06SKee9 18 | QmpGhsJd1BYbqRjXlvFG1a27Hghznt46vs18ER/KbIyLKlCZ9OdAoFCflsZgZ5AU 19 | lmSsLzT+V2X/yuAIDhWWMBzpIo8RigkNJ/CfqLtNnHS8Oz10k4oJ38L2uTkuup0i 20 | EgV7gvERJ6dbwjnXJdUP+e58og87AgMBAAEwDQYJKoZIhvcNAQEFBQADggIBAG1T 21 | od75s5B97E4gXm2CpHYZ70by6hM8DE5aK/dJLydB1yqvp68El1GLmKpSu7ua2+WD 22 | R0Cf5K2ibddihWkGLl+ku2LPPpIBEfMuOrEKkSp1pmVpaN72wvTR/u1nJNXfMM2q 23 | 6Txj5O0k3vuPnNiiQVwwVzJRNY/IAa5QJkqgvih+FkWmjf+PTuAj+8Qh8Gk0/YEk 24 | Y2A8V0q3mRBEjYQzKdhKBywxjOBlxBeTse/0xXn/dds8B30C3iEeeYRhDWOPoC99 25 | dbcdkBqANNdpuVG3BcEQarLWKFfK74g+s133PuRIHPCn1TDqcuuhH3PQRhcOd/CO 26 | 9a8/Lx92aye+XkIHr2KQKGyQHS+dh5o+ceRZxuhJAn6R3yNDTaVwk4OGG0zSHcQg 27 | zP/7HX3JmPSFpmEcx/Pd6F0goi02ltL2gX7wKC1J495kHy1D/GWXOxcephGAY/y7 28 | khP4ocxzz7EXk9ArDObEO46+1y+EHw1ilIc9LFedq2MfajtSmXRD92PVbOn6TKCr 29 | 39GZ8QWVz2kB4T7OtfzqEbI6ITOUkuA7b9q3Kszv3lLo5LlWKzkv3P3jBzFBZEMS 30 | ITSPevLCily+YS54/psiZb3aIz+IttVhoaclUaIDpTck67oKHKh8gDSxPm8GjrmL 31 | XBq+WcY1hW02CrrvE4q+KOcZBhVZqr+BDD0nferFMDUwCgYIKwYBBQUHAwSgFAYI 32 | KwYBBQUHAwIGCCsGAQUFBwMBDBFTZWxmIFNpZ25lZCBTTUlNRQ== 33 | -----END TRUSTED CERTIFICATE----- 34 | -------------------------------------------------------------------------------- /tests/fixtures/smime-signature-generated-by-thunderbird.p7s: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/smime-signature-generated-by-thunderbird.p7s -------------------------------------------------------------------------------- /tests/fixtures/test-inter-der.csr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/test-inter-der.csr -------------------------------------------------------------------------------- /tests/fixtures/test-inter.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIC8DCCAdgCAQAwgaoxCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNl 3 | dHRzMRAwDgYDVQQHEwdOZXdidXJ5MR4wHAYDVQQKExVDb2RleCBOb24gU3VmZmlj 4 | aXQgTEMxHTAbBgNVBAsTFFRlc3RpbmcgSW50ZXJtZWRpYXRlMRIwEAYDVQQDEwlX 5 | aWxsIEJvbmQxHjAcBgkqhkiG9w0BCQEWD3dpbGxAY29kZXhucy5pbzCCASIwDQYJ 6 | KoZIhvcNAQEBBQADggEPADCCAQoCggEBAL89U52iC2p7aCpdnbR1YHk0XGMlfrPo 7 | DnvMapPXU5+I2ZyQirExErx5OhHr38MmZU1tBMnL9wV7Fnfd1v5Su0Qi3E6SUUVs 8 | b/pOOaqw5gXztOQmoZfvNez9nsPVeXT/YI2Hq8889uL+jUUe0qeTgdg6fJQtEzHG 9 | 23To7+7//B2dZeJIA4o5qwtPt4/oW6iTbz4F5Db0YHdQ0vygLtuLKG/z3I1WEOUc 10 | CST7N+sY/h02rE5jxKTAjQZiSL2yQRyTB/s3LP68DzNUlojKa1795GJwIUVgXGH5 11 | C1CHLEXsPCwHn9ciARYpFed3+K/I5EyUhVzzcIcIzivK9eAbT4jta5kCAwEAAaAA 12 | MA0GCSqGSIb3DQEBCwUAA4IBAQBMlRtzNp//q2kFXLYaQbWv6q87Z32HMp6Jq814 13 | TP0lz2CYZQ2KXtk+AHc+cKU8XHvVRFfydd15xikWM8z4Sn4LgXLD9UvKswFeTnQV 14 | gHkFC41Cp5H5K5shB0dNtIoKh/Lip7EIH2EyH/6ocgqrymqd2VoO3nIE5ysyzGrW 15 | +BVaZtmXVbyWDhQK10TmPe4GJN22VPzkvlPlqDRQC70IfJoFkZAdd085FT+sq7ny 16 | X7D73jBfYgfd9Z9h0t+vKN5NWWN5OI3IZADkMOYhest7RgZTFX2NBqHbigCJaUk8 17 | f/KDImyMWk+vaDGrkUoOfKKXvdRSUL1mQDgt/FmPq9EdZt4j 18 | -----END CERTIFICATE REQUEST----- 19 | -------------------------------------------------------------------------------- /tests/fixtures/test-third-der.csr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/test-third-der.csr -------------------------------------------------------------------------------- /tests/fixtures/test-third.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIDITCCAgkCAQAwgbIxCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNl 3 | dHRzMRAwDgYDVQQHEwdOZXdidXJ5MR4wHAYDVQQKExVDb2RleCBOb24gU3VmZmlj 4 | aXQgTEMxJTAjBgNVBAsTHFRlc3QgVGhpcmQtTGV2ZWwgQ2VydGlmaWNhdGUxEjAQ 5 | BgNVBAMTCVdpbGwgQm9uZDEeMBwGCSqGSIb3DQEJARYPd2lsbEBjb2RleG5zLmlv 6 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwAos1V0CURRsF4Ap9LPd 7 | iZ3vy23qXaOMR3PhAyoWRgNJuXmkwHRE/7JEodVKv6Av30XfABcegxvzVsVUi0t3 8 | LHe8rWorYWEy+a7DzI1TLejhojAT816hunh5YtY1bB2qY/I2m9zyDwd1WyeT3u71 9 | lQaiIcRuW8tny6KO9vErmFsKQoeM6EcINPl6C08o7IWo5YnVbMg0gJF8R4iNkzRy 10 | 4tRZUmbNv1AnwKY3g7pHWtgrXfV4hnoVaUlOnHWfsy/KBM6YOLJUTQ0x8kVPN2Nr 11 | yRDGLB3Ko30j058epF5+HxMJAG4CC67A9TIC71V7jl4OrN95auCjKKdnQpeKqsfk 12 | NQIDAQABoCkwJwYJKoZIhvcNAQkOMRowGDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF 13 | 4DANBgkqhkiG9w0BAQsFAAOCAQEAdg+HQ3MVFJHnY3Lb+5vSXaYA4F1rXTSZ1jJg 14 | P+TACsuqZ0PaFsg+6OCec78F3yDvntXu3KfUwvshP6PmkIaVjahdLEp0ng9nwtWq 15 | d0DMoUFKeEYhr8T8Z+dbCsZfvUyk8KNMsWuPncCWPQduz5i0g/5vZ9G5na/cmqtJ 16 | GmSY4XLkb3StXJ6sk+uEhlPCuCfL9Dq0r87COTFj4pC7x2+PrDdLu5YJXdTR8mmn 17 | GA44HDNW6XX8t5A5YC5iFnFIgQO2z+B9X2UETajoMxL+HhyE+AopU/n1Wxm1c4oW 18 | 1/q3lvrYLiZ+XX76QbIY/4IgAlry7B1eyxHe732lroEvKgezjA== 19 | -----END CERTIFICATE REQUEST----- 20 | -------------------------------------------------------------------------------- /tests/fixtures/test-tripledes.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/test-tripledes.p12 -------------------------------------------------------------------------------- /tests/fixtures/test-windows-host.csr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/test-windows-host.csr -------------------------------------------------------------------------------- /tests/fixtures/tsp_request: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/tsp_request -------------------------------------------------------------------------------- /tests/fixtures/tsp_response: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/tsp_response -------------------------------------------------------------------------------- /tests/fixtures/universal/object_identifier.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wbond/asn1crypto/b763a757bb2bef2ab63620611ddd8006d5e9e4a2/tests/fixtures/universal/object_identifier.der -------------------------------------------------------------------------------- /tests/readme.md: -------------------------------------------------------------------------------- 1 | # asn1crypto_tests 2 | 3 | Run the test suite via: 4 | 5 | ```bash 6 | python -m asn1crypto_tests 7 | ``` 8 | 9 | Full documentation a . 10 | -------------------------------------------------------------------------------- /tests/setup.py: -------------------------------------------------------------------------------- 1 | import codecs 2 | import os 3 | import shutil 4 | import sys 5 | import warnings 6 | 7 | import setuptools 8 | from setuptools import setup, Command 9 | from setuptools.command.egg_info import egg_info 10 | 11 | 12 | PACKAGE_NAME = 'asn1crypto' 13 | PACKAGE_VERSION = '1.5.1' 14 | TEST_PACKAGE_NAME = '%s_tests' % PACKAGE_NAME 15 | TESTS_ROOT = os.path.dirname(os.path.abspath(__file__)) 16 | 17 | 18 | # setuptools 38.6.0 and newer know about long_description_content_type, but 19 | # distutils still complains about it, so silence the warning 20 | sv = setuptools.__version__ 21 | svi = tuple(int(o) if o.isdigit() else o for o in sv.split('.')) 22 | if svi >= (38, 6): 23 | warnings.filterwarnings( 24 | 'ignore', 25 | "Unknown distribution option: 'long_description_content_type'", 26 | module='distutils.dist' 27 | ) 28 | 29 | 30 | # Older versions of distutils would take a glob pattern and return dirs 31 | # and then would complain that it couldn't copy a dir like a file, so we 32 | # have to build an explicit list of file names 33 | data_files = [] 34 | fixtures_dir = os.path.join(TESTS_ROOT, 'fixtures') 35 | for root, dirs, files in os.walk(fixtures_dir): 36 | for filename in files: 37 | data_files.append(os.path.join(root, filename)[len(TESTS_ROOT) + 1:]) 38 | package_data = { 39 | TEST_PACKAGE_NAME: data_files 40 | } 41 | # This allows us to send the LICENSE when creating a sdist. Wheels 42 | # automatically include the license, and don't need the docs. For these 43 | # to be included, the command must be "python setup.py sdist". 44 | if sys.argv[1:] == ['sdist'] or sorted(sys.argv[1:]) == ['-q', 'sdist']: 45 | package_data[TEST_PACKAGE_NAME].extend([ 46 | 'LICENSE', 47 | 'readme.md', 48 | ]) 49 | 50 | 51 | # Ensures a copy of the LICENSE is included with the egg-info for 52 | # install and bdist_egg commands 53 | class EggInfoCommand(egg_info): 54 | def run(self): 55 | egg_info_path = os.path.join( 56 | TESTS_ROOT, 57 | '%s.egg-info' % TEST_PACKAGE_NAME 58 | ) 59 | if not os.path.exists(egg_info_path): 60 | os.mkdir(egg_info_path) 61 | shutil.copy2( 62 | os.path.join(TESTS_ROOT, 'LICENSE'), 63 | os.path.join(egg_info_path, 'LICENSE') 64 | ) 65 | egg_info.run(self) 66 | 67 | 68 | class CleanCommand(Command): 69 | user_options = [ 70 | ('all', 'a', '(Compatibility with original clean command)'), 71 | ] 72 | 73 | def initialize_options(self): 74 | self.all = False 75 | 76 | def finalize_options(self): 77 | pass 78 | 79 | def run(self): 80 | sub_folders = ['build', 'temp', '%s.egg-info' % TEST_PACKAGE_NAME] 81 | if self.all: 82 | sub_folders.append('dist') 83 | for sub_folder in sub_folders: 84 | full_path = os.path.join(TESTS_ROOT, sub_folder) 85 | if os.path.exists(full_path): 86 | shutil.rmtree(full_path) 87 | for root, dirs, files in os.walk(TESTS_ROOT): 88 | for filename in files: 89 | if filename[-4:] == '.pyc': 90 | os.unlink(os.path.join(root, filename)) 91 | for dirname in list(dirs): 92 | if dirname == '__pycache__': 93 | shutil.rmtree(os.path.join(root, dirname)) 94 | 95 | 96 | readme = '' 97 | with codecs.open(os.path.join(TESTS_ROOT, 'readme.md'), 'r', 'utf-8') as f: 98 | readme = f.read() 99 | 100 | 101 | setup( 102 | name=TEST_PACKAGE_NAME, 103 | version=PACKAGE_VERSION, 104 | 105 | description=( 106 | 'Test suite for asn1crypto, separated due to file size' 107 | ), 108 | long_description=readme, 109 | long_description_content_type='text/markdown', 110 | 111 | url='https://github.com/wbond/asn1crypto', 112 | 113 | author='wbond', 114 | author_email='will@wbond.net', 115 | 116 | license='MIT', 117 | 118 | classifiers=[ 119 | 'Development Status :: 5 - Production/Stable', 120 | 121 | 'Intended Audience :: Developers', 122 | 123 | 'License :: OSI Approved :: MIT License', 124 | 125 | 'Programming Language :: Python', 126 | 'Programming Language :: Python :: 2', 127 | 'Programming Language :: Python :: 2.6', 128 | 'Programming Language :: Python :: 2.7', 129 | 'Programming Language :: Python :: 3', 130 | 'Programming Language :: Python :: 3.2', 131 | 'Programming Language :: Python :: 3.3', 132 | 'Programming Language :: Python :: 3.4', 133 | 'Programming Language :: Python :: 3.5', 134 | 'Programming Language :: Python :: 3.6', 135 | 'Programming Language :: Python :: 3.7', 136 | 'Programming Language :: Python :: 3.8', 137 | 'Programming Language :: Python :: Implementation :: CPython', 138 | 'Programming Language :: Python :: Implementation :: PyPy', 139 | 140 | 'Topic :: Security :: Cryptography', 141 | ], 142 | 143 | keywords='asn1 crypto pki x509 certificate rsa dsa ec dh', 144 | packages=[TEST_PACKAGE_NAME], 145 | package_dir={TEST_PACKAGE_NAME: '.'}, 146 | package_data=package_data, 147 | 148 | install_requires=[ 149 | '%s==%s' % (PACKAGE_NAME, PACKAGE_VERSION), 150 | ], 151 | 152 | cmdclass={ 153 | 'clean': CleanCommand, 154 | 'egg_info': EggInfoCommand, 155 | } 156 | ) 157 | -------------------------------------------------------------------------------- /tests/test_algos.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import unittest 5 | import sys 6 | import os 7 | 8 | from asn1crypto import algos, core 9 | 10 | from .unittest_data import data_decorator, data 11 | from ._unittest_compat import patch 12 | 13 | patch() 14 | 15 | if sys.version_info < (3,): 16 | byte_cls = str 17 | num_cls = long # noqa 18 | else: 19 | byte_cls = bytes 20 | num_cls = int 21 | 22 | 23 | tests_root = os.path.dirname(__file__) 24 | fixtures_dir = os.path.join(tests_root, 'fixtures') 25 | 26 | 27 | @data_decorator 28 | class AlgoTests(unittest.TestCase): 29 | 30 | def test_signed_digest_parameters(self): 31 | sha256_rsa = algos.SignedDigestAlgorithm({'algorithm': 'sha256_rsa'}) 32 | self.assertEqual(core.Null, sha256_rsa['parameters'].__class__) 33 | 34 | def test_digest_parameters(self): 35 | sha1 = algos.DigestAlgorithm({'algorithm': 'sha1'}) 36 | self.assertEqual(core.Null, sha1['parameters'].__class__) 37 | 38 | def test_ccm_parameters(self): 39 | with open(os.path.join(fixtures_dir, 'aesccm_algo.der'), 'rb') as f: 40 | # PBES2 AlgorithmIdentifier 41 | algo = algos.EncryptionAlgorithm().load(f.read()) 42 | scheme = algo['parameters']['encryption_scheme'] 43 | self.assertEqual(scheme['parameters'].__class__, algos.CcmParams) 44 | self.assertEqual(scheme['parameters']['aes_nonce'].__class__, core.OctetString) 45 | self.assertEqual(scheme['parameters']['aes_nonce'].native, b'z\xb7\xbd\xb7\xe1\xc6\xc0\x11\xc1?\xf00') 46 | self.assertEqual(scheme['parameters']['aes_icvlen'].__class__, core.Integer) 47 | self.assertEqual(scheme['parameters']['aes_icvlen'].native, 8) 48 | 49 | def test_scrypt_parameters(self): 50 | with open(os.path.join(fixtures_dir, 'scrypt_algo.der'), 'rb') as f: 51 | # PBES2 AlgorithmIdentifier 52 | algo = algos.EncryptionAlgorithm.load(f.read()) 53 | kdf = algo['parameters']['key_derivation_func'] 54 | self.assertEqual(kdf['parameters'].__class__, algos.ScryptParams) 55 | self.assertEqual(kdf['parameters']['salt'].__class__, core.OctetString) 56 | self.assertEqual(kdf['parameters']['salt'].native, b'c\x0c\x04\xb6\xe2^\xe0v') 57 | self.assertEqual(kdf['parameters']['cost_parameter'].__class__, core.Integer) 58 | self.assertEqual(kdf['parameters']['cost_parameter'].native, 16384) 59 | self.assertEqual(kdf['parameters']['block_size'].__class__, core.Integer) 60 | self.assertEqual(kdf['parameters']['block_size'].native, 8) 61 | self.assertEqual(kdf['parameters']['parallelization_parameter'].__class__, core.Integer) 62 | self.assertEqual(kdf['parameters']['parallelization_parameter'].native, 1) 63 | 64 | def test_rc2_parameters(self): 65 | with open(os.path.join(fixtures_dir, 'rc2_algo.der'), 'rb') as f: 66 | algo = algos.EncryptionAlgorithm.load(f.read()) 67 | self.assertEqual(algo.encryption_block_size, 8) 68 | self.assertEqual(algo.encryption_iv, b'Q\xf1\xde\xc3\xc0l\xe8\xef') 69 | self.assertEqual(algo.encryption_cipher, 'rc2') 70 | self.assertEqual(algo.encryption_mode, 'cbc') 71 | self.assertEqual(algo.key_length, 16) 72 | 73 | def test_rc5_parameters(self): 74 | with open(os.path.join(fixtures_dir, 'rc5_algo.der'), 'rb') as f: 75 | algo = algos.EncryptionAlgorithm.load(f.read()) 76 | self.assertEqual(algo.encryption_block_size, 16) 77 | self.assertEqual(algo.encryption_iv, b'abcd\0\1\2\3') 78 | self.assertEqual(algo.encryption_cipher, 'rc5') 79 | self.assertEqual(algo.encryption_mode, 'cbc') 80 | 81 | params = algo["parameters"] 82 | self.assertEqual(params["version"].native, 'v1-0') 83 | self.assertEqual(params["rounds"].native, 42) 84 | 85 | @staticmethod 86 | def sha3_algo_pairs(): 87 | return [ 88 | ('sha3_224_dsa', 'sha3_224', 'dsa'), 89 | ('sha3_256_dsa', 'sha3_256', 'dsa'), 90 | ('sha3_384_dsa', 'sha3_384', 'dsa'), 91 | ('sha3_512_dsa', 'sha3_512', 'dsa'), 92 | ('sha3_224_ecdsa', 'sha3_224', 'ecdsa'), 93 | ('sha3_256_ecdsa', 'sha3_256', 'ecdsa'), 94 | ('sha3_384_ecdsa', 'sha3_384', 'ecdsa'), 95 | ('sha3_512_ecdsa', 'sha3_512', 'ecdsa'), 96 | ('sha3_224_rsa', 'sha3_224', 'rsa'), 97 | ('sha3_256_rsa', 'sha3_256', 'rsa'), 98 | ('sha3_384_rsa', 'sha3_384', 'rsa'), 99 | ('sha3_512_rsa', 'sha3_512', 'rsa'), 100 | ] 101 | 102 | @data('sha3_algo_pairs', True) 103 | def sha3_algos_round_trip(self, digest_alg, sig_alg): 104 | alg_name = "%s_%s" % (digest_alg, sig_alg) 105 | original = algos.SignedDigestAlgorithm({'algorithm': alg_name}) 106 | parsed = algos.SignedDigestAlgorithm.load(original.dump()) 107 | self.assertEqual(parsed.hash_algo, digest_alg) 108 | self.assertEqual( 109 | parsed.signature_algo, 110 | 'rsassa_pkcs1v15' if sig_alg == 'rsa' else sig_alg 111 | ) 112 | -------------------------------------------------------------------------------- /tests/test_crl.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import unittest 5 | import sys 6 | import os 7 | 8 | from asn1crypto import crl 9 | 10 | from ._unittest_compat import patch 11 | 12 | patch() 13 | 14 | if sys.version_info < (3,): 15 | byte_cls = str 16 | num_cls = long # noqa 17 | else: 18 | byte_cls = bytes 19 | num_cls = int 20 | 21 | 22 | tests_root = os.path.dirname(__file__) 23 | fixtures_dir = os.path.join(tests_root, 'fixtures') 24 | 25 | 26 | class CRLTests(unittest.TestCase): 27 | 28 | def test_parse_crl(self): 29 | with open(os.path.join(fixtures_dir, 'eid2011.crl'), 'rb') as f: 30 | cert_list = crl.CertificateList.load(f.read()) 31 | serial_numbers = [] 32 | for revoked_cert in cert_list['tbs_cert_list']['revoked_certificates']: 33 | serial_numbers.append(revoked_cert['user_certificate'].native) 34 | self.assertEqual( 35 | 15752, 36 | len(serial_numbers) 37 | ) 38 | for serial_number in serial_numbers: 39 | self.assertIsInstance( 40 | serial_number, 41 | num_cls 42 | ) 43 | -------------------------------------------------------------------------------- /tests/test_init.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import ast 5 | import _ast 6 | import unittest 7 | import os 8 | import sys 9 | 10 | import asn1crypto as module 11 | 12 | 13 | # This handles situations where an import is importing a function from a 14 | # dotted path, e.g. "from . import ident", and ident is a function, not a 15 | # submodule 16 | MOD_MAP = { 17 | } 18 | 19 | 20 | def add_mod(mod_name, imports): 21 | """ 22 | Maps pre-defined module.function to module import names 23 | 24 | :param mod_name: 25 | A unicode string of a fully-qualified module name being imported 26 | 27 | :param imports: 28 | A set of unicode strings of the modules that are being imported 29 | """ 30 | 31 | imports.add(MOD_MAP.get(mod_name, mod_name)) 32 | 33 | 34 | def walk_ast(parent_node, modname, imports): 35 | """ 36 | Walks the AST for a module finding any imports and recording them 37 | 38 | :param parent_node: 39 | A node from the _ast module 40 | 41 | :param modname: 42 | A unicode string of the module we are walking the AST of 43 | 44 | :param imports: 45 | A set of unicode strings of the imports that have been found so far 46 | """ 47 | 48 | for node in ast.iter_child_nodes(parent_node): 49 | if isinstance(node, _ast.Import): 50 | if node.names[0].name.startswith(module.__name__): 51 | add_mod(node.names[0].name, imports) 52 | 53 | elif isinstance(node, _ast.ImportFrom): 54 | if node.level > 0: 55 | if modname == module.__name__: 56 | base_mod = module.__name__ 57 | else: 58 | base_mod = '.'.join(modname.split('.')[:-node.level]) 59 | if node.module: 60 | base_mod += '.' + node.module 61 | else: 62 | base_mod = node.module 63 | 64 | if not base_mod.startswith(module.__name__): 65 | continue 66 | 67 | if node.level > 0 and not node.module: 68 | for n in node.names: 69 | add_mod(base_mod + '.' + n.name, imports) 70 | else: 71 | add_mod(base_mod, imports) 72 | 73 | elif isinstance(node, _ast.If): 74 | for subast in node.body: 75 | walk_ast(subast, modname, imports) 76 | for subast in node.orelse: 77 | walk_ast(subast, modname, imports) 78 | 79 | elif sys.version_info >= (3, 3) and isinstance(node, _ast.Try): 80 | for subast in node.body: 81 | walk_ast(subast, modname, imports) 82 | for subast in node.orelse: 83 | walk_ast(subast, modname, imports) 84 | for subast in node.finalbody: 85 | walk_ast(subast, modname, imports) 86 | 87 | elif sys.version_info < (3, 3) and isinstance(node, _ast.TryFinally): 88 | for subast in node.body: 89 | walk_ast(subast, modname, imports) 90 | for subast in node.finalbody: 91 | walk_ast(subast, modname, imports) 92 | 93 | elif sys.version_info < (3, 3) and isinstance(node, _ast.TryExcept): 94 | for subast in node.body: 95 | walk_ast(subast, modname, imports) 96 | for subast in node.orelse: 97 | walk_ast(subast, modname, imports) 98 | 99 | 100 | class InitTests(unittest.TestCase): 101 | 102 | def test_load_order(self): 103 | deps = {} 104 | 105 | mod_root = os.path.abspath(os.path.dirname(module.__file__)) 106 | files = [] 107 | for root, dnames, fnames in os.walk(mod_root): 108 | for f in fnames: 109 | if f.endswith('.py'): 110 | full_path = os.path.join(root, f) 111 | rel_path = full_path.replace(mod_root + os.sep, '') 112 | files.append((full_path, rel_path)) 113 | 114 | for full_path, rel_path in sorted(files): 115 | with open(full_path, 'rb') as f: 116 | full_code = f.read() 117 | if sys.version_info >= (3,): 118 | full_code = full_code.decode('utf-8') 119 | 120 | modname = rel_path.replace('.py', '').replace(os.sep, '.') 121 | if modname == '__init__': 122 | modname = module.__name__ 123 | else: 124 | modname = '%s.%s' % (module.__name__, modname) 125 | 126 | if sys.version_info < (3,) and sys.platform == 'win32' and b'\r\n' in full_code: 127 | full_code = full_code.replace(b'\r\n', b'\n') 128 | 129 | imports = set([]) 130 | module_node = ast.parse(full_code, filename=full_path) 131 | walk_ast(module_node, modname, imports) 132 | 133 | deps[modname] = imports 134 | 135 | load_order = module.load_order() 136 | prev = set([]) 137 | for mod in load_order: 138 | self.assertEqual(True, mod in deps) 139 | self.assertEqual((mod, set([])), (mod, deps[mod] - prev)) 140 | prev.add(mod) 141 | -------------------------------------------------------------------------------- /tests/test_pem.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import unittest 5 | import sys 6 | import os 7 | 8 | from asn1crypto import pem, util 9 | 10 | from .unittest_data import data_decorator, data 11 | from ._unittest_compat import patch 12 | 13 | patch() 14 | 15 | if sys.version_info < (3,): 16 | byte_cls = str 17 | num_cls = long # noqa 18 | else: 19 | byte_cls = bytes 20 | num_cls = int 21 | 22 | 23 | tests_root = os.path.dirname(__file__) 24 | fixtures_dir = os.path.join(tests_root, 'fixtures') 25 | 26 | 27 | @data_decorator 28 | class PEMTests(unittest.TestCase): 29 | 30 | @staticmethod 31 | def detect_files(): 32 | return ( 33 | ( 34 | 'keys/test-der.crt', 35 | False 36 | ), 37 | ( 38 | 'keys/test-inter-der.crt', 39 | False 40 | ), 41 | ( 42 | 'keys/test-third-der.crt', 43 | False 44 | ), 45 | ( 46 | 'keys/test.crt', 47 | True 48 | ), 49 | ( 50 | 'keys/test-inter.crt', 51 | True 52 | ), 53 | ( 54 | 'keys/test-third.crt', 55 | True 56 | ), 57 | ) 58 | 59 | @data('detect_files') 60 | def detect(self, relative_path, is_pem): 61 | with open(os.path.join(fixtures_dir, relative_path), 'rb') as f: 62 | byte_string = f.read() 63 | self.assertEqual(is_pem, pem.detect(byte_string)) 64 | 65 | @staticmethod 66 | def unarmor_armor_files(): 67 | return ( 68 | ( 69 | 'keys/test.crt', 70 | 'keys/test-der.crt', 71 | 'CERTIFICATE', 72 | {} 73 | ), 74 | ( 75 | 'keys/test-inter.crt', 76 | 'keys/test-inter-der.crt', 77 | 'CERTIFICATE', 78 | {} 79 | ), 80 | ( 81 | 'keys/test-third.crt', 82 | 'keys/test-third-der.crt', 83 | 'CERTIFICATE', 84 | {} 85 | ), 86 | ( 87 | 'keys/test-pkcs8.key', 88 | 'keys/test-pkcs8-der.key', 89 | 'PRIVATE KEY', 90 | {} 91 | ), 92 | ( 93 | 'test-third.csr', 94 | 'test-third-der.csr', 95 | 'CERTIFICATE REQUEST', 96 | {} 97 | ), 98 | ( 99 | 'keys/test-aes128.key', 100 | 'keys/test-aes128-der.key', 101 | 'RSA PRIVATE KEY', 102 | util.OrderedDict([ 103 | ('Proc-Type', '4,ENCRYPTED'), 104 | ('DEK-Info', 'AES-128-CBC,01F6EE04516C912788B11BD7377626C2') 105 | ]) 106 | ), 107 | ) 108 | 109 | @data('unarmor_armor_files') 110 | def unarmor(self, relative_path, expected_bytes_filename, expected_type_name, expected_headers): 111 | with open(os.path.join(fixtures_dir, relative_path), 'rb') as f: 112 | byte_string = f.read() 113 | 114 | type_name, headers, decoded_bytes = pem.unarmor(byte_string) 115 | self.assertEqual(expected_type_name, type_name) 116 | self.assertEqual(expected_headers, headers) 117 | with open(os.path.join(fixtures_dir, expected_bytes_filename), 'rb') as f: 118 | expected_bytes = f.read() 119 | self.assertEqual(expected_bytes, decoded_bytes) 120 | 121 | def test_unarmor_multiple(self): 122 | data = self.unarmor_armor_files() 123 | input_data = b'' 124 | der_data = [] 125 | for pem_file, der_file in ((data[0][0], data[0][1]), (data[1][0], data[1][1])): 126 | with open(os.path.join(fixtures_dir, pem_file), 'rb') as f: 127 | input_data += f.read() + b'\n' 128 | with open(os.path.join(fixtures_dir, der_file), 'rb') as f: 129 | der_data.append(f.read()) 130 | i = 0 131 | for name, headers, der_bytes in pem.unarmor(input_data, True): 132 | self.assertEqual('CERTIFICATE', name) 133 | self.assertEqual({}, headers) 134 | self.assertEqual(der_data[i], der_bytes) 135 | i += 1 136 | self.assertEqual(2, i) 137 | 138 | @data('unarmor_armor_files') 139 | def armor(self, expected_bytes_filename, relative_path, type_name, headers): 140 | with open(os.path.join(fixtures_dir, relative_path), 'rb') as f: 141 | byte_string = f.read() 142 | 143 | encoded_bytes = pem.armor(type_name, byte_string, headers=headers) 144 | with open(os.path.join(fixtures_dir, expected_bytes_filename), 'rb') as f: 145 | expected_bytes = f.read() 146 | # In case a user on Windows has CRLF translation on in Git. 147 | # Ran into this with the GitHub Actions Windows environments. 148 | expected_bytes = expected_bytes.replace(b'\r\n', b'\n') 149 | self.assertEqual(expected_bytes, encoded_bytes) 150 | 151 | def test_armor_wrong_type(self): 152 | with self.assertRaisesRegex(TypeError, 'type_name must be a unicode string'): 153 | pem.armor(b'CERTIFICATE', b'') 154 | 155 | def test_armor_wrong_type2(self): 156 | with self.assertRaisesRegex(TypeError, 'der_bytes must be a byte string'): 157 | pem.armor('CERTIFICATE', '') 158 | 159 | def test_detect_wrong_type(self): 160 | with self.assertRaisesRegex(TypeError, 'byte_string must be a byte string'): 161 | pem.detect('CERTIFICATE') 162 | -------------------------------------------------------------------------------- /tests/test_pkcs12.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | from __future__ import unicode_literals, division, absolute_import, print_function 3 | 4 | import unittest 5 | import os 6 | import sys 7 | 8 | from asn1crypto import pkcs12 9 | from ._unittest_compat import patch 10 | 11 | patch() 12 | 13 | if sys.version_info < (3,): 14 | byte_cls = str 15 | else: 16 | byte_cls = bytes 17 | 18 | tests_root = os.path.dirname(__file__) 19 | fixtures_dir = os.path.join(tests_root, 'fixtures') 20 | 21 | 22 | class PKCS12Tests(unittest.TestCase): 23 | 24 | def test_parse_pfx(self): 25 | with open(os.path.join(fixtures_dir, 'test-tripledes.p12'), 'rb') as f: 26 | info = pkcs12.Pfx.load(f.read()) 27 | 28 | self.assertEqual( 29 | 'v3', 30 | info['version'].native 31 | ) 32 | 33 | auth_safe = info['auth_safe'] 34 | 35 | self.assertEqual( 36 | 'data', 37 | auth_safe['content_type'].native 38 | ) 39 | 40 | self.assertEqual( 41 | 2, 42 | len(info.authenticated_safe) 43 | ) 44 | 45 | for i, content_info in enumerate(info.authenticated_safe): 46 | if i == 0: 47 | self.assertEqual( 48 | 'encrypted_data', 49 | content_info['content_type'].native 50 | ) 51 | else: 52 | self.assertEqual( 53 | 'data', 54 | content_info['content_type'].native 55 | ) 56 | safe_contents = pkcs12.SafeContents.load(content_info['content'].native) 57 | self.assertEqual( 58 | 1, 59 | len(safe_contents) 60 | ) 61 | bag_attributes = safe_contents[0]['bag_attributes'] 62 | self.assertEqual( 63 | 2, 64 | len(bag_attributes) 65 | ) 66 | self.assertEqual( 67 | 'local_key_id', 68 | bag_attributes[0]['type'].native 69 | ) 70 | self.assertEqual( 71 | [b'\x95\xd7\xcf\xd7&\x80\x02\x94Q\xc2}X\xee\xd7\x9eiQ\xc0\x10P'], 72 | bag_attributes[0]['values'].native 73 | ) 74 | self.assertEqual( 75 | 'friendly_name', 76 | bag_attributes[1]['type'].native 77 | ) 78 | self.assertEqual( 79 | ['PKCS#12 Test'], 80 | bag_attributes[1]['values'].native 81 | ) 82 | 83 | def test_parse_certbag(self): 84 | '''test to parse the java oid "2.16.840.1.113894.746875.1.1"''' 85 | with open(os.path.join(fixtures_dir, 'certbag.der'), 'rb') as f: 86 | certbag = pkcs12.SafeBag.load(f.read()) 87 | 88 | self.assertEqual( 89 | 2, 90 | len(certbag['bag_attributes']) 91 | ) 92 | 93 | attr_0 = certbag['bag_attributes'][0] 94 | 95 | self.assertEqual( 96 | 'friendly_name', 97 | attr_0['type'].native 98 | ) 99 | 100 | self.assertEqual( 101 | ['testcertificate'], 102 | attr_0['values'].native 103 | ) 104 | 105 | attr_1 = certbag['bag_attributes'][1] 106 | 107 | self.assertEqual( 108 | 'trusted_key_usage', 109 | attr_1['type'].native 110 | ) 111 | 112 | self.assertEqual( 113 | ['any_extended_key_usage'], 114 | attr_1['values'].native 115 | ) 116 | -------------------------------------------------------------------------------- /tests/unittest_data.py: -------------------------------------------------------------------------------- 1 | # Written by Will Bond 2 | # 3 | # The author or authors of this code dedicate any and all copyright interest in 4 | # this code to the public domain. We make this dedication for the benefit of the 5 | # public at large and to the detriment of our heirs and successors. We intend 6 | # this dedication to be an overt act of relinquishment in perpetuity of all 7 | # present and future rights to this code under copyright law. 8 | 9 | 10 | def data(provider_method, first_param_name_suffix=False): 11 | """ 12 | A method decorator for unittest.TestCase classes that configured a 13 | static method to be used to provide multiple sets of test data to a single 14 | test 15 | 16 | :param provider_method: 17 | The name of the staticmethod of the class to use as the data provider 18 | 19 | :param first_param_name_suffix: 20 | If the first parameter for each set should be appended to the method 21 | name to generate the name of the test. Otherwise integers are used. 22 | 23 | :return: 24 | The decorated function 25 | """ 26 | 27 | def test_func_decorator(test_func): 28 | test_func._provider_method = provider_method 29 | test_func._provider_name_suffix = first_param_name_suffix 30 | return test_func 31 | return test_func_decorator 32 | 33 | 34 | def data_decorator(cls): 35 | """ 36 | A class decorator that works with the @provider decorator to generate test 37 | method from a data provider 38 | """ 39 | 40 | def generate_test_func(name, original_function, num, params): 41 | if original_function._provider_name_suffix: 42 | data_name = params[0] 43 | params = params[1:] 44 | else: 45 | data_name = num 46 | expanded_name = 'test_%s_%s' % (name, data_name) 47 | 48 | # We used expanded variable names here since this line is present in 49 | # backtraces that are generated from test failures. 50 | def generated_test_function(self): 51 | original_function(self, *params) 52 | 53 | setattr(cls, expanded_name, generated_test_function) 54 | 55 | for name in dir(cls): 56 | func = getattr(cls, name) 57 | if hasattr(func, '_provider_method'): 58 | num = 1 59 | for params in getattr(cls, func._provider_method)(): 60 | generate_test_func(name, func, num, params) 61 | num += 1 62 | 63 | return cls 64 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py26,py27,py32,py33,py34,py35,py36,py37,py38,py39,py310,py311,py312,pypy 3 | 4 | [testenv] 5 | deps = -rrequires/ci 6 | commands = {envpython} run.py ci 7 | 8 | [pep8] 9 | max-line-length = 120 10 | 11 | [flake8] 12 | max-line-length = 120 13 | jobs = 1 14 | --------------------------------------------------------------------------------