HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/josepy/__pycache__/util.cpython-38.pyc
U

��]��@s�dZzddlmZmZWn$ek
r<ddlmZmZYnXddlZddlZddlm	Z	Gdd�de
�ZGdd�de�Z
Gd	d
�d
e�ZGdd�de�ZGd
d�dee�ZGdd�dee�ZdS)zJOSE utilities.�)�Hashable�MappingN)�rsacs$eZdZdZdZ�fdd�Z�ZS)�abstractclassmethoda�Descriptor for an abstract classmethod.

    It augments the :mod:`abc` framework with an abstract
    classmethod. This is implemented as :class:`abc.abstractclassmethod`
    in the standard Python library starting with version 3.2.

    This particular implementation, allegedly based on Python 3.3 source
    code, is stolen from
    http://stackoverflow.com/questions/11217878/python-2-7-combine-abc-abstractmethod-and-classmethod.

    Tcsd|_tt|��|�dS)NT)�__isabstractmethod__�superr�__init__)�self�target��	__class__��-/usr/lib/python3/dist-packages/josepy/util.pyrszabstractclassmethod.__init__)�__name__�
__module__�__qualname__�__doc__rr�
__classcell__r
r
rrrsrc@sPeZdZdZdd�Zdd�Zejjfdd�Z	dd	�Z
d
d�Zdd
�Zdd�Z
dS)�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`.

    cCs*t|tjj�s t|tjj�s t�||_dS�N)�
isinstance�OpenSSL�crypto�X509ZX509Req�AssertionError�wrapped�r	rr
r
rr's
�zComparableX509.__init__cCst|j|�Sr)�getattrr�r	�namer
r
r�__getattr__,szComparableX509.__getattr__cCs.t|jtjj�rtjj}ntjj}|||j�S)aLDumps 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: str

        )rrrrrZdump_certificateZdump_certificate_request)r	Zfiletype�funcr
r
r�_dump/s
zComparableX509._dumpcCs t||j�stS|��|��kSr)rr�NotImplementedr"�r	�otherr
r
r�__eq__AszComparableX509.__eq__cCst|j|��f�Sr)�hashrr"�r	r
r
r�__hash__GszComparableX509.__hash__cCs
||kSrr
r$r
r
r�__ne__JszComparableX509.__ne__cCsd�|jj|j�S�Nz<{0}({1!r})>)�formatrrrr(r
r
r�__repr__MszComparableX509.__repr__N)rrrrrr rrZ
FILETYPE_ASN1r"r&r)r*r-r
r
r
rr src@sDeZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�ZdS)�
ComparableKeyznComparable wrapper for ``cryptography`` keys.

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

    cCs
||_dSr)�_wrappedrr
r
rrYszComparableKey.__init__cCst|j|�Sr)rr/rr
r
rr \szComparableKey.__getattr__cCs`t||j�r|jj|jjk	r tSt|jd�r<|��|��kSt|jd�rX|��|��kStSdS)N�private_numbers�public_numbers)rrr/r#�hasattrr0r1r$r
r
rr&_s�zComparableKey.__eq__cCs
||kSrr
r$r
r
rr*kszComparableKey.__ne__cCsd�|jj|j�Sr+)r,rrr/r(r
r
rr-nszComparableKey.__repr__cCs|�|j���S)zGet wrapped public key.)rr/�
public_keyr(r
r
rr3qszComparableKey.public_keyN)rrrrr#r)rr r&r*r-r3r
r
r
rr.Qsr.c@seZdZdZdd�ZdS)�ComparableRSAKeyz�Wrapper for ``cryptography`` RSA keys.

    Wraps around:

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

    c	Csrt|jtj�rD|��}|j}t|j|j|j	|j
