Ë
    �ÏÏe<  ã                   ó¦  — d Z ddlZddlZddlmZ ddlmZmZmZ ddl	Z
ddlmZ ddlmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZ  ej:                  e«      Z G d„ dej@                  «      Z! G d„ de!e«      Z" G d„ de"«      Z# G d„ d«      Z$ G d„ de$e"«      Z% G d„ de$e"«      Z& G d„ de"«      Z'e"jQ                   e#dejR                  «      «      Z*e"jQ                   e#dejV                  «      «      Z,e"jQ                   e#dejZ                  «      «      Z.e"jQ                   e%dejR                  «      «      Z/e"jQ                   e%dejV                  «      «      Z0e"jQ                   e%dejZ                  «      «      Z1e"jQ                   e&dejR                  «      «      Z2e"jQ                   e&d ejV                  «      «      Z3e"jQ                   e&d!ejZ                  «      «      Z4e"jQ                   e'd"ejR                  «      «      Z5e"jQ                   e'd#ejV                  «      «      Z6e"jQ                   e'd$ejZ                  «      «      Z7y)%zZJSON Web Algorithms.

https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40

é    N)ÚHashable)ÚAnyÚCallableÚDict)Údefault_backend)ÚhashesÚhmac)ÚecÚpaddingÚrsa)Údecode_dss_signatureÚencode_dss_signature)ÚHashAlgorithm)ÚerrorsÚ
interfacesÚjwkc                   ó   — e Zd ZdZy)ÚJWAzJSON Web Algorithm.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú,/usr/lib/python3/dist-packages/josepy/jwa.pyr   r      s   „ ò r   r   c            	       ó  — e Zd ZU dZi Zeed f   ed<   eed<   deddfd„Z	dede
fd	„Zdefd
„Zedd„«       Zdefd„Zededd fd„«       Zej&                  dededefd„«       Zej&                  dededede
fd„«       Zdefd„Zy)ÚJWASignaturez-Base class for JSON Web Signature Algorithms.Ú
SIGNATURESÚktyÚnameÚreturnNc                 ó   — || _         y ©N©r    )Úselfr    s     r   Ú__init__zJWASignature.__init__&   s	   € Øˆ�	r   Úotherc                 ó`   — t        |t        «      st        S | j                  |j                  k(  S r#   )Ú
isinstancer   ÚNotImplementedr    )r%   r'   s     r   Ú__eq__zJWASignature.__eq__)   s%   € Ü˜%¤Ô.Ü!Ð!Ø�y‰y˜EŸJ™JÑ&Ð&r   c                 óD   — t        | j                  | j                  f«      S r#   )ÚhashÚ	__class__r    ©r%   s    r   Ú__hash__zJWASignature.__hash__.   s   € Ü�T—^‘^ T§Y¡YÐ/Ó0Ð0r   c                 ó8   — || j                   |j                  <   |S )z(Register class for JSON deserialization.)r   r    )ÚclsÚsignature_clss     r   ÚregisterzJWASignature.register1   s   € ð .;ˆ�‰�}×)Ñ)Ñ*ØÐr   c                 ó   — | j                   S r#   r$   r/   s    r   Úto_partial_jsonzJWASignature.to_partial_json7   ó   € Ø�y‰yÐr   Újobjc                 ó    — | j                   |   S r#   )r   )r2   r8   s     r   Ú	from_jsonzJWASignature.from_json:   s   € à�~‰~˜dÑ#Ð#r   ÚkeyÚmsgc                 ó   — t        «       ‚)úSign the ``msg`` using ``key``.©ÚNotImplementedError)r%   r;   r<   s      r   ÚsignzJWASignature.sign>   ó   € ô "Ó#Ð#r   Úsigc                 ó   — t        «       ‚)z-Verify the ``msg`` and ``sig`` using ``key``.r?   )r%   r;   r<   rC   s       r   ÚverifyzJWASignature.verifyC   rB   r   c                 ó   — | j                   S r#   r$   r/   s    r   Ú__repr__zJWASignature.__repr__H   r7   r   )r3   r   r!   r   )r   r   r   r   r   r   ÚstrÚ__annotations__r   r&   Úboolr+   Úintr0   Úclassmethodr4   r6   r:   ÚabcÚabstractmethodÚbytesrA   rE   rG   r   r   r   r   r       s  … Ù7à,.€J��S˜.Ð(Ñ)Ó.Ø	ƒHð˜Sð  Tó ð'˜Cð ' Dó 'ð
1˜#ó 1ð òó ðð
 ó ð ð$˜Sð $ ^ò $ó ð$ð 	×Ñð$˜ð $ %ð $¨Eò $ó ð$ð 	×Ñð$˜#ð $ Eð $°ð $¸$ò $ó ð$ð˜#ô r   r   c                   óv   ‡ — e Zd Zej                  Zdedeg ef   fˆ fd„Z	de
de
de
fd„Zde
de
de
defd	„Zˆ xZS )
Ú_JWAHSr    Úhash_c                 ó<   •— t         ‰| �  |«        |«       | _        y r#   ©Úsuperr&   r-   ©r%   r    rR   r.   s      €r   r&   z_JWAHS.__init__O   ó   ø€ Ü‰Ñ˜ÔÙ“Gˆ�	r   r;   r<   r!   c                 ó˜   — t        j                  || j                  t        «       ¬«      }|j	                  |«       |j                  «       S )N©Úbackend)r	   ÚHMACr-   r   ÚupdateÚfinalize)r%   r;   r<   Úsigners       r   rA   z_JWAHS.signS   s4   € Ü—‘˜3 §	¡	´?Ó3DÔEˆØ�‰�cÔØ�‰Ó Ð r   rC   c                 ó   — t        j                  || j                  t        «       ¬«      }|j	                  |«       	 |j                  |«       y# t        j                  j                  $ r!}t        j                  |d¬«       Y d }~yd }~ww xY w)NrY   T©Úexc_infoF)r	   r[   r-   r   r\   rE   ÚcryptographyÚ
exceptionsÚInvalidSignatureÚloggerÚdebug)r%   r;   r<   rC   ÚverifierÚerrors         r   rE   z_JWAHS.verifyX   sn   € Ü—9‘9˜S $§)¡)´_Ó5FÔGˆØ�‰˜Ôð	Ø�O‰O˜CÔ ð
 øô	 ×&Ñ&×7Ñ7ò 	Ü�L‰L˜¨ˆLÔ.Üûð	ús   ½A ÁBÁ,BÂB)r   r   r   r   ÚJWKOctr   rH   r   r   r&   rO   rA   rJ   rE   Ú__classcell__©r.   s   @r   rQ   rQ   L   sd   ø„ Ø
�*‰*€Cð˜Sð ¨°"°mÐ2CÑ)Dõ ð!˜ð ! Eð !¨eó !ð
	˜%ð 	 eð 	°%ð 	¸D÷ 	r   rQ   c                   ó–   — e Zd ZU ej                  ZeZee	d<   eZ
ee	d<   dej                  dedefd„Zdej                   dededefd„Zy	)
Ú_JWARSAr   r-   r;   r<   r!   c                 óN  — 	 |j                  || j                  | j                  «      S # t        $ r1}t        j                  |d¬«       t        j                  d«      ‚d}~wt        $ r:}t        j                  |d¬«       t        j                  t        |«      «      ‚d}~ww xY w)r>   Tr`   ú%Public key cannot be used for signingN)
rA   r   r-   ÚAttributeErrorre   rf   r   ÚErrorÚ
ValueErrorrH   ©r%   r;   r<   rh   s       r   rA   z_JWARSA.signi   s   € ð	+Ø—8‘8˜C §¡¨t¯y©yÓ9Ð9øÜò 	HÜ�L‰L˜¨ˆLÔ.Ü—,‘,ÐFÓGÐGûÜò 	+Ü�L‰L˜¨ˆLÔ.Ü—,‘,œs 5›zÓ*Ð*ûð	+ús    ‚&) ©	B$²,AÁB$Á*5BÂB$rC   c                 óØ   — 	 |j                  ||| j                  | j                  «       y# t        j                  j
                  $ r!}t        j                  |d¬«       Y d}~yd}~ww xY w)ú,Verify the ``msg` and ``sig`` using ``key``.Tr`   NF)rE   r   r-   rb   rc   rd   re   rf   )r%   r;   r<   rC   rh   s        r   rE   z_JWARSA.verifyt   sW   € ð	Ø�J‰J�s˜C §¡¨t¯y©yÔ9ð
 øô	 ×&Ñ&×7Ñ7ò 	Ü�L‰L˜¨ˆLÔ.Üûð	ús   ‚(+ «A)ÁA$Á$A)N)r   r   r   r   ÚJWKRSAr   r*   r   r   rI   r-   r   r   ÚRSAPrivateKeyrO   rA   ÚRSAPublicKeyrJ   rE   r   r   r   rm   rm   d   sf   … Ø
