From bfe16ee2b0a4b42dc507d179d0f0c2d9c3847632 Mon Sep 17 00:00:00 2001 From: Kevin Froman Date: Mon, 8 Jan 2018 03:25:32 -0600 Subject: [PATCH] more work on data encryption --- core.py | 27 ++++++++++++++++++++++++--- tests.py | 28 ++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/core.py b/core.py index 7c429b45..a0909067 100644 --- a/core.py +++ b/core.py @@ -31,10 +31,31 @@ class Core: key = gpg.gen_key(input_data) return - def dataDirEncrypt(self): - simplecrypt.encrypt() + def dataDirEncrypt(self, password): + # Encrypt data directory (don't delete it in this function) + if os.path.exists('data.tar'): + os.remove('data.tar') + tar = tarfile.open("data.tar", "w") + for name in ['data']: + tar.add(name) + tar.close() + tarData = open('data.tar', 'r', encoding = "ISO-8859-1").read() + encrypted = simplecrypt.encrypt(password, tarData) + open('data-encrypted.dat', 'wb').write(encrypted) + os.remove('data.tar') return - + def dataDirDecrypt(self, password): + # Decrypt data directory + if not os.path.exists('data-encrypted.dat'): + return (False, 'encrypted archive does not exist') + data = open('data-encrypted.dat', 'rb').read() + try: + decrypted = simplecrypt.decrypt(password, data) + except simplecrypt.DecryptionException: + return (False, 'wrong password') + else: + open('data.tar', 'wb').write(decrypted) + return (True, '') def daemonQueue(self): # This function intended to be used by the client # Queue to exchange data between "client" and server. diff --git a/tests.py b/tests.py index efdd8a19..1888230d 100755 --- a/tests.py +++ b/tests.py @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ''' -import unittest, sys, os, base64, tarfile, shutil +import unittest, sys, os, base64, tarfile, shutil, simplecrypt class OnionrTests(unittest.TestCase): def testPython3(self): @@ -32,14 +32,26 @@ class OnionrTests(unittest.TestCase): self.assertTrue(False) else: self.assertTrue(True) - def testDataEncrypt(self): - testFile = open('data/test.txt', 'w') - testFile.write("test data") - testFile.close() + def testData_a_Encrypt(self): + print('--------------------------') + print('Running data dir encrypt test') import core - myCore = Core.core() - - self.assertTrue(True) + myCore = core.Core() + myCore.dataDirEncrypt('password') + if os.path.exists('data-encrypted.dat'): + self.assertTrue(True) + else: + self.assertTrue(False) + def testData_b_Decrypt(self): + print('--------------------------') + print('Running data dir decrypt test') + import core + myCore = core.Core() + myCore.dataDirDecrypt('password') + if os.path.exists('data.tar'): + self.assertTrue(True) + else: + self.assertTrue(False) def testPGPGen(self): print('--------------------------') print('Testing PGP key generation')