Ë
    �ÏÏe�<  ã                   ón  — d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlZddlmZmZmZmZ ddlmZ ddlmZ  G d„ d	«      Z G d
„ dej2                  «      Z G d„ dej2                  «      Z G d„ dej2                  «      Z G d„ d«      Zedk(  r eejA                  «       «       yy)zJSON Web Signature.é    N)	ÚAnyÚDictÚ	FrozenSetÚListÚMappingÚOptionalÚTupleÚTypeÚcast)Úcrypto)Úb64ÚerrorsÚ	json_utilÚjwa)Újwk)Úutilc                   óJ   — e Zd ZdZdZ	 ededefd„«       Zededefd„«       Zy)Ú	MediaTypez MediaType field encoder/decoder.zapplication/ÚvalueÚreturnc                 ó^   — d|vr(d|v rt        j                  d«      ‚| j                  |z   S |S )zDecoder.ú/ú;zUnexpected semi-colon)r   ÚDeserializationErrorÚPREFIX©Úclsr   s     ú,/usr/lib/python3/dist-packages/josepy/jws.pyÚdecodezMediaType.decode   s9   € ð �eÑØ�e‰|Ü×1Ñ1Ð2IÓJÐJØ—:‘: Ñ%Ð%Øˆó    c                 óx   — d|vr5|j                  | j                  «      sJ ‚|t        | j                  «      d S |S )zEncoder.r   N)Ú
startswithr   Úlenr   s     r   ÚencodezMediaType.encode)   s?   € ð �eÑØ×#Ñ# C§J¡JÔ/Ð/Ð/Øœ˜SŸZ™Z›Ð*Ð+Ð+Øˆr    N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚclassmethodÚstrr   r$   © r    r   r   r      sO   „ Ù*à€FØ2àð˜3ð  3ò ó ðð ð˜3ð  3ò ó ñr    r   c                   ó’  — e Zd ZU dZ ej
                  dej                  j                  d¬«      Z	e
ej                     ed<    ej
                  dd¬«      Ze
e   ed<    ej
                  dej                  j                  d¬«      Ze
ej                     ed<    ej
                  dd¬«      Ze
e   ed<    ej
                  d	d¬«      Ze
e   ed	<    ej
                  d
dd¬«      Zeej.                  df   ed
<    ej
                  dej0                  d¬«      Ze
e   ed<    ej
                  dej0                  d¬«      Ze
e   ed<    ej
                  dej8                  ej:                  d¬«      Ze
e   ed<    ej
                  dej8                  ej:                  d¬«      Ze
