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,
    )