§
    8·tcà?  ã                   ó  — d dl mZ d dlmZmZmZmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ dZdZd	Zd
ZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ) G d„ de*¦  «        Z+ G d„ de,¦  «        Z- G d„ de,¦  «        Z.dS )é    )ÚRandom)ÚDerSequenceÚDerOctetStringÚDerObjectIdÚ
DerInteger)ÚpadÚunpad)ÚMD5ÚSHA1ÚSHA224ÚSHA256ÚSHA384ÚSHA512)ÚDESÚARC2ÚDES3ÚAES)ÚPBKDF1ÚPBKDF2Úscryptz1.2.840.113549.1.5.3z1.2.840.113549.1.5.6z1.2.840.113549.1.5.10z1.2.840.113549.1.5.11z1.2.840.113549.1.5.13z1.2.840.113549.1.5.12z1.3.6.1.4.1.11591.4.11ú1.2.840.113549.2.7z1.2.840.113549.2.8z1.2.840.113549.2.9z1.2.840.113549.2.10z1.2.840.113549.2.11z1.2.840.113549.3.7z2.16.840.1.101.3.4.1.2z2.16.840.1.101.3.4.1.22z2.16.840.1.101.3.4.1.42c                   ó   — e Zd ZdS )Ú	PbesErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú5/usr/lib/python3/dist-packages/Cryptodome/IO/_PBES.pyr   r   C   s   € € € € € Ø€Dr   r   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚPBES1z¼Deprecated encryption scheme with password-based key derivation
    (originally defined in PKCS#5 v1.5, but still present in `v2.0`__).

    .. __: http://www.ietf.org/rfc/rfc2898.txt
    c                 óÎ  — t          ¦   «                              | ¦  «        }t          ¦   «                              |d         ¦  «        }t          ¦   «                              |d         ¦  «        j        }t	          ¦   «                              |d         ¦  «        j        }i }|t          k    rt          }t          }ng|t          k    rt          }t          }d|d<   nH|t          k    rt          }t          }n.|t          k    rt          }t          }d|d<   nt          d¦  «        ‚t          ¦   «                              |d         d¬¦  «        }	t          ¦   «                              |	d         ¦  «        j        }
|	d         }t          ||
d||¦  «        }|d	d
…         |d
d	…         }} |j        ||j        |fi |¤Ž}|                     |¦  «        }t'          ||j        ¦  «        S )ax  Decrypt a piece of data using a passphrase and *PBES1*.

        The algorithm to use is automatically detected.

        :Parameters:
          data : byte string
            The piece of data to decrypt.
          passphrase : byte string
            The passphrase to use for decrypting the data.
        :Returns:
          The decrypted data, as a binary string.
        r   é   é@   Úeffective_keylenzUnknown OID for PBES1é   ©Únr_elementsé   Né   )r   Údecoder   Úpayloadr   ÚvalueÚ_OID_PBE_WITH_MD5_AND_DES_CBCr
   r   Ú_OID_PBE_WITH_MD5_AND_RC2_CBCr   Ú_OID_PBE_WITH_SHA1_AND_DES_CBCr   Ú_OID_PBE_WITH_SHA1_AND_RC2_CBCr   r   ÚnewÚMODE_CBCÚdecryptr	   Ú