e   ed<    ej
                  ddd¬«      Z ee!df   ed<   e"eejF                  f   ed<   de"eejF                  f   fd„Z$de!dd fd„Z%de&j                  fd„Z'e jP                  de!de!fd„«       Z ejR                  d„ «       ZejP                  d„ «       Zy) ÚHeadera6  JOSE Header.

    .. warning:: This class supports **only** Registered Header
        Parameter Names (as defined in section 4.1 of the
        protocol). If you need Public Header Parameter Names (4.2)
        or Private Header Parameter Names (4.3), you must subclass
        and override :meth:`from_json` and :meth:`to_partial_json`
        appropriately.

    .. warning:: This class does not support any extensions through
        the "crit" (Critical) Header Parameter (4.1.11) and as a
        conforming implementation, :meth:`from_json` treats its
        occurrence as an error. Please subclass if you seek for
        a different behaviour.

    :ivar x5tS256: "x5t#S256"
    :ivar str typ: MIME Media Type, inc. :const:`MediaType.PREFIX`.
    :ivar str cty: Content-Type, inc. :const:`MediaType.PREFIX`.

    ÚalgT)ÚdecoderÚ	omitemptyÚjku)r0   r   ÚkidÚx5uÚx5cr+   ©r0   Údefault.Úx5tzx5t#S256Úx5tS256Útyp)Úencoderr/   r0   ÚctyÚcritÚ_fieldsr   c           
      ó´   — | j                   j                  «       D ��ci c]-  \  }}|j                  t        | |«      «      s|t        | |«      “Œ/ c}}S c c}}w )z4Fields that would not be omitted in the JSON object.)r=   ÚitemsÚomitÚgetattr)ÚselfÚnameÚfields      r   Únot_omittedzHeader.not_omitted`   sT   € ð  $Ÿ|™|×1Ñ1Ó3÷
á��eØ—:‘:œg d¨DÓ1Ô2ð ”'˜$ Ó%Ñ%ó
ð 	
ùó 
s   ž2AÚotherc                 ó@  — t        |t        | «      «      s#t        dj                  t        |«      «      «      ‚| j	                  «       }|j	                  «       }t        |«      j                  |«      rt        d«      ‚|j                  |«        t        | «      di |¤ŽS )NzHeader cannot be added to: {0}z+Addition of overlapping headers not definedr+   )Ú
isinstanceÚtypeÚ	TypeErrorÚformatrE   ÚsetÚintersectionÚupdate)rB   rF   Únot_omitted_selfÚnot_omitted_others       r   Ú__add__zHeader.__add__h   sŽ   € Ü˜%¤ d£Ô,ÜÐ<×CÑCÄDÈÃKÓPÓQÐQà×+Ñ+Ó-ÐØ!×-Ñ-Ó/ÐäÐÓ ×-Ñ-Ð.?Ô@ÜÐIÓJÐJà×ÑÐ 1Ô2ØŒt�D‹zÑ-Ð,Ñ-Ð-r    c                 ó\   — | j                   €t        j                  d«      ‚| j                   S )zíFind key based on header.

        .. todo:: Supports only "jwk" header parameter lookup.

        :returns: (Public) key found in the header.
        :rtype: .JWK

        :raises josepy.errors.Error: if key could not be found

        zNo key found)r   r   ÚError©rB   s    r   Úfind_keyzHeader.find_keyu   s&   € ð �8‰8ÐÜ—,‘,˜~Ó.Ð.Ø�x‰xˆr    Úunused_valuec                 ó,   — t        j                  d«      ‚)Nz("crit" is not supported, please subclass)r   r   )rV   s    r   r<   zHeader.crit„   s   € ä×)Ñ)Ð*TÓUÐUr    c           	      óª   — | D �cg c]C  }t        j                  t        j                  t        j                  |j
                  «      «      ‘ŒE c}S c c}w ©N)Úbase64Ú	b64encoder   Údump_certificateÚFILETYPE_ASN1Úwrapped)r   Úcerts     r   r4   z
Header.x5cŠ   sF   € ð ö
àô ×ÑœV×4Ñ4´V×5IÑ5IÈ4Ï<É<ÓXÕYò
ð 	
ùò 
s   …AAc                 óˆ   — 	 t        d„ | D «       «      S # t        j                  $ r}t        j                  |«      ‚d }~ww xY w)Nc           	   3   ó°   K  — | ]N  }t        j                  t        j                  t        j                  t        j                  |«      «      «      –— ŒP y ­wrY   )r   ÚComparableX509r   Úload_certificater]   rZ   Ú	b64decode)Ú.0r_   s     r   ú	<genexpr>zHeader.x5c.<locals>.<genexpr>”   sG   è ø€ ò ð ô ×#Ñ#Ü×+Ñ+¬F×,@Ñ,@Ä&×BRÑBRÐSWÓBXÓY÷ñùs   ‚AA)Útupler   rS   r   r   )r   Úerrors     r   r4   z
Header.x5c‘   sJ   € ð	5Üñ ð "ô	ó ð øô �|‰|ò 	5Ü×-Ñ-¨eÓ4Ð4ûð	5ús   ‚ ”A§<¼AN)*r%   r&   r'   r(   r   rD   r   ÚJWASignatureÚ	from_jsonr.   r   Ú__annotations__r1   ÚbytesÚjwk_modÚJWKr   r2   r*   r3   r4   r	   r   rb   Údecode_b64joser7   r8   r   r$   r   r9   r;   r<   r   r   ÚFieldrE   rQ   ÚjosepyrU   r/   r:   r+   r    r   r-   r-   3   sn  … ñð* '6 i§o¡oØ�s×'Ñ'×1Ñ1¸Tô'€Cˆ�#×"Ñ"Ñ	#ó ð +˜9Ÿ?™?¨5¸DÔA€Cˆ�%‰ÓAØ!0 §¡Ø�w—{‘{×,Ñ,¸ô"€Cˆ�'—+‘+Ñ	ó ð )˜Ÿ™¨¸$Ô?€Cˆ�#‰Ó?Ø*˜9Ÿ?™?¨5¸DÔA€Cˆ�%‰ÓAØ+:¨9¯?©?¸5ÈDÐZ\Ô+]€Cˆˆt×"Ñ" CÐ'Ñ	(Ó]Ø*˜9Ÿ?™?¨5¸)×:RÑ:RÐ^bÔc€Cˆ�%‰ÓcØ.˜yŸ™Ø˜I×4Ñ4Àô €GˆX�e‰_ó ð  /˜yŸ™Ø�y×'Ñ'°×1AÑ1AÈTô €Cˆ�)Ñ	ó ð  /˜yŸ™Ø�y×'Ñ'°×1AÑ1AÈTô €Cˆ�)Ñ	ó ð ,˜IŸO™O¨F¸dÈBÔO€Dˆ%��S�‰/ÓOØ�#�y—‘Ð&Ñ'Ó'ð
˜T # y§¡Ð"6Ñ7ó 
ð.˜Sð . Xó .ð˜&Ÿ*™*ó ð 
‡\�\ðV˜3ð V 3ò Vó ðVð
 	‡[�[ñ
ó ð
ð 	‡[�[ñ	5ó ñ	5r    r-   c                   ó¤  ‡ — e Zd ZU dZeZeed<   dZ ej                  ddd¬«      Z
eed<    ej                  dd e«       ej                  ¬	«      Zeed<    ej                  d
ej                  ej                  ¬«      Zeed
<   e
j$                  dedefd„«       Z
e
j&                  dedefd„«       Z
deddfˆ fd„Zededeeef   fd„«       Zedededefd„«       Zddedeej8                     defd„Zed e«       fdedej8                  dej@                  dede!dedd fd„«       Z"deeef   fˆ fd„Z#ede$eef   deeef   fˆ fd„«       Z%ˆ xZ&S ) Ú	Signaturea  JWS Signature.

    :ivar combined: Combined Header (protected and unprotected,
        :class:`Header`).
    :ivar unicode protected: JWS protected header (Jose Base-64 decoded).
    :ivar header: JWS Unprotected Header (:class:`Header`).
    :ivar str signature: The signature.

    Úcombined)rt   Ú	protectedTÚ r5   Úheader)r0   r6   r/   Ú	signature)r/   r:   r   r   c                 óJ   — t        j                  | j                  d«      «      S ©Núutf-8)r   Úencode_b64joser$   ©r   s    r   ru   zSignature.protectedµ   s   € ô ×'Ñ'¨¯©°WÓ(=Ó>Ð>r    c                 óJ   — t        j                  | «      j                  d«      S rz   )r   ro   r   r}   s    r   ru   zSignature.protectedº   s   € ä×'Ñ'¨Ó.×5Ñ5°gÓ>Ð>r    ÚkwargsNc                 ó~   •— d|vr| j                  |«      }t        ‰| �  di |¤Ž | j                  j                  €J ‚y )Nrt   r+   )Ú_with_combinedÚsuperÚ__init__rt   r.   )rB   r   Ú	__class__s     €r   rƒ   zSignature.__init__¾   sA   ø€ Ø˜VÑ#Ø×(Ñ(¨Ó0ˆFÜ‰ÑÑ"˜6Ò"Ø�}‰}× Ñ Ð,Ð,Ñ,r    c                 ó  — d|vsJ ‚|j                  d| j                  d   j                  «      }|j                  d| j                  d   j                  «      }|r|| j                  j	                  |«      z   }n|}||d<   |S )Nrt   rw   ru   )Úgetr=   r6   Ú
header_clsÚ
json_loads)r   r   rw   ru   rt   s        r   r�   zSignature._with_combinedÄ   s~   € à Ñ'Ð'Ð'Ø—‘˜H c§k¡k°(Ñ&;×&CÑ&CÓDˆØ—J‘J˜{¨C¯K©K¸Ñ,D×,LÑ,LÓMˆ	áØ §¡× 9Ñ 9¸)Ó DÑD‰HàˆHà%ˆˆzÑØˆr    Úpayloadc                 ó|   — t        j                  |j                  d«      «      dz   t        j                  |«      z   S )Nr{   ó   .)r   r[   r$   )r   ru   r‰   s      r   Ú_msgzSignature._msgÒ   s/   € ä�}‰}˜Y×-Ñ-¨gÓ6Ó7¸$Ñ>ÄÇÁÈwÓAWÑWÐWr    Úkeyc                 ó@  — |€| j                   j                  «       n|}| j                   j                  st        j                  d«      ‚| j                   j                  j                  |j                  | j                  | j                  | j                  |«      ¬«      S )zvVerify.

        :param bytes payload: Payload to verify.
        :param JWK key: Key used for verification.

        z Not signature algorithm defined.)r�   ÚsigÚmsg)
rt   rU   r.   rq   rS   Úverifyr�   rx   rŒ   ru   )rB   r‰   r�   Ú
actual_keys       r   r‘   zSignature.verifyÖ   s{   € ð >A¸[ §¡×!7Ñ!7Ô!9Ècˆ
Ø�}‰}× Ò Ü—,‘,ÐAÓBÐBØ�}‰}× Ñ ×'Ñ'Ø—‘ D§N¡N¸¿	¹	À$Ç.Á.ÐRYÓ8Zð (ó 
ð 	
r    r.   Úinclude_jwkÚprotectc                 ó8  — t        ||j                  «      sJ ‚|}||d<   |r|j                  «       |d<   t        |«      j	                  | j
                  j                  «      sJ ‚|j	                  | j
                  j                  «      sJ ‚i }|D ]  }	|	|v sŒ|j                  |	«      ||	<   Œ |r! | j
                  di |¤Žj                  «       }
nd}
 | j
                  di |¤Ž}	|j                  |j                  | j                  |
|«      «      } | |
|	|¬«      S )aD  Sign.

        :param bytes payload: Payload to sign.
        :param JWK key: Key for signature.
        :param JWASignature alg: Signature algorithm to use to sign.
        :param bool include_jwk: If True, insert the JWK inside the signature headers.
        :param FrozenSet protect: List of headers to protect.

        r.   r   rv   )ru   rw   rx   r+   )rH   ÚktyÚ
public_keyrL   Úissubsetr‡   r=   ÚpopÚ
json_dumpsÚsignr�   rŒ   )r   r‰   r�   r.   r“   r”   r   Úheader_paramsÚprotected_paramsrw   ru   rx   s               r   r›   zSignature.signä   s  € ô& ˜#˜sŸw™wÔ'Ð'Ð'àˆØ"ˆ�eÑÙØ#&§>¡>Ó#3ˆM˜%Ñ ä�=Ó!×*Ñ*¨3¯>©>×+AÑ+AÔBÐBÐBØ×Ñ §¡× 6Ñ 6Ô7Ð7Ð7àÐØò 	EˆFØ˜Ò&Ø+8×+<Ñ+<¸VÓ+DÐ  Ò(ð	Eñ Ø&˜Ÿ™Ñ:Ð)9Ñ:×EÑEÓG‰IàˆIà�—‘Ñ0 -Ñ0ˆØ—H‘H˜SŸW™W c§h¡h¨y¸'Ó&BÓCˆ	á˜Y¨vÀÔKÐKr    c                 óP   •— t         ‰| �  «       }|d   j                  «       s|d= |S )Nrw   )r‚   Úfields_to_partial_jsonrE   )rB   Úfieldsr„   s     €r   rŸ   z Signature.fields_to_partial_json  s.   ø€ Ü‘Ñ/Ó1ˆØ�hÑ×+Ñ+Ô-Ø�xÐ Øˆr    Újobjc                 óœ   •— t         ‰| �  |«      }| j                  |«      }d|d   j                  «       vrt	        j
                  d«      ‚|S )Nr.   rt   zalg not present)r‚   Úfields_from_jsonr�   rE   r   r   )r   r¡   r    Úfields_with_combinedr„   s       €r   r£   zSignature.fields_from_json  sR   ø€ ä‘Ñ)¨$Ó/ˆØ"×1Ñ1°&Ó9ÐØÐ,¨ZÑ8×DÑDÓFÑFÜ×-Ñ-Ð.?Ó@Ð@Ø#Ð#r    rY   )'r%   r&   r'   r(   r-   r‡   rk   Ú	__slots__r   rD   ru   r*   rj   rw   ro   r|   rx   rl   r:   r/   r   rƒ   r)   r   r�   rŒ   r   rq   rn   Úboolr‘   Ú	frozensetri   r   r›   rŸ   r   r£   Ú__classcell__)r„   s   @r   rs   rs   ž   s"  ø… ñð €JØÓà€IØ$�Y—_‘_ [¸DÈ"ÔM€IˆsÓMØ$�Y—_‘_Ø˜D©*«,À
×@TÑ@Tô€FˆFó ð '�y—‘Ø˜Y×5Ñ5¸y×?WÑ?Wô€Iˆuó ð ×Ñð?˜ð ? ò ?ó ð?ð ×Ñð?˜ð ? ò ?ó ð?ð- ð -¨õ -ð ð Cð ¨D°°c°©Nò ó ðð ðX˜Sð X¨5ð X°Uò Xó ðXñ
˜eð 
¨(°6·:±:Ñ*>ð 
È$ó 
ð ð !Ù&›[ñ(Làð(Lð �Z‰Zð(Lð × Ñ ð	(Lð
 ð(Lð ð(Lð ð(Lð 
ò(Ló ð(LðT¨¨S°#¨X©õ ð ð$ G¨C°¨HÑ$5ð $¸$¸sÀC¸x¹.ô $ó ô$r    rs   c                   óú   — e Zd ZU dZdZeed<   ee   ed<   eZ	dde
ej                     defd„Zeded	edd fd
„«       Zedefd„«       Zdefd„Zededd fd„«       Zddedeeef   fd„Zedeeef   dd fd„«       Zy)ÚJWSzgJSON Web Signature.

    :ivar str payload: JWS Payload.
    :ivar str signature: JWS Signatures.

    ©r‰   Ú
signaturesr‰   r¬   Nr�   r   c                 óD   ‡ ‡— t        ˆˆ fd„‰ j                  D «       «      S )úVerify.c              3   óV   •K  — | ]   }|j                  ‰j                  ‰«      –— Œ" y ­wrY   )r‘   r‰   )re   r�   r�   rB   s     €€r   rf   zJWS.verify.<locals>.<genexpr>.  s    øè ø€ ÒL°S�3—:‘:˜dŸl™l¨C×0ÑLùs   ƒ&))Úallr¬   )rB   r�   s   ``r   r‘   z
JWS.verify,  s   ù€ äÔL¸D¿O¹OÔLÓLÐLr    r   c                 óP   —  | | | j                   j                  dd|i|¤Žf¬«      S )úSign.r‰   r«   r+   )Úsignature_clsr›   )r   r‰   r   s      r   r›   zJWS.sign0  s1   € ñ ˜7Ð0F°×0AÑ0A×0FÑ0FÑ0aÈwÐ0aÐZ`Ñ0aÐ/cÔdÐdr    c                 óT   — t        | j                  «      dk(  sJ ‚| j                  d   S )zPGet a singleton signature.

        :rtype: :class:`JWS.signature_cls`

        é   r   )r#   r¬   rT   s    r   rx   zJWS.signature5  s*   € ô �4—?‘?Ó# qÒ(Ð(Ð(Ø�‰˜qÑ!Ð!r    c                 ó–  — t        | j                  «      dk(  sJ ‚d| j                  j                  j	                  «       vsJ ‚t        j                  | j                  j                  j                  d«      «      dz   t        j                  | j                  «      z   dz   t        j                  | j                  j                  «      z   S )z7Compact serialization.

        :rtype: bytes

        rµ   r.   r{   r‹   )