�*‰*€CØ!€GˆSÓ!Ø(€Dˆ-Ó(ð	+˜×)Ñ)ð 	+°ð 	+¸%ó 	+ð˜#×*Ñ*ð °ð ¸Uð Àtô r   rm   c                   ó6   ‡ — e Zd Zdedeg ef   ddfˆ fd„Zˆ xZS )Ú_JWARSr    rR   r!   Nc                 ón   •— t         ‰| �  |«       t        j                  «       | _         |«       | _        y r#   )rU   r&   r   ÚPKCS1v15r-   rV   s      €r   r&   z_JWARS.__init__€   s)   ø€ Ü‰Ñ˜ÔÜ×'Ñ'Ó)ˆŒÙ“Gˆ�	r   ©r   r   r   rH   r   r   r&   rj   rk   s   @r   rz   rz      ó,   ø„ ð˜Sð ¨°"°mÐ2CÑ)Dð È÷ ñ r   rz   c                   ó6   ‡ — e Zd Zdedeg ef   ddfˆ fd„Zˆ xZS )Ú_JWAPSr    rR   r!   Nc                 óÔ   •— t         ‰| �  |«       t        j                  t        j                   |«       «      t        j                  j
                  ¬«      | _         |«       | _        y )N)ÚmgfÚsalt_length)rU   r&   r   ÚPSSÚMGF1Ú