block_size)ÚdataÚ
passphraseÚenc_private_key_infoÚencrypted_algorithmÚencrypted_dataÚpbe_oidÚcipher_paramsÚhashmodÚ	ciphermodÚ
pbe_paramsÚsaltÚ
iterationsÚkey_ivÚkeyÚivÚcipherÚpts                    r   r4   zPBES1.decrypty   sÅ  € õ  +™}œ}×3Ò3°DÑ9Ô9ÐÝ)™mœm×2Ò2Ð3GÈÔ3JÑKÔKÐÝ'Ñ)Ô)×0Ò0Ð1EÀaÔ1HÑIÔIÔQˆå‘-”-×&Ò&Ð':¸1Ô'=Ñ>Ô>ÔDˆØˆØÕ3Ò3Ð3åˆGÝˆIˆIØÕ5Ò5Ð5åˆGÝˆIØ02ˆMÐ,Ñ-Ð-ØÕ6Ò6Ð6åˆGÝˆIˆIØÕ6Ò6Ð6åˆGÝˆIØ02ˆMÐ,Ñ-Ð-åÐ3Ñ4Ô4Ð4å ‘]”]×)Ò)Ð*=¸aÔ*@ÈaÐ)ÑPÔPˆ
ÝÑÔ×&Ò& z°!¤}Ñ5Ô5Ô=ˆØ ”]ˆ
å˜
 D¨"¨j¸'ÑBÔBˆØ˜˜!˜”*˜f Q R RœjˆRˆà�”˜s IÔ$6¸ÐLÐL¸mÐLÐLˆØ�^Š^˜NÑ+Ô+ˆÝ�R˜Ô*Ñ+Ô+Ð+r   N)r   r   r   Ú__doc__Ústaticmethodr4   r   r   r   r!   r!   r   s9   € € € € € ðð ð ð2,ð 2,ñ „\ð2,ð 2,ð 2,r   r!   c                   ó@   — e Zd ZdZedd„¦   «         Zed„ ¦   «         ZdS )ÚPBES2z‡Encryption scheme with password-based key derivation
    (defined in `PKCS#5 v2.0`__).

    .. __: http://www.ietf.org/rfc/rfc2898.txt.Nc                 óî  — |€i }|€t          j        ¦   «         j        }|dk    rd}t          }t          j        }t
          }nr|dv rd}t          }t          j        }t          }nQ|dv rd}t          }t          j        }t          }n0|dv rd}t          }t          j        }t          }nt          d	¦  «        ‚ ||j        ¦  «        }	 ||                     d
d¦  «        ¦  «        }
|                     d¦  «        ru|                     dd¦  «        }t          ||
||¦  «        }t          t!          t"          ¦  «        t          t%          |
¦  «        t'          |¦  «        g¦  «        g¦  «        }n¾|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }t)          ||
||||¦  «        }t          t!          t*          ¦  «        t          t%          |
¦  «        t'          |¦  «        t'          |¦  «        t'          |¦  «        g¦  «        g¦  «        }|                     |||	¦  «        }|                     t/          | |j        ¦  «        ¦  «        }t          t!          |¦  «        t%          |	¦  «        g¦  «        }t          t          t!          t0          ¦  «        t          ||g¦  «        g¦  «        t%          |¦  «        g¦  «        }|                     ¦   «         S )aª	  Encrypt a piece of data using a passphrase and *PBES2*.

        :Parameters:
          data : byte string
            The piece of data to encrypt.
          passphrase : byte string
            The passphrase to use for encrypting the data.
          protection : string
            The identifier of the encryption algorithm to use.
            The default value is '``PBKDF2WithHMAC-SHA1AndDES-EDE3-CBC``'.
          prot_params : dictionary
            Parameters of the protection algorithm.

            +------------------+-----------------------------------------------+
            | Key              | Description                                   |
            +==================+===============================================+
            | iteration_count  | The KDF algorithm is repeated several times to|
            |                  | slow down brute force attacks on passwords    |
            |                  | (called *N* or CPU/memory cost in scrypt).    |
            |                  |                                               |
            |                  | The default value for PBKDF2 is 1 000.        |
            |                  | The default value for scrypt is 16 384.       |
            +------------------+-----------------------------------------------+
            | salt_size        | Salt is used to thwart dictionary and rainbow |
            |                  | attacks on passwords. The default value is 8  |
            |                  | bytes.                                        |
            +------------------+-----------------------------------------------+
            | block_size       | *(scrypt only)* Memory-cost (r). The default  |
            |                  | value is 8.                                   |
            +------------------+-----------------------------------------------+
            | parallelization  | *(scrypt only)* CPU-cost (p). The default     |
            |                  | value is 1.                                   |
            +------------------+-----------------------------------------------+


          randfunc : callable
            Random number generation function; it should accept
            a single integer N and return a string of random data,
            N bytes long. If not specified, a new RNG will be
            instantiated from ``Cryptodome.Random``.

        :Returns:
          The encrypted data, as a binary string.
        Nz"PBKDF2WithHMAC-SHA1AndDES-EDE3-CBCé   )z PBKDF2WithHMAC-SHA1AndAES128-CBCzscryptAndAES128-CBCr)   )z PBKDF2WithHMAC-SHA1AndAES192-CBCzscryptAndAES192-CBC)z PBKDF2WithHMAC-SHA1AndAES256-CBCzscryptAndAES256-CBCé    zUnknown PBES2 modeÚ	salt_sizer*   r   Úiteration_countiè  i @  r5   Úparallelizationr#   )r   r2   Úreadr   r3   Ú_OID_DES_EDE3_CBCr   Ú_OID_AES128_CBCÚ_OID_AES192_CBCÚ_OID_AES256_CBCÚ
