Exemplo n.º 1
0
    def test_create_2(self):
        root = parse_xml('data/free-sample.xml')
        signature = xmlsig.template.create(
            xmlsig.constants.TransformInclC14N,
            xmlsig.constants.TransformRsaSha1,
            "Signature"
        )
        ref = xmlsig.template.add_reference(
            signature, xmlsig.constants.TransformSha1, uri="", name="R1"
        )
        xmlsig.template.add_transform(ref, xmlsig.constants.TransformEnveloped)
        xmlsig.template.add_reference(
            signature, xmlsig.constants.TransformSha1, uri="#KI", name="RKI"
        )
        ki = xmlsig.template.ensure_key_info(signature, name='KI')
        data = xmlsig.template.add_x509_data(ki)
        xmlsig.template.x509_data_add_certificate(data)
        serial = xmlsig.template.x509_data_add_issuer_serial(data)
        xmlsig.template.x509_issuer_serial_add_issuer_name(serial)
        xmlsig.template.x509_issuer_serial_add_serial_number(serial)
        xmlsig.template.add_key_value(ki)
        qualifying = template.create_qualifying_properties(signature)
        utils.ensure_id(qualifying)
        utils.ensure_id(qualifying)
        props = template.create_signed_properties(
            qualifying, datetime=datetime.now()
        )
        template.add_claimed_role(props, "Supp")
        signed_do = template.ensure_signed_data_object_properties(props)
        template.add_data_object_format(
            signed_do,
            "#R1",
            identifier=ObjectIdentifier("Idenfitier0", "Description")
        )
        template.add_commitment_type_indication(
            signed_do,
            ObjectIdentifier("Idenfitier0", "Description"),
            qualifiers_type=["Tipo"]
        )

        template.add_commitment_type_indication(
            signed_do,
            ObjectIdentifier("Idenfitier1", references=["#R1"]),
            references=["#R1"]
        )
        template.add_data_object_format(
            signed_do,
            "#RKI",
            description="Desc",
            mime_type="application/xml",
            encoding='UTF-8'
        )
        root.append(signature)
        ctx = XAdESContext(ImpliedPolicy(xmlsig.constants.TransformSha1))
        with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
            ctx.load_pkcs12(crypto.load_pkcs12(key_file.read()))
        with patch('xades.policy.urllib.urlopen') as mock:
            mock.return_value = UrllibMock()
            ctx.sign(signature)
            ctx.verify(signature)
Exemplo n.º 2
0
 def test_create(self):
     root = parse_xml("data/free-sample.xml")
     signature = xmlsig.template.create(
         xmlsig.constants.TransformInclC14N,
         xmlsig.constants.TransformRsaSha1,
         "Signature",
     )
     signature_id = utils.get_unique_id()
     ref = xmlsig.template.add_reference(signature,
                                         xmlsig.constants.TransformSha1,
                                         uri="",
                                         name="REF")
     xmlsig.template.add_transform(ref, xmlsig.constants.TransformEnveloped)
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#KI")
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#" + signature_id)
     ki = xmlsig.template.ensure_key_info(signature, name="KI")
     data = xmlsig.template.add_x509_data(ki)
     xmlsig.template.x509_data_add_certificate(data)
     serial = xmlsig.template.x509_data_add_issuer_serial(data)
     xmlsig.template.x509_issuer_serial_add_issuer_name(serial)
     xmlsig.template.x509_issuer_serial_add_serial_number(serial)
     xmlsig.template.add_key_value(ki)
     qualifying = template.create_qualifying_properties(
         signature, name=utils.get_unique_id())
     props = template.create_signed_properties(qualifying,
                                               name=signature_id)
     template.add_claimed_role(props, "Supp2")
     template.add_production_place(props, city="Madrid")
     template.add_production_place(props,
                                   state="BCN",
                                   postal_code="08000",
                                   country="ES")
     template.add_claimed_role(props, "Supp")
     policy = GenericPolicyId(
         "http://www.facturae.es/politica_de_firma_formato_facturae/"
         "politica_de_firma_formato_facturae_v3_1.pdf",
         u"Politica de Firma FacturaE v3.1",
         xmlsig.constants.TransformSha1,
     )
     root.append(signature)
     with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
         certificate = crypto.load_pkcs12(key_file.read())
     with open(path.join(BASE_DIR, "data/keyStore2.p12"), "rb") as key_file:
         certificate2 = crypto.load_pkcs12(key_file.read())
     ctx = XAdESContext(
         policy,
         [
             certificate2.get_certificate().to_cryptography(),
             certificate.get_certificate().to_cryptography(),
         ],
     )
     ctx.load_pkcs12(certificate)
     with patch("xades.policy.urllib.urlopen") as mock:
         mock.return_value = UrllibMock()
         ctx.sign(signature)
         ctx.verify(signature)
