示例#1
0
def generate_owner_key(passphrase, mnemonic=None):
    owner_key = bytearray(108)
    master_secret, master_cofactor = get_beam_kdf(mnemonic)
    beam.export_owner_key(master_secret, master_cofactor, passphrase,
                          len(passphrase), owner_key)
    owner_key = ubinascii.b2a_base64(owner_key)

    return owner_key
    def test_get_public_key(self):
        mnemonic = "all all all all all all all all all all all all"
        kdf = get_beam_kdf(mnemonic)
        test_datasets = (
            (0, 0,
             "88b528eecb5ee5ae81e56e2105aca06997761c9cd2e566b25eaee1951be26688",
             1),
            (0, 1,
             "53839a38c1089e28e901279266cff2da921ca82ed39c6ac0261a039157754e40",
             1),
            (0, 8,
             "a3378664f9ada1a32cf860076ec6110621c7430d9b04316a20b56ced6fd73546",
             1),
            (1, 1,
             "da2d246d99860617bd37755605f0584de6094b437efb4931ec20cf85b62631a5",
             0),
            (1, 8,
             "54158bdbeef7292b96d5ea57b2eebc3ba6c8d4a16cfeb6cd75354e8497d009b8",
             1),
            (2, 8,
             "bfb3e6e6eb8ee2b686aaa6a056fa2670a5c49d76583eb05fb84d9c5ab7227c71",
             0),
            (3, 0,
             "22e6e269fb26638d8501583d5a7c0c8051315f9576174cc6f64dacfe9a01ef7f",
             0),
            (3, 3,
             "392b73f534c490f614c36a3ad738a10b2cc4b08543e6250a2b2927d1c5ffa4ba",
             1),
            (4, 4,
             "e5c551250ccb2dfbd11b5d38eae670d0476909acb7d1955c78c53647dd5de3e9",
             0),
            (5, 2,
             "269c9a18d3a8f5acf4036a711e41cf7c5071aceac1fe95666040369a3311ac71",
             0),
            (10, 3,
             "706bc1d21de9d4fdf4daef73b7774cb7e869e454a7776d8116c0ce86f9427577",
             0),
        )

        for test_params in test_datasets:
            kid_idx = test_params[0]
            kid_sub_idx = test_params[1]
            expected_public_key_x = test_params[2]
            expected_public_key_y = test_params[3]

            pk = get_beam_pk(kid_idx, kid_sub_idx, kdf)
            self.assertEqual(bin_to_str(pk[0]), expected_public_key_x)
            self.assertEqual(pk[1], expected_public_key_y)
    def test_get_public_key_another_mnemonic(self):
        mnemonic = "abc abc abc abc abc abc abc abc abc abc abc abc"
        kdf = get_beam_kdf(mnemonic)
        test_datasets = (
            (0, 0,
             "119a034ddd950028e45ee1d0c9b26efba0fb28af83e7f2ba83a5c0fa7ae2daee",
             0),
            (0, 1,
             "2a4c57b74f1cc0ee995ceab14ae9e9bc581da8ccb290564d15b9079858635604",
             1),
            (0, 8,
             "418ec586d5ff80c1d82b25892c64a45243d9630fec255580cb2f0ac95b614415",
             1),
            (1, 1,
             "f3632a997e42ff854d8d450113e8bea6f47e2ef069ed6cf36188343a1c7df013",
             0),
            (2, 8,
             "a135d3ddcbce9cc76e46c2c8374ab084e88e01d81eb8a9588bd19cb997a41f91",
             1),
            (3, 0,
             "19812e15f636ae0df35cc158d3496dd33999cf8f18df939588248d3f8ff86bd7",
             0),
            (3, 3,
             "9e2b9fb5178fb4e71a8242b658c249e0aceb7ac576fc20a034a67c8c4f5b1c61",
             0),
            (4, 4,
             "d320b5f0fcdcbfe2d005bff93d0fec1e1ac33abeebe51b2c9322176f820252cf",
             1),
            (5, 2,
             "3206c52f75f777b230f64e0d6dff6eb6c2a1566b3b887943939beb0d3a6444f1",
             1),
            (10, 3,
             "ff33f03af33b4b062e69479327d1fc02c13a22354dcd9a3bc7162ad3b2768f1c",
             1),
        )

        for test_params in test_datasets:
            kid_idx = test_params[0]
            kid_sub_idx = test_params[1]
            expected_public_key_x = test_params[2]
            expected_public_key_y = test_params[3]

            pk = get_beam_pk(kid_idx, kid_sub_idx, kdf)
            self.assertEqual(bin_to_str(pk[0]), expected_public_key_x)
            self.assertEqual(pk[1], expected_public_key_y)
    def test_sign_message(self):
        test_datasets = (
            (
                0,
                0,
                "hello world",
                "94bb1f34c5e970136d4f1ff769e3332e4e5f430122ebe7e7720c754713adfab6",
                0,
                "9f01b0eb202cd0780e35f0cf20c06cd930af8bb55db9c9c3e2146f34de1239d9",
            ),
            (
                0,
                1,
                "hello world",
                "39e2014221f59c4f887be7158df22ef996ff061b7411a6d915ac91dc5a336d4b",
                0,
                "a7b9447e39eb14e0c3167496ba53b3253918577c1c4bc0084fe8105ea6d520e5",
            ),
            (
                5,
                2,
                "hello world",
                "848824bb7e3ee53ecc0d9ecdbacd8e7015d80ebaa3f50a0147d65a92e8d61894",
                0,
                "d6d4b41ba3c858d99bb454155b9e9d531c35fc8f1535807a38e9509cb7314a75",
            ),
            (
                0,
                0,
                "hello world",
                "9f315b9105225a0493d072d345b0e9a96e7c68395f004676c508259a16ade81e",
                1,
                "3a303f731efb81d035cc98d835b66e109dd17921ec0e14091aecc72d64d7ab40",
            ),
            (
                1,
                8,
                "hello from BEAM",
                "50d1f214d345a0f9cab5f7299f8e300ff1ee7c1201646bd67132203526593263",
                0,
                "a49d590c6894f1675b5d6a43bb7845c9277d66d70c1114927a7870c6c6e95492",
            ),
            (
                4,
                4,
                "abcdefg",
                "ec088ee2b66fab3b3c43337e8ad992dcc81e69a55f40b36b181a6899fc08a0f8",
                0,
                "177a773a6278a87f03606edb5237f83bd40ea2e2954649e20930c42eb4bd7f17",
            ),
        )

        print()
        for test_params in test_datasets:
            kdf = get_beam_kdf(self.mnemonic)
            kid_idx = test_params[0]
            kid_sub_idx = test_params[1]
            message = test_params[2]
            expected_nonce_pub_x = test_params[3]
            expected_nonce_pub_y = test_params[4]
            expected_sign_k = test_params[5]

            sign_nonce_pub_x = bytearray(32)
            sign_nonce_pub_y = bytearray(1)
            sign_k = bytearray(32)

            sk = get_beam_sk(kid_idx, kid_sub_idx, kdf)
            digest = message_digest(message)
            beam.signature_sign(digest, sk, sign_nonce_pub_x, sign_nonce_pub_y,
                                sign_k)
            #print("Idx: {}; Sub idx: {}, message: {}".format(kid_idx, kid_sub_idx, message))
            #print("Digest: {}; Sk: {}".format(bin_to_str(digest), bin_to_str(sk)))
            #print("X: {}, y: {}, k: {}".format(bin_to_str(sign_nonce_pub_x), sign_nonce_pub_y[0], bin_to_str(sign_k)))

            self.assertEqual(bin_to_str(sign_nonce_pub_x),
                             expected_nonce_pub_x)
            self.assertEqual(sign_nonce_pub_y[0], expected_nonce_pub_y)
            self.assertEqual(bin_to_str(sign_k), expected_sign_k)
