Ë
    �ÏÏeA'  ã                   óŽ  — d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZmZ ddlmZmZ ddlmZ ded	efd
„Z G d„ d«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z edd¬«      Z G d„ dee«      Z G d„ dee«      Z G d„ d«      Z  ee e ejB                  e"   «      «      ejB                  e"<   y)zJOSE utilities.é    N)ÚHashableÚMapping)Ú
ModuleType)ÚAnyÚCallableÚIteratorÚListÚTupleÚTypeVarÚUnionÚcast)ÚecÚrsa)ÚcryptoÚfuncÚreturnc                 ó>   — t        t        j                  | «      «      S ©N)ÚclassmethodÚabcÚabstractmethod)r   s    ú-/usr/lib/python3/dist-packages/josepy/util.pyÚabstractclassmethodr      s   € Ü”s×)Ñ)¨$Ó/Ó0Ð0ó    c                   ó²   — e Zd ZdZdeej                  ej                  f   ddfd„Zde	de
fd„Zej                  fdedefd	„Zd
e
defd„Zdefd„Zde	fd„Zy)ÚComparableX509zËWrapper for OpenSSL.crypto.X509** objects that supports __eq__.

    :ivar wrapped: Wrapped certificate or certificate request.
    :type wrapped: `OpenSSL.crypto.X509` or `OpenSSL.crypto.X509Req`.

    Úwrappedr   Nc                 ó~   — t        |t        j                  «      st        |t        j                  «      sJ ‚|| _        y r   )Ú
isinstancer   ÚX509ÚX509Reqr   ©Úselfr   s     r   Ú__init__zComparableX509.__init__   s*   € Ü˜'¤6§;¡;Ô/´:¸gÄvÇ~Á~Ô3VÐVÐVØˆ�r   Únamec                 ó.   — t        | j                  |«      S r   )Úgetattrr   ©r#   r%   s     r   Ú__getattr__zComparableX509.__getattr__   s   € Ü�t—|‘| TÓ*Ð*r   Úfiletypec                 óÊ   — t        | j                  t        j                  «      r t        j                  || j                  «      S t        j
                  || j                  «      S )aN  Dumps the object into a buffer with the specified encoding.

        :param int filetype: The desired encoding. Should be one of
            `OpenSSL.crypto.FILETYPE_ASN1`,
            `OpenSSL.crypto.FILETYPE_PEM`, or
            `OpenSSL.crypto.FILETYPE_TEXT`.

        :returns: Encoded X509 object.
        :rtype: bytes

        )r   r   r   r    Údump_certificateÚdump_certificate_request)r#   r*   s     r   Ú_dumpzComparableX509._dump!   sF   € ô �d—l‘l¤F§K¡KÔ0Ü×*Ñ*¨8°T·\±\ÓBÐBô ×.Ñ.¨x¸¿¹ÓFÐFr   Úotherc                 ó|   — t        || j                  «      st        S | j                  «       |j                  «       k(  S r   )r   Ú	__class__ÚNotImplementedr.   ©r#   r/   s     r   Ú__eq__zComparableX509.__eq__3   s-   € Ü˜% §¡Ô0Ü!Ð!Ø�z‰z‹|˜uŸ{™{›}Ñ,Ð,r   c                 óL   — t        | j                  | j                  «       f«      S r   )Úhashr1   r.   ©r#   s    r   Ú__hash__zComparableX509.__hash__8   s   € Ü�T—^‘^ T§Z¡Z£\Ð2Ó3Ð3r   c                 ób   — dj                  | j                  j                  | j                  «      S ©Nz<{0}({1!r})>)Úformatr1   Ú__name__r   r7   s    r   Ú__repr__zComparableX509.__repr__;   s#   € Ø×$Ñ$ T§^¡^×%<Ñ%<¸d¿l¹lÓKÐKr   )r<   Ú
