o
    vh=                     @   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 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dl$m%Z% ddl&m'Z'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)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)XmlDateTime)ValidationObjectValidationObjectType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+   b/var/www/html/hyperkenya/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rmg }|d D ]2}t	|t
jr:d}n|d d j}|tjtt|t|d	 j|d
 r\|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$rG|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rYtjd&t|jjd|d'< zt|d(}tj/d|jd)|d(< W n
 tyt   Y nw d*| j!v rtj0dt#| j!d* d+|d,< d-| j!v rtj1dt#| j!d- d.|d/< d0| j!v rtj2dt#| j!d0 d1|d2< d3| j!v rtj3dt#| j!d3 d4d  d5|d6< td7d | j!d8 D |d9< d:| j!v rtj4t#| j!d: d4d  d;|d<< tj5d!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   )6signer_infoself_reported_timestamptimestamp_validity	timestampr   SASigningTimeTyper   from_datetimer   
isinstancer   	ESSCertIDrL   appendSACertIDTyper
   DigestMethodr-   DigestValue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t|d}tjt| jd j|ddd}t|trFd}n
t|trNd}nd}tjd	tjd
tjdi|jj }	|j}
|
d ushJ d }t|trztjt !|j"dd}t#t$j%|j&d}tj'|tj(t !|
|dtj)tjtt|jt| * ddt+| |tj,tj-t.| fddtj/d| dtj0|	d|jj1 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)2r   r   r/   r   md_algorithmr   Hashupdaterh   rt   finalizer	   DigestAlgAndValueTyper
   rr   r-   rs   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_objectd  s   r   c                 C   sf   t jt| |ft tdd |jD d}ddlm} ddlm	} |d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)SerializerConfigz  )indent)config)ns_map)r   ValidationReportr   ValidationObjectListTyperv   validation_objects$xsdata.formats.dataclass.serializersr   +xsdata.formats.dataclass.serializers.configr   render
NAMESPACES)r.   r   reportr   r   r   serr+   r+   r,   r   r  s   
	
N)3__doc__typingr   r   r   r   
asn1cryptor   cryptography.hazmat.primitivesr   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   xsdata.models.datatyper   pyhanko_certvalidator.ltv.poer   r   __all__r(   r   rK   r-   r   r   r   r   r   r+   r+   r+   r,   <module>   sb    		
 M
Y