+
      xi0#  c                  s   R t ^ RIHtHt ^ RIt^ RIt^ RIHt ^ RIH	t	H
t
Ht ]
'       d   ^ RIHt ^ RIHt ^ RIHtHt  ^ RIHtHt ^ R	IHtHtHt ]! RRRRRR7      tR R lt]! 4        R R ltR R lt R R lt!R R lt"R R lt#R R lt$R R  lt%R! R" lt&R# R$ lt'R1R% R& llt(R' R( lt)R2R) R* llt*R+ R, lt+R3R- R. llt,R/ R0 ltR#   ] d+    ^ RIHtHt ^ R	IHtHtHt  ^ R
IHt  L  ] d      Li ; ii ; i)4zjModule for parsing XML in PSKC files.

This module provides some utility functions for parsing XML files.
)absolute_importannotationsN)OrderedDict)IOTYPE_CHECKINGcast)	Generator)PathLike)_Element_ElementTree)parsetostring)register_namespaceElement
SubElement)r
   z#urn:ietf:params:xml:ns:keyprov:pskcz"http://www.w3.org/2000/09/xmldsig#z!http://www.w3.org/2001/04/xmlenc#z http://www.w3.org/2009/xmlenc11#z;http://www.rsasecurity.com/rsalabs/pkcs/schemas/pkcs-5v2-0#)ZpskcZdsZxencZxenc11Zpkcs5c               s    V ^8  d   QhRR/# )   returnNone Zformat   "-/usr/lib/python3.14/site-packages/pskc/xml.py__annotate__r   E   s     * *T *    c                 sV    \         P                  4        F  w  r\        W4       K  	  R# )z@Register the namespaces so the correct short names will be used.N)
namespacesitemsr   )nsZ	namespaces     r   register_namespacesr   E   s    #))+2) ,r   c                    V ^8  d   QhRRRR/# )r   sourcezCstr | bytes | PathLike[str] | PathLike[bytes] | IO[str] | IO[bytes]r   z_ElementTree[_Element]r   r   r   r   r   r   N   s     = =O==r   c                sN    \        V R8X  d   \        P                  4      # T 4      # )z3Parse the provided file and return an element tree.Z-)	xml_parsesysZstdin)r   s   &r   r
   r
   N   s!     &C-SYY<<V<<r   c               r   )r   tree!_Element | _ElementTree[_Element]r   r   r   r   r   r   r   r   U   s     ; ;= ;$ ;r   c                s    ^ RI pV P                  4        FM  p\        VP                  RP                  4      '       g   K+  VP                  RRVP                  4      Vn        KO  	  R# )z0Remove namespaces from all elements in the tree.N z
^\{[^}]*\})reiter
isinstancetagZ	__class__Zsub)r    r#   Zelem   &  r   remove_namespacesr(   U   sB    		dhh--vvmR:DH r   c               $    V ^8  d   QhRRRRRR/# )r   r    r!   matchesstrr   zGenerator[_Element]r   r   r   r   r   r   ]   s#      3 s GZ r   c              '  sd   "   V F%  pV P                  V\        R7       F  pVx  K	  	  K'  	  R# 5i)zFind the child elements.)r   N)findallr   )r    r*   Zmatchelement   &*  r   r,   r,   ]   s,     ||Ej|AGM B s   .0c               r)   )r   r    r!   r*   r+   r   _Element | Noner   r   r   r   r   r   d   s"      0 C O r   c                sT     \        \        V .VO5!  4      #   \         d     R# i ; i)z@Find a child element that matches any of the patterns (or None).N)Znextr,   ZStopIteration)r    r*   s   &*r   findr0   d   s1    GD+7+,, s    ''c               r)   )r   r    r!   r*   r+   r   
str | Noner   r   r   r   r   r   m   s"      4  
 r   c                s    \        V .VO5!  pVe-   VP                  '       d   VP                  P                  4       # R# )z+Get the text value of an element (or None).N)r0   textstrip)r    r*   r-      &* r   findtextr5   m   s5    4"'"Gw|||||!!##r   c               r)   )r   r    r!   r*   r+   r   
int | Noner   r   r   r   r   r   u   s"      3 s z r   c                sF    \        V .VO5!  pV'       d   \        V4      # R# )z,Return an element value as an int (or None).N)r5   int)r    r*   valuer4   r   findintr9   u   s!    T$G$E5zr   c               r)   )r   r    r!   r*   r+   r   zdatetime.datetime | Noner   r   r   r   r   r   }   s#      4  H` r   c                sn    \        V .VO5!  pV'       d    ^ RIpVP                  P                  V4      # R# )z0Return an element value as a datetime (or None).N)r5   Zdateutil.parserZparserr
   )r    r*   r8   Zdateutilr.   r   findtimer:   }   s/    T$G$E$$U++r   c               r)   )r   r    r!   r*   r+   r   zbytes | Noner   r   r   r   r   r      s"      3 s | r   c                sZ    \        V .VO5!  pV'       d   ^ RIpVP                  V4      # R# )z/Return the binary element value base64 decoded.N)r5   base64Z	b64decode)r    r*   r8   r;   r.   r   findbinr<      s+    T$G$E&&r   c               r)   )r   r    r   	attributer+   r   r6   r   r   r   r   r   r      s!       c j r   c                sN    V P                  V4      pV'       d   \        V4      # R# )z2Return an attribute value as an integer (or None).N)getr7   )r    r=   r8   s   && r   getintr?      s     HHYE5zr   c               s(    V ^8  d   QhRRRRRRRR/# )r   r    r   r=   r+   defaultzbool | Noner   r   r   r   r   r   r      s(      ( s [ K r   c                s    V P                  V4      pV'       d5   VP                  4       pVR9   d   R# VR9   d   R# \        RV,          4      hV# )z1Return an attribute value as a boolean (or None).TFzinvalid boolean value: %r)Z1true)Z0false)r>   ZlowerZ