Exemplo n.º 3
0
 def test_verify(self):
     root = parse_xml("data/sample.xml")
     sign = root.xpath("//ds:Signature",
                       namespaces={"ds": xmlsig.constants.DSigNs})[0]
     ctx = XAdESContext()
     with patch("xades.policy.urllib.urlopen") as mock:
         mock.return_value = UrllibMock()
         ctx.verify(sign)
Exemplo n.º 4
0
 def test_sign(self):
     root = parse_xml('data/unsigned-sample.xml')
     sign = root.xpath('//ds:Signature',
                       namespaces={'ds': xmlsig.constants.DSigNs})[0]
     policy = GenericPolicyId(
         'http://www.facturae.es/politica_de_firma_formato_facturae/'
         'politica_de_firma_formato_facturae_v3_1.pdf',
         u"Politica de Firma FacturaE v3.1", xmlsig.constants.TransformSha1)
     ctx = XAdESContext(policy)
     with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
         ctx.load_pkcs12(crypto.load_pkcs12(key_file.read()))
     ctx.sign(sign)
     ctx.verify(sign)
Exemplo n.º 5
0
 def test_sign(self):
     root = parse_xml("data/unsigned-sample.xml")
     sign = root.xpath("//ds:Signature",
                       namespaces={"ds": xmlsig.constants.DSigNs})[0]
     policy = GenericPolicyId(
         "http://www.facturae.es/politica_de_firma_formato_facturae/"
         "politica_de_firma_formato_facturae_v3_1.pdf",
         u"Politica de Firma FacturaE v3.1",
         xmlsig.constants.TransformSha1,
     )
     ctx = XAdESContext(policy)
     with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
         ctx.load_pkcs12(crypto.load_pkcs12(key_file.read()))
     with patch("xades.policy.urllib.urlopen") as mock:
         mock.return_value = UrllibMock()
         ctx.sign(sign)
         ctx.verify(sign)
Exemplo n.º 6
0
 def test_create(self):
     root = parse_xml('data/free-sample.xml')
     signature = xmlsig.template.create(xmlsig.constants.TransformInclC14N,
                                        xmlsig.constants.TransformRsaSha1,
                                        "Signature")
     signature_id = utils.get_unique_id()
     ref = xmlsig.template.add_reference(signature,
                                         xmlsig.constants.TransformSha1,
                                         uri="",
                                         name="REF")
     xmlsig.template.add_transform(ref, xmlsig.constants.TransformEnveloped)
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#KI")
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#" + signature_id)
     ki = xmlsig.template.ensure_key_info(signature, name='KI')
     data = xmlsig.template.add_x509_data(ki)
     xmlsig.template.x509_data_add_certificate(data)
     serial = xmlsig.template.x509_data_add_issuer_serial(data)
     xmlsig.template.x509_issuer_serial_add_issuer_name(serial)
     xmlsig.template.x509_issuer_serial_add_serial_number(serial)
     xmlsig.template.add_key_value(ki)
     qualifying = template.create_qualifying_properties(
         signature, name=utils.get_unique_id())
     props = template.create_signed_properties(qualifying,
                                               name=signature_id)
     template.add_claimed_role(props, "Supp2")
     template.add_production_place(props, city='Madrid')
     template.add_production_place(props,
                                   state='BCN',
                                   postal_code='08000',
                                   country='ES')
     template.add_claimed_role(props, "Supp")
     policy = GenericPolicyId(
         'http://www.facturae.es/politica_de_firma_formato_facturae/'
         'politica_de_firma_formato_facturae_v3_1.pdf',
         u"Politica de Firma FacturaE v3.1", xmlsig.constants.TransformSha1)
     root.append(signature)
     ctx = XAdESContext(policy)
     with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
         ctx.load_pkcs12(crypto.load_pkcs12(key_file.read()))
     ctx.sign(signature)
     ctx.verify(signature)
