def test_95_context_algs(self): handler = self.handler from otp.ai.passlib.context import CryptContext c1 = CryptContext(['scram'], scram__algs='sha1,md5') h = c1.hash('dummy') self.assertEqual(handler.extract_digest_algs(h), ['md5', 'sha-1']) self.assertFalse(c1.needs_update(h)) c2 = c1.copy(scram__algs='sha1') self.assertFalse(c2.needs_update(h)) c2 = c1.copy(scram__algs='sha1,sha256') self.assertTrue(c2.needs_update(h))
def test_46_needs_update(self): cc = CryptContext(**self.sample_4_dict) self.assertTrue(cc.needs_update('9XXD4trGYeGJA')) self.assertFalse(cc.needs_update('$1$J8HC2RCr$HcmM.7NxB2weSvlw2FgzU0')) self.assertTrue(cc.needs_update('$5$rounds=1999$jD81UCoo.zI.UETs$Y7qSTQ6mTiU9qZB4fRr43wRgQq4V.5AAf7F97Pzxey/')) self.assertFalse(cc.needs_update('$5$rounds=2000$228SSRje04cnNCaQ$YGV4RYu.5sNiBvorQDlO0WWQjyJVGKBcJXz3OtyQ2u8')) self.assertFalse(cc.needs_update('$5$rounds=3000$fS9iazEwTKi7QPW4$VasgBC8FqlOvD7x2HhABaMXCTh9jwHclPA9j5YQdns.')) self.assertTrue(cc.needs_update('$5$rounds=3001$QlFHHifXvpFX4PLs$/0ekt7lSs/lOikSerQ0M/1porEHxYq7W/2hdFpxA3fA')) check_state = [] class dummy(uh.StaticHandler): name = 'dummy' _hash_prefix = '@' @classmethod def needs_update(cls, hash, secret=None): check_state.append((hash, secret)) return secret == 'nu' def _calc_checksum(self, secret): from hashlib import md5 if isinstance(secret, unicode): secret = secret.encode('utf-8') return str_to_uascii(md5(secret).hexdigest()) ctx = CryptContext([dummy]) hash = refhash = dummy.hash('test') self.assertFalse(ctx.needs_update(hash)) self.assertEqual(check_state, [(hash, None)]) del check_state[:] self.assertFalse(ctx.needs_update(hash, secret='bob')) self.assertEqual(check_state, [(hash, 'bob')]) del check_state[:] self.assertTrue(ctx.needs_update(hash, secret='nu')) self.assertEqual(check_state, [(hash, 'nu')]) del check_state[:] cc = CryptContext(['des_crypt']) for hash, kwds in self.nonstring_vectors: self.assertRaises(TypeError, cc.needs_update, hash, **kwds) self.assertRaises(KeyError, CryptContext().needs_update, 'hash') self.assertRaises(KeyError, cc.needs_update, refhash, scheme='fake') self.assertRaises(TypeError, cc.needs_update, refhash, scheme=1) self.assertRaises(TypeError, cc.needs_update, refhash, category=1) return