__module__Ú__qualname__Ú__doc__r   r   r    r!   r$   Ústrr   r)   ÚFILETYPE_ASN1ÚintÚbytesr.   Úboolr4   r8   r=   © r   r   r   r      s�   „ ñð  f§k¡k°6·>±>Ð&AÑ Bð Àtó ð+ ð +¨ó +ð %+×$8Ñ$8ñ G˜cð G¸Uó Gð$-˜Cð - Dó -ð
4˜#ó 4ðL˜#ô Lr   r   c                   óÈ   — e Zd ZU dZeZeg ef   ed<   de	e
j                  e
j                  ej                  ej                  f   fd„Zdedefd„Zdedefd	„Zdefd
„Zdd„Zy)ÚComparableKeyznComparable wrapper for ``cryptography`` keys.

    See https://github.com/pyca/cryptography/issues/2122.

    r8   r   c                 ó   — || _         y r   )Ú_wrappedr"   s     r   r$   zComparableKey.__init__H   s   € ð  ˆ�r   r%   r   c                 ó.   — t        | j                  |«      S r   )r'   rJ   r(   s     r   r)   zComparableKey.__getattr__S   s   € Ü�t—}‘} dÓ+Ð+r   r/   c                 óz  — t        || j                  «      r,| j                  j                  |j                  j                  urt        S t	        | j                  d«      r!| j                  «       |j                  «       k(  S t	        | j                  d«      r!| j                  «       |j                  «       k(  S t        S )NÚprivate_numbersÚpublic_numbers)r   r1   rJ   r2   ÚhasattrrM   rN   r3   s     r   r4   zComparableKey.__eq__V   s�   € ä˜5 $§.¡.Ô1Ø�}‰}×&Ñ&¨e¯n©n×.FÑ.FÑFä!Ð!Ü�T—]‘]Ð$5Ô6Ø×'Ñ'Ó)¨U×-BÑ-BÓ-DÑDÐDÜ�T—]‘]Ð$4Ô5Ø×&Ñ&Ó(¨E×,@Ñ,@Ó,BÑBÐBä!Ð!r   c                 ób   — dj                  | j                  j                  | j                  «      S r:   )r;   r1   r<   rJ   r7   s    r   r=   zComparableKey.__repr__c   s#   € Ø×$Ñ$ T§^¡^×%<Ñ%<¸d¿m¹mÓLÐLr   c                 óÀ   — t        | j                  t        j                  t        j
                  f«      r| S | j                  | j                  j                  «       «      S )zGet wrapped public key.)r   rJ   r   ÚRSAPublicKeyWithSerializationr   Ú'EllipticCurvePublicKeyWithSerializationr1   Ú
