ó
ø¢TQc           @  sñ   d  d l  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 m Z d  d l m Z d  d l m Z y d  d l Z Wn e k
 r© d Z n Xy d  d l Z Wn e k
 rÓ d Z n Xd e j f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   unicode_literals(   t   PASSWORD_HASHERS(	   t   is_password_usablet   check_passwordt   make_passwordt   PBKDF2PasswordHashert   load_hasherst   PBKDF2SHA1PasswordHashert
   get_hashert   identify_hashert   UNUSABLE_PASSWORD(   t   unittest(   t
   skipUnlessNt   TestUtilsHashPassc           B  s¿   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 e
 d ƒ d „  ƒ Z e	 e d	 ƒ d
 „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C  s   t  d t ƒ d  S(   Nt   password_hashers(   R   t   default_hashers(   t   self(    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   setUp   s    c         C  se   t  d ƒ } |  j | j d ƒ ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ d  S(   Nu   lÃ¨tmeinu   pbkdf2_sha256$u	   lÃ¨tmeinz(   R   t
   assertTruet
   startswithR   R   t   assertFalse(   R   t   encoded(    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_simple   s
    c         C  s~   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d  S(   Nu   lÃ¨tmeinu   seasaltu   pbkdf2_sha256uH   pbkdf2_sha256$10000$seasalt$CWWFdHOWwPnki7HvkcqN9iA2T3KLW1cf2uZ5kvArtVY=u	   lÃ¨tmeinz(   R   t   assertEqualR   R   R   R   R	   t	   algorithm(   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_pkbdf2#   s    	c         C  s~   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d  S(   Nu   lÃ¨tmeinu   seasaltu   sha1u5   sha1$seasalt$cff36ea83f5706ce9aa7454e63e431fc726b2dc8u	   lÃ¨tmeinz(   R   R   R   R   R   R   R	   R   (   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt	   test_sha1,   s    	c         C  s~   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d  S(   Nu   lÃ¨tmeinu   seasaltu   md5u,   md5$seasalt$3f86d0d3d465b7b458c231bf3555c0e3u	   lÃ¨tmeinz(   R   R   R   R   R   R   R	   R   (   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_md55   s    	c         C  sÇ   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d | } |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ d  S(   Nu   lÃ¨tmeinu    u   unsalted_md5u    88a434c88cca4e900f7874cd98123f43u	   lÃ¨tmeinzu   md5$$%s(   R   R   R   R   R   R   R	   R   (   R   R   t   alt_encoded(    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_unsalted_md5>   s    
c         C  sž   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ | d } |  j t d | ƒ ƒ d  S(   Nu   lÃ¨tmeinu    u   unsalted_sha1u.   sha1$$6d138ca3ae545631b3abd71a4f076ce759c5700bu	   lÃ¨tmeinzi   (   R   R   R   R   R   R   R	   R   (   R   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_unsalted_sha1K   s    
u%   no crypt module to generate password.c         C  s~   t  d d d ƒ } |  j | d ƒ |  j t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d  S(   Nu   lÃ¨tmeiu   abu   cryptu   crypt$$ab1Hv2Lg7ltQou   lÃ¨tmeiz(   R   R   R   R   R   R   R	   R   (   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt
   test_cryptV   s    u   py-bcrypt not installedc         C  s„   t  d d d ƒ} |  j t | ƒ ƒ |  j | j d ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t | ƒ j d ƒ d  S(   Nu   lÃ¨tmeint   hasheru   bcryptu   bcrypt$u	   lÃ¨tmeinz(	   R   R   R   R   R   R   R   R	   R   (   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_bcrypt_   s    c         C  s¤   t  d  ƒ } |  j t | ƒ ƒ |  j t d  | ƒ ƒ |  j t t | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t d | ƒ ƒ |  j t t | ƒ d  S(   Nu    u   lÃ¨tmeinu	   lÃ¨tmeinz(	   R   t   NoneR   R   R   R
   t   assertRaisest
   ValueErrorR	   (   R   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_unusableh   s    c         C  s0   d „  } |  j  t | ƒ |  j  t t d ƒ d  S(   Nc           S  s   t  d d d ƒd  S(   Nu   lÃ¨tmeinR    u   lolcat(   R   (    (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   doits   s    u   lolcat$salt$hash(   R#   R$   R	   (   R   R&   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_bad_algorithmr   s    	c         C  s*   |  j  t d ƒ ƒ |  j  t d ƒ ƒ d  S(   Nu   lÃ¨tmein_badencodedu    (   R   R   (   R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_bad_encodedx   s    c         C  sH   t  ƒ  } | j d d ƒ } |  j | d ƒ |  j | j d | ƒ ƒ d  S(   Nu   lÃ¨tmeinu   seasaltuH   pbkdf2_sha256$10000$seasalt$CWWFdHOWwPnki7HvkcqN9iA2T3KLW1cf2uZ5kvArtVY=(   R   t   encodeR   R   t   verify(   R   R    R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_low_level_pkbdf2|   s
    		c         C  sH   t  ƒ  } | j d d ƒ } |  j | d ƒ |  j | j d | ƒ ƒ d  S(   Nu   lÃ¨tmeinu   seasaltu6   pbkdf2_sha1$10000$seasalt$oAfF6vgs95ncksAhGXOWf4Okq7o=(   R   R)   R   R   R*   (   R   R    R   (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_low_level_pbkdf2_sha1ƒ   s
    		c           s†   |  j  d t d ƒ j ƒ xf d	 D]^ } t d d | ƒ} i t d 6‰  ‡  f d †  } |  j t d | | ƒ ƒ |  j ˆ  d ƒ q  Wd  S(
   Nu   pbkdf2_sha256u   defaultu   sha1u   md5u   lÃ¨tmeinR    u   upgradedc           s   t  ˆ  d <d  S(   Nu   upgraded(   t   True(   t   password(   t   state(    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   setter   s    (   u   sha1u   md5(   R   R   R   R   t   FalseR   R   (   R   t   algoR   R0   (    (   R/   s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_upgradeŠ   s    c           sV   t  d ƒ } i t d 6‰  ‡  f d †  } |  j t d | | ƒ ƒ |  j ˆ  d ƒ d  S(   Nu   lÃ¨tmeinu   upgradedc             s   t  ˆ  d <d  S(   Nu   upgraded(   R-   (    (   R/   (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyR0   —   s    u   WRONG(   R   R1   R   R   (   R   R   R0   (    (   R/   s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   test_no_upgrade”   s
    c           s†   |  j  d t d ƒ j ƒ xf d
 D]^ } t d d | ƒ} i t d 6‰  ‡  f d †  } |  j t d	 | | ƒ ƒ |  j ˆ  d ƒ q  Wd  S(   Nu   pbkdf2_sha256u   defaultu   sha1u   md5u   lÃ¨tmeinR    u   upgradedc             s   t  ˆ  d <d  S(   Nu   upgraded(   R-   (    (   R/   (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyR0   ¡   s    u   WRONG(   u   sha1u   md5(   R   R   R   R   R1   R   R   (   R   R2   R   R0   (    (   R/   s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt!   test_no_upgrade_on_incorrect_passœ   s    (   t   __name__t
   __module__R   R   R   R   R   R   R   R   t   cryptR   t   bcryptR!   R%   R'   R(   R+   R,   R3   R4   R5   (    (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyR      s"   													
					
	(   t
   __future__R    t   django.conf.global_settingsR   R   t   django.contrib.auth.hashersR   R   R   R   R   R   R   R	   R
   t   django.utilsR   t   django.utils.unittestR   R8   t   ImportErrorR"   R9   t   TestCaseR   (    (    (    s:   ../Django//lib/python/django/contrib/auth/tests/hashers.pyt   <module>   s   @

