work on forward secrecy
parent
c4dcd89dfe
commit
1c2a8a2f40
|
@ -55,20 +55,24 @@ class OnionrUser:
|
|||
return decrypted
|
||||
|
||||
def forwardEncrypt(self, data):
|
||||
retData = ''
|
||||
forwardKey = self._getLatestForwardKey()
|
||||
if self._core._utils.validatePubKey(forwardKey):
|
||||
encrypted = self._core._crypto.pubKeyEncrypt(data, forwardKey, encodedData=True)
|
||||
else:
|
||||
raise Exception("No valid forward key available for this user")
|
||||
return
|
||||
|
||||
def forwardDecrypt(self, encrypted):
|
||||
retData = ''
|
||||
return
|
||||
|
||||
def _getLatestForwardKey(self):
|
||||
# Get the latest forward secrecy key for a peer
|
||||
conn = sqlite3.connect(self._core.peerDB)
|
||||
c = conn.cursor()
|
||||
# Prepare the insert
|
||||
time = self._core._utils.getEpoch()
|
||||
key = ''
|
||||
|
||||
for row in c.execute("SELECT forwardKey FROM forwardKeys WHERE DATE=(SELECT max(date) FROM forwardKeys);"):
|
||||
for row in c.execute("SELECT forwardKey FROM forwardKeys WHERE peerKey = ? AND date=(SELECT max(date) FROM forwardKeys)", (self.publicKey,)):
|
||||
key = row[0]
|
||||
break
|
||||
|
||||
|
@ -76,6 +80,19 @@ class OnionrUser:
|
|||
conn.close()
|
||||
return key
|
||||
|
||||
def _getForwardKeys(self):
|
||||
conn = sqlite3.connect(self._core.peerDB)
|
||||
c = conn.cursor()
|
||||
keyList = []
|
||||
for row in c.execute("SELECT forwardKey FROM forwardKeys WHERE peerKey = ?", (self.publicKey,)):
|
||||
key = row[0]
|
||||
keyList.append(key)
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
return list(keyList)
|
||||
|
||||
def addForwardKey(self, newKey):
|
||||
if not self._core._utils.validatePubKey(newKey):
|
||||
raise onionrexceptions.InvalidPubkey
|
||||
|
|
Loading…
Reference in New Issue