U
    +”}f  ã                   @   sD   d dl m Z  d dlZdZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )é    )ÚdatetimeNz\xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#"c                 C   s.   |   dd¡} t dd| ¡  dd¡  dd¡} | S )	NÚ
Ú z +ú z> ú>z <ú<)ÚreplaceÚreÚsub)Zcad© r   ú</tmp/pip-unpacked-wheel-ut9z9pyt/xades_bes_sri_ec/cadenas.pyÚformat_xml_string   s    r   c              	   C   s6   d}t  ¡  d¡}|| ||||||dœ }t|ƒ}|S )NaÔ  
    <etsi:SignedProperties Id="Signature%(signature_number)s-SignedProperties%(signed_properties_number)s">
        <etsi:SignedSignatureProperties>
            <etsi:SigningTime>
                %(fecha_hora)s
            </etsi:SigningTime>
            <etsi:SigningCertificate>
                <etsi:Cert>
                    <etsi:CertDigest>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                        <ds:DigestValue>
                        %(certificateX509_der_hash)s
                        </ds:DigestValue>
                    </etsi:CertDigest>
                    <etsi:IssuerSerial>
                        <ds:X509IssuerName>
                            %(issuer_name)s
                        </ds:X509IssuerName>
                        <ds:X509SerialNumber>
                            %(X509SerialNumber)s
                        </ds:X509SerialNumber>
                    </etsi:IssuerSerial>
                </etsi:Cert>
            </etsi:SigningCertificate>
        </etsi:SignedSignatureProperties>
    <etsi:SignedDataObjectProperties>
        <etsi:DataObjectFormat ObjectReference="#Reference-ID-%(reference_id_number)s">
            <etsi:Description>
                contenido comprobante
            </etsi:Description>
            <etsi:MimeType>
                text/xml
            </etsi:MimeType>
        </etsi:DataObjectFormat>
    </etsi:SignedDataObjectProperties>
    </etsi:SignedProperties>z%Y-%m-%dT%H:%M:%SZ)Úsignature_numberÚsigned_properties_numberÚcertificateX509_der_hashÚX509SerialNumberÚreference_id_numberÚ
fecha_horaÚissuer_name)r   ÚnowÚstrftimer   )r   r   r   r   r   r   Úsigned_propertiesr   r   r   r   Úget_signed_properties   s    %ù
r   c                 C   s   d}|| |||dœ }|S )Na,  <ds:KeyInfo Id="Certificate%(certificate_number)s">
<ds:X509Data>
<ds:X509Certificate>
%(certificateX509)s
</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>
%(modulus)s
</ds:Modulus>
<ds:Exponent>%(exponent)s</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>)Úcertificate_numberÚcertificateX509ÚmodulusÚexponentr   )r   r   r   r   Úkey_infor   r   r   Úget_key_infoF   s    ür   c	           
      C   s$   d}	|	| ||||||||dœ	 }	|	S )Naa  <ds:SignedInfo Id="Signature-SignedInfo%(signed_info_number)s">
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference Id="SignedPropertiesID%(signed_properties_id_number)s" Type="http://uri.etsi.org/01903#SignedProperties" URI="#Signature%(signature_number)s-SignedProperties%(signed_properties_number)s">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>%(sha1_signed_properties)s</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#Certificate%(certificate_number)s">
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>%(sha1_certificado)s</ds:DigestValue>
</ds:Reference>
<ds:Reference Id="Reference-ID-%(reference_id_number)s" URI="#comprobante">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>%(sha1_comprobante)s</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>)	Úsigned_info_numberÚsigned_properties_id_numberÚsha1_signed_propertiesr   Úsha1_certificador   Úsha1_comprobanter   r   r   )
r   r    r!   r   r"   r   r#   r   r   Úsigned_infor   r   r   Úget_signed_infoa   s    ÷r%   c           	   
   C   s"   d}|| |||||||dœ }|S )Nad  <ds:Signature %(xmls)s Id="Signature%(signature_number)s">
%(signed_info)s
<ds:SignatureValue>
%(signature)s
</ds:SignatureValue>
%(key_info)s
<ds:Object Id="Signature%(signature_number)s-Object%(object_number)s"><etsi:QualifyingProperties Target="#Signature%(signature_number)s">%(signed_properties)s</etsi:QualifyingProperties></ds:Object></ds:Signature>)Úxmlsr   Úsignature_value_numberÚobject_numberr$   Ú	signaturer   r   r   )	r&   r   r'   r(   r$   r)   r   r   Z	xades_besr   r   r   Úget_xades_bes‰   s    ør*   )r   r	   Úxmlnsr   r   r   r%   r*   r   r   r   r   Ú<module>   s   7(