Example #1
0
def gen_digital_seal(contract, path_to_cer, path_to_pem, password, partner_id=None, taxpayer_id=None):
    today = timezone.now()
    signed_date = datetime.datetime.strftime(today, '%Y-%m-%dT%H:%M:%S')

    certificate = X509.load_cert(str(path_to_cer), M2Crypto.X509.FORMAT_DER)
    private_key = cryptoRSA.importKey(open(path_to_pem).read())
    der_key = private_key.exportKey("DER")

    results_of_operations = []
    for file_type in ["privacy_notice_file", "service_contract_file"]:
      try:
        document_filled = fill_content_templates(contract=contract, signed_date=signed_date, file_type=file_type, finkok_legal_person=settings.FINKOK_LEGAL_PERSON, finkok_taxpayer_id=settings.FINKOK_TAXPAYER_ID, finkok_address=settings.FINKOK_ADDRESS, finkok_url=settings.FINKOK_URL, finkok_email=settings.FINKOK_MAIL)
        manifiesto = etree.fromstring(document_filled).getroottree()
        xml_signed = XMLDSig.sign(manifiesto.getroot(), certificate, der_key, passphrase=password)
        xml_validity = XMLDSig.verify(xml_signed)
        write_xmls_signed(contract, xml_signed, file_type, partner_id, taxpayer_id)
        if xml_validity and (file_type == "service_contract_file"):
          contract.signed_date = signed_date
          contract.original_string = etree.tostring(xml_signed, pretty_print=True)
          contract.status =  'I'
          contract.save()
        results_of_operations.append(xml_validity)
      except Exception as e:
        print(e)
    return all(results_of_operations)
Example #2
0
def get_text_from_seal(xml_signed):
    manifest = xml_signed.xpath('/documento/contrato')[0].text
    signature = XMLDSig._get_signature_x509_for_rml(xml_signed)
    cert = XMLDSig._get_cer_from_public_key_x509(xml_signed)

    return manifest, signature, cert