MAX_LENGTHr-   rV   s      €r   r&   z_JWAPS.__init__‡   s@   ø€ Ü‰Ñ˜ÔÜ—{‘{¤w§|¡|±E³GÓ'<Ì'Ï+É+×J`ÑJ`ÔaˆŒÙ“Gˆ�	r   r}   rk   s   @r   r€   r€   †   r~   r   r€   c                   óò   ‡ — e Zd Zej                  Zdedeg ef   fˆ fd„Z	de
j                  dedefd„Zde
j                  dedefd„Zde
j                  ded	edefd
„Zde
j                  dededefd„Zˆ xZS )Ú_JWAECr    rR   c                 ó<   •— t         ‰| �  |«        |«       | _        y r#   rT   rV   s      €r   r&   z_JWAEC.__init__�   rW   r   r;   r<   r!   c                 óâ   — | j                  ||«      }t        |«      \  }}t        j                  j	                  |j
                  «      }|j                  |d¬«      |j                  |d¬«      z   S )r>   Úbig)ÚlengthÚ	byteorder)Ú_signr   r   ÚJWKECÚexpected_length_for_curveÚcurveÚto_bytes)r%   r;   r<   rC   ÚdrÚdsrŒ   s          r   rA   z_JWAEC.sign”   sh   € à�j‰j˜˜cÓ"ˆÜ% cÓ*‰ˆˆBÜ—‘×4Ñ4°S·Y±YÓ?ˆØ�{‰{ &°Eˆ{Ó:¸R¿[¹[Ø Uð >Ió >