r#   r¬   rx   rw   rE   r   r[   ru   r$   r‰   rT   s    r   Ú
to_compactzJWS.to_compact?  s¨   € ô �4—?‘?Ó# qÒ(Ð(Ð(à˜DŸN™N×1Ñ1×=Ñ=Ó?Ñ?Ð?Ð?ô �M‰M˜$Ÿ.™.×2Ñ2×9Ñ9¸'ÓBÓCØñä�m‰m˜DŸL™LÓ)ñ*ð ñô �m‰m˜DŸN™N×4Ñ4Ó5ñ	6ð	
r    Úcompactc                 ó>  — 	 |j                  d«      \  }}}| j	                  t        j                  |«      j                  d«      t        j                  |«      ¬«      } | t        j                  |«      |f¬«      S # t        $ r t        j                  d«      ‚w xY w)zACompact deserialization.

        :param bytes compact:

        r‹   zOCompact JWS serialization should comprise of exactly 3 dot-separated componentsr{   )ru   rx   r«   )ÚsplitÚ
ValueErrorr   r   r³   r   rd   r   )r   r¸   ru   r‰   rx   r�   s         r   Úfrom_compactzJWS.from_compactR  s—   € ð	Ø,3¯M©M¸$Ó,?Ñ)ˆI�w 	ð ×ÑÜ—m‘m IÓ.×5Ñ5°gÓ>Ì#Ï-É-ÐXaÓJbð  ó 
ˆñ œ3Ÿ=™=¨Ó1¸s¸fÔEÐEøô ò 	Ü×-Ñ-Ødóð ð	ús   ‚A= Á=BÚflatc                 óö   — | j                   sJ ‚t        j                  | j                  «      }|r<t	        | j                   «      dk(  r$| j                   d   j                  «       }||d<   |S || j                   dœS )Nrµ   r   r‰   r«   )r¬   r   r|   r‰   r#   Úto_partial_json)rB   r½   r‰   Úrets       r   r¿   zJWS.to_partial_jsone  sp   € Ø�ŠÐˆÜ×*Ñ*¨4¯<©<Ó8ˆá”C˜Ÿ™Ó(¨AÒ-Ø—/‘/ !Ñ$×4Ñ4Ó6ˆCØ$ˆC�	‰NØˆJð #Ø"Ÿo™oñð r    r¡   c                 ó‚  ‡ — d|v rd|v rt        j                  d«      ‚d|v rc|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}} ‰ t        j                  |d   «      ‰ j
                  j                  |«      f¬«      S  ‰ t        j                  |d   «      t        ˆ fd„|d   D «       «      ¬«      S c c}}w )Nrx   r¬   zFlat mixed with non-flatr‰   r«   c              3   óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wrY   )r³   rj   )re   r�   r   s     €r   rf   z JWS.from_json.<locals>.<genexpr>€  s"   øè ø€ Ò `Àc ×!2Ñ!2×!<Ñ!<¸S×!AÑ `ùs   ƒ%()r   r   r?   r   ro   r³   rj   rg   )r   r¡   r�   r   Úfiltereds   `    r   rj   zJWS.from_jsons  sÅ   ø€ à˜$Ñ <°4Ñ#7Ü×-Ñ-Ð.HÓIÐIØ˜DÑ Ø59·Z±Z³\×V¡z s¨EÀSÈIÓEU˜˜U™