示例#5
0
    def test_verify_message(self):
        test_datasets = (
            (
                "hello world",
                "94bb1f34c5e970136d4f1ff769e3332e4e5f430122ebe7e7720c754713adfab6",
                0,
                "9f01b0eb202cd0780e35f0cf20c06cd930af8bb55db9c9c3e2146f34de1239d9",
                "88b528eecb5ee5ae81e56e2105aca06997761c9cd2e566b25eaee1951be26688",
                1,
                True,
            ),
            (
                "hello world",
                "39e2014221f59c4f887be7158df22ef996ff061b7411a6d915ac91dc5a336d4b",
                0,
                "a7b9447e39eb14e0c3167496ba53b3253918577c1c4bc0084fe8105ea6d520e5",
                "53839a38c1089e28e901279266cff2da921ca82ed39c6ac0261a039157754e40",
                1,
                True,
            ),
            (
                "hello world",
                "39e2014221f59c4f887be7158df22ef996ff061b7411a6d915ac91dc5a336d4b",
                0,
                "a7b9447e39eb14e0c3167496ba53b3253918577c1c4bc0084fe8105ea6d520e5",
                "53839a38c1089e28e901279266cff2da921ca82ed39c6ac0261a039157754e40",
                0,
                False,
            ),
            (
                "hello world",
                "848824bb7e3ee53ecc0d9ecdbacd8e7015d80ebaa3f50a0147d65a92e8d61894",
                0,
                "d6d4b41ba3c858d99bb454155b9e9d531c35fc8f1535807a38e9509cb7314a75",
                "269c9a18d3a8f5acf4036a711e41cf7c5071aceac1fe95666040369a3311ac71",
                0,
                True,
            ),
            (
                "hello world",
                "9f315b9105225a0493d072d345b0e9a96e7c68395f004676c508259a16ade81e",
                1,
                "3a303f731efb81d035cc98d835b66e109dd17921ec0e14091aecc72d64d7ab40",
                "88b528eecb5ee5ae81e56e2105aca06997761c9cd2e566b25eaee1951be26688",
                1,
                True,
            ),
            (
                "hello from BEAM",
                "50d1f214d345a0f9cab5f7299f8e300ff1ee7c1201646bd67132203526593263",
                0,
                "a49d590c6894f1675b5d6a43bb7845c9277d66d70c1114927a7870c6c6e95492",
                "54158bdbeef7292b96d5ea57b2eebc3ba6c8d4a16cfeb6cd75354e8497d009b8",
                1,
                True,
            ),
            (
                "abcdefg",
                "ec088ee2b66fab3b3c43337e8ad992dcc81e69a55f40b36b181a6899fc08a0f8",
                0,
                "177a773a6278a87f03606edb5237f83bd40ea2e2954649e20930c42eb4bd7f17",
                "e5c551250ccb2dfbd11b5d38eae670d0476909acb7d1955c78c53647dd5de3e9",
                0,
                True,
            ),
            (
                "abcdefg",
                "ec088ee2b66fab3b3c43337e8ad992dcc81e69a55f40b36b181a6899fc08a0f8",
                0,
                "177a773a6278a87f03606edb5237f83bd40ea2e2954649e20930c42eb4bd7f17",
                "f5c551250ccb2dfbd11b5d38eae670d0476909acb7d1955c78c53647dd5de3e9",
                0,
                False,
            ),
        )

        kdf = get_beam_kdf(self.mnemonic)
        for test_params in test_datasets:
            message = test_params[0]
            nonce_pub_x = test_params[1]
            nonce_pub_y = test_params[2]
            sign_k = test_params[3]
            pub_key_x = test_params[4]
            pub_key_y = test_params[5]
            expected_is_valid = int(test_params[6])

            message = message_digest(message)
            signature = BeamSignature(nonce_pub=BeamECCPoint(
                x=unhexlify(nonce_pub_x), y=int(nonce_pub_y)),
                                      sign_k=unhexlify(sign_k))
            public_key = BeamECCPoint(x=unhexlify(pub_key_x), y=int(pub_key_y))

            is_valid = is_valid_beam_message(signature, public_key, message)

            self.assertEqual(is_valid, expected_is_valid)
            self.assertNotEqual(not is_valid, expected_is_valid)