work on seperating pubkey from tor/i2p
This commit is contained in:
parent
916cb1f8ac
commit
38bfee5344
@ -40,6 +40,7 @@ class Core:
|
|||||||
self.peerDB = 'data/peers.db'
|
self.peerDB = 'data/peers.db'
|
||||||
self.blockDB = 'data/blocks.db'
|
self.blockDB = 'data/blocks.db'
|
||||||
self.blockDataLocation = 'data/blocks/'
|
self.blockDataLocation = 'data/blocks/'
|
||||||
|
self.addressDB = 'data/address.db'
|
||||||
self._utils = onionrutils.OnionrUtils(self)
|
self._utils = onionrutils.OnionrUtils(self)
|
||||||
|
|
||||||
# Initialize the crypto object
|
# Initialize the crypto object
|
||||||
@ -61,7 +62,7 @@ class Core:
|
|||||||
DOES NO SAFETY CHECKS if the ID is valid, but prepares the insertion
|
DOES NO SAFETY CHECKS if the ID is valid, but prepares the insertion
|
||||||
'''
|
'''
|
||||||
# This function simply adds a peer to the DB
|
# This function simply adds a peer to the DB
|
||||||
if not self._utils.validateID(peerID):
|
if not self._utils.validatePubKey(peerID):
|
||||||
return False
|
return False
|
||||||
conn = sqlite3.connect(self.peerDB)
|
conn = sqlite3.connect(self.peerDB)
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
@ -70,6 +71,29 @@ class Core:
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def createAddressDB(self):
|
||||||
|
'''
|
||||||
|
Generate the address database
|
||||||
|
|
||||||
|
types:
|
||||||
|
1: I2P b32 address
|
||||||
|
2: Tor v2 (like facebookcorewwwi.onion)
|
||||||
|
3: Tor v3
|
||||||
|
'''
|
||||||
|
conn = sqlite3.connect(self.addressDB)
|
||||||
|
c = conn.cursor()
|
||||||
|
c.execute('''CREATE TABLE adders(
|
||||||
|
address text,
|
||||||
|
type int,
|
||||||
|
knownPeer text,
|
||||||
|
speed int,
|
||||||
|
success int,
|
||||||
|
failure int
|
||||||
|
);
|
||||||
|
''')
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
def createPeerDB(self):
|
def createPeerDB(self):
|
||||||
'''
|
'''
|
||||||
@ -81,7 +105,7 @@ class Core:
|
|||||||
c.execute('''CREATE TABLE peers(
|
c.execute('''CREATE TABLE peers(
|
||||||
ID text not null,
|
ID text not null,
|
||||||
name text,
|
name text,
|
||||||
pubkey text,
|
adders text,
|
||||||
blockDBHash text,
|
blockDBHash text,
|
||||||
forwardKey text,
|
forwardKey text,
|
||||||
dateSeen not null,
|
dateSeen not null,
|
||||||
@ -90,7 +114,6 @@ class Core:
|
|||||||
''')
|
''')
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def createBlockDB(self):
|
def createBlockDB(self):
|
||||||
@ -278,14 +301,6 @@ class Core:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def generateHMAC(self, length=32):
|
|
||||||
'''
|
|
||||||
Generate and return an HMAC key
|
|
||||||
'''
|
|
||||||
key = base64.b64encode(os.urandom(length))
|
|
||||||
|
|
||||||
return key
|
|
||||||
|
|
||||||
def listPeers(self, randomOrder=True):
|
def listPeers(self, randomOrder=True):
|
||||||
'''
|
'''
|
||||||
Return a list of peers
|
Return a list of peers
|
||||||
@ -300,7 +315,7 @@ class Core:
|
|||||||
peers = c.execute('SELECT * FROM peers;')
|
peers = c.execute('SELECT * FROM peers;')
|
||||||
peerList = []
|
peerList = []
|
||||||
for i in peers:
|
for i in peers:
|
||||||
peerList.append(i[0])
|
peerList.append(i[2])
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
return peerList
|
return peerList
|
||||||
@ -311,17 +326,17 @@ class Core:
|
|||||||
|
|
||||||
id text 0
|
id text 0
|
||||||
name text, 1
|
name text, 1
|
||||||
hmacKey text, 3
|
adders text, 2
|
||||||
blockDBHash text, 4
|
blockDBHash text, 3
|
||||||
forwardKey text, 5
|
forwardKey text, 4
|
||||||
dateSeen not null, 7
|
dateSeen not null, 5
|
||||||
bytesStored int, 8
|
bytesStored int, 6
|
||||||
trust int 9
|
trust int 7
|
||||||
'''
|
'''
|
||||||
conn = sqlite3.connect(self.peerDB)
|
conn = sqlite3.connect(self.peerDB)
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
command = (peer,)
|
command = (peer,)
|
||||||
infoNumbers = {'id': 0, 'name': 1, 'hmacKey': 3, 'blockDBHash': 4, 'forwardKey': 5, 'dateSeen': 6, 'bytesStored': 7, 'trust': 8}
|
infoNumbers = {'id': 0, 'name': 1, 'adders': 2, 'blockDBHash': 3, 'forwardKey': 4, 'dateSeen': 5, 'bytesStored': 6, 'trust': 7}
|
||||||
info = infoNumbers[info]
|
info = infoNumbers[info]
|
||||||
iterCount = 0
|
iterCount = 0
|
||||||
retVal = ''
|
retVal = ''
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
'''
|
'''
|
||||||
# Misc functions that do not fit in the main api, but are useful
|
# Misc functions that do not fit in the main api, but are useful
|
||||||
import getpass, sys, requests, configparser, os, socket, hashlib, logger, sqlite3
|
import getpass, sys, requests, configparser, os, socket, hashlib, logger, sqlite3
|
||||||
|
import nacl.signing, nacl.encoding
|
||||||
if sys.version_info < (3, 6):
|
if sys.version_info < (3, 6):
|
||||||
try:
|
try:
|
||||||
import sha3
|
import sha3
|
||||||
@ -140,10 +141,20 @@ class OnionrUtils:
|
|||||||
retVal = False
|
retVal = False
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|
||||||
|
def validatePubKey(self, key):
|
||||||
|
'''Validate if a string is a valid base32 encoded Ed25519 key'''
|
||||||
|
retVal = False
|
||||||
|
try:
|
||||||
|
nacl.signing.SigningKey(self, seed=key, encoder=nacl.encoding.Base32Encoder)
|
||||||
|
except nacl.exceptions.ValueError:
|
||||||
|
pass
|
||||||
|
return retVal
|
||||||
|
|
||||||
|
|
||||||
def validateID(self, id):
|
def validateID(self, id):
|
||||||
'''
|
'''
|
||||||
Validate if a user ID is a valid tor or i2p hidden service
|
Validate if an address is a valid tor or i2p hidden service
|
||||||
'''
|
'''
|
||||||
idLength = len(id)
|
idLength = len(id)
|
||||||
retVal = True
|
retVal = True
|
||||||
@ -183,9 +194,4 @@ class OnionrUtils:
|
|||||||
if not idNoDomain.isalnum():
|
if not idNoDomain.isalnum():
|
||||||
retVal = False
|
retVal = False
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|
||||||
def sendPM(self, peer, message):
|
|
||||||
'''Send an encrypted private message to a user'''
|
|
||||||
|
|
||||||
return
|
|
@ -54,7 +54,7 @@ class OnionrTests(unittest.TestCase):
|
|||||||
myCore = core.Core()
|
myCore = core.Core()
|
||||||
if not os.path.exists('data/peers.db'):
|
if not os.path.exists('data/peers.db'):
|
||||||
myCore.createPeerDB()
|
myCore.createPeerDB()
|
||||||
if myCore.addPeer('2ks5c5bm6zk3ejqg.onion') and not myCore.addPeer('invalidpeer.onion'):
|
if myCore.addPeer('6M5MXL237OK57ITHVYN5WGHANPGOMKS5C3PJLHBBNKFFJQOIDOJA====') and not myCore.addPeer('NFXHMYLMNFSAU==='):
|
||||||
self.assertTrue(True)
|
self.assertTrue(True)
|
||||||
else:
|
else:
|
||||||
self.assertTrue(False)
|
self.assertTrue(False)
|
||||||
|
Loading…
Reference in New Issue
Block a user