ÐVˆHÑVÙÜ!×0Ñ0°°i±ÓAØ×-Ñ-×7Ñ7¸ÓAÐCôð ñ
 Ü!×0Ñ0°°i±ÓAÜ Ó `ÈTÐR^ÑM_Ô `Ó`ôð ùó Ws   ¶B;ÁB;rY   )T)r%   r&   r'   r(   r¥   rl   rk   r   rs   r³   r   rq   rn   r¦   r‘   r)   r   r›   Úpropertyrx   r·   r¼   r   r*   r¿   r   rj   r+   r    r   rª   rª     s  … ñð *€IØƒNØ�Y‘Óà€MñM˜( 6§:¡:Ñ.ð M¸$ó Mð ðe˜5ð e¨Cð e°Eò eó ðeð ð"˜9ò "ó ð"ð
˜Eó 
ð& ðF 5ð F¨Uò Fó ðFñ$ Dð °D¸¸c¸±Nó ð ð˜W S¨# XÑ.ð °5ò ó ñr    rª   c                   ó  — e Zd ZdZedej                  ddfd„«       Zedej                  defd„«       Z	ede
dej                  fd„«       Zede
de
fd	„«       Zede
deej"                     fd
„«       Zeddeee      dee   fd„«       Zy)ÚCLIzJWS CLI.Úargsr   Nc                 ó‚  — |j                   j                  j                  |j                  j	                  «       «      }|j                  j                  «        |j                  €g |_        |j                  r|j                  j                  d«       t        j                  t        j                  j	                  «       j                  «       ||j                   t        |j                  «      ¬«      }|j                  r)t        |j!                  «       j#                  d«      «       yt        |j%                  «       «       y)r²   Nr.   )r‰   r�   r.   r”   r{   )r.   r–   Úloadr�   ÚreadÚcloser”   r¸   Úappendrª   r›   ÚsysÚstdinr$   rL   Úprintr·   r   Újson_dumps_pretty)r   rÇ   r�   r�   s       r   r›   zCLI.sign‡  sÒ   € ð �h‰h�l‰l×Ñ §¡§¡£Ó0ˆØ�‰�‰ÔØ�<‰<ÐØˆDŒLØ�<Š<Ø�L‰L×Ñ Ô&ä�h‰hÜ—I‘I—N‘NÓ$×+Ñ+Ó-°3¸D¿H¹HÌcÐRV×R^ÑR^ÓN_ð ó 
ˆð �<Š<Ü�#—.‘.Ó"×)Ñ)¨'Ó2Õ3ä�#×'Ñ'Ó)Õ*r    c                 óô  — |j                   r@t        j                  t        j                  j                  «       j                  «       «      }n@	 t        t        t        j                  t        j                  j                  «       «      «      }|j                  �j|j                  €J ‚|j                  j                  |j                  j                  «       «      j                  «       }|j                  j!                  «        nd}t        j"                  j%                  |j&                  j)                  «       «       |j+                  |¬«       S # t        j                  $ r}t        |«       Y d}~yd}~ww xY w)r®   NF)r�   )r¸   rª   r¼   rÍ   rÎ   rÊ   r$   r   rˆ   r   rS   rÏ   r�   r–   rÉ   r—   rË   ÚstdoutÚwriter‰   r   r‘   )r   rÇ   r�   rh   r�   s        r   r‘   z
CLI.verifyš  sû   € ð �<Š<Ü×"Ñ"¤3§9¡9§>¡>Ó#3×#:Ñ#:Ó#<Ó=‰CðÜœ3¤§¡¬s¯y©y¯~©~Ó/?Ó @ÓA�ð
 �8‰8ÐØ—8‘8Ð'Ð'Ð'Ø—(‘(—-‘- §¡§¡£Ó0×;Ñ;Ó=ˆCØ�H‰H�N‰NÕàˆCä�
‰
×Ñ˜Ÿ™×+Ñ+Ó-Ô.Ø—:‘: #�:Ó&Ð&Ð&øô —<‘<ò Ü�e”Üûðús   Á?E ÅE7Å"E2Å2E7Úargc                 ó@   — t         j                  j                  |«      S rY   )r   ri   rj   ©r   rÔ   s     r   Ú	_alg_typezCLI._alg_type°  s   € ä×Ñ×)Ñ)¨#Ó.Ð.r    c                 óB   — |t         j                  j                  v sJ ‚|S rY   )rs   r‡   r=   rÖ   s     r   Ú_header_typezCLI._header_type´  s!   € à”i×*Ñ*×2Ñ2Ñ2Ð2Ð2Øˆ
r    c                 óx   — |t         j                  j                  v sJ ‚t         j                  j                  |   S rY   )rm   rn   ÚTYPESrÖ   s     r   Ú	_kty_typezCLI._kty_type¹  s/   € à”g—k‘k×'Ñ'Ñ'Ð'Ð'Ü�{‰{× Ñ  Ñ%Ð%r    c                 ó  — |€t         j                  dd }t        j                  «       }|j	                  dd¬«       |j                  «       }|j                  d«      }|j                  | j                  ¬«       |j	                  dd	t        j                  d
«      d¬«       |j	                  dd| j                  t        j                  ¬«       |j	                  ddd| j                  ¬«       |j                  d«      }|j                  | j                  ¬«       |j	                  dd	t        j                  d
«      d¬«       |j	                  d| j                  d¬«       |j!                  |«      }|j#                  |«      S )z Parse arguments and sign/verify.Nrµ   z	--compactÚ
store_true)Úactionr›   )Úfuncz-kz--keyÚrbT)rI   Úrequiredz-az--alg)rI   r6   z-pz	--protectrÌ   )rß   rI   r‘   Fz--kty)rÍ   ÚargvÚargparseÚArgumentParserÚadd_argumentÚadd_subparsersÚ
add_parserÚset_defaultsr›   ÚFileTyper×   r   ÚRS256rÙ   r‘   rÜ   Ú
parse_argsrà   )r   rÇ   ÚparserÚ
subparsersÚparser_signÚparser_verifyÚparseds          r   ÚrunzCLI.run¾  sK  € ð ˆ<Ü—8‘8˜A˜B�<ˆDÜ×(Ñ(Ó*ˆØ×Ñ˜K°ÐÔ=à×*Ñ*Ó,ˆ
Ø ×+Ñ+¨FÓ3ˆØ× Ñ  c§h¡hÐ Ô/Ø× Ñ   w´X×5FÑ5FÀtÓ5LÐW[Ð Ô\Ø× Ñ   w°S·]±]ÌCÏIÉIÐ ÔVØ× Ñ   {¸8È#×JZÑJZÐ Ô[à"×-Ñ-¨hÓ7ˆØ×"Ñ"¨¯
©
Ð"Ô3Ø×"Ñ" 4¨´x×7HÑ7HÈÓ7NÐY^Ð"Ô_Ø×"Ñ" 7°·±ÈÐ"ÔOà×"Ñ" 4Ó(ˆØ�{‰{˜6Ó"Ð"r    rY   )r%   r&   r'   r(   r)   rä   Ú	Namespacer›   r¦   r‘   r   r   ri   r×   rÙ   r
   rm   rn   rÜ   r   r   r*   rò   r+   r    r   rÆ   rÆ   „  s÷   „ Ùàð+˜×*Ñ*ð +¨tò +ó ð+ð$ ð'˜(×,Ñ,ð '°ò 'ó ð'ð* ð/˜Cð / C×$4Ñ$4ò /ó ð/ð ð˜sð  sò ó ðð ð&˜Cð & D¨¯©Ñ$5ò &ó ð&ð ñ#�x  S¡	Ñ*ð #°h¸t±nò #ó ñ#r    rÆ   Ú__main__)!r(   rä   rZ   rÍ   Útypingr   r   r   r   r   r   r	   r
   r   ÚOpenSSLr   rq   r   r   r   r   r   rm   r   r   ÚJSONObjectWithFieldsr-   rs   rª   rÆ   r%   Úexitrò   r+   r    r   ú<module>rù      s¦   ðÙ Û Û Û 
÷
÷ 
õ 
õ ã ß .Ó .Ý !Ý ÷ñ ô4h5ˆY×+Ñ+ô h5ôV}$�	×.Ñ.ô }$ô@cˆ)×
(Ñ
(ô c÷LO#ñ O#ðd ˆzÒÙˆ�‰‹…Oð r    