Generating IV random numbers for every slot.
authorrtrimana <rtrimana@uci.edu>
Thu, 17 May 2018 22:40:19 +0000 (15:40 -0700)
committerrtrimana <rtrimana@uci.edu>
Thu, 17 May 2018 22:40:19 +0000 (15:40 -0700)
version2/src/C/CloudComm.cpp
version2/src/C/CloudComm.h

index d986616..20ad9a6 100644 (file)
@@ -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<char> *CloudComm::createIV(int64_t machineId, int64_t localSequenceNumber)
        return buffer->array();
 }
 
-void CloudComm::createIV() {
-       if (ivArray == NULL) {
-               ivArray = new Array<char>(CloudComm_IV_SIZE);
-               random->nextBytes(ivArray);
-               printf("Random bytes is generated: %d\n", ivArray->length());
-       }
+Array<char> *CloudComm::createIV() {
+       Array<char> *ivArray = new Array<char>(CloudComm_IV_SIZE);
+       random->nextBytes(ivArray);
+       return ivArray;
 }
 
 Array<char> *AESEncrypt(Array<char> *ivBytes, AESKey *key, Array<char> *data) {
@@ -574,10 +568,9 @@ Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
                int64_t sequencenumber = slot->getSequenceNumber();
                Array<char> *slotBytes = slot->encode(mac);
                //Array<char> *ivBytes = slot->getSlotCryptIV();
-               //Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivBytes);
-               //delete ivBytes;
-               createIV();
-               Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivArray);
+               Array<char> *ivBytes = createIV();
+               Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivBytes);
+               delete ivBytes;
                delete slotBytes;
                IoTString *url = buildRequest(true, sequencenumber, max);
                timer->startTime();
@@ -721,9 +714,9 @@ Array<char> *CloudComm::sendLocalData(Array<char> *sendData, int64_t localSequen
 
                // Encrypt the data for sending
                //Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
-               //Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
-               createIV();
-               Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, ivArray);
+               Array<char> *iv = createIV();
+               Array<char> *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<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
-                       //Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
-                       createIV();
-                       Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, ivArray);
+                       Array<char> *iv = createIV();
+                       Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
+                       delete iv;
 
                        timer->startTime();
                        // Send data to output (length of data, the data)
index e782d30..2f9e9aa 100644 (file)
@@ -32,7 +32,6 @@ private:
        IoTString *password;
        SecureRandom *random;
        Array<char> *salt;
-       Array<char> *ivArray;
        Table *table;
        int32_t listeningPort;
        pthread_t localServerThread;
@@ -58,7 +57,7 @@ private:
        void setSalt();
        bool getSalt();
        Array<char> *createIV(int64_t machineId, int64_t localSequenceNumber);
-       void createIV();
+       Array<char> *createIV();
        Array<char> *encryptSlotAndPrependIV(Array<char> *rawData, Array<char> *ivBytes);
        Array<char> *stripIVAndDecryptSlot(Array<char> *rawData);
        Array<Slot *> *processSlots(WebConnection *wc);