test_util.py
1 """Test utilities. 2 3 .. warning:: This module is not part of the public API. 4 5 """ 6 import os 7 import pkg_resources 8 9 from cryptography.hazmat.backends import default_backend 10 from cryptography.hazmat.primitives import serialization 11 import OpenSSL 12 13 from acme import jose 14 15 16 def vector_path(*names): 17 """Path to a test vector.""" 18 return pkg_resources.resource_filename( 19 __name__, os.path.join('testdata', *names)) 20 21 22 def load_vector(*names): 23 """Load contents of a test vector.""" 24 # luckily, resource_string opens file in binary mode 25 return pkg_resources.resource_string( 26 __name__, os.path.join('testdata', *names)) 27 28 29 def _guess_loader(filename, loader_pem, loader_der): 30 _, ext = os.path.splitext(filename) 31 if ext.lower() == '.pem': 32 return loader_pem 33 elif ext.lower() == '.der': 34 return loader_der 35 else: # pragma: no cover 36 raise ValueError("Loader could not be recognized based on extension") 37 38 39 def load_cert(*names): 40 """Load certificate.""" 41 loader = _guess_loader( 42 names[-1], OpenSSL.crypto.FILETYPE_PEM, OpenSSL.crypto.FILETYPE_ASN1) 43 return jose.ComparableX509(OpenSSL.crypto.load_certificate( 44 loader, load_vector(*names))) 45 46 47 def load_csr(*names): 48 """Load certificate request.""" 49 loader = _guess_loader( 50 names[-1], OpenSSL.crypto.FILETYPE_PEM, OpenSSL.crypto.FILETYPE_ASN1) 51 return jose.ComparableX509(OpenSSL.crypto.load_certificate_request( 52 loader, load_vector(*names))) 53 54 55 def load_rsa_private_key(*names): 56 """Load RSA private key.""" 57 loader = _guess_loader(names[-1], serialization.load_pem_private_key, 58 serialization.load_der_private_key) 59 return jose.ComparableRSAKey(loader( 60 load_vector(*names), password=None, backend=default_backend())) 61 62 63 def load_pyopenssl_private_key(*names): 64 """Load pyOpenSSL private key.""" 65 loader = _guess_loader( 66 names[-1], OpenSSL.crypto.FILETYPE_PEM, OpenSSL.crypto.FILETYPE_ASN1) 67 return OpenSSL.crypto.load_privatekey(loader, load_vector(*names))