def _generate_new_keypair(self): secret = str(random.randrange(2**256)) self.secret = hashlib.sha256(secret).hexdigest() self.pubkey = privtopub(self.secret) self.privkey = random_key() print 'PRIVATE KEY: ', self.privkey self.btc_pubkey = privtopub(self.privkey) print 'PUBLIC KEY: ', self.btc_pubkey # Generate SIN sha_hash = hashlib.sha256() sha_hash.update(self.pubkey) ripe_hash = hashlib.new('ripemd160') ripe_hash.update(sha_hash.digest()) self.guid = ripe_hash.digest().encode('hex') self.sin = obelisk.EncodeBase58Check('\x0F\x02%s' + ripe_hash.digest()) newsettings = { "secret": self.secret, "pubkey": self.pubkey, "privkey": self.privkey, "guid": self.guid, "sin": self.sin } self.db.updateEntries("settings", {"market_id": self.market_id}, newsettings) self.settings.update(newsettings)
def get_peers(self): peers = [] for peer in self.transport.dht.activePeers: if hasattr(peer, 'address'): peer_item = {'uri': peer.address} if peer.pub: peer_item['pubkey'] = peer.pub else: peer_item['pubkey'] = 'unknown' peer_item['guid'] = peer.guid if peer.guid: peer_item['sin'] = obelisk.EncodeBase58Check( '\x0F\x02%s' + peer.guid.decode('hex')) peer_item['nick'] = peer.nickname self.log.debug('Peer Nick %s', peer) peers.append(peer_item) return peers
def _setup_guid(self): # GUIDs should be the pubkey signed with privkey then # hashed with SHA256 and subsequently RIPEMD160 # This can provide protection against Spartacus # http://xlattice.sourceforge.net/components/protocol/kademlia/specs.html signed_pubkey = self.cryptor.sign(self.pubkey) sha_hash = hashlib.sha256() sha_hash.update(signed_pubkey) ripe_hash = hashlib.new('ripemd160') ripe_hash.update(sha_hash.digest()) self.guid = ripe_hash.hexdigest() # Generate SIN self.sin = obelisk.EncodeBase58Check('\x0F\x02%s' % ripe_hash.digest()) new_settings = {"guid": self.guid, "sin": self.sin} self.db_connection.update_entries("settings", new_settings, {"market_id": self.market_id}) self.settings.update(new_settings)
def _generate_new_keypair(self): seed = str(random.randrange(2**256)) # Deprecated (pre-BIP32) # self.secret = hashlib.sha256(secret).hexdigest() # self.pubkey = privkey_to_pubkey(self.secret) # self.log.debug('Keys %s %s', self.secret, self.pubkey) # Move to BIP32 keys m/0/0/0 wallet = bitcoin.bip32_ckd(bitcoin.bip32_master_key(seed), 0) wallet_chain = bitcoin.bip32_ckd(wallet, 0) bip32_identity_priv = bitcoin.bip32_ckd(wallet_chain, 0) identity_priv = bitcoin.bip32_extract_key(bip32_identity_priv) bip32_identity_pub = bitcoin.bip32_privtopub(bip32_identity_priv) identity_pub = bitcoin.encode_pubkey( bitcoin.bip32_extract_key(bip32_identity_pub), 'hex') self.pubkey = identity_pub self.secret = identity_priv # Generate SIN sha_hash = hashlib.sha256() sha_hash.update(self.pubkey) ripe_hash = hashlib.new('ripemd160') ripe_hash.update(sha_hash.digest()) self.guid = ripe_hash.hexdigest() self.sin = obelisk.EncodeBase58Check('\x0F\x02%s' % ripe_hash.digest()) newsettings = { "secret": self.secret, "pubkey": self.pubkey, "guid": self.guid, "sin": self.sin, "bip32_seed": seed } self.db_connection.update_entries("settings", newsettings, {"market_id": self.market_id}) self.settings.update(newsettings)
def get_peers(self): peers = [] for peer in self._transport._dht._activePeers: self._log.debug('get peer %s' % peer) if hasattr(peer, '_address'): peer_item = {'uri': peer._address} if peer._pub: peer_item['pubkey'] = peer._pub.encode('hex') else: peer_item['pubkey'] = 'unknown' peer_item['guid'] = peer._guid peer_item['sin'] = obelisk.EncodeBase58Check( '\x0F\x02%s' + peer._guid.decode('hex')) peer_item['nick'] = peer._nickname self._log.info('Peer Nick %s ' % peer) peers.append(peer_item) return peers
def generate_sin(guid): return obelisk.EncodeBase58Check('\x0F\x02%s' + guid.decode('hex'))