From: rtrimana Date: Thu, 17 May 2018 22:40:19 +0000 (-0700) Subject: Generating IV random numbers for every slot. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=commitdiff_plain;h=1971f23aa743e9bc7cb576b78e756c230a70db9f Generating IV random numbers for every slot. --- diff --git a/version2/src/C/CloudComm.cpp b/version2/src/C/CloudComm.cpp index d986616..20ad9a6 100644 --- a/version2/src/C/CloudComm.cpp +++ b/version2/src/C/CloudComm.cpp @@ -27,7 +27,6 @@ CloudComm::CloudComm() : password(NULL), random(NULL), salt(NULL), - ivArray(NULL), table(NULL), listeningPort(-1), doEnd(false), @@ -53,7 +52,6 @@ CloudComm::CloudComm(Table *_table, IoTString *_baseurl, IoTString *_password, password(_password->acquireRef()), random(new SecureRandom()), salt(NULL), - ivArray(NULL), table(_table), listeningPort(_listeningPort), doEnd(false), @@ -70,8 +68,6 @@ CloudComm::~CloudComm() { delete putslot; if (salt) delete salt; - if (ivArray) - delete ivArray; if (password) password->releaseRef(); if (random) @@ -508,12 +504,10 @@ Array *CloudComm::createIV(int64_t machineId, int64_t localSequenceNumber) return buffer->array(); } -void CloudComm::createIV() { - if (ivArray == NULL) { - ivArray = new Array(CloudComm_IV_SIZE); - random->nextBytes(ivArray); - printf("Random bytes is generated: %d\n", ivArray->length()); - } +Array *CloudComm::createIV() { + Array *ivArray = new Array(CloudComm_IV_SIZE); + random->nextBytes(ivArray); + return ivArray; } Array *AESEncrypt(Array *ivBytes, AESKey *key, Array *data) { @@ -574,10 +568,9 @@ Array *CloudComm::putSlot(Slot *slot, int max) { int64_t sequencenumber = slot->getSequenceNumber(); Array *slotBytes = slot->encode(mac); //Array *ivBytes = slot->getSlotCryptIV(); - //Array *chars = encryptSlotAndPrependIV(slotBytes, ivBytes); - //delete ivBytes; - createIV(); - Array *chars = encryptSlotAndPrependIV(slotBytes, ivArray); + Array *ivBytes = createIV(); + Array *chars = encryptSlotAndPrependIV(slotBytes, ivBytes); + delete ivBytes; delete slotBytes; IoTString *url = buildRequest(true, sequencenumber, max); timer->startTime(); @@ -721,9 +714,9 @@ Array *CloudComm::sendLocalData(Array *sendData, int64_t localSequen // Encrypt the data for sending //Array *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber()); - //Array *encryptedData = encryptSlotAndPrependIV(totalData, iv); - createIV(); - Array *encryptedData = encryptSlotAndPrependIV(totalData, ivArray); + Array *iv = createIV(); + Array *encryptedData = encryptSlotAndPrependIV(totalData, iv); + delete iv; // Open a TCP socket connection to a local device int socket = createSocket(host, port); @@ -804,9 +797,9 @@ void CloudComm::localServerWorkerFunction() { // Encrypt the data for sending //Array *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber()); - //Array *encryptedData = encryptSlotAndPrependIV(totalData, iv); - createIV(); - Array *encryptedData = encryptSlotAndPrependIV(totalData, ivArray); + Array *iv = createIV(); + Array *encryptedData = encryptSlotAndPrependIV(totalData, iv); + delete iv; timer->startTime(); // Send data to output (length of data, the data) diff --git a/version2/src/C/CloudComm.h b/version2/src/C/CloudComm.h index e782d30..2f9e9aa 100644 --- a/version2/src/C/CloudComm.h +++ b/version2/src/C/CloudComm.h @@ -32,7 +32,6 @@ private: IoTString *password; SecureRandom *random; Array *salt; - Array *ivArray; Table *table; int32_t listeningPort; pthread_t localServerThread; @@ -58,7 +57,7 @@ private: void setSalt(); bool getSalt(); Array *createIV(int64_t machineId, int64_t localSequenceNumber); - void createIV(); + Array *createIV(); Array *encryptSlotAndPrependIV(Array *rawData, Array *ivBytes); Array *stripIVAndDecryptSlot(Array *rawData); Array *processSlots(WebConnection *wc);