diff --git a/src/blockdb/getblocks.py b/src/blockdb/getblocks.py
index a780838c..5cebddc5 100644
--- a/src/blockdb/getblocks.py
+++ b/src/blockdb/getblocks.py
@@ -6,7 +6,12 @@ from onionrblocks import Block
from .dbpath import block_db_path
+
def get_blocks_by_type(block_type: str) -> "Generator[Block]":
+ try:
+ block_type = block_type.decode('utf-8')
+ except AttributeError:
+ pass
block_db = db.get_db_obj(block_db_path, 'u')
for block_hash in db.list_keys(block_db_path):
block = Block(block_hash, block_db[block_hash], auto_verify=False)
@@ -25,4 +30,4 @@ def get_blocks_after_timestamp(
if block_type == block.type:
yield block
else:
- yield block
\ No newline at end of file
+ yield block
diff --git a/src/filepaths/__init__.py b/src/filepaths/__init__.py
index 919e6d8a..42c69267 100644
--- a/src/filepaths/__init__.py
+++ b/src/filepaths/__init__.py
@@ -9,11 +9,6 @@ gossip_server_socket_file = home + 'gossip-server.sock'
usage_file = home + 'disk-usage.txt'
contacts_location = home + 'contacts/'
-public_API_host_file = home + 'public-host.txt'
-private_API_host_file = home + 'private-host.txt'
-bootstrap_file_location = 'static-data/bootstrap-nodes.txt'
-data_nonce_file = home + 'block-nonces.dat'
-forward_keys_file = home + 'forward-keys.db'
cached_storage = home + 'cachedstorage.dat'
export_location = home + 'block-export/'
upload_list = home + 'upload-list.json'
@@ -27,8 +22,6 @@ site_cache = home + 'onionr-sites.txt'
tor_hs_loc = home + 'hs/'
tor_hs_address_file = home + 'hs/hostname'
-data_nonce_file = home + 'block-nonces.dat'
-
keys_file = home + 'keys.txt'
onboarding_mark_file = home + 'onboarding-completed'
@@ -38,5 +31,3 @@ log_file = home + 'onionr.log'
ephemeral_services_file = home + 'ephemeral-services.list'
restarting_indicator = home + "is-restarting"
-
-block_database = home + "blocks.db"
diff --git a/src/gossip/client/storeblocks.py b/src/gossip/client/storeblocks.py
index e45dd406..b47f5534 100644
--- a/src/gossip/client/storeblocks.py
+++ b/src/gossip/client/storeblocks.py
@@ -36,5 +36,6 @@ def store_blocks(dandelion_phase: 'DandelionPhase'):
bl = new_queue.get(timeout=dandelion_phase.remaining_time() + 1)
blockdb.add_block_to_db(bl)
event('gotblock', data=bl, threaded=True)
+ event(f'gotblock{bl.type}', data=bl, threaded=True)
except Empty:
pass
diff --git a/src/keymanager.py b/src/keymanager.py
deleted file mode 100755
index 156e1c3b..00000000
--- a/src/keymanager.py
+++ /dev/null
@@ -1,81 +0,0 @@
-"""Onionr - Private P2P Communication.
-
-Load, save, and delete the user's public key pairs (does not handle peer keys)
-"""
-from onionrutils import bytesconverter
-from onionrcrypto import generate
-import filepaths
-"""
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-"""
-
-
-class KeyManager:
- def __init__(self):
- self.keyFile = filepaths.keys_file
-
- def addKey(self, pubKey=None, privKey=None):
- """Add a new key pair.
-
- either specified or None to generate a new pair automatically
- """
- if type(pubKey) is type(None) and type(privKey) is type(None):
- pubKey, privKey = generate.generate_pub_key()
- pubKey = bytesconverter.bytes_to_str(pubKey)
- privKey = bytesconverter.bytes_to_str(privKey)
- try:
- if pubKey in self.getPubkeyList():
- raise ValueError('Pubkey already in list: %s' % (pubKey,))
- except FileNotFoundError:
- pass
-
- with open(self.keyFile, "a") as keyFile:
- keyFile.write(pubKey + ',' + privKey + '\n')
- return (pubKey, privKey)
-
- def removeKey(self, pubKey):
- """Remove a key pair by pubkey"""
- keyList = self.getPubkeyList()
- keyData = ''
- try:
- keyList.remove(pubKey)
- except ValueError:
- return False
- else:
- keyData = ','.join(keyList)
- with open(self.keyFile, "w") as keyFile:
- keyFile.write(keyData)
-
- def getPubkeyList(self):
- """Return a list of the user's keys"""
- keyList = []
- try:
- with open(self.keyFile, "r") as keyFile:
- keyData = keyFile.read()
- except FileNotFoundError:
- keyData = ''
- keyData = keyData.split('\n')
- for pair in keyData:
- if len(pair) > 0:
- keyList.append(pair.split(',')[0])
- return keyList
-
- def getPrivkey(self, pubKey):
- privKey = None
- with open(self.keyFile, "r") as keyFile:
- keyData = keyFile.read()
- for pair in keyData.split('\n'):
- if pubKey in pair or pubKey.replace('=', '') in pair:
- privKey = pair.split(',')[1]
- return privKey
diff --git a/src/onionrcrypto/__init__.py b/src/onionrcrypto/__init__.py
index 7b4a317f..c0860922 100755
--- a/src/onionrcrypto/__init__.py
+++ b/src/onionrcrypto/__init__.py
@@ -18,7 +18,7 @@
along with this program. If not, see .
'''
-from . import generate, hashers, getourkeypair, signing, encryption, cryptoutils
+from . import generate, getourkeypair, signing, encryption, cryptoutils
generate_deterministic = generate.generate_deterministic
generate = generate.generate_pub_key
diff --git a/src/onionrcrypto/generate.py b/src/onionrcrypto/generate.py
index 298198d7..e42468a0 100644
--- a/src/onionrcrypto/generate.py
+++ b/src/onionrcrypto/generate.py
@@ -31,10 +31,8 @@ def generate_pub_key():
return tuple of base32encoded pubkey, privkey
"""
private_key = nacl.signing.SigningKey.generate()
- public_key = private_key.verify_key.encode(
- encoder=nacl.encoding.Base32Encoder())
- return (public_key.decode(), private_key.encode(
- encoder=nacl.encoding.Base32Encoder()).decode())
+ public_key = private_key.verify_key
+ return (public_key, private_key)
def generate_deterministic(passphrase, bypassCheck=False):
diff --git a/src/onionrcrypto/hashers.py b/src/onionrcrypto/hashers.py
deleted file mode 100644
index 830aa998..00000000
--- a/src/onionrcrypto/hashers.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import hashlib
-
-import nacl.hash
-
-
-def sha3_hash(data):
- try:
- data = data.encode()
- except AttributeError:
- pass
- hasher = hashlib.sha3_256()
- hasher.update(data)
- return hasher.hexdigest()
-
-
-def blake2b_hash(data):
- try:
- data = data.encode()
- except AttributeError:
- pass
- return nacl.hash.blake2b(data)
diff --git a/static-data/default-plugins/tor/torpeer.py b/static-data/default-plugins/tor/torpeer.py
index 048bca54..e3f7c67e 100644
--- a/static-data/default-plugins/tor/torpeer.py
+++ b/static-data/default-plugins/tor/torpeer.py
@@ -48,7 +48,9 @@ class TorPeer:
except KeyError:
pass
else:
- logger.debug(f"Could not create socket to peer {self.transport_address}", terminal=True)
+ logger.debug(
+ f"Could not create socket to peer {self.transport_address}",
+ terminal=True)
raise TimeoutError
mock_recv = HandleRevc(s)
s.recv = mock_recv.recv
diff --git a/tests/default-plugin-tests/wot/test_identity_load_from_blocks.py b/tests/default-plugin-tests/wot/test_identity_load_from_blocks.py
new file mode 100644
index 00000000..1e1771df
--- /dev/null
+++ b/tests/default-plugin-tests/wot/test_identity_load_from_blocks.py
@@ -0,0 +1,59 @@
+import dbm
+import os, uuid
+
+import time
+
+TEST_DIR = 'testdata/%s-%s' % (str(uuid.uuid4())[:6], os.path.basename(__file__)) + '/'
+print("Test directory:", TEST_DIR)
+os.environ["ONIONR_HOME"] = TEST_DIR
+os.makedirs(TEST_DIR)
+
+import unittest
+import sys
+sys.path.append('static-data/default-plugins/wot/wot')
+sys.path.append("src/")
+import onionrblocks
+from blockdb import block_db_path
+from identity import Identity
+from loadfromblocks import load_identities_from_blocks
+import blockdb
+
+def _safe_remove(path):
+ try:
+ os.remove(path)
+ except FileNotFoundError:
+ pass
+
+
+class LoadIdentitiesFromBlocksTest(unittest.TestCase):
+
+ def test_load_from_blocks_no_blocks(self):
+ _safe_remove(block_db_path)
+ self.assertEqual(len(list(load_identities_from_blocks())), 0)
+
+ def test_load_from_blocks_one(self):
+ _safe_remove(block_db_path)
+
+ serialized_identity = b'jp\x18\xccB\xbb\xb5T\xae%\xc2NfvF\xd9e\xdb\xd1\x11\x13\x8al\x9f\x9d\xb7/\xc5\x0eG\xe9g{f\xa2\n\r\xe3cK\x96E\x01d\xbbz\xb5\xb1\x1eRA`\x94\xab\xf2\n",\xfe\xca\x0b\xb4v\x0500000000000000000test\x1b\xc8\x8d\x88\xe39\xeb\xbe\\\xbd\xc8[xD\xbcr\x1f\xa4\x03%p\x19\xf7\xd7%6S\xef*\x03\x91\xe31662057071'
+
+ bl = onionrblocks.create_anonvdf_block(
+ serialized_identity, b'wotb', 3600)
+
+ with dbm.open(block_db_path, 'c') as db:
+ db[bl.id] = bl.raw
+
+ self.assertEqual(len(list(load_identities_from_blocks())), 1)
+
+ def test_load_from_blocks_one_invalid(self):
+ _safe_remove(block_db_path)
+ serialized_identity_invalid = b'jp\x18\xccB\xbb\xb5T\xae%\xc2NfvF\xd9e\xdb\xd1\x12\x14\x8al\x9f\x9d\xb7/\xc5\x0eG\xe9g{f\xa2\n\r\xe3cK\x96E\x01d\xbbz\xb5\xb1\x1eRA`\x94\xab\xf2\n",\xfe\xca\x0b\xb4v\x0500000000000000000test\x1b\xc8\x8d\x88\xe39\xeb\xbe\\\xbd\xc8[xD\xbcr\x1f\xa4\x03%p\x19\xf7\xd7%6S\xef*\x03\x91\xe31662057071'
+ bl = onionrblocks.create_anonvdf_block(
+ serialized_identity_invalid, b'wotb', 3600)
+
+ with dbm.open(block_db_path, 'c') as db:
+ db[bl.id] = bl.raw
+
+ self.assertEqual(len(list(load_identities_from_blocks())), 0)
+
+
+unittest.main()
diff --git a/tests/test_bettersleep.py b/tests/test_bettersleep.py
deleted file mode 100644
index 76c2f2a2..00000000
--- a/tests/test_bettersleep.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python3
-import sys, os
-sys.path.append(".")
-sys.path.append("src/")
-import uuid
-TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
-print("Test directory:", TEST_DIR)
-os.environ["ONIONR_HOME"] = TEST_DIR
-import unittest, json
-
-import time, math
-
-from utils import bettersleep
-
-
-class TestBetterSleep(unittest.TestCase):
- def test_better_sleep(self):
- s = math.floor(time.time())
- t = 1
- bettersleep.sleep(t)
- self.assertEqual(math.floor(time.time()) - s, t)
-
- def test_no_ctrl_c(self):
- # TODO: figure out how to automate ctrl-c test
- return
-
-
-unittest.main()