+
    ¢THir  ã                   ó¸   a € R t0 t ^ RIHu Ht ^ RIHt ^ RIHt . t	] ^ k Rt
 ! R R]P                  ]P                  ]P                  ]P                  4      tR# )é    N)Úcompile_hmac)Úh64ó    c                   ó¸   a € ] tR t^	t o RtR tRtRt^t]	P                  t^t^@t]	P                  tRt^tRtRt]R 4       tRR ltRt]R 4       tR	 t. ROtR
tV tR# )Ú
sha1_cryptaÆ  This class implements the SHA1-Crypt 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: str
:param salt:
    Optional salt string.
    If not specified, an 8 character one will be autogenerated (this is recommended).
    If specified, it must be 0-64 characters, drawn from the regexp range ``[./0-9A-Za-z]``.

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

:type rounds: int
:param rounds:
    Optional number of rounds to use.
    Defaults to 480000, must be between 1 and 4294967295, inclusive.

: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
ú$sha1$i S l   ÿÿ Úlinearc                ó`   € \         P                  ! WP                  V R 7      w  r#pV ! W#VR7      # ))Úhandler)ÚroundsÚsaltÚchecksum)ÚuhÚ	parse_mc3Úident)ÚclsÚhashr   r   Úchks   &&   Ú=/usr/lib/python3/dist-packages/passlib/handlers/sha1_crypt.pyÚfrom_stringÚsha1_crypt.from_stringB   s(   € äŸLšL¨¯y©yÀ#ÔFÑˆ�cÙ˜&°cÔ:Ð:ó    c                óœ   € V'       d   R MV P                   p\        P                  ! V P                  V P                  V P
                  V4      # )N)r   r   Ú
render_mc3r   r   r   )ÚselfÚconfigr   s   && r   Ú	to_stringÚsha1_crypt.to_stringG   s0   € ß‰d $§-¡-ˆÜ�}Š}˜TŸZ™Z¨¯©°d·i±iÀÓEÐEr   c                ó<   € V P                  V P                  4       R # )T)Ú_set_calc_checksum_backendÚ_calc_checksum_builtin)r   s   &r   Ú_load_backend_builtinÚ sha1_crypt._load_backend_builtinP   s   € à×&Ñ& s×'AÑ'AÔBÙr   c                ó¦  € \        V\        4      '       d   VP                  R 4      p\        V9   d    \        P
                  P                  V 4      hV P                  pV P                   RV 2P                  R4      p\        RV4      p\        V4       F  pV! V4      pK  	  \        P                  ! W0P                  4      P                  R4      # )zutf-8r   ÚasciiÚsha1)Ú
isinstanceÚstrÚencodeÚ_BNULLr   ÚexcÚNullPasswordErrorr   r   r   Úranger   Úencode_transposed_bytesÚ_chk_offsetsÚdecode)r   Úsecretr   ÚresultÚ
keyed_hmacÚ_s   &&    r   r!   Ú!sha1_crypt._calc_checksum_builtinU   s¨   € Ü�fœc×"Ò"Ø—]‘] 7Ó+ˆFÜ�VÔÜ—&‘&×*Ñ*¨4Ó0Ð0Ø—‘ˆà—Y‘Y�K˜v f XÐ.×6Ñ6°wÓ?ˆä! &¨&Ó1ˆ
Ü�v–ˆAÙ Ó'ŠFñ ä×*Ò*¨6×3DÑ3DÓE×LÑLÈWÓUÐUr   © N)r   Ú	salt_sizer   )F)Úbuiltin)é   é   r   é   é   é   é   é   é   é   é
   é	   é   é   é   é   é   é   r   é   é   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚnameÚsetting_kwdsr   Úchecksum_sizer   ÚHASH64_CHARSÚchecksum_charsÚdefault_salt_sizeÚmax_salt_sizeÚ
salt_charsÚdefault_roundsÚ
min_roundsÚ
max_roundsÚrounds_costÚclassmethodr   r   Úbackendsr"   r!   r/   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r   r   	   s–   ø‡ € ñðD €DØ2€LØ€EØ€MØ—_‘_€Nð ÐØ€MØ—‘€Jð €NØ€JØ€JØ€Kàñ;ó ð;ôFð €Hð
 ñó ðòVò†Lr   r   c                óV   € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   # )r9   Ú__all__)Ú__conditional_annotations__Úlistr(   )Úformats   "r   Ú__annotate__rg      s   € × #Ñ #÷ Ò ŒŒc�Ñ ò	 $r   )rd   Úpasslib.utils.handlersÚutilsÚhandlersr   Úpasslib.crypto.digestr   Úpasslib.utils.binaryr   rc   r*   ÚHasManyBackendsÚ	HasRoundsÚHasSaltÚGenericHandlerr   rg   )rd   s   @r   Ú<module>rq      sK   øðß #Õ #Ý .Ý $à€Ó Ø	€ôpØ×ÑØ‡L�LØ‡J�JØ×Ñö	pr   