ñ 
ð 	
r   c                 ó^  — 	 |j                  |t        j                  | j                  «      «      S # t        $ r1}t
        j                  |d¬«       t        j                  d«      ‚d }~wt        $ r:}t
        j                  |d¬«       t        j                  t        |«      «      ‚d }~ww xY w)NTr`   ro   )rA   r
   ÚECDSAr-   rp   re   rf   r   rq   rr   rH   rs   s       r   rŽ   z_JWAEC._sign�   s‚   € ð	+Ø—8‘8˜C¤§¡¨$¯)©)Ó!4Ó5Ð5øÜò 	HÜ�L‰L˜¨ˆLÔ.Ü—,‘,ÐFÓGÐGûÜò 	+Ü�L‰L˜¨ˆLÔ.Ü—,‘,œs 5›zÓ*Ð*ûð	+ús    ‚.1 ±	B,º,A&Á&B,Á25B'Â'B,rC   c                 ó  — t         j                  j                  |j                  «      }t	        |«      d|z  k7  ryt        t        j                  |d| d¬«      t        j                  ||d d¬«      «      }| j                  |||«      S )ru   é   Fr   r‹   )r�   N)	r   r�   r�   r‘   Úlenr   rK   Ú
from_bytesÚ_verify)r%   r;   r<   rC   ÚrlenÚasn1sigs         r   rE   z_JWAEC.verify§   sx   € ä�y‰y×2Ñ2°3·9±9Ó=ˆÜˆs‹8�q˜4‘xÒàÜ&Ü�N‰N˜3˜q ˜;°%ˆNÓ8Ü�N‰N˜3˜t˜u˜:°ˆNÓ7ó
ˆð �|‰|˜C  gÓ.Ð.r   r�   c                 óè   — 	 |j                  ||t        j                  | j                  «      «       y# t        j
                  j                  $ r!}t        j                  |d¬«       Y d }~yd }~ww xY w)NTr`   F)	rE   r
   r–   r-   rb   rc   rd   re   rf   )r%   r;   r<   r�   rh   s        r   r›   z_JWAEC._verify³   sZ   € ð	Ø�J‰J�w ¤R§X¡X¨d¯i©iÓ%8Ô9ð
 øô	 ×&Ñ&×7Ñ7ò 	Ü�L‰L˜¨ˆLÔ.Üûð	ús   ‚03 ³A1ÁA,Á,A1)r   r   r   r   r�   r   rH   r   r   r&   r
   ÚEllipticCurvePrivateKeyrO   rA   rŽ   ÚEllipticCurvePublicKeyrJ   rE   r›   rj   rk   s   @r   rˆ   rˆ   �   s¹   ø„ Ø
�)‰)€Cð˜Sð ¨°"°mÐ2CÑ)Dõ ð
˜×2Ñ2ð 
¸ð 
À5ó 
ð+˜×3Ñ3ð +¸%ð +ÀEó +ð
/˜"×3Ñ3ð 
/¸%ð 
/Àeð 
/ÐPTó 
/ð˜2×4Ñ4ð ¸5ð È5ð ÐUY÷ r   rˆ   ÚHS256ÚHS384ÚHS512ÚRS256ÚRS384ÚRS512ÚPS256ÚPS384ÚPS512ÚES256ÚES384ÚES512)8r   rM   ÚloggingÚcollections.abcr   Útypingr   r   r   Úcryptography.exceptionsrb   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r	   Ú)cryptography.hazmat.primitives.asymmetricr
   r   r   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   Ú%cryptography.hazmat.primitives.hashesr   Újosepyr   r   r   Ú	getLoggerr   re   ÚJSONDeSerializabler   r   rQ   rm   rz   r€   rˆ   r4   ÚSHA256r¡   ÚSHA384r¢   ÚSHA512r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r   r   r   ú<module>r¼      sù  ðñó
 Û Ý $ß &Ñ &ã Ý 8ß 7ß FÑ F÷õ @ç *Ñ *à	ˆ×	Ñ	˜8Ó	$€ôˆ*×
'Ñ
'ô ô)�3˜ô )ôXˆ\ô ÷0ñ ô6ˆW�lô ôˆW�lô ô-ˆ\ô -ðb 	×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€ð 	×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€ð 	×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€ð 	×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=€à×Ñ™f W¨f¯m©mÓ<Ó=�r   