from common import * # isort:skip

from trezor.crypto import base32


class TestCryptoBase32(unittest.TestCase):

    # test vectors from:
    # https://tools.ietf.org/html/rfc4648
    # https://github.com/emn178/hi-base32/blob/master/tests/test.js
    vectors = [
        (b"", ""),
        (b"f", "MY======"),
        (b"fo", "MZXQ===="),
        (b"foo", "MZXW6==="),
        (b"foob", "MZXW6YQ="),
        (b"fooba", "MZXW6YTB"),
        (b"foobar", "MZXW6YTBOI======"),
        (b"H", "JA======"),
        (b"He", "JBSQ===="),
        (b"Hel", "JBSWY==="),
        (b"Hell", "JBSWY3A="),
        (b"Hello", "JBSWY3DP"),
        (
            b"zlutoucky kun upel dabelske ody",
            "PJWHK5DPOVRWW6JANN2W4IDVOBSWYIDEMFRGK3DTNNSSA33EPE======",
        ),
        # fmt: off
        (b"中文", "4S4K3ZUWQ4======"),    # noqa:E999
        (b"中文1", "4S4K3ZUWQ4YQ===="),   # noqa:E999
        (b"中文12", "4S4K3ZUWQ4YTE==="),  # noqa:E999
        (b"aécio", "MHB2SY3JN4======"),   # noqa:E999
        (b"𠜎", "6CQJZDQ="),              # noqa:E999
        (b"Base64是一種基於64個可列印字元來表示二進制資料的表示方法",  # noqa:E999
         "IJQXGZJWGTTJRL7EXCAOPKFO4WP3VZUWXQ3DJZMARPSY7L7FRCL6LDNQ4WWZPZMFQPSL5BXIUGUOPJF24S5IZ2MAWLSYRNXIWOD6NFUZ46NIJ2FBVDT2JOXGS246NM4V"),
        # fmt: on
    ]

    def test_encode(self):
        for a, b in self.vectors:
            self.assertEqual(base32.encode(a), b)

    def test_decode(self):
        for a, b in self.vectors:
            self.assertEqual(base32.decode(b), a)


if __name__ == "__main__":
    unittest.main()