Ejemplo n.º 1
0
 def test_xpriv_generation(self):
     # Test vectors.
     for test_vector in self.english_vectors:
         root_seed = bip39.root_seed_from_mnemonic(
             mnemonic=test_vector['mnemonic'], salt=test_vector['salt'])
         root = HDKey.from_root_seed(root_seed=root_seed)
         self.assertEqual(root.xpriv, test_vector['root']['xpriv'])
Ejemplo n.º 2
0
 def test_public_derivation_with_path(self):
     node = HDKey.from_mnemonic(bip39_test_vectors.public_path_mnemonic)
     child = node.derive_child(0)
     grandchild = child.derive_child(0)
     self.assertEqual(child.xpub, self.public_path[1])
     self.assertEqual(grandchild.xpub, self.public_path[2])
     self.assertEqual(grandchild.path, 'm/0/0')
Ejemplo n.º 3
0
 def test_private_key_generation(self):
     # Test vectors.
     for test_vector in self.english_vectors:
         root_seed = bip39.root_seed_from_mnemonic(
             mnemonic=test_vector['mnemonic'], salt=test_vector['salt'])
         root = HDKey.from_root_seed(root_seed=root_seed)
         self.assertEqual(root.privkey.hex(),
                          test_vector['root']['private_key'])
Ejemplo n.º 4
0
 def test_xpriv_when_derived(self):
     # Test vectors.
     for test_vector in self.english_vectors:
         root_seed = bip39.root_seed_from_mnemonic(
             mnemonic=test_vector['mnemonic'], salt=test_vector['salt'])
         root = HDKey.from_root_seed(root_seed=root_seed)
         node = root.derive_path(test_vector['derived_node']['path'])
         self.assertEqual(node.xpriv, test_vector['derived_node']['xpriv'])
Ejemplo n.º 5
0
 def test_derive_child_hardened_no_privkey(self):
     pk = bytes.fromhex(
         '02800f0237e39dce74f506c508985d4d71f8020342d7dfe781ca5cfb73e63eb43e'
     )  # noqa: E501
     node = HDKey.from_pubkey(pk)
     with self.assertRaises(ValueError) as context:
         node.derive_child('1h')
     self.assertIn('Need private key', str(context.exception))
Ejemplo n.º 6
0
 def test_fingerprint_generation(self):
     # Test vectors.
     for test_vector in self.english_vectors:
         root_seed = bip39.root_seed_from_mnemonic(
             mnemonic=test_vector['mnemonic'], salt=test_vector['salt'])
         root = HDKey.from_root_seed(root_seed=root_seed)
         self.assertEqual(root.fingerprint,
                          bytes.fromhex(test_vector['root']['fingerprint']))
Ejemplo n.º 7
0
    def test_sign_errors(self):
        pk = bytes.fromhex(
            '02800f0237e39dce74f506c508985d4d71f8020342d7dfe781ca5cfb73e63eb43e'
        )  # noqa: E501
        node = HDKey.from_pubkey(pk)

        with self.assertRaises(ValueError) as context:
            node.sign(b'\x00')
        self.assertIn('without privkey', str(context.exception))

        with self.assertRaises(ValueError) as context:
            node.sign_hash(b'\x00' * 32)
        self.assertIn('without privkey', str(context.exception))
Ejemplo n.º 8
0
 def test_from_root_seed(self):
     for test_vector in self.english_vectors:
         root = HDKey.from_root_seed(bytes.fromhex(test_vector['seed']))
         child = root.derive_path(test_vector['derived_node']['path'])
         for (obj, choice) in zip([root, child], ['root', 'derived_node']):
             self.assertEqual(obj.xpriv, test_vector[choice]['xpriv'])
             self.assertEqual(obj.xpub, test_vector[choice]['xpub'])
             self.assertEqual(obj.privkey.hex(),
                              test_vector[choice]['private_key'])
             self.assertEqual(obj.pubkey.hex(),
                              test_vector[choice]['public_key'])
             self.assertEqual(obj.index, test_vector[choice]['index'])
             self.assertEqual(
                 obj.fingerprint,
                 bytes.fromhex(test_vector[choice]['fingerprint']))
             self.assertEqual(
                 obj.chain_code,
                 bytes.fromhex(test_vector[choice]['chain_code']))
             self.assertEqual(obj.depth, test_vector[choice]['depth'])
