def test_ab64_decode(self):
"""ab64_decode()"""
from passlib.utils.binary import ab64_decode
# accept bytes or unicode
self.assertEqual(ab64_decode(b"abc"), hb("69b7"))
self.assertEqual(ab64_decode(u("abc")), hb("69b7"))
# reject non-ascii unicode
self.assertRaises(ValueError, ab64_decode, u("ab\xff"))
# underlying a2b_ascii treats non-base64 chars as "Incorrect padding"
self.assertRaises(TypeError, ab64_decode, b"ab\xff")
self.assertRaises(TypeError, ab64_decode, b"ab!")
self.assertRaises(TypeError, ab64_decode, u("ab!"))
# insert correct padding, handle dirty padding bits
self.assertEqual(ab64_decode(b"abcd"), hb("69b71d")) # 0 mod 4
self.assertRaises(ValueError, ab64_decode, b"abcde") # 1 mod 4
self.assertEqual(ab64_decode(b"abcdef"), hb("69b71d79")) # 2 mod 4, dirty padding bits
self.assertEqual(ab64_decode(b"abcdeQ"), hb("69b71d79")) # 2 mod 4, clean padding bits
self.assertEqual(ab64_decode(b"abcdefg"), hb("69b71d79f8")) # 3 mod 4, clean padding bits
# support "./" or "+/" altchars
# (lets us transition to "+/" representation, merge w/ b64s_decode)
self.assertEqual(ab64_decode(b"ab+/"), hb("69bfbf"))
self.assertEqual(ab64_decode(b"ab./"), hb("69bfbf"))
评论列表
文章目录