public_keyr7   s    r   rT   zComparableKey.public_keyf   sH   € äØ�M‰MÜ×.Ñ.´×0ZÑ0ZÐ[ô
ð ˆKà�~‰~˜dŸm™m×6Ñ6Ó8Ó9Ð9r   N)r   rH   )r<   r>   r?   r@   r2   r8   r   rC   Ú__annotations__r   r   ÚRSAPrivateKeyWithSerializationrR   r   Ú(EllipticCurvePrivateKeyWithSerializationrS   r$   rA   r   r)   rE   r4   r=   rT   rF   r   r   rH   rH   ?   s�   … ñð #1€Hˆh�r˜3�wÑÓ0ð	 àØ×.Ñ.Ø×-Ñ-Ø×7Ñ7Ø×6Ñ6ð8ñ
ó	 ð, ð ,¨ó ,ð"˜Cð " Dó "ðM˜#ó Mô:r   rH   c                   ó   — e Zd ZdZdefd„Zy)ÚComparableRSAKeyz×Wrapper for ``cryptography`` RSA keys.

    Wraps around:

    - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`
    - :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`

    r   c           
      ó  — t        | j                  t        j                  «      r| j	                  «       }|j
                  }t        | j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  f«      S t        | j                  t        j                  «      r<| j                  «       }t        | j                  |j                  |j                  f«      S t!        «       ‚r   )r   rJ   r   rV   rM   rN   r6   r1   ÚpÚqÚdmp1Údmq1ÚiqmpÚnÚerR   ÚNotImplementedError©r#   ÚprivÚpubs      r   r8   zComparableRSAKey.__hash__{   sÃ   € ô �d—m‘m¤S×%GÑ%GÔHØ×'Ñ'Ó)ˆDØ×%Ñ%ˆCÜØ—‘ §¡¨¯©°·±¸D¿I¹IÀtÇyÁyÐRU×RWÑRWÐY\×Y^ÑY^Ð_óð ô ˜Ÿ™¤s×'HÑ'HÔIØ×%Ñ%Ó'ˆCÜ˜Ÿ™¨¯©°·±Ð6Ó7Ð7ä!Ó#Ð#r   N©r<   r>   r?   r@   rC   r8   rF   r   r   rY   rY   q   s   „ ñð$˜#ô $r   rY   c                   ó   — e Zd ZdZdefd„Zy)ÚComparableECKeyzåWrapper for ``cryptography`` EC keys.
    Wraps around:
    - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`
    - :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`
    r   c                 ó  — t        | j                  t        j                  «      rh| j	                  «       }|j
                  }t        | j                  |j                  j                  |j                  |j                  |j                  f«      S t        | j                  t        j                  «      rQ| j                  «       }t        | j                  |j                  j                  |j                  |j                  f«      S t        «       ‚r   )r   rJ   r   rW   rM   rN   r6   r1   Úcurver%   ÚxÚyÚprivate_valuerS   rb   rc   s      r   r8   zComparableECKey.__hash__’   s´   € ô �d—m‘m¤R×%PÑ%PÔQØ×'Ñ'Ó)ˆDØ×%Ñ%ˆCÜ˜Ÿ™¨¯©¯©¸¿¹ÀÇÁÀt×GYÑGYÐZÓ[Ð[Ü˜Ÿ™¤r×'QÑ'QÔRØ×%Ñ%Ó'ˆCÜ˜Ÿ™¨¯©¯©¸¿¹ÀÇÁÐFÓGÐGä!Ó#Ð#r   Nrf   rF   r   r   rh   rh   ‹   s   „ ñð$˜#ô $r   rh   ÚGenericImmutableMapÚImmutableMap)Úboundc                   óª   — e Zd ZU dZdZeedf   ed<   	 deddfd„Z	d	e
dede
fd
„Zdedefd„Zdee   fd„Zdefd„Zdefd„Zdededdfd„Zdefd„Zy)ro   z5Immutable key to value mapping with attribute access.rF   .Ú	__slots__Úkwargsr   Nc                 óR  — t        |«      t        | j                  «      k7  rOt        dj                  dj	                  | j                  «      |rdj	                  |«      «      «      ‚d«      «      ‚| j                  D ](  }t
        j                  | ||j                  |«      «       Œ* y )NzA__init__() takes exactly the following arguments: {0} ({1} given)ú, Únone)Úsetrr   Ú	TypeErrorr;   ÚjoinÚobjectÚ__setattr__Úpop)r#   rs   Úslots      r   r$   zImmutableMap.__init__©   s–   € Üˆv‹;œ#˜dŸn™nÓ-Ò-Üðß$™fØ—I‘I˜dŸn™nÓ-ÁF¨t¯y©y¸Ó/@óóð ð QWóóð ð —N‘Nò 	=ˆDÜ×Ñ˜t T¨6¯:©:°dÓ+;Õ<ñ	=r   r#   c                 ó0   — i | ¥|¥} t        | «      di |¤ŽS )zReturn updated map.rF   )Útype)r#   rs   Úitemss      r   ÚupdatezImmutableMap.update´   s%   € à#5 dÐ#5¨fÐ#5ˆØŒt�D‹zÑ"˜EÑ"Ð"r   Úkeyc                 óL   — 	 t        | |«      S # t        $ r t        |«      ‚w xY wr   )r'   ÚAttributeErrorÚKeyError©r#   r‚   s     r   Ú__getitem__zImmutableMap.__getitem__¹   s-   € ð	 Ü˜4 Ó%Ð%øÜò 	 Ü˜3“-Ðð	 ús   ‚ Ž#c                 ó,   — t        | j                  «      S r   )Úiterrr   r7   s    r   Ú__iter__zImmutableMap.__iter__¿   s   € Ü�D—N‘NÓ#Ð#r   c                 ó,   — t        | j                  «      S r   )Úlenrr   r7   s    r   Ú__len__zImmutableMap.__len__Â   s   € Ü�4—>‘>Ó"Ð"r   c                 óR   ‡ — t        t        ˆ fd„‰ j                  D «       «      «      S )Nc              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr   )r'   )Ú.0r}   r#   s     €r   ú	<genexpr>z(ImmutableMap.__hash__.<locals>.<genexpr>Æ   s   øè ø€ ÒI°$œ' $¨×-ÑIùs   ƒ)r6   Útuplerr   r7   s   `r   r8   zImmutableMap.__hash__Å   s   ø€ Ü”EÓI¸$¿.¹.ÔIÓIÓJÐJr   r%   Úvaluec                 ó   — t        d«      ‚©Nzcan't set attribute©r„   ©r#   r%   r“   s      r   r{   zImmutableMap.__setattr__È   ó   € ÜÐ2Ó3Ð3r   c                 ó–   — dj                  | j                  j                  dj                  d„ | j	                  «       D «       «      «      S )Nz{0}({1})ru   c              3   óF   K  — | ]  \  }}d j                  ||«      –— Œ y­w©z	{0}={1!r}N©r;   ©r�   r‚   r“   s      r   r‘   z(ImmutableMap.__repr__.<locals>.<genexpr>Î   s!   è ø€ ÒT¹¸¸e�k×(Ñ(¨¨e×4ÑTùó   ‚!)r;   r1   r<   ry   r€   r7   s    r   r=   zImmutableMap.__repr__Ë   s:   € Ø× Ñ Ø�N‰N×#Ñ#Ø�I‰IÑTÀtÇzÁzÃ|ÔTÓTó
