示例#1
0
 def test_41_genconfig(self):
     cc = CryptContext(schemes=['md5_crypt', 'phpass'], phpass__ident='H', phpass__default_rounds=7, admin__phpass__ident='P')
     self.assertTrue(cc.genconfig().startswith('$1$'))
     self.assertTrue(cc.genconfig(scheme='phpass').startswith('$H$5'))
     self.assertTrue(cc.genconfig(scheme='phpass', category='admin').startswith('$P$5'))
     self.assertTrue(cc.genconfig(scheme='phpass', category='staff').startswith('$H$5'))
     self.assertEqual(cc.genconfig(scheme='phpass', salt='........', rounds=8, ident='P'), '$P$6........22zGEuacuPOqEpYPDeR0R/')
     if PY2:
         c2 = cc.copy(default='phpass')
         self.assertTrue(c2.genconfig(category=u('admin')).startswith('$P$5'))
         self.assertTrue(c2.genconfig(category=u('staff')).startswith('$H$5'))
     self.assertRaises(KeyError, CryptContext().genconfig)
     self.assertRaises(KeyError, CryptContext().genconfig, scheme='md5_crypt')
     self.assertRaises(KeyError, cc.genconfig, scheme='fake')
     self.assertRaises(TypeError, cc.genconfig, scheme=1, category='staff')
     self.assertRaises(TypeError, cc.genconfig, scheme=1)
     self.assertRaises(TypeError, cc.genconfig, category=1)
示例#2
0
 def test_50_rounds_limits(self):
     cc = CryptContext(schemes=['sha256_crypt'], sha256_crypt__min_rounds=2000, sha256_crypt__max_rounds=3000, sha256_crypt__default_rounds=2500)
     STUB = '...........................................'
     custom_handler = cc._get_record('sha256_crypt', None)
     self.assertEqual(custom_handler.min_desired_rounds, 2000)
     self.assertEqual(custom_handler.max_desired_rounds, 3000)
     self.assertEqual(custom_handler.default_rounds, 2500)
     with self.assertWarningList([PasslibHashWarning] * 2):
         c2 = cc.copy(sha256_crypt__min_rounds=500, sha256_crypt__max_rounds=None, sha256_crypt__default_rounds=500)
     self.assertEqual(c2.genconfig(salt='nacl'), '$5$rounds=1000$nacl$' + STUB)
     with self.assertWarningList([]):
         self.assertEqual(cc.genconfig(rounds=1999, salt='nacl'), '$5$rounds=1999$nacl$' + STUB)
     self.assertEqual(cc.genconfig(rounds=2000, salt='nacl'), '$5$rounds=2000$nacl$' + STUB)
     self.assertEqual(cc.genconfig(rounds=2001, salt='nacl'), '$5$rounds=2001$nacl$' + STUB)
     with self.assertWarningList([PasslibHashWarning] * 2):
         c2 = cc.copy(sha256_crypt__max_rounds=int(1000000000.0) + 500, sha256_crypt__min_rounds=None, sha256_crypt__default_rounds=int(1000000000.0) + 500)
     self.assertEqual(c2.genconfig(salt='nacl'), '$5$rounds=999999999$nacl$' + STUB)
     with self.assertWarningList([]):
         self.assertEqual(cc.genconfig(rounds=3001, salt='nacl'), '$5$rounds=3001$nacl$' + STUB)
     self.assertEqual(cc.genconfig(rounds=3000, salt='nacl'), '$5$rounds=3000$nacl$' + STUB)
     self.assertEqual(cc.genconfig(rounds=2999, salt='nacl'), '$5$rounds=2999$nacl$' + STUB)
     self.assertEqual(cc.genconfig(salt='nacl'), '$5$rounds=2500$nacl$' + STUB)
     df = hash.sha256_crypt.default_rounds
     c2 = cc.copy(sha256_crypt__default_rounds=None, sha256_crypt__max_rounds=df << 1)
     self.assertEqual(c2.genconfig(salt='nacl'), '$5$rounds=%d$nacl$%s' % (df, STUB))
     c2 = cc.copy(sha256_crypt__default_rounds=None, sha256_crypt__max_rounds=3000)
     self.assertEqual(c2.genconfig(salt='nacl'), '$5$rounds=3000$nacl$' + STUB)
     self.assertRaises(ValueError, cc.copy, sha256_crypt__default_rounds=1999)
     cc.copy(sha256_crypt__default_rounds=2000)
     cc.copy(sha256_crypt__default_rounds=3000)
     self.assertRaises(ValueError, cc.copy, sha256_crypt__default_rounds=3001)
     c2 = CryptContext(schemes=['sha256_crypt'])
     self.assertRaises(ValueError, c2.copy, sha256_crypt__min_rounds=2000, sha256_crypt__max_rounds=1999)
     self.assertRaises(ValueError, CryptContext, sha256_crypt__min_rounds='x')
     self.assertRaises(ValueError, CryptContext, sha256_crypt__max_rounds='x')
     self.assertRaises(ValueError, CryptContext, all__vary_rounds='x')
     self.assertRaises(ValueError, CryptContext, sha256_crypt__default_rounds='x')
     bad = datetime.datetime.now()
     self.assertRaises(TypeError, CryptContext, 'sha256_crypt', sha256_crypt__min_rounds=bad)
     self.assertRaises(TypeError, CryptContext, 'sha256_crypt', sha256_crypt__max_rounds=bad)
     self.assertRaises(TypeError, CryptContext, 'sha256_crypt', all__vary_rounds=bad)
     self.assertRaises(TypeError, CryptContext, 'sha256_crypt', sha256_crypt__default_rounds=bad)
     return
示例#3
0
    def test_40_basic(self):
        handlers = [
         hash.md5_crypt, hash.des_crypt, hash.bsdi_crypt]
        cc = CryptContext(handlers, bsdi_crypt__default_rounds=5)
        for crypt in handlers:
            h = cc.hash('test', scheme=crypt.name)
            self.assertEqual(cc.identify(h), crypt.name)
            self.assertEqual(cc.identify(h, resolve=True, unconfigured=True), crypt)
            self.assertHandlerDerivedFrom(cc.identify(h, resolve=True), crypt)
            self.assertTrue(cc.verify('test', h))
            self.assertFalse(cc.verify('notest', h))

        h = cc.hash('test')
        self.assertEqual(cc.identify(h), 'md5_crypt')
        h = cc.genhash('secret', cc.genconfig())
        self.assertEqual(cc.identify(h), 'md5_crypt')
        h = cc.genhash('secret', cc.genconfig(), scheme='md5_crypt')
        self.assertEqual(cc.identify(h), 'md5_crypt')
        self.assertRaises(ValueError, cc.genhash, 'secret', cc.genconfig(), scheme='des_crypt')