示例#1
0
    def test_version_bytes(self):
        xprv_headers_b58 = {
            'standard': 'tprv',
            'p2wpkh-p2sh': 'uprv',
            'p2wsh-p2sh': 'Uprv',
            'p2wpkh': 'vprv',
            'p2wsh': 'Vprv',
        }
        xpub_headers_b58 = {
            'standard': 'tpub',
            'p2wpkh-p2sh': 'upub',
            'p2wsh-p2sh': 'Upub',
            'p2wpkh': 'vpub',
            'p2wsh': 'Vpub',
        }
        for xtype, xkey_header_bytes in constants.net.XPRV_HEADERS.items():
            xkey_header_bytes = bfh("%08x" % xkey_header_bytes)
            xkey_bytes = xkey_header_bytes + bytes([0] * 74)
            xkey_b58 = EncodeBase58Check(xkey_bytes)
            self.assertTrue(xkey_b58.startswith(xprv_headers_b58[xtype]))

            xkey_bytes = xkey_header_bytes + bytes([255] * 74)
            xkey_b58 = EncodeBase58Check(xkey_bytes)
            self.assertTrue(xkey_b58.startswith(xprv_headers_b58[xtype]))

        for xtype, xkey_header_bytes in constants.net.XPUB_HEADERS.items():
            xkey_header_bytes = bfh("%08x" % xkey_header_bytes)
            xkey_bytes = xkey_header_bytes + bytes([0] * 74)
            xkey_b58 = EncodeBase58Check(xkey_bytes)
            self.assertTrue(xkey_b58.startswith(xpub_headers_b58[xtype]))

            xkey_bytes = xkey_header_bytes + bytes([255] * 74)
            xkey_b58 = EncodeBase58Check(xkey_bytes)
            self.assertTrue(xkey_b58.startswith(xpub_headers_b58[xtype]))
示例#2
0
 def get_public_key(self, bip32_path):
     address_n = self.get_client().expand_path(bip32_path)
     node = self.get_client().get_public_node(address_n).node
     xpub = "0488B21E".decode('hex') + chr(node.depth) + self.i4b(
         node.fingerprint) + self.i4b(
             node.child_num) + node.chain_code + node.public_key
     return EncodeBase58Check(xpub)
示例#3
0
 def test_base58check(self):
     data_hex = '0cd394bef396200774544c58a5be0189f3ceb6a41c8da023b099ce547dd4d8071ed6ed647259fba8c26382edbf5165dfd2404e7a8885d88437db16947a116e451a5d1325e3fd075f9d370120d2ab537af69f32e74fc0ba53aaaa637752964b3ac95cfea7'
     data_bytes = bfh(data_hex)
     data_base58check = EncodeBase58Check(data_bytes)
     self.assertEqual(
         "4GCCJsjHqFbHxWbFBvRg35cSeNLHKeNqkXqFHW87zRmz6iP1dJU9Tk2KHZkoKj45jzVsSV4ZbQ8GpPwko6V3Z7cRfux3zJhUw7TZB6Kpa8Vdya8cMuUtL5Ry3CLtMetaY42u52X7Ey6MAH",
         data_base58check)
     self.assertEqual(data_bytes, DecodeBase58Check(data_base58check))
示例#4
0
 def get_xpub(self, bip32_path):
     address_n = self.expand_path(bip32_path)
     creating = False  #self.next_account_number() == 0
     node = self.get_public_node(address_n, creating).node
     xpub = ("0488B21E".decode('hex') + chr(node.depth) +
             self.i4b(node.fingerprint) + self.i4b(node.child_num) +
             node.chain_code + node.public_key)
     return EncodeBase58Check(xpub)
示例#5
0
            publicKey = compress_public_key(nodeData['publicKey'])
            depth = len(splitPath)
            lastChild = splitPath[len(splitPath) - 1].split('\'')
            if len(lastChild) == 1:
                childnum = int(lastChild[0])
            else:
                childnum = 0x80000000 | int(lastChild[0])
            xpub = "0488B21E".decode('hex') + chr(depth) + self.i4b(
                fingerprint) + self.i4b(childnum) + str(
                    nodeData['chainCode']) + str(publicKey)
        except Exception, e:
            self.give_error(e, True)
        finally:
            self.handler.clear_dialog()

        return EncodeBase58Check(xpub)

    def decrypt_message(self, pubkey, message, password):
        self.give_error("Not supported")

    def sign_message(self, address, message, password):
        use2FA = False
        self.signing = True
        # prompt for the PIN before displaying the dialog if necessary
        client = self.get_client()
        if not self.check_proper_device():
            self.give_error('Wrong device or password')
        address_path = self.address_id(address)
        self.handler.show_message("Signing message ...")
        try:
            info = self.get_client().signMessagePrepare(address_path, message)