o
    >e&=                     @   s`  d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( dgZ)ddddddZ*dddddZ+de,fddZ-de&d e(fd!d"Z.de&d#ed$ej/fd%d&Z0d'efd(d)Z1de&d#ed$e,fd*dZ2d+S ),zu
ETSI TS 119 102-2 reporting functionality.

.. warning::
    This feature is incubating and subject to API changes.
    )AnyDictOptionalcast)tsp)hashes)ValidationObjectValidationObjectType)XmlDateTime)ts_11910202xades)xmldsig_core)
cades_asn1)
AdESStatus)NonexistentAttributeErrorfind_cms_attributefind_unique_cms_attributeget_pyca_cryptography_hash)AdESBasicValidationResultAdESLTAValidationResultAdESWithTimeValidationResult$derive_validation_object_binary_data#derive_validation_object_identifier)get_signing_cert_attr)EmbeddedPdfSignature)PdfSignatureStatusgenerate_reportz&http://www.w3.org/2000/09/xmldsig#sha1z'http://www.w3.org/2001/04/xmlenc#sha256z-http://www.w3.org/2001/04/xmldsig-more#sha224z-http://www.w3.org/2001/04/xmldsig-more#sha384z'http://www.w3.org/2001/04/xmlenc#sha512)sha1sha256sha224sha384sha512z!http://uri.etsi.org/19102/v1.2.1#z!http://uri.etsi.org/01903/v1.3.2#z"http://www.w3.org/2000/09/xmldsig#z http://www.w3.org/2001/XMLSchema)vrXAdESdsxsalgoc                 C   s*   zt |  W S  ty   td|  dw )Nz3No XML signature syntax available for digest algo '')DIGEST_ALGO_URISKeyErrorNotImplementedError)r&    r+   e/var/www/html/humari/django-venv/lib/python3.10/site-packages/pyhanko/sign/validation/report/tools.py_digest_algo_uri6   s   

r-   embedded_sig
api_statusc                 C   s  | j d }i }| jp|jr|jjnd }|r!tjdt|d|d< t|}|d urjg }|d D ]/}t	|t
jr:d}n|d d j}|tjtt||d	 j|d
 rY|d
  nd d q/tjdt|d|d< zt|d}	|	d }
tjdd|
j d|d< W n	 ty   Y nw |jrtjdt|jjd|d< z%t|dd }|j}t	|tjr|d }
tjdd|
j d}||d< W n	 ty   Y nw d| j v rtj!dt"| j d fd|d< |j#rD|j#}g }|j$D ]"}tj%j&}|j'j dd(dd |j)D  }|tj*||d  q|j+pd!D ]#}tj%j,}|j'j d"d(d#d |j)D  }|tj*||d  qtj-dt|d$|d%< |jrVtjd&t|jjd|d'< zt|d(}tj.d|jd)|d(< W n
 tyq   Y nw d*| j v rtj/dt"| j d* d+|d,< d-| j v rtj0dt"| j d- d.|d/< d0| j v rtj1dt"| j d0 d1|d2< d3| j v rtj2dt"| j d3 d4d  d5|d6< td7d | j d8 D |d9< d:| j v rtj3t"| j d: d4d  d;|d<< tj4d!i |S )=Nsigned_attrsT)signedtimesigning_timecertsr   hash_algorithm	algorithm	cert_hashissuer_serial)digest_methoddigest_valuex509_issuer_serial)r1   cert_idsigning_certificatecommitment_type_indicationcommitment_type_idzurn:oid:)r1   commitment_type_identifier)r1   time_stamp_valueall_data_objects_time_stampsignature_policy_identifierr   sig_policy_id)r1   rD   sig_policy_identifierz	/Location)r1   address_stringsignature_production_placez: z; c                 s       | ]}t |jV  qd S Nstrnative.0vr+   r+   r,   	<genexpr>       z#_summarise_attrs.<locals>.<genexpr>)endorsement_typeroler+    c                 s   rH   rI   rJ   rM   r+   r+   r,   rP      rQ   )r1   role_detailssigner_roleFsignature_time_stampmessage_digest)r1   digestz/Reason)r1   reason_elementreasonz/Name)r1   name_elementnamez/ContactInfo)r1   contact_info_elementcontact_infoz
/SubFilter   )r1   sub_filter_element
sub_filterc                 s       | ]}t |V  qd S rI   )int)rN   xr+   r+   r,   rP      s    
z
/ByteRange
byte_rangez/Filter)filterrg   )5signer_infoself_reported_timestamptimestamp_validity	timestampr   SASigningTimeTyper
   from_datetimer   
isinstancer   	ESSCertIDrL   appendSACertIDTyper   DigestMethodr-   dumpSACertIDListTypetupler   SACommitmentTypeIndicationTypedottedr   content_timestamp_validitySATimestampTyper   chosenr   SignaturePolicyIdSASigPolicyIdentifierType
sig_objectSASignatureProductionPlaceTyperK   cades_signer_attrsclaimed_attrs"SAOneSignerRoleTypeEndorsementTypeCLAIMED	attr_typejoinattr_valuesSAOneSignerRoleTypecertified_attrs	CERTIFIEDSASignerRoleTypeSAMessageDigestTypeSAReasonType
SANameTypeSAContactInfoTypeSASubFilterTypeSAFilterTypeSignatureAttributesType)r.   r/   r0   kwargsclaimed_timesigning_cert_attrcert_ids_xmlr<   	hash_algocommitment_typeoidsig_policy_identactual_policy_ident	ident_xmlr   rolesclaimed_attr	role_typestringified	cert_attrrX   r+   r+   r,   _summarise_attrs?   s*  










	




r   statusreturnc                 C   s  t t|j}t|j}t|}|| jd 	  |
 }tjtt|j|d}tjt| jd j|ddd}t|trCd}n
t|trKd}nd}tjd	tjd
tjdi|jj }	|j}
|
d useJ d }t|trwtjt |j!dd}t"t#j$|j%d}tj&|tj't |
|dtj(tjtt|j| ) ddt*| |tj+tj,t-| fddtj.d| dtj/|	d|jj0 fdd}|S )Nr0   )r9   r:   	signatureF)signature_valuedigest_alg_and_value	hash_onlydoc_hash_onlyLTALTVMBasicz+urn:etsi:019102:mainindication:total-passedz+urn:etsi:019102:mainindication:total-failedz,urn:etsi:019102:mainindication:indeterminatez"urn:etsi:019102:poetype:validation)poetimetype_of_proof)object_typevalue)validation_timebest_signature_time)r   )voreference)signer_certificatez"urn:etsi:019102:validationprocess:)signature_validation_process_idzurn:etsi:019102:subindication:)main_indicationsub_indication)signature_identifiervalidation_time_infosigners_documentsignature_attributessigner_informationsignature_validation_processsignature_validation_status)1r   r   r/   r   md_algorithmr   Hashupdaterh   rs   finalizer   DigestAlgAndValueTyper   rr   r-   r   SignatureIdentifierTypeSignatureValuerL   rn   r   r   r   PASSEDFAILEDINDETERMINATEades_subindicr   r   POETyper
   rm   r   r   r	   CERTIFICATEsigning_certSignatureValidationReportTypeValidationTimeInfoTypeSignersDocumentTypecompute_digestr   SignerInformationTypeVOReferenceTyper   SignatureValidationProcessTypeValidationStatusTypestandard_name)r.   r   r/   md_specmddtbsr_digestdtbsr_digest_infosig_idprocessades_main_indicr   best_sig_timesigner_cert_vosingle_reportr+   r+   r,   _generate_report	  s   






$r   voc                 C   s6   t | }tjt| | j |rtj|ddS d dS )N)base64)idr    validation_object_representation)r   r   r	   r   r   urn"ValidationObjectRepresentationType)r   bin_datar+   r+   r,   _package_validation_object`  s   r   c                 C   sd   t jt| |ft tdd |jD d}ddlm} ddlm	} |dd}||j
|td	}|S )
a.  
    Generate signature validation report in XML format according to
    ETSI TS 119 102-2.

    :param embedded_sig:
        PDF signature to report on.
    :param status:
        AdES validation result to turn into a report.
    :return:
        A string representation of the validation report.
    c                 s   rc   rI   )r   )rN   r   r+   r+   r,   rP     s
    
z"generate_report.<locals>.<genexpr>)signature_validation_reportsignature_validation_objectsr   )XmlSerializer)SerializerConfigT)pretty_print)ns_map)r   ValidationReportr   ValidationObjectListTyperu   validation_objects$xsdata.formats.dataclass.serializersr   +xsdata.formats.dataclass.serializers.configr   render
NAMESPACES)r.   r   reportr   r   configserr+   r+   r,   r   n  s   
	
N)3__doc__typingr   r   r   r   
asn1cryptor   cryptography.hazmat.primitivesr   pyhanko_certvalidator.ltv.poer   r	   xsdata.models.datatyper
   pyhanko.generated.etsir   r   pyhanko.generated.w3cr   pyhanko.sign.adesr   pyhanko.sign.ades.reportr   pyhanko.sign.generalr   r   r   r   pyhanko.sign.validation.adesr   r   r   r   r   #pyhanko.sign.validation.generic_cmsr   $pyhanko.sign.validation.pdf_embeddedr   pyhanko.sign.validation.statusr   __all__r(   r   rK   r-   r   r   r   r   r   r+   r+   r+   r,   <module>   sb    		
 K
W