ValueErrorr5   ÚgetÚ
startswithr   r   r   Ú_OID_PBKDF2r   r   r   Ú_OID_SCRYPTÚencryptr   Ú
_OID_PBES2Úencode)r6   r7   Ú
protectionÚprot_paramsÚrandfuncÚkey_sizeÚmoduleÚcipher_modeÚenc_oidrD   r@   ÚcountrC   Úkdf_infoÚscrypt_rÚscrypt_prE   r:   Úenc_infor8   s                       r   r[   zPBES2.encryptµ   s  € ð^ ÐØˆKàÐÝ”z‘|”|Ô(ˆHàÐ=Ò=Ð=ØˆHÝˆFÝœ-ˆKÝ'ˆGˆGØð 'ð 'ð 'àˆHÝˆFÝœ,ˆKÝ%ˆGˆGØð 'ð 'ð 'àˆHÝˆFÝœ,ˆKÝ%ˆGˆGØð 'ð 'ð 'àˆHÝˆFÝœ,ˆKÝ%ˆGˆGåÐ1Ñ2Ô2Ð2ð ˆX�fÔ'Ñ(Ô(ˆØˆx˜Ÿš¨°QÑ7Ô7Ñ8Ô8ˆð × Ò  Ñ*Ô*ð 	Ø—O’OÐ$5°tÑ<Ô<ˆEÝ˜ T¨8°UÑ;Ô;ˆCÝ"Ý¥Ñ,Ô,ÝÝ& tÑ,Ô,Ý" 5Ñ)Ô)ð!ñ ô ð$ñ ô ˆHˆHð  —O’OÐ$5°uÑ=Ô=ˆEØ"—’ |°QÑ7Ô7ˆHØ"—’Ð'8¸!Ñ<Ô<ˆHÝ˜ T¨8Ø ¨(ñ4ô 4ˆCå"Ý¥Ñ,Ô,ÝÝ& tÑ,Ô,Ý" 5Ñ)Ô)Ý" 8Ñ,Ô,Ý" 8Ñ,Ô,ð	!ñ ô ð$ñ ô ˆHð —’˜C ¨bÑ1Ô1ˆØŸš­¨D°&Ô2CÑ(DÔ(DÑEÔEˆÝÝ˜GÑ$Ô$Ý˜rÑ"Ô"ð 
ñ ô ˆõ  +åÝ�JÑ'Ô'ÝØØðñ ô ðñ ô õ ˜>Ñ*Ô*ð
,
ñ 
 ô 
 Ðð $×*Ò*Ñ,Ô,Ð,r   c                 óŽ	  ‡— t          ¦   «                              | d¬¦  «        }t          ¦   «                              |d         ¦  «        }t          ¦   «                              |d         ¦  «        j        }t	          ¦   «                              |d         ¦  «        j        }|t          k    rt          d¦  «        ‚t          ¦   «                              |d         d¬¦  «        }t          ¦   «                              |d         d¬¦  «        }t	          ¦   «                              |d         ¦  «        j        }d}	|t          k    rút          ¦   «                              |d         d¬¦  «        }