ð 	
r   )r<   r>   r?   r@   rr   r
   rA   rU   r   r$   rn   r�   r‡   r   rŠ   rC   r�   r8   r{   r=   rF   r   r   ro   ro   £   s¬   … Ù?à!#€Iˆu�S˜#�X‰Ó#Ø+ð	= ð 	=¨ó 	=ð#Ð(ð #°Cð #Ð<Oó #ð
 ˜sð   só  ð$˜( 3™-ó $ð#˜ó #ðK˜#ó Kð4 ð 4¨Cð 4°Dó 4ð
˜#ô 
r   c                   ó²   — e Zd ZdZdZdededdfd„Zdedefd	„Zde	e   fd
„Z
defd„Zdeeeef   df   fd„Zdefd„Zdedefd„Zdededdfd„Zdefd„Zy)Ú
frozendictzFrozen dictionary.)Ú_itemsÚ_keysÚargsrs   r   Nc           
      ó"  — |r|st        |«      }n1t        |«      dk(  rt        |d   t        «      r|d   }n
t	        «       ‚t
        j                  | d|«       t
        j                  | dt        t        |j                  «       «      «      «       y )Né   r   r¡   r¢   )
ÚdictrŒ   r   r   rx   rz   r{   r’   ÚsortedÚkeys)r#   r£   rs   r€   s       r   r$   zfrozendict.__init__×   so   € á™$Ü˜“L‰EÜ�‹Y˜!Š^¤
¨4°©7´GÔ <Ø˜‘G‰Eä“+Ðô 	×Ñ˜4 ¨5Ô1Ü×Ñ˜4 ¬%´°u·z±z³|Ó0DÓ*EÕFr   r‚   c                 ó    — | j                   |   S r   )r¡   r†   s     r   r‡   zfrozendict.__getitem__ä   s   € Ø�{‰{˜3ÑÐr   c                 ó,   — t        | j                  «      S r   )r‰   r¢   r7   s    r   rŠ   zfrozendict.__iter__ç   s   € Ü�D—J‘JÓÐr   c                 ó,   — t        | j                  «      S r   )rŒ   r¡   r7   s    r   r�   zfrozendict.__len__ê   s   € Ü�4—;‘;ÓÐr   .c                 ó@   ‡ — t        ˆ fd„‰ j                  D «       «      S )Nc              3   ó,   •K  — | ]  }|‰|   f–— Œ y ­wr   rF   )r�   r‚   r#   s     €r   r‘   z+frozendict._sorted_items.<locals>.<genexpr>î   s   øè ø€ Ò<¨#�c˜4 ™9Ô%Ñ<ùs   ƒ)r’   r¢   r7   s   `r   Ú_sorted_itemszfrozendict._sorted_itemsí   s   ø€ ÜÓ<°·±Ô<Ó<Ð<r   c                 ó4   — t        | j                  «       «      S r   )r6   r®   r7   s    r   r8   zfrozendict.__hash__ð   s   € Ü�D×&Ñ&Ó(Ó)Ð)r   r%   c                 óR   — 	 | j                   |   S # t        $ r t        |«      ‚w xY wr   )r¡   r…   r„   r(   s     r   r)   zfrozendict.__getattr__ó   s0   € ð	'Ø—;‘;˜tÑ$Ð$øÜò 	'Ü  Ó&Ð&ð	'ús   ‚ ‘&r“   c                 ó   — t        d«      ‚r•   r–   r—   s      r   r{   zfrozendict.__setattr__ù   r˜   r   c                 ól   — dj                  dj                  d„ | j                  «       D «       «      «      S )Nzfrozendict({0})ru   c              3   óF   K  — | ]  \  }}d j                  ||«      –— Œ y­wr›   rœ   r�   s      r   r‘   z&frozendict.__repr__.<locals>.<genexpr>þ   s!   è ø€ Ò\¹¸¸e�k×(Ñ(¨¨e×4Ñ\ùrž   )r;   ry   r®   r7   s    r   r=   zfrozendict.__repr__ü   s0   € Ø ×'Ñ'Ø�I‰IÑ\Àt×GYÑGYÓG[Ô\Ó\ó
ð 	
r   )r<   r>   r?   r@   rr   r   r$   rA   r‡   r   rŠ   rC   r�   r
   r®   r8   r)   r{   r=   rF   r   r   r    r    Ò   sº   „ Ùà#€IðG˜cð G¨Sð G°Tó Gð ˜sð   só  ð ˜( 3™-ó  ð ˜ó  ð=˜u U¨3°¨8¡_°cÐ%9Ñ:ó =ð*˜#ó *ð' ð '¨ó 'ð4 ð 4¨Cð 4°Dó 4ð
˜#ô 
r   r    c                   óf   — e Zd ZdZdeddfd„Zdedefd„Zdededdfd	„Z	deddfd
„Z
dee   fd„Zy)Ú_UtilDeprecationModulez²
    Internal class delegating to a module, and displaying warnings when attributes
    related to the deprecated "abstractclassmethod" attributes in the josepy.util module.
    Úmoduler   Nc                 ó"   — || j                   d<   y ©NÚ_module)Ú__dict__)r#   r¶   s     r   r$   z_UtilDeprecationModule.__init__  s   € Ø#)ˆ�‰�iÒ r   Úattrc                 óp   — |dk(  rt        j                  dt        d¬«       t        | j                  |«      S )Nr   z²The abstractclassmethod attribute in josepy.util is deprecated and will be removed soon. Please use the built-in decorators @classmethod and @abc.abstractmethod together instead.é   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr'   r¹   ©r#   r»   s     r   r)   z"_UtilDeprecationModule.__getattr__  s7   € ØÐ(Ò(Ü�M‰Mð8ô #Øõô �t—|‘| TÓ*Ð*r   r“   c                 ó2   — t        | j                  ||«       y r   )Úsetattrr¹   )r#   r»   r“   s      r   r{   z"_UtilDeprecationModule.__setattr__  s   € Ü�—‘˜d EÕ*r   c                 ó0   — t        | j                  |«       y r   )Údelattrr¹   rÂ   s     r   Ú__delattr__z"_UtilDeprecationModule.__delattr__  s   € Ü�—‘˜dÕ#r   c                 ó4   — dgt        | j                  «      z   S r¸   )Údirr¹   r7   s    r   Ú__dir__z_UtilDeprecationModule.__dir__  s   € Øˆ{œS §¡Ó.Ñ.Ð.r   )r<   r>   r?   r@   r   r$   rA   r   r)   r{   rÇ   r	   rÊ   rF   r   r   rµ   rµ     sj   „ ñð
*˜zð *¨dó *ð	+ ð 	+¨ó 	+ð+ ð +¨Cð +°Dó +ð$ ð $¨ó $ð/˜˜c™ô /r   rµ   )#r@   r   Úsysr¿   Úcollections.abcr   r   Útypesr   Útypingr   r   r   r	   r
   r   r   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   ÚOpenSSLr   r   r   r   rH   rY   rh   rn   ro   r    rµ   Úmodulesr<   rF   r   r   ú<module>rÒ      sÇ   ðÙ Û 
Û 
Û ß -Ý ß M× MÓ Mç =Ý ð1˜hð 1¨;ó 1÷*Lñ *L÷Z/:ñ /:ôd$�}ô $ô4$�mô $ñ* Ð3¸>ÔJÐ ô,
�7˜Hô ,
ô^-
�˜(ô -
÷f/ñ /ñ> ˜ZÑ)?ÀÇÁÈHÑ@UÓ)VÓW€‡�ˆHÒ r   