From be9ebe0770dcfee9a6a48623c542ea53b75dd83b Mon Sep 17 00:00:00 2001 From: rtrimana Date: Thu, 3 May 2018 15:39:05 -0700 Subject: [PATCH] Adding test for encrypted cloud storage; Adding preparation timing test for Fidelius (Test14). --- PyORAM/examples/es.py | 125 +++++++++++++++++++++++++++ version2/src/java/iotcloud/Test.java | 7 +- 2 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 PyORAM/examples/es.py diff --git a/PyORAM/examples/es.py b/PyORAM/examples/es.py new file mode 100644 index 0000000..25e6b4d --- /dev/null +++ b/PyORAM/examples/es.py @@ -0,0 +1,125 @@ +# +# This example measures the performance of encrypted storage +# access through an SSH client using the Secure File +# Transfer Protocol (SFTP). +# +# In order to run this example, you must provide a host +# (server) address along with valid login credentials +# + +import os +import random +import time + +import pyoram +from pyoram.util.misc import MemorySize +from pyoram.encrypted_storage.encrypted_block_storage import \ + EncryptedBlockStorage + +from AliTimer import * + +import paramiko +import tqdm + +pyoram.config.SHOW_PROGRESS_BAR = True + +# Set SSH login credentials here +# (by default, we pull these from the environment +# for testing purposes) +ssh_host = os.environ.get('PYORAM_SSH_TEST_HOST') +ssh_username = os.environ.get('PYORAM_SSH_TEST_USERNAME') +ssh_password = os.environ.get('PYORAM_SSH_TEST_PASSWORD') + +# Set the storage location and size +storage_name = "heap.bin" +# 4KB block size +#block_size = 4000 +block_size = 2048 +# one block per bucket in the +# storage heap of height 8 +block_count = 2**(8+1)-1 + +def main(): + timer = Foo.Instance() + + print("Storage Name: %s" % (storage_name)) + print("Block Count: %s" % (block_count)) + print("Block Size: %s" % (MemorySize(block_size))) + print("Total Memory: %s" + % (MemorySize(block_size*block_count))) + print("Actual Storage Required: %s" + % (MemorySize( + EncryptedBlockStorage.compute_storage_size( + block_size, + block_count, + storage_type='sftp')))) + print("") + + # Start an SSH client using paramiko + print("Starting SSH Client") + with paramiko.SSHClient() as ssh: + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.load_system_host_keys() + ssh.connect(ssh_host, + username=ssh_username, + password=ssh_password) + + print("Setting Up Encrypted Block Storage") + setup_start = time.time() + with EncryptedBlockStorage.setup(storage_name, + block_size, + block_count, + storage_type='sftp', + sshclient=ssh, + ignore_existing=True) as f: + print("Total Setup Time: %2.f s" + % (time.time()-setup_start)) + print("Total Data Transmission: %s" + % (MemorySize(f.bytes_sent + f.bytes_received))) + print("") + + # We close the device and reopen it after + # setup to reset the bytes sent and bytes + # received stats. + with EncryptedBlockStorage(storage_name, + key=f.key, + storage_type='sftp', + sshclient=ssh) as f: + + test_count = 1000 + start_time = time.time() + for t in tqdm.tqdm(list(range(test_count)), + desc="Running I/O Performance Test"): + block = f.read_block(random.randint(0,f.block_count-1)) + stop_time = time.time() + print("Access Block Avg. Data Transmitted: %s (%.3fx)" + % (MemorySize((f.bytes_sent + f.bytes_received)/float(test_count)), + (f.bytes_sent + f.bytes_received)/float(test_count)/float(block_size))) + print("Access Block Avg. Latency: %.2f ms" + % ((stop_time-start_time)/float(test_count)*1000)) + print("") + + + keys = [] + keys.extend(range(0, block_count)) + random.shuffle(keys) + + print("Starting Ali Test 2") + timer.resetTimer() + test_count = block_count + start_time = time.time() + + for t in tqdm.tqdm(list(range(test_count)), desc="Running I/O Performance Test"): + ind = keys[t] + # ind = t + s = "a" + str(ind) + f.write_block(ind, block) + print("Total Data Transmission: %s" % (MemorySize(f.bytes_sent + f.bytes_received))) + + stop_time = time.time() + print("Test Processing Time: " + str(stop_time - start_time)) + print("Test Network Time: " + str(timer.getTime())) + print("") + +if __name__ == "__main__": + main() # pragma: no cover diff --git a/version2/src/java/iotcloud/Test.java b/version2/src/java/iotcloud/Test.java index a3a5a7a..72eae9f 100644 --- a/version2/src/java/iotcloud/Test.java +++ b/version2/src/java/iotcloud/Test.java @@ -11,7 +11,7 @@ import java.util.ArrayList; public class Test { - public static final int NUMBER_OF_TESTS = 2; + public static final int NUMBER_OF_TESTS = 2; public static void main(String[] args) throws ServerException { if (args[0].equals("2")) { @@ -55,9 +55,12 @@ public class Test { List transStatusList = new ArrayList(); // Setup the 2 clients + startTime = System.nanoTime(); Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1); t1.initTable(); System.out.println("T1 Ready"); + endTime = System.nanoTime(); + long keysPrep = endTime - startTime; long initTimeNet = timer.getTime(); @@ -74,7 +77,7 @@ public class Test { long keysDt = endTime - startTime; long keysNet = timer.getTime() - initTimeNet; - System.out.println("Total Key Create Time: " + keysDt / 1000000); + System.out.println("Total Preparation Time: " + keysPrep / 1000000); System.out.println("Total Key Create Time Network: " + keysNet / 1000000); System.out.println("Total Key Create Time no Network: " + (keysDt - keysNet) / 1000000); System.out.println(); -- 2.34.1