def test_is_bip32_derivation(self): self.assertTrue(is_bip32_derivation("m/0'/1")) self.assertTrue(is_bip32_derivation("m/0'/0'")) self.assertTrue(is_bip32_derivation("m/44'/0'/0'/0/0")) self.assertTrue(is_bip32_derivation("m/49'/0'/0'/0/0")) self.assertFalse(is_bip32_derivation("mmmmmm")) self.assertFalse(is_bip32_derivation("n/")) self.assertFalse(is_bip32_derivation("")) self.assertFalse(is_bip32_derivation("m/q8462"))
def test_is_bip32_derivation(self): self.assertTrue(is_bip32_derivation("m/0'/1")) self.assertTrue(is_bip32_derivation("m/0'/0'")) self.assertTrue(is_bip32_derivation("m/44'/0'/0'/0/0")) self.assertTrue(is_bip32_derivation("m/49'/0'/0'/0/0")) self.assertFalse(is_bip32_derivation("mmmmmm")) self.assertFalse(is_bip32_derivation("n/")) self.assertFalse(is_bip32_derivation("")) self.assertFalse(is_bip32_derivation("m/q8462"))
elif args.master_key: try: master_key = bip32.BIP32Node.from_xkey(sys.stdin.readline().strip( ) if args.master_key == '-' else args.master_key) except BaseException: sys.exit("Invalid master key\n") if args.convert: if args.gen_master: sys.exit("Convert option cannot be used with generate master option") else: convert_type = args.convert if args.convert != "p2pkh" else "standard" master_key = master_key._replace(xtype=convert_type) derivation_path = args.derivation_path if args.derivation_path != "m" else "m/" if bip32.is_bip32_derivation(derivation_path): if not master_key.is_private(): if args.output_xprv: sys.exit( "Cannot derive extended private key from extended public key\n" ) if derivation_path == "m/": print(master_key.to_xpub()) else: try: xpub = master_key.subkey_at_public_derivation(derivation_path) sys.stderr.write( "Derivation Path: {}\n".format(derivation_path)) except BaseException: sys.exit( "Invalid derivation path. Private derivation is not possible with extended public keys.\n"
if args.convert: if args.gen_master: sys.exit( "Convert option cannot be used with generate master option" ) else: convert_type = args.convert if args.convert !="p2pkh" else "standard" if bip32.is_xpub(master_key): xtype, depth, fingerprint, child_number, c, K_or_k = bip32.deserialize_xpub( master_key ) master_key = bip32.serialize_xpub( convert_type, c, K_or_k, depth, fingerprint, child_number ) elif bip32.is_xprv(master_key): xtype, depth, fingerprint, child_number, c, K_or_k = bip32.deserialize_xprv( master_key ) master_key = bip32.serialize_xprv( convert_type, c, K_or_k, depth, fingerprint, child_number ) else: sys.exit( "Master key is not a valid extended key" ) derivation_path = args.derivation_path if args.derivation_path != "m" else "m/" if bip32.is_bip32_derivation( derivation_path ): if bip32.is_xpub(master_key): if args.output_xprv: sys.exit( "Cannot derive extended private key from extended public key\n" ) if derivation_path == "m/": print( master_key ) else: try: xpub = bip32.bip32_public_derivation( master_key, "m/", derivation_path ) sys.stderr.write( "Derivation Path: {}\n".format( derivation_path ) ) except BaseException: sys.exit( "Invalid derivation path. Private derivation is not possible with extended public keys.\n" ) else: print( xpub ) elif bip32.is_xprv( master_key ): try:
def verify_derivation_path(self, path): return is_bip32_derivation(path)