|j|j|j
|jf�St|jtj�rn|��}t|j|j
|jf�SdSr)rr/rZRSAPrivateKeyWithSerializationr0r1r'r�p�qZdmp1Zdmq1Ziqmp�n�eZRSAPublicKeyWithSerialization)r	ZprivZpubr
r
rr)�s�zComparableRSAKey.__hash__N)rrrrr)r
r
r
rr4vs	r4c@sTeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)�ImmutableMapz5Immutable key to value mapping with attribute access.r
cKs\t|�t|j�kr8td�d�|j�|r0d�|�nd���|jD]}t�|||�|��q>dS)NzA__init__() takes exactly the following arguments: {0} ({1} given)�, Znone)�set�	__slots__�	TypeErrorr,�join�object�__setattr__�pop)r	�kwargs�slotr
r
rr�s
��
zImmutableMap.__init__cKs t|�}|�|�t|�f|�S)zReturn updated map.)�dict�update�type)r	rB�itemsr
r
rrE�s
zImmutableMap.updatecCs.zt||�WStk
r(t|��YnXdSr)r�AttributeError�KeyError�r	�keyr
r
r�__getitem__�szImmutableMap.__getitem__cCs
t|j�Sr)�iterr<r(r
r
r�__iter__�szImmutableMap.__iter__cCs
t|j�Sr)�lenr<r(r
r
r�__len__�szImmutableMap.__len__cstt�fdd��jD���S)Nc3s|]}t�|�VqdSr)r)�.0rCr(r
r�	<genexpr>�sz(ImmutableMap.__hash__.<locals>.<genexpr>)r'�tupler<r(r
r(rr)�szImmutableMap.__hash__cCstd��dS�Nzcan't set attribute�rH�r	r�valuer
r
rr@�szImmutableMap.__setattr__c	Cs&d�|jjd�dd�t�|�D���S)Nz{0}({1})r:css|]\}}d�||�VqdS�z	{0}={1!r}N�r,�rQrKrWr
r
rrR�s�z(ImmutableMap.__repr__.<locals>.<genexpr>)r,rrr>�sixZ	iteritemsr(r
r
rr-�s�zImmutableMap.__repr__N)
rrrrr<rrErLrNrPr)r@r-r
r
r
rr9�s	r9c@s\eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dS)�
frozendictzFrozen dictionary.)�_items�_keysc	Osj|r|st|�}n*t|�dkr6t|dt�r6|d}nt��t�|d|�t�|dttt	�
|����dS)N�rr]r^)rDrOrrr=r?r@rS�sortedr[Ziterkeys)r	�argsrBrGr
r
rr�s

zfrozendict.__init__cCs
|j|Sr)r]rJr
r
rrL�szfrozendict.__getitem__cCs
t|j�Sr)rMr^r(r
r
rrN�szfrozendict.__iter__cCs
t|j�Sr)rOr]r(r
r
rrP�szfrozendict.__len__cst�fdd��jD��S)Nc3s|]}|�|fVqdSrr
)rQrKr(r
rrR�sz+frozendict._sorted_items.<locals>.<genexpr>)rSr^r(r
r(r�
_sorted_items�szfrozendict._sorted_itemscCst|���Sr)r'rbr(r
r
rr)�szfrozendict.__hash__cCs.z|j|WStk
r(t|��YnXdSr)r]rIrHrr
r
rr �szfrozendict.__getattr__cCstd��dSrTrUrVr
r
rr@�szfrozendict.__setattr__cCsd�d�dd�|��D���S)Nzfrozendict({0})r:css|]\}}d�||�VqdSrXrYrZr
r
rrR�s
��z&frozendict.__repr__.<locals>.<genexpr>)r,r>rbr(r
r
rr-�s�zfrozendict.__repr__N)rrrrr<rrLrNrPrbr)r r@r-r
r
r
rr\�sr\)rZcollections.abcrr�ImportError�collectionsrr[Z)cryptography.hazmat.primitives.asymmetricr�classmethodrr?rr.r4r9r\r
r
r
r�<module>s1%.