t          ¦   «                              |
d         ¦  «        j        }|
d         }t          |
¦  «        dz
  }d}|dk    r'	 |
|         dz
  }	|dz  }|dz  }n# t          $ r Y nw xY wd}|dk    rSt          ¦   «                              |
|         ¦  «        }t	          ¦   «                              |d         ¦  «        j        }n |t          k    r†t          ¦   «                              |d         d	¬¦  «        Št          ¦   «                              ‰d         ¦  «        j        }ˆfd
„dD ¦   «         \  }}}t          ‰¦  «        dk    r	‰d         }	nd}	nt          d¦  «        ‚t          ¦   «                              |d         ¦  «        }t	          ¦   «                              |d         ¦  «        j        }|t          k    r
t          }d}nN|t          k    r
t          }d}n9|t           k    r
t          }d}n$|t"          k    r
t          }d}nt          d¦  «        ‚|	r|	|k    rt          d¦  «        ‚t          ¦   «                              |d         ¦  «        j        }|t          k    r†|t$          k    rt&          }n^|t(          k    rt*          }nK|t,          k    rt.          }n8|t0          k    rt2          }n%|t4          k    rt6          }nt          d|z  ¦  «        ‚t9          |||||¬¦  «        }nt;          ||||||¦  «        }|                     ||j        |¦  «        }|                      |¦  «        }tC          ||j"        ¦  «        S )ax  Decrypt a piece of data using a passphrase and *PBES2*.

        The algorithm to use is automatically detected.

        :Parameters:
          data : byte string
            The piece of data to decrypt.
          passphrase : byte string
            The passphrase to use for decrypting the data.
        :Returns:
          The decrypted data, as a binary string.
        r&   r'   r   r#   zNot a PBES2 objectN)r&   é   é   r   )rl   é   c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )Ú.0ÚxÚscrypt_paramss     €r   ú
