37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from pyhanko.sign.signers import SimpleSigner
|
|
from cryptography.hazmat.primitives.serialization import pkcs12
|
|
from pyhanko_certvalidator.registry import SimpleCertificateStore
|
|
from pyhanko.keys import _translate_pyca_cryptography_cert_to_asn1
|
|
from pyhanko.keys import _translate_pyca_cryptography_key_to_asn1
|
|
|
|
|
|
def load_cert(pfx_bytes, passphrase):
|
|
try:
|
|
(
|
|
private_key,
|
|
cert,
|
|
other_certs_pkcs12,
|
|
) = pkcs12.load_key_and_certificates(pfx_bytes, passphrase)
|
|
except (IOError, ValueError, TypeError) as e:
|
|
# logger.error(
|
|
# 'Could not load key material from PKCS#12 file', exc_info=e
|
|
# )
|
|
return None
|
|
|
|
kinfo = _translate_pyca_cryptography_key_to_asn1(private_key)
|
|
cert = _translate_pyca_cryptography_cert_to_asn1(cert)
|
|
other_certs_pkcs12 = set(
|
|
map(_translate_pyca_cryptography_cert_to_asn1, other_certs_pkcs12)
|
|
)
|
|
|
|
cs = SimpleCertificateStore()
|
|
certs_to_register = set(other_certs_pkcs12)
|
|
cs.register_multiple(certs_to_register)
|
|
return SimpleSigner(
|
|
signing_key=kinfo,
|
|
signing_cert=cert,
|
|
cert_registry=cs,
|
|
signature_mechanism=None,
|
|
prefer_pss=False,
|
|
)
|