Exemplo n.º 7
0
 def test_create(self):
     root = parse_xml('data/free-sample.xml')
     signature = xmlsig.template.create(xmlsig.constants.TransformInclC14N,
                                        xmlsig.constants.TransformRsaSha1,
                                        "Signature")
     ref = xmlsig.template.add_reference(signature,
                                         xmlsig.constants.TransformSha1,
                                         uri="")
     xmlsig.template.add_transform(ref, xmlsig.constants.TransformEnveloped)
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#KI")
     xmlsig.template.add_reference(signature,
                                   xmlsig.constants.TransformSha1,
                                   uri="#SIGN")
     ki = xmlsig.template.ensure_key_info(signature, name='KI')
     data = xmlsig.template.add_x509_data(ki)
     xmlsig.template.x509_data_add_certificate(data)
     xmlsig.template.add_key_value(ki)
     qualifying = template.create_qualifying_properties(signature)
     props = template.create_signed_properties(qualifying, name="SIGN")
     template.add_claimed_role(props, "Supp2")
     template.add_production_place(props, 'Madrid')
     template.add_production_place(props, 'BCN', 'BCN', '08000', 'ES')
     template.add_claimed_role(props, "Supp")
     policy = PolicyId()
     policy.id = 'http://www.facturae.es/politica_de_firma_formato_' \
                 'facturae/politica_de_firma_formato_facturae_v3_1.pdf'
     policy.name = u"Politica de Firma FacturaE v3.1"
     policy.hash_method = xmlsig.constants.TransformSha1
     root.append(signature)
     ctx = XAdESContext(policy)
     with open(path.join(BASE_DIR, "data/keyStore.p12"), "rb") as key_file:
         ctx.load_pkcs12(crypto.load_pkcs12(key_file.read()))
     ctx.sign(signature)
     ctx.verify(signature)
Exemplo n.º 8
0
 def test_verify(self):
     root = parse_xml('data/sample.xml')
     sign = root.xpath('//ds:Signature',
                       namespaces={'ds': xmlsig.constants.DSigNs})[0]
     ctx = XAdESContext()
     ctx.verify(sign)
Exemplo n.º 9
0
    def action_sign(self, xml_string_data):
        def new_range():
            return randrange(100000, 999999)

        filecontent = base64.b64decode(self.file_content)
        try:
            private_key = crypto.load_privatekey(
                crypto.FILETYPE_PEM, self.private_key.encode("ascii"),
                self.password.encode())
            p12 = crypto.load_pkcs12(filecontent, self.password)
        except Exception as ex:
            _logger.warning(tools.ustr(ex))
            raise UserError(
                _("Error opening the signature, possibly the signature key has been entered incorrectly or the file "
                  "is not supported. \n%s ") % (tools.ustr(ex)))
        data = open(xml_string_data.name, 'rb')
        xslt_content = data.read()
        doc = etree.fromstring(xslt_content)
        signature_id = f"Signature{new_range()}"
        signature_property_id = f"{signature_id}-SignedPropertiesID{new_range()}"
        certificate_id = f"Certificate{new_range()}"
        reference_uri = f"Reference-ID-{new_range()}"
        signature = xmlsig.template.create(
            xmlsig.constants.TransformInclC14N,
            xmlsig.constants.TransformRsaSha1,
            signature_id,
        )
        xmlsig.template.add_reference(
            signature,
            xmlsig.constants.TransformSha1,
            name=f"SignedPropertiesID{new_range()}",
            uri=f"#{signature_property_id}",
            uri_type="http://uri.etsi.org/01903#SignedProperties",
        )
        xmlsig.template.add_reference(signature,
                                      xmlsig.constants.TransformSha1,
                                      uri=f"#{certificate_id}")
        ref = xmlsig.template.add_reference(signature,
                                            xmlsig.constants.TransformSha1,
                                            name=reference_uri,
                                            uri="#comprobante")
        xmlsig.template.add_transform(ref, xmlsig.constants.TransformEnveloped)
        ki = xmlsig.template.ensure_key_info(signature, name=certificate_id)
        data = xmlsig.template.add_x509_data(ki)
        xmlsig.template.x509_data_add_certificate(data)
        xmlsig.template.add_key_value(ki)
        qualifying = template.create_qualifying_properties(signature,
                                                           name=signature_id)
        props = template.create_signed_properties(qualifying,
                                                  name=signature_property_id)
        signed_do = template.ensure_signed_data_object_properties(props)
        template.add_data_object_format(
            signed_do,
            f"#{reference_uri}",
            description="contenido comprobante",
            mime_type="text/xml",
        )
        doc.append(signature)
        x509 = self._extract_x509(p12)
        if x509 is not None:
            p12.set_certificate(x509)
            p12.set_privatekey(private_key)
        ctx = XAdESContext(ImpliedPolicy(xmlsig.constants.TransformSha1))
        ctx.load_pkcs12(p12)
        ctx.sign(signature)
        ctx.verify(signature)
        return etree.tostring(doc, encoding="UTF-8",
                              pretty_print=True).decode()