Ejemplo n.º 9
0
 def test_node_path_derivation(self):
     # Test vectors.
     for test_vector in self.english_vectors:
         root_seed = bip39.root_seed_from_mnemonic(
             mnemonic=test_vector['mnemonic'], salt=test_vector['salt'])
         root = HDKey.from_root_seed(root_seed=root_seed)
         node = root.derive_path(test_vector['derived_node']['path'])
         self.assertEqual(node.xpriv, test_vector['derived_node']['xpriv'])
         self.assertEqual(node.xpub, test_vector['derived_node']['xpub'])
         self.assertEqual(node.privkey.hex(),
                          test_vector['derived_node']['private_key'])
         self.assertEqual(node.pubkey.hex(),
                          test_vector['derived_node']['public_key'])
         self.assertEqual(node.index, test_vector['derived_node']['index'])
         self.assertEqual(
             node.fingerprint,
             bytes.fromhex(test_vector['derived_node']['fingerprint']))
         self.assertEqual(
             node.chain_code,
             bytes.fromhex(test_vector['derived_node']['chain_code']))
         self.assertEqual(node.depth, test_vector['derived_node']['depth'])
Ejemplo n.º 10
0
 def test_child_from_xpriv(self):
     node = HDKey.from_xpriv(self.english_vectors[4]['root']['xpriv'])
     child = node.derive_child("51h")
     self.assertEqual(child.xpriv,
                      self.english_vectors[4]['derived_node']['xpriv'])
Ejemplo n.º 11
0
    def test_derive_child_invalid_result(self, mock_tweak):
        mock_tweak.side_effect = [b'\xff' * 32, b'\x33' * 32]

        node = HDKey.from_mnemonic(bip39_test_vectors.public_path_mnemonic)
        child = node.derive_child(0)
        self.assertEqual(child.path, 'm/1')
Ejemplo n.º 12
0
 def test_derive_child_hardened_no_chaincode(self):
     sk = b'\x32' * 32
     node = HDKey.from_privkey(sk)
     with self.assertRaises(ValueError) as context:
         node.derive_child('1h')
     self.assertIn('without chain_code', str(context.exception))
Ejemplo n.º 13
0
 def test_derive_path_not_descendent(self):
     root = HDKey.from_mnemonic(bip39_test_vectors.public_path_mnemonic)
     child = root.derive_path('m/0/0')
     with self.assertRaises(ValueError) as context:
         child.derive_path('m/1/1')
     self.assertIn('requested child not in', str(context.exception))
Ejemplo n.º 14
0
 def test_normalize_index(self):
     self.assertEqual(HDKey._normalize_index(7), 7)
     self.assertEqual(HDKey._normalize_index('7'), 7)
     self.assertEqual(HDKey._normalize_index('7h'), 7 + 0x80000000)
     self.assertEqual(HDKey._normalize_index("7'"), 7 + 0x80000000)
Ejemplo n.º 15
0
 def test_derive_path_unknown(self):
     node = HDKey.from_privkey(b'\x32' * 32)
     with self.assertRaises(ValueError) as context:
         node.derive_path('6')
     self.assertIn('path is unknown', str(context.exception))
Ejemplo n.º 16
0
 def test_parse_derivation_error(self):
     with self.assertRaises(ValueError) as context:
         HDKey._parse_derivation('44')
     self.assertIn('Bad path. ', str(context.exception))
Ejemplo n.º 17
0
 def test_public_derivation(self):
     node = HDKey.from_xpub(self.public_path[0])
     child = node.derive_child(0)
     grandchild = child.derive_child(0)
     self.assertEqual(child.xpub, self.public_path[1])
     self.assertEqual(grandchild.xpub, self.public_path[2])
Ejemplo n.º 18
0
 def test_init_error(self):
     with self.assertRaises(ValueError) as context:
         HDKey({})
     self.assertIn('please instantiate', str(context.exception))
Ejemplo n.º 19
0
 def test_child_from_xpub(self):
     node = HDKey.from_mnemonic(bip39_test_vectors.public_path_mnemonic)
     child = node._child_from_xpub(0, self.public_path[1])
     self.assertEqual(child.path, 'm/0')
Ejemplo n.º 20
0
 def test_from_pubkey(self):
     pk = bytes.fromhex(
         '02800f0237e39dce74f506c508985d4d71f8020342d7dfe781ca5cfb73e63eb43e'
     )  # noqa: E501
     node = HDKey.from_pubkey(pk)
     self.assertEqual(node.pubkey, pk)
Ejemplo n.º 21
0
from riemann_keys.hdkey import HDKey

# Mnemonic to root
MNEMONIC = "keen speed ice always runway film setup sentence update stove distance merge"
root_seed = HDKey.root_seed_from_mnemonic(mnemonic=MNEMONIC)
root = HDKey.from_root_seed(root_seed=root_seed)

print("public key " + root.public_key.hex())
print("private key " + root.private_key.hex())
print("chaincode " + root.chain_code.hex())
print("xpub " + root.extended_public_key)
print("xpriv " + root.extended_private_key)
print("\n")

# Derive to a node at depth of 5
node = root.derive_path("m/44'/1'/1'/0/1")
print("public key " + node.public_key.hex())
print("private key " + node.private_key.hex())
print("chaincode " + node.chain_code.hex())
print("xpub " + node.extended_public_key)
print("xpriv " + node.extended_private_key)