Module onionr.keymanager
Onionr - Private P2P Communication
Load, save, and delete the user's public key pairs (does not handle peer keys)
Source code
'''
Onionr - Private P2P Communication
Load, save, and delete the user's public key pairs (does not handle peer keys)
'''
'''
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 <https://www.gnu.org/licenses/>.
'''
from onionrutils import bytesconverter
from onionrcrypto import generate
import os
import filepaths
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
Classes
class KeyManager
-
Source code
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
Methods
def addKey(self, pubKey=None, privKey=None)
-
Add a new key pair, either specified or none to generate a new pair automatically
Source code
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 getPrivkey(self, pubKey)
-
Source code
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
def getPubkeyList(self)
-
Return a list of the user's keys
Source code
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 removeKey(self, pubKey)
-
Remove a key pair by pubkey
Source code
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)