ValueError)r    r=   r@   r8   s   &&& r   getboolrC      sJ    HHYEM!n$85@AANr   c               r   )r   r8   z$datetime.datetime | bool | int | strr   r+   r   r   r   r   r   r      s      7 C r   c                s    ^ RI p\        WP                   4      '       d6   V P                  4       p V P                  R4      '       d   V RR R,           p V # V RJ d   R# V RJ d   R# \	        V 4      # )	i    Nz+00:00ZZTrA   FrB   i)datetimer%   Z	isoformatZendswithr+   )r8   rD      & r   _formatrF      sd    %**++!>>(###2J$E	$	%u:r   c               s0    V ^8  d   QhRRRRRRRRR	RR
R/# )r   parentz_Element | str | Noner&   r1   r2   z+str | int | bool | datetime.datetime | NoneemptyZboolkwargsr   r/   r   r   r   r   r   r      sD      !	 6 	
 : r   c                sT   Vf   \        \        V 4      pRp RpV'       g]   VfY   \        ;QJ d*    R VP                  4        4       F  '       d   K   RM	  RM! R VP                  4        4       4      '       d   R# RV9   d*   VP	                  R^4      w  rVR\
        V,          : RV: 2pV f   \        V\        4       4      pM\        W\        4       4      pVe   \        V4      Vn
        VP                  4        F&  w  rV	f   K  VP                  V\        V	4      4       K(  	  V# )z!Add element as a child of parent.NTc              3  s(   "   T F  qR J x  K
  	  R # 5iNr   Z.0ZxrE   r   	<genexpr>Zmk_elem.<locals>.<genexpr>   s     )M_t)_s   FZ:Z{})r   r+   ZallZvaluessplitr   r   r   r   rF   r2   r   Zset)
rG   r&   r2   rH   rI   r   Znamer-   ZkZvs
   &&&&,     r   mk_elemrO      s     {3T\cc)MV]]_)Mccc)MV]]_)M&M&M
cz99S!$D$R..$/~#C7V+-8t}=KK71:&  Nr   c               s     V ^8  d   QhRRRR/# )r   r-   r   r   r   r   r   r   r   r      s      X ( r   c                sR   \        V R4      '       d   / pV P                  4        F  pVP                  VP                  4       K   	  \	        \        VP                  4       4      4      p\        V P                  V P                  VR7      pV  F  pVP                  V4       K  	  Tp V # )z8Move the namespace declarations to the toplevel element.nsmap)attribrP   )Zhasattrr$   updaterP   r   sortedr   r   r&   rQ   Zappend)r-   rP   ZeZas   &   r   move_namespacesrT      s~    w  ALL!  F5;;=12GKKeDAHHQK Nr   c               r)   )r   r-   r   indentr+   r   r   r   r   r   r   r   r      s!     ! !h ! !T !r   c                s   \        \        V P                  4      P                  R4      R	,          p\	        V P
                  P                  4       4      pV P
                  P                  4        V P
                  P                  V4       \        V 4      ^ 8X  da   V P                  '       d    V P                  P                  4       V n
        VR
9   d(   RP                  R V P                   4       4      V n
        MPVR8w  dJ   RV,           V n
        \        V 4      pV F  p\        WQR,           4       K  	  RV,           VR	,          n        RV,           V n        R# )z:Reformat the XML tree to have nice wrapping and indenting.rM   r"   c              3  sT   "   T F  qP                  4       '       d   K  Vx  K   	  R # 5irJ   )ZisspacerK   rE   r   rL   Zreformat.<locals>.<genexpr>   s     "Nl))+11ls   (
(Z
SignedInfoz
 Z Z
Ni)ZX509CertificateZSignatureValue)r   r+   r&   rN   rS   rQ   r   ZclearrR   lenr2   r3   ZjoinZlistreformatZtail)r-   rU   r&   rQ   ZchildredZchilds   &&    r   rW   rW      s    
sGKK
 
&
&s
+B
/CGNN((*+FNNNN&!
7|q<<<"<<--/GL7777"Ngll"NNGL		v~=EUSL)  6M&=GLr   c               r   )r   r-   r   r   Zbytesr   r   r   r   r   r      s     
4 
4h 
45 
4r   c                s    \        V 4      p \        V 4       \        V RR7      pRpVP                  V4      '       d   V\	        V4      R pRVP                  RR4      P                  4       ,           R,           # )	z6Return a serialised XML document for the element tree.zUTF-8)Zencodings'   <?xml version='1.0' encoding='UTF-8'?>
Ns'   <?xml version="1.0" encoding="UTF-8"?>
s    />s   />s   
)rT   rW   xml_tostringZ
startswithrV   Zreplacer3   )r-   ZxmlZxml_declr'   r   r   r      sp    g&GW
w
1C:H
~~h#h-.!3FE"((*	+-2	34r   rJ   )NNF)r"   )-Z__doc__Z
__future__r    r   rD   r   Zcollectionsr   Ztypingr   r   r   Zcollections.abcr   Zosr   Z
lxml.etreer   r	   r
   r   r   rX   r   r   r   ZImportErrorZxml.etree.ElementTreeZdefusedxml.ElementTreeZdictr   r   r(   r,   r0   r5   r9   r:   r<   r?   rC   rF   rO   rT   rW   r   r   r   <module>rY      s   *
 4  
 # * *)1
GBB 	.+	,-
G
*  =;D !.
4a  6MM= s*    C C?(C00C;7C?:C;;C?