<listcomp>z!PBES2.decrypt.<locals>.<listcomp>u  s5   ø€ ð 3Gð 3Gð 3GØ78ð 4AÀÔ3Cð 3Gð 3Gð 3Gr   )r#   r&   rk   rl   zUnsupported PBES2 KDFrL   r)   rM   zUnsupported PBES2 cipherz9Mismatch between PBES2 KDF parameters and selected cipherzUnsupported HMAC %s)Úhmac_hash_module)#r   r+   r   r,   r   r-   r\   r   rY   ÚlenÚ	TypeErrorrZ   rR   r   rS   r   rT   rU   Ú_OID_HMAC_SHA1r   Ú_OID_HMAC_SHA224r   Ú_OID_HMAC_SHA256r   Ú_OID_HMAC_SHA384r   Ú_OID_HMAC_SHA512r   r   r   r2   r3   r4   r	   r5   )r6   r7   r8   Úenc_algor:   r;   Úpbes2_paramsrf   Úkdf_oidÚkdf_key_lengthÚpbkdf2_paramsr@   rO   ÚleftÚidxÚpbkdf2_prf_oidÚpbkdf2_prf_algo_idrg   rh   ri   rd   r>   ra   ÚIVrs   rC   rE   rF   rq   s                               @r   r4   zPBES2.decrypt:  s»  ø€ õ  +™}œ}×3Ò3°DÀaÐ3ÑHÔHÐÝ‘=”=×'Ò'Ð(<¸QÔ(?Ñ@Ô@ˆÝ'Ñ)Ô)×0Ò0Ð1EÀaÔ1HÑIÔIÔQˆå‘-”-×&Ò& x°¤{Ñ3Ô3Ô9ˆØ•jÒ Ð ÝÐ0Ñ1Ô1Ð1å"‘}”}×+Ò+¨H°Q¬KÀQÐ+ÑGÔGˆõ ‘=”=×'Ò'¨°Q¬ÀQÐ'ÑGÔGˆÝ‘-”-×&Ò& x°¤{Ñ3Ô3Ô9ˆàˆð •kÒ!Ð!å'™MœM×0Ò0°¸!´È)Ð0ÑTÔTˆMÝ!Ñ#Ô#×*Ò*¨=¸Ô+;Ñ<Ô<ÔDˆDØ+¨AÔ.ˆOå�}Ñ%Ô%¨Ñ)ˆDØˆCà�aŠxˆxðØ%2°3Ô%7¸!Ñ%;�NØ˜A‘I�DØ˜1‘H�C�CøÝ ð ð ð Ø�Dðøøøð 2ˆNØ�aŠxˆxÝ%0¡]¤]×%9Ò%9¸-ÈÔ:LÑ%MÔ%MÐ"Ý!,¡¤×!5Ò!5Ð6HÈÔ6KÑ!LÔ!LÔ!R�øà�Ò#Ð#å'™MœM×0Ò0°¸!´È&Ð0ÑQÔQˆMÝ!Ñ#Ô#×*Ò*¨=¸Ô+;Ñ<Ô<ÔDˆDð3Gð 3Gð 3Gð 3GØ<Eð3Gñ 3Gô 3GÑ/ˆO˜X xå�=Ñ!Ô! AÒ%Ð%Ø!.¨qÔ!1��à!%��åÐ3Ñ4Ô4Ð4õ ‘=”=×'Ò'¨°Q¬Ñ8Ô8ˆÝ‘-”-×&Ò& x°¤{Ñ3Ô3Ô9ˆàÕ'Ò'Ð'åˆIØˆHˆHØ�Ò'Ð'åˆIØˆHˆHØ�Ò'Ð'åˆIØˆHˆHØ�Ò'Ð'åˆIØˆHˆHåÐ6Ñ7Ô7Ð7àð 	4˜n°Ò8Ð8Ýð 3ñ 4ô 4ð 4õ ÑÔ×$Ò$ X¨a¤[Ñ1Ô1Ô9ˆð •kÒ!Ð!Ø¥Ò/Ð/Ý#'Ð Ð ØÕ#3Ò3Ð3Ý#)Ð Ð ØÕ#3Ò3Ð3Ý#)Ð Ð ØÕ#3Ò3Ð3Ý#)Ð Ð ØÕ#3Ò3Ð3Ý#)Ð Ð åÐ 5¸Ñ FÑGÔGÐGå˜ T¨8°_Ø*:ð<ñ <ô <ˆCˆCõ ˜ T¨8°_Ø! 8ñ-ô -ˆCà—’˜s IÔ$6¸Ñ;Ô;ˆð �^Š^˜NÑ+Ô+ˆÝ�R˜Ô*Ñ+Ô+Ð+s   ÇG Ç
G$Ç#G$)NN)r   r   r   rG   rH   r[   r4   r   r   r   rJ   rJ   ¯   sc   € € € € € ð3ð 3ð
 ðB-ð B-ð B-ñ „\ðB-ðH ðx,ð x,ñ „\ðx,ð x,ð x,r   rJ   N)/Ú
Cryptodomer   ÚCryptodome.Util.asn1r   r   r   r   ÚCryptodome.Util.Paddingr   r	   ÚCryptodome.Hashr
   r   r   r   r   r   ÚCryptodome.Cipherr   r   r   r   ÚCryptodome.Protocol.KDFr   r   r   r.   r/   r0   r1   r\   rY   rZ   rv   rw   rx   ry   rz   rR   rS   rT   rU   rV   r   Úobjectr!   rJ   r   r   r   ú<module>rŒ      sÏ  ððD Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð
 /Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à 6Ð Ø 6Ð Ø!8Ð Ø!8Ð à$€
à%€Ø&€à%€Ø'Ð Ø'Ð Ø(Ð Ø(Ð à(Ð Ø*€Ø+€Ø+€ð	ð 	ð 	ð 	ð 	�
ñ 	ô 	ð 	ð^:,ð :,ð :,ð :,ð :,ˆFñ :,ô :,ð :,ðzD,ð D,ð D,ð D,ð D,ˆFñ D,ô D,ð D,ð D,ð D,r   