diff --git a/.gitignore b/.gitignore index 0d9c0eda..2a7d956a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ onionr/*.pyc onionr/*.log onionr/data/hs/hostname onionr/data/* +onionr/gnupg/* diff --git a/onionr/api.py b/onionr/api.py index a5e75e28..efb420c6 100755 --- a/onionr/api.py +++ b/onionr/api.py @@ -23,7 +23,7 @@ from multiprocessing import Process import configparser, sys, random, threading, hmac, hashlib, base64, time, math, gnupg, os, logger from core import Core -import onionrutils +import onionrutils, onionrcrypto class API: ''' Main HTTP API (Flask) @@ -56,6 +56,7 @@ class API: self.debug = debug self._privateDelayTime = 3 self._core = Core() + self._crypto = onionrcrypto.OnionrCrypto(self._core) self._utils = onionrutils.OnionrUtils(self._core) app = flask.Flask(__name__) bindPort = int(self.config['CLIENT']['PORT']) @@ -131,7 +132,9 @@ class API: pass elif action == 'ping': resp = Response("pong!") - elif action == 'setHMAC': + elif action == 'getHMAC': + resp = Response(self._crypto.generateHMAC()) + elif action == 'getSymmetric': pass elif action == 'getDBHash': resp = Response(self._utils.getBlockDBHash()) diff --git a/onionr/core.py b/onionr/core.py index d7ac589c..93a1bc7c 100644 --- a/onionr/core.py +++ b/onionr/core.py @@ -18,11 +18,11 @@ along with this program. If not, see . ''' import sqlite3, os, sys, time, math, gnupg, base64, tarfile, getpass, simplecrypt, hashlib, nacl, logger -from Crypto.Cipher import AES -from Crypto import Random +#from Crypto.Cipher import AES +#from Crypto import Random import netcontroller -import onionrutils +import onionrutils, onionrcrypto if sys.version_info < (3, 6): try: @@ -41,7 +41,9 @@ class Core: self.ownPGPID = '' self.blockDB = 'data/blocks.db' self.blockDataLocation = 'data/blocks/' + self.gpgHome = './data/pgp/' self._utils = onionrutils.OnionrUtils(self) + self._crypto = onionrcrypto.OnionrCrypto(self) if not os.path.exists('data/'): os.mkdir('data/') @@ -59,7 +61,7 @@ class Core: Uses own PGP home folder in the data/ directory ''' - gpg = gnupg.GPG(homedir='./data/pgp/') + gpg = gnupg.GPG(homedir=self.gpgHome) input_data = gpg.gen_key_input(key_type="RSA", key_length=1024, name_real=myID, name_email='anon@onionr', testing=True) key = gpg.gen_key(input_data) logger.info("Generating PGP key, this will take some time..") diff --git a/onionr/onionrcrypto.py b/onionr/onionrcrypto.py index fed23889..ccfcee7b 100644 --- a/onionr/onionrcrypto.py +++ b/onionr/onionrcrypto.py @@ -17,10 +17,11 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ''' -import nacl +import nacl, gnupg class OnionrCrypto: - def __init__(self): + def __init__(self, coreInstance): + self._core = coreInstance return def symmetricPeerEncrypt(self, data, key): @@ -31,3 +32,8 @@ class OnionrCrypto: def rsaEncrypt(self, peer, data): return + + def verifyPGP(self, peer, signature): + '''Verify PGP signed data''' + gpg = gnupg.GPG(homedir=self._core.gpgHome) + \ No newline at end of file diff --git a/onionr/onionrutils.py b/onionr/onionrutils.py index ca575073..14ca52f1 100644 --- a/onionr/onionrutils.py +++ b/onionr/onionrutils.py @@ -153,6 +153,17 @@ class OnionrUtils: retVal = False return retVal + + def getPeerPGPFingerprint(self, peer): + ''' + Get peer's PGP fingerprint + ''' + retData = '' + gpg = gnupg.GPG(homedir=self._core.gpgHome) + for i in gpg.list_keys(): + if peer in i['uids'][0]: + retData = i['fingerprint'] + return retData def validateID(self, id): ''' diff --git a/readme.md b/readme.md index 730d1270..fea71132 100644 --- a/readme.md +++ b/readme.md @@ -13,6 +13,8 @@ Major work in progress. This software is in heavy development. If for some reason you want to get involved, get in touch first. +**Onionr API and functionality is subject to non-backwards compatible change during development** + ## Disclaimer The Tor Project, I2P developers, and anyone else do not own, create, or endorse this project, and are not otherwise involved.