+
    ¢THif?  ã                   ó:  € R t ^ RIHtHt ^ RIHtHt ^ RIHu H	t
 ^ RIHt ^ RIHt ^ RIHtHt . R%Ot ! R
 R]
P&                  ]
P(                  ]
P*                  ]
P,                  4      tRR]3R lt]! R^RRR7      t]! R^ R4      t]! R^@R4      t]
P:                  ! R]RRRR7      t]
P:                  ! R]RRRR7      t]
P:                  ! R]RRRR7      t Rt! ! R  R]
P&                  ]
P(                  ]
P*                  ]
P,                  4      t" ! R! R]
P&                  ]
PF                  ]
P,                  4      t$ ! R" R#]
P(                  ]
P*                  ]
P,                  4      t% ! R$ R	]
P&                  ]
P(                  ]
P*                  ]
P,                  4      t&R# )&zPBKDF2 based hashes)Ú	b64decodeÚ	b64encode)ÚhexlifyÚ	unhexlifyN)Úpbkdf2_hmac)Ú
to_unicode)Úab64_decodeÚab64_encodeÚcta_pbkdf2_sha1Údlitz_pbkdf2_sha1Úgrub_pbkdf2_sha512c                   óx   a € ] tR t^t o RtR
t]P                  t^t	Rt
Rt^tRtRtRt]R 4       tR tR tR	tV tR# )ÚPbkdf2DigestHandlerz1base class for various pbkdf2_{digest} algorithmsé   Nì   ÿÿ Úlinearc                óØ   € \         P                  ! WP                  V R 7      w  r#p\        VP	                  R4      4      pV'       d   \        VP	                  R4      4      pV ! W#VR7      # ))ÚhandlerÚascii©ÚroundsÚsaltÚchecksum)ÚuhÚ	parse_mc3Úidentr   Úencode©ÚclsÚhashr   r   Úchks   &&   Ú9/usr/lib/python3/dist-packages/passlib/handlers/pbkdf2.pyÚfrom_stringÚPbkdf2DigestHandler.from_string2   sQ   € äŸLšL¨¯y©yÀ#ÔFÑˆ�cÜ˜4Ÿ;™; wÓ/Ó0ˆßÜ˜cŸj™j¨Ó1Ó2ˆCÙ˜&°cÔ:Ð:ó    c                óê   € \        V P                  4      P                  R 4      p\        V P                  4      P                  R 4      p\        P
                  ! V P                  V P                  W4      # ©r   )r	   r   Údecoder   r   Ú
render_mc3r   r   ©Úselfr   r    s   &  r!   Ú	to_stringÚPbkdf2DigestHandler.to_string:   sO   € Ü˜4Ÿ9™9Ó%×,Ñ,¨WÓ5ˆÜ˜$Ÿ-™-Ó(×/Ñ/°Ó8ˆÜ�}Š}˜TŸZ™Z¨¯©°dÓ@Ð@r$   c                ón   € \        V P                  WP                  V P                  V P                  4      # )N)r   Ú_digestr   r   Úchecksum_size©r*   Úsecrets   &&r!   Ú_calc_checksumÚ"Pbkdf2DigestHandler._calc_checksum?   s*   € äØ�L‰L˜&§)¡)¨T¯[©[¸$×:LÑ:Ló
ð 	
r$   © ©r   Ú	salt_sizer   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úsetting_kwdsr   ÚHASH64_CHARSÚchecksum_charsÚdefault_salt_sizeÚmax_salt_sizeÚdefault_roundsÚ
min_roundsÚ
max_roundsÚrounds_costr.   Úclassmethodr"   r+   r2   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r!   r   r      sh   ø‡ € ñ <ð 3€LØ—_‘_€Nð ÐØ€Mð €NØ€JØ€JØ€Kð €Gð ñ;ó ð;òA÷

