password(NULL),
random(NULL),
salt(NULL),
+ ivArray(NULL),
table(NULL),
listeningPort(-1),
doEnd(false),
password(_password->acquireRef()),
random(new SecureRandom()),
salt(NULL),
+ ivArray(NULL),
table(_table),
listeningPort(_listeningPort),
doEnd(false),
delete putslot;
if (salt)
delete salt;
+ if (ivArray)
+ delete ivArray;
if (password)
password->releaseRef();
if (random)
return buffer->array();
}
+void CloudComm::createIV() {
+ if (ivArray == NULL) {
+ ivArray = new Array<char>(CloudComm_IV_SIZE);
+ random->nextBytes(ivArray);
+ }
+}
+
Array<char> *AESEncrypt(Array<char> *ivBytes, AESKey *key, Array<char> *data) {
Array<char> *output = new Array<char>(data->length());
aes_encrypt_ctr((BYTE *)data->internalArray(), data->length(), (BYTE *) output->internalArray(), (WORD *)key->getKeySchedule(), key->getKey()->length() * 8, (BYTE *)ivBytes->internalArray());
int64_t sequencenumber = slot->getSequenceNumber();
Array<char> *slotBytes = slot->encode(mac);
- Array<char> * ivBytes = slot->getSlotCryptIV();
- Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivBytes);
- delete ivBytes;
+ //Array<char> * ivBytes = slot->getSlotCryptIV();
+ //Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivBytes);
+ //delete ivBytes;
+ createIV();
+ Array<char> *chars = encryptSlotAndPrependIV(slotBytes, ivArray);
delete slotBytes;
IoTString *url = buildRequest(true, sequencenumber, max);
timer->startTime();
System_arraycopy(genmac, 0, totalData, sendData->length(), genmac->length());
// Encrypt the data for sending
- Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
- Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
+ //Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
+ //Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
+ createIV();
+ Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, ivArray);
// Open a TCP socket connection to a local device
TCPClient socket = createSocket(host, port);