def create_mpk(): seed = Btclib.random_electrum_seed() mpk = Btclib.subkey_for_path(Btclib.bip32_master_key(seed), "1/1.pub") keysign = Btclib.bip32_extract_key(Btclib.subkey_for_path(Btclib.bip32_master_key(seed), "3/3/3/3/1")) QtGui.QMessageBox.information(bppclient, 'Welcome', "Your PRIVATE Master Key and your wallet's data have been stored in the \"bpp_data\" folder, please keep it safe!", QtGui.QMessageBox.Ok) bppclient.cfgmain = {"priv_seed" : seed, "master_pub_key" : mpk, "keysign" : keysign} save_cfg() start()
def genmpk(self): p1 = str(random.randrange(2**31-1)) p2 = str(random.randrange(2**31-1)) mpk = p1+'/'+p2+'/'+Btclib.subkey_for_path(bppclient.mpkbtc, p1+'/'+p2) vcard = self['xep_0054'].stanza.VCardTemp() vcard['FN'] = 'BPP Client' vcard['JABBERID'] = self.boundjid.bare vcard['NOTE'] = '{"BITCOIN_MPK" : "'+mpk+'", ' vcard['NOTE'] += '"BITCOIN_SIGN" : "'+Btclib.ecdsa_sign(mpk, bppclient.keysign)+'"}' self['xep_0054'].publish_vcard(vcard)
def start(): try: f = open(os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), 'bpp_data', 'bppcnx.cfg'),'r') c = json.load(f) f.close() bppclient.cfgmain = c["main"] bppclient.cfgbpp = c["bpp"] for bppid in bppclient.cfgbpp: bppclient.ui.bppidcb.addItem(bppid["bppid"]) if bppclient.cfgmain["master_pub_key"] != "": bppclient.mpkbtc = Btclib.bip32_ckd(bppclient.cfgmain["master_pub_key"], 2) if bppclient.cfgmain["priv_seed"] != "": bppclient.mpkbpp = Btclib.subkey_for_path(Btclib.bip32_master_key(bppclient.cfgmain["priv_seed"]), "1/1/1") bppclient.wallet.privbtc = Btclib.subkey_for_path(Btclib.bip32_master_key(bppclient.cfgmain["priv_seed"]), "1/1/2") if bppclient.cfgmain["keysign"] != "": bppclient.keysign = bppclient.cfgmain["keysign"] if bppclient.cfgbpp != []: bppidcnt() except IOError: create_mpk() updateStatusBar() updateReceiveAddrs()
def message(self, msg): if msg['type'] == 'normal': try: req = json.loads(msg['body']) if req['TYPE'] == 'PAYMENT': try: p1, p2, p3, addr = req['DATA']['PATH'].split('/') frm, to = msg['from'].bare, self.boundjid.bare if Btclib.pubkey_to_address(Btclib.bip32_extract_key(Btclib.subkey_for_path(bppclient.mpkbtc, p1+'/'+p2+'/'+p3))) != addr: return if req['DATA']['TXIN'] in bppclient.pendpayhist: return if req['DATA']['TXIN'] in map(lambda x:x[0], bppclient.confpayhist): return invoke_gui(insertPendPay, (req['DATA']['TXIN'],req['DATA']['PATH'],frm,to,req['DATA']['REF'],req['DATA']['RETADDR'])) bppclient.pendpayhist[req['DATA']['TXIN']] = (req['DATA']['PATH'],frm,to,req['DATA']['REF'],req['DATA']['RETADDR']) bppclient.wallet.import_key_bip32(addr, p1+'/'+p2+'/'+p3, None) except: return except ValueError: return