ð 
r$   r   ià.  c                óò   € RV ,           pVf   RV  R2p\         p\        VV3\        VVVV VVV^,          ^,           ^,          R\        V P                  4       VP                  VR7      ,          R7      4      # )z;create new Pbkdf2DigestHandler subclass for a specific hashÚpbkdf2_z$pbkdf2-Ú$a$  This class implements a generic ``PBKDF2-HMAC-%(digest)s``-based password hash, and follows the :ref:`password-hash-api`.

    It supports a variable-length salt, and a variable number of rounds.

    The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

    :type salt: bytes
    :param salt:
        Optional salt bytes.
        If specified, the length must be between 0-1024 bytes.
        If not specified, a %(dsc)d byte salt will be autogenerated (this is recommended).

    :type salt_size: int
    :param salt_size:
        Optional number of bytes to use when autogenerating new salts.
        Defaults to %(dsc)d bytes, but can be any value between 0 and 1024.

    :type rounds: int
    :param rounds:
        Optional number of rounds to use.
        Defaults to %(dr)d, but must be within ``range(1,1<<32)``.

    :type relaxed: bool
    :param relaxed:
        By default, providing an invalid value for one of the other
        keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
        and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
        will be issued instead. Correctable errors include ``rounds``
        that are too small or too large, and ``salt`` strings that are too long.

        .. versionadded:: 1.6
    )ÚdigestÚdscÚdr)r8   Únamer   r.   rA   r/   Úencoded_checksum_sizer;   )r   ÚtypeÚdictÚupperr?   )Ú	hash_nameÚdigest_sizer   r   ÚmodulerP   Úbases   &&&&&  r!   Úcreate_pbkdf2_hashrY   F   sŽ   € ð �yÕ €DØ‚}Ø˜9˜+ QÐ'ˆÜ€DÜØØ	ˆÜØØØØØ!Ø%Ø#.°¥?°QÕ#6¸1Õ"<ðô@ ˜)Ÿ/™/Ó+°×1GÑ1GÈFÔSõA Tô)	
ó-ð -r$   Úsha1i¸ÿ z$pbkdf2$)r   Úsha256iHq  Úsha512i¨a  Úldap_pbkdf2_sha1z{PBKDF2}TÚldap_pbkdf2_sha256z{PBKDF2-SHA256}z$pbkdf2-sha256$Úldap_pbkdf2_sha512z{PBKDF2-SHA512}z$pbkdf2-sha512$s   -_c                   ó|   a € ] tR t^œt o RtR tRtRt^t^t	Rt
]P                  t^tRtRt]R 4       tR tR tR	tV tR
# )r
   a‹  This class implements Cryptacular's PBKDF2-based crypt algorithm, and follows the :ref:`password-hash-api`.

It supports a variable-length salt, and a variable number of rounds.

The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

:type salt: bytes
:param salt:
    Optional salt bytes.
    If specified, it may be any length.
    If not specified, a one will be autogenerated (this is recommended).

:type salt_size: int
:param salt_size:
    Optional number of bytes to use when autogenerating new salts.
    Defaults to 16 bytes, but can be any value between 0 and 1024.

:type rounds: int
:param rounds:
    Optional number of rounds to use.
    Defaults to 60000, must be within ``range(1,1<<32)``.

:type relaxed: bool
:param relaxed:
    By default, providing an invalid value for one of the other
    keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
    and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
    will be issued instead. Correctable errors include ``rounds``
    that are too small or too large, and ``salt`` strings that are too long.

    .. versionadded:: 1.6
ú$p5k2$r   r   r   c                óî   € \         P                  ! WP                  ^V R7      w  r#p\        VP	                  R4      \
        4      pV'       d    \        VP	                  R4      \
        4      pV ! W#VR7      # )é   )Úrounds_baser   r   r   )r   r   r   r   r   ÚCTA_ALTCHARSr   s   &&   r!   r"   Úcta_pbkdf2_sha1.from_stringÛ   sZ   € ô ŸLšL¨¯y©yÀbÐRUÔVÑˆ�cÜ˜Ÿ™ WÓ-¬|Ó<ˆßÜ˜CŸJ™J wÓ/´Ó>ˆCÙ˜&°cÔ:Ð:r$   c                ó  € \        V P                  \        4      P                  R 4      p\        V P                  \        4      P                  R 4      p\
        P                  ! V P                  V P                  W^R7      # )r   ©rd   )	r   r   re   r'   r   r   r(   r   r   r)   s   &  r!   r+   Úcta_pbkdf2_sha1.to_stringä   sU   € Ü˜Ÿ™¤LÓ1×8Ñ8¸ÓAˆÜ˜Ÿ™¤|Ó4×;Ñ;¸GÓDˆÜ�}Š}˜TŸZ™Z¨¯©°dÈRÔPÐPr$   c                óF   € \        R WP                  V P                  ^4      # )rZ   ©r   r   r   r0   s   &&r!   r2   Úcta_pbkdf2_sha1._calc_checksumé   s   € ä˜6 6¯9©9°d·k±kÀ2ÓFÐFr$   r4   Nr5   )r7   r8   r9   r:   r;   rP   r<   r   r/   r?   r@   Úpbkdf2_sha1rA   rB   rC   rD   rE   r"   r+   r2   rF   rG   rH   s   @r!   r
   r
   œ   sp   ø‡ € ñðD €DØ2€LØ€EØ€Mð ÐØ€Mð !×/Ñ/€NØ€JØ€JØ€Kð ñ;ó ð;òQ÷
Gð Gr$   c                   óš   a € ] tR t^ît o RtR tRtRtRt^t	Rt
]P                  t]P                  t^tRtRt]R 4       tR tR tR	 tR
tV tR# )r   aã  This class implements Dwayne Litzenberger's PBKDF2-based crypt algorithm, and follows the :ref:`password-hash-api`.

It supports a variable-length salt, and a variable number of rounds.

The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

:type salt: str
:param salt:
    Optional salt string.
    If specified, it may be any length, but must use the characters in the regexp range ``[./0-9A-Za-z]``.
    If not specified, a 16 character salt will be autogenerated (this is recommended).

:type salt_size: int
:param salt_size:
    Optional number of bytes to use when autogenerating new salts.
    Defaults to 16 bytes, but can be any value between 0 and 1024.

:type rounds: int
:param rounds:
    Optional number of rounds to use.
    Defaults to 60000, must be within ``range(1,1<<32)``.

:type relaxed: bool
:param relaxed:
    By default, providing an invalid value for one of the other
    keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
    and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
    will be issued instead. Correctable errors include ``rounds``
    that are too small or too large, and ``salt`` strings that are too long.

    .. versionadded:: 1.6
ra   r   r   r   c                ód   € \         P                  ! WP                  ^RV R7      w  r#pV ! W#VR7      # )rc   é�  )rd   rA   r   r   )r   r   r   r   s   &&   r!   r"   Údlitz_pbkdf2_sha1.from_string.  s1   € äŸLšLØ—)‘)¨¸CÈô
Ñˆ�cñ ˜&°cÔ:Ð:r$   c                óœ   € V P                   pVR 8X  d   Rp\        P                  ! V P                  WP                  V P
                  ^R7      # ©rp   Nrh   )r   r   r(   r   r   r   ©r*   r   s   & r!   r+   Údlitz_pbkdf2_sha1.to_string5  s=   € Ø—‘ˆØ�SŒ=ØˆFÜ�}Š}Ø�J‰J˜§	¡	¨4¯=©=Àbô
ð 	
r$   c                óˆ   € V P                   pVR 8X  d   Rp\        P                  ! V P                  WP                  R^R7      # rs   )r   r   r(   r   r   rt   s   & r!   Ú_get_configÚdlitz_pbkdf2_sha1._get_config=  s4   € Ø—‘ˆØ�SŒ=ØˆFÜ�}Š}˜TŸZ™Z¨·±¸DÈbÔQÐQr$   c                ó†   € V P                  4       p\        R WV P                  ^4      p\        V4      P	                  R4      # )rZ   r   )rw   r   r   r	   r'   )r*   r1   r   Úresults   &&  r!   r2   Ú dlitz_pbkdf2_sha1._calc_checksumC  s:   € à×ÑÓ!ˆÜ˜V V°4·;±;ÀÓCˆÜ˜6Ó"×)Ñ)¨'Ó2Ð2r$   r4   Nr5   z1000000000000000000000000000000000000000000000000=)r7   r8   r9   r:   r;   rP   r<   r   Ú_stub_checksumr?   r@   r   r=   Ú
salt_charsrm   rA   rB   rC   rD   rE   r"   r+   rw   r2   rF   rG   rH   s   @r!   r   r   î   s|   ø‡ € ñðD €DØ2€LØ€EØ#€Nð ÐØ€MØ—‘€Jð
 !×/Ñ/€NØ€JØ€JØ€Kð ñ;ó ð;ò
òR÷3ð 3r$   c                   óX   a € ] tR tRt o RtR tR	tRt^ t^;t	t
]R 4       tR tR tRtV tR# )
Úatlassian_pbkdf2_sha1iJ  a  This class implements the PBKDF2 hash used by Atlassian.

It supports a fixed-length salt, and a fixed number of rounds.

The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

:type salt: bytes
:param salt:
    Optional salt bytes.
    If specified, the length must be exactly 16 bytes.
    If not specified, a salt will be autogenerated (this is recommended).

:type relaxed: bool
:param relaxed:
    By default, providing an invalid value for one of the other
    keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
    and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
    will be issued instead. Correctable errors include
    ``salt`` strings that are too long.

    .. versionadded:: 1.6
z	{PKCS5S2}c                ó   € \        VR R4      pV P                  pVP                  V4      '       g    \        P                  P                  V 4      h\        V\        V4      R P                  R 4      4      pVR,          VR,          rTV ! WER7      # )r   r   N:Nrc   N:rc   NN)r   r   )	r   r   Ú
startswithr   ÚexcÚInvalidHashErrorr   Úlenr   )r   r   r   Údatar   r    s   &&    r!   r"   Ú!atlassian_pbkdf2_sha1.from_stringk  sw   € ä˜$ ¨Ó0ˆØ—	‘	ˆØ�‰˜u×%Ò%Ü—&‘&×)Ñ)¨#Ó.Ð.Ü˜œc %›j˜lÐ+×2Ñ2°7Ó;Ó<ˆØ˜•I˜t C�yˆcÙ˜Ô+Ð+r$   c                ó’   € V P                   V P                  ,           pV P                  \        V4      P	                  R 4      ,           # r&   )r   r   r   r   r'   )r*   r…   s   & r!   r+   Úatlassian_pbkdf2_sha1.to_stringu  s2   € Ø�y‰y˜4Ÿ=™=Õ(ˆØ�z‰zœI d›O×2Ñ2°7Ó;Õ;Ð;r$   c                ó2   € \        R WP                  R^ 4      # )rZ   i'  )r   r   r0   s   &&r!   r2   Ú$atlassian_pbkdf2_sha1._calc_checksumy  s   € ô ˜6 6¯9©9°e¸RÓ@Ð@r$   r4   N)r   )r7   r8   r9   r:   r;   rP   r<   r   r/   Úmin_salt_sizer@   rE   r"   r+   r2   rF   rG   rH   s   @r!   r   r   J  sO   ø‡ € ñð0 #€DØ€LØ€EØ€Mð %'Ð&€M�Màñ,ó ð,ò<÷Að Ar$   r   c                   ó|   a € ] tR tRt o RtR tRtRt^@t^@t	Rt
]P                  t^tRtRt]R 4       tR tR	 tR
tV tR# )r   i€  aŸ  This class implements Grub's pbkdf2-hmac-sha512 hash, and follows the :ref:`password-hash-api`.

It supports a variable-length salt, and a variable number of rounds.

The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

:type salt: bytes
:param salt:
    Optional salt bytes.
    If specified, the length must be between 0-1024 bytes.
    If not specified, a 64 byte salt will be autogenerated (this is recommended).

:type salt_size: int
:param salt_size:
    Optional number of bytes to use when autogenerating new salts.
    Defaults to 64 bytes, but can be any value between 0 and 1024.

:type rounds: int
:param rounds:
    Optional number of rounds to use.
    Defaults to 19000, but must be within ``range(1,1<<32)``.

:type relaxed: bool
:param relaxed:
    By default, providing an invalid value for one of the other
    keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
    and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
    will be issued instead. Correctable errors include ``rounds``
    that are too small or too large, and ``salt`` strings that are too long.

    .. versionadded:: 1.6
zgrub.pbkdf2.sha512.r   r   r   c                óÚ   € \         P                  ! WP                  R V R7      w  r#p\        VP	                  R4      4      pV'       d   \        VP	                  R4      4      pV ! W#VR7      # )Ú.)Úsepr   r   r   )r   r   r   r   r   r   s   &&   r!   r"   Úgrub_pbkdf2_sha512.from_string¶  sS   € äŸLšL¨¯y©y¸cÈ3ÔOÑˆ�cÜ˜Ÿ™ WÓ-Ó.ˆßÜ˜CŸJ™J wÓ/Ó0ˆCÙ˜&°cÔ:Ð:r$   c                ó&  € \        V P                  4      P                  R 4      P                  4       p\        V P                  4      P                  R 4      P                  4       p\
        P                  ! V P                  V P                  WRR7      # )r   rŽ   )r�   )	r   r   r'   rT   r   r   r(   r   r   r)   s   &  r!   r+   Úgrub_pbkdf2_sha512.to_string¾  sc   € Ü�t—y‘yÓ!×(Ñ(¨Ó1×7Ñ7Ó9ˆÜ�d—m‘mÓ$×+Ñ+¨GÓ4×:Ñ:Ó<ˆÜ�}Š}˜TŸZ™Z¨¯©°dÀSÔIÐIr$   c                óF   € \        R WP                  V P                  ^@4      # )r\   rk   r0   s   &&r!   r2   Ú!grub_pbkdf2_sha512._calc_checksumÃ  s   € ô ˜8 V¯Y©Y¸¿¹ÀRÓHÐHr$   r4   Nr5   )r7   r8   r9   r:   r;   rP   r<   r   r/   r?   r@   Úpbkdf2_sha512rA   rB   rC   rD   rE   r"   r+   r2   rF   rG   rH   s   @r!   r   r   €  sl   ø‡ € ñðB  €DØ2€Là!€EØ€Mð ÐØ€Mà"×1Ñ1€NØ€JØ€JØ€Kàñ;ó ð;òJ÷
Ið Ir$   )rm   Úpbkdf2_sha256r•   r
   r   r   )'r;   Úbase64r   r   Úbinasciir   r   Úpasslib.utils.handlersÚutilsÚhandlersr   Úpasslib.crypto.digestr   Úpasslib.utilsr   Úpasslib.utils.binaryr   r	   Ú__all__Ú	HasRoundsÚ
HasRawSaltÚHasRawChecksumÚGenericHandlerr   r7   rY   rm   r–   r•   ÚPrefixWrapperr]   r^   r_   re   r
   ÚHasSaltr   r   r   r4   r$   r!   Ú<module>r¦      s‹  ðÙ ç 'ß 'ç #Ð #Ý -Ý $ß 9ò€ô.
Ø‡L�L�"—-‘- ×!2Ñ!2°B×4EÑ4Eô.
ðd $)°¸Xô5ñv ! ¨¨V¸:ÔF€Ù" 8¨R°Ó7€Ù" 8¨R°Ó7€à×#Ò#Ø˜ Z°À4ôÐ ð ×%Ò%ØØØØØ
ôÐ ð ×%Ò%ØØØØØ
ôÐ ð €ôOGØ‡L�L�"—-‘- ×!2Ñ!2°B×4EÑ4EôOGôdY3˜Ÿ™ b§j¡j°"×2CÑ2Cô Y3ôx3A˜BŸM™M¨2×+<Ñ+<¸b×>OÑ>Oô 3AôlFIØ‡L�L�"—-‘- ×!2Ñ!2°B×4EÑ4EöFIr$   