projects
/
iotcloud.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
18c08ca
)
edits
author
bdemsky
<bdemsky@uci.edu>
Sat, 20 Jan 2018 05:47:23 +0000
(21:47 -0800)
committer
bdemsky
<bdemsky@uci.edu>
Sat, 20 Jan 2018 05:47:23 +0000
(21:47 -0800)
version2/src/C/CloudComm.cc
patch
|
blob
|
history
version2/src/C/CloudComm.h
patch
|
blob
|
history
version2/src/C/TimingSingleton.h
patch
|
blob
|
history
version2/src/C/common.h
patch
|
blob
|
history
diff --git
a/version2/src/C/CloudComm.cc
b/version2/src/C/CloudComm.cc
index
4674af2
..
97a96c2
100644
(file)
--- a/
version2/src/C/CloudComm.cc
+++ b/
version2/src/C/CloudComm.cc
@@
-1,4
+1,9
@@
#include "CloudComm.h"
#include "CloudComm.h"
+#include "TimingSingleton.h"
+#include "SecureRandom.h"
+#include "IoTString.h"
+#include "Error.h"
+#include "URL.h"
/**
* Empty Constructor needed for child class.
/**
* Empty Constructor needed for child class.
@@
-13,7
+18,7
@@
CloudComm::CloudComm() :
table(NULL),
listeningPort(-1),
localServerThread(NULL),
table(NULL),
listeningPort(-1),
localServerThread(NULL),
- doEnd(false)
+ doEnd(false)
,
timer(TimingSingleton_getInstance())
{
}
timer(TimingSingleton_getInstance())
{
}
@@
-31,7
+36,7
@@
CloudComm::CloudComm(Table *_table, IoTString *_baseurl, IoTString *_password,
table(_table),
listeningPort(_listeningPort),
localServerThread(NULL),
table(_table),
listeningPort(_listeningPort),
localServerThread(NULL),
- doEnd(false)
+ doEnd(false)
,
timer(TimingSingleton_getInstance()) {
if (listeningPort > 0) {
localServerThread = new Thread(new Runnable() {
timer(TimingSingleton_getInstance()) {
if (listeningPort > 0) {
localServerThread = new Thread(new Runnable() {
@@
-48,14
+53,13
@@
CloudComm::CloudComm(Table *_table, IoTString *_baseurl, IoTString *_password,
*/
SecretKeySpec *CloudComm::initKey() {
try {
*/
SecretKeySpec *CloudComm::initKey() {
try {
- PBEKeySpec keyspec = new PBEKeySpec(password->
toCharArray
(),
+ PBEKeySpec keyspec = new PBEKeySpec(password->
internalBytes
(),
salt,
65536,
128);
SecretKey tmpkey = SecretKeyFactory_getInstance("PBKDF2WithHmacSHA256")->generateSecret(keyspec);
return new SecretKeySpec(tmpkey->getEncoded(), "AES");
salt,
65536,
128);
SecretKey tmpkey = SecretKeyFactory_getInstance("PBKDF2WithHmacSHA256")->generateSecret(keyspec);
return new SecretKeySpec(tmpkey->getEncoded(), "AES");
- } catch (Exception e) {
- e->printStackTrace();
+ } catch (Exception *e) {
throw new Error("Failed generating key.");
}
}
throw new Error("Failed generating key.");
}
}
@@
-88,8
+92,7
@@
void CloudComm::initCrypt() {
password = NULL;// drop password
mac = Mac_getInstance("HmacSHA256");
mac->init(key);
password = NULL;// drop password
mac = Mac_getInstance("HmacSHA256");
mac->init(key);
- } catch (Exception e) {
- e->printStackTrace();
+ } catch (Exception *e) {
throw new Error("Failed To Initialize Ciphers");
}
}
throw new Error("Failed To Initialize Ciphers");
}
}
@@
-113,15
+116,15
@@
void CloudComm::setSalt() {
}
try {
}
try {
- Array<char> *saltTmp = new
char[SALT_SIZE]
;
+ Array<char> *saltTmp = new
Array<char>(CloudComm_SALT_SIZE)
;
random->nextBytes(saltTmp);
random->nextBytes(saltTmp);
- for (int i = 0; i < SALT_SIZE; i++) {
- printf("%d\n", (int)saltTmp
[i]
& 255);
+ for (int i = 0; i <
CloudComm_
SALT_SIZE; i++) {
+ printf("%d\n", (int)saltTmp
->get(i)
& 255);
}
}
- URL url = new URL(baseurl + "?req=setsalt");
+ URL
*
url = new URL(baseurl + "?req=setsalt");
timer->startTime();
URLConnection con = url->openConnection();
timer->startTime();
URLConnection con = url->openConnection();
@@
-130,12
+133,12
@@
void CloudComm::setSalt() {
http->setRequestMethod("POST");
http->setFixedLengthStreamingMode(saltTmp->length());
http->setDoOutput(true);
http->setRequestMethod("POST");
http->setFixedLengthStreamingMode(saltTmp->length());
http->setDoOutput(true);
- http->setConnectTimeout(TIMEOUT_MILLIS);
+ http->setConnectTimeout(
CloudComm_
TIMEOUT_MILLIS);
http->connect();
http->connect();
- OutputStream os = http->getOutputStream();
+ OutputStream
*
os = http->getOutputStream();
os->write(saltTmp);
os->flush();
os->write(saltTmp);
os->flush();
@@
-149,8
+152,7
@@
void CloudComm::setSalt() {
timer->endTime();
salt = saltTmp;
timer->endTime();
salt = saltTmp;
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
timer->endTime();
throw new ServerException("Failed setting salt", ServerException.TypeConnectTimeout);
}
timer->endTime();
throw new ServerException("Failed setting salt", ServerException.TypeConnectTimeout);
}
@@
-163,8
+165,7
@@
bool CloudComm::getSalt() {
try {
url = new URL(baseurl + "?req=getsalt");
try {
url = new URL(baseurl + "?req=getsalt");
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("getSlot failed");
}
try {
throw new Error("getSlot failed");
}
try {
@@
-173,17
+174,16
@@
bool CloudComm::getSalt() {
con = url->openConnection();
http = (HttpURLConnection) con;
http->setRequestMethod("POST");
con = url->openConnection();
http = (HttpURLConnection) con;
http->setRequestMethod("POST");
- http->setConnectTimeout(TIMEOUT_MILLIS);
- http->setReadTimeout(TIMEOUT_MILLIS);
+ http->setConnectTimeout(
CloudComm_
TIMEOUT_MILLIS);
+ http->setReadTimeout(
CloudComm_
TIMEOUT_MILLIS);
http->connect();
timer->endTime();
http->connect();
timer->endTime();
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("getSalt failed", ServerException.TypeConnectTimeout);
timer->endTime();
throw new ServerException("getSalt failed", ServerException.TypeConnectTimeout);
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("getSlot failed");
}
throw new Error("getSlot failed");
}
@@
-200,9
+200,9
@@
bool CloudComm::getSalt() {
InputStream is = http->getInputStream();
if (is->available() > 0) {
InputStream is = http->getInputStream();
if (is->available() > 0) {
- DataInputStream dis = new DataInputStream(is);
+ DataInputStream
*
dis = new DataInputStream(is);
int salt_length = dis->readInt();
int salt_length = dis->readInt();
-
char [] tmp = new char[salt_length]
;
+
Array<char> * tmp = new Array<char>(salt_length)
;
dis->readFully(tmp);
salt = tmp;
timer->endTime();
dis->readFully(tmp);
salt = tmp;
timer->endTime();
@@
-213,18
+213,17
@@
bool CloudComm::getSalt() {
return false;
}
return false;
}
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("getSalt failed", ServerException.TypeInputTimeout);
timer->endTime();
throw new ServerException("getSalt failed", ServerException.TypeInputTimeout);
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("getSlot failed");
}
}
Array<char> *CloudComm::createIV(int64_t machineId, int64_t localSequenceNumber) {
throw new Error("getSlot failed");
}
}
Array<char> *CloudComm::createIV(int64_t machineId, int64_t localSequenceNumber) {
- ByteBuffer buffer = ByteBuffer.allocate(IV_SIZE);
+ ByteBuffer buffer = ByteBuffer.allocate(
CloudComm_
IV_SIZE);
buffer->putLong(machineId);
int64_t localSequenceNumberShifted = localSequenceNumber << 16;
buffer->putLong(localSequenceNumberShifted);
buffer->putLong(machineId);
int64_t localSequenceNumberShifted = localSequenceNumber << 16;
buffer->putLong(localSequenceNumberShifted);
@@
-239,14
+238,13
@@
Array<char> *CloudComm::encryptSlotAndPrependIV(Array<char> *rawData, Array<char
Array<char> *encryptedBytes = cipher->doFinal(rawData);
Array<char> *encryptedBytes = cipher->doFinal(rawData);
- Array<char> *chars = new
char[encryptedBytes->length + IV_SIZE]
;
- System
.arraycopy(ivBytes, 0, chars, 0, ivBytes.length
);
- System
.arraycopy(encryptedBytes, 0, chars,
IV_SIZE, encryptedBytes.length);
+ Array<char> *chars = new
Array<char>(encryptedBytes->length() + CloudComm_IV_SIZE)
;
+ System
_arraycopy(ivBytes, 0, chars, 0, ivBytes.length()
);
+ System
_arraycopy(encryptedBytes, 0, chars, CloudComm_
IV_SIZE, encryptedBytes.length);
return chars;
return chars;
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("Failed To Encrypt");
}
}
throw new Error("Failed To Encrypt");
}
}
@@
-254,19
+252,18
@@
Array<char> *CloudComm::encryptSlotAndPrependIV(Array<char> *rawData, Array<char
Array<char> *CloudComm::stripIVAndDecryptSlot(Array<char> *rawData) {
try {
Array<char> *CloudComm::stripIVAndDecryptSlot(Array<char> *rawData) {
try {
- Array<char> *ivBytes = new
char[IV_SIZE]
;
- Array<char> *encryptedBytes = new
char[rawData->length - IV_SIZE]
;
- System
.arraycopy(rawData, 0, ivBytes, 0,
IV_SIZE);
- System
.arraycopy(rawData,
IV_SIZE, encryptedBytes, 0, encryptedBytes->length);
+ Array<char> *ivBytes = new
Array<char>(CloudComm_IV_SIZE)
;
+ Array<char> *encryptedBytes = new
Array<char>(rawData->length() - CloudComm_IV_SIZE)
;
+ System
_arraycopy(rawData, 0, ivBytes, 0, CloudComm_
IV_SIZE);
+ System
_arraycopy(rawData, CloudComm_
IV_SIZE, encryptedBytes, 0, encryptedBytes->length);
- IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
+ IvParameterSpec
*
ivSpec = new IvParameterSpec(ivBytes);
- Cipher
cipher = Cipher.
getInstance("AES/CTR/NoPadding");
- cipher->init(Cipher
.
DECRYPT_MODE, key, ivSpec);
+ Cipher
* cipher = Cipher_
getInstance("AES/CTR/NoPadding");
+ cipher->init(Cipher
_
DECRYPT_MODE, key, ivSpec);
return cipher->doFinal(encryptedBytes);
return cipher->doFinal(encryptedBytes);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("Failed To Decrypt");
}
}
throw new Error("Failed To Decrypt");
}
}
@@
-278,10
+275,6
@@
Array<char> *CloudComm::stripIVAndDecryptSlot(Array<char> *rawData) {
* numbers.
*/
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
* numbers.
*/
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
- URL url = NULL;
- URLConnection con = NULL;
- HttpURLConnection http = NULL;
-
try {
if (salt == NULL) {
if (!getSalt()) {
try {
if (salt == NULL) {
if (!getSalt()) {
@@
-292,48
+285,38
@@
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
int64_t sequencenumber = slot->getSequenceNumber();
Array<char> *slotBytes = slot->encode(mac);
int64_t sequencenumber = slot->getSequenceNumber();
Array<char> *slotBytes = slot->encode(mac);
- // slotBytes = encryptCipher.doFinal(slotBytes);
-
- // Array<char> * iVBytes = slot.getSlotCryptIV();
-
- // Array<char> * chars = new char[slotBytes.length + IV_SIZE];
- // System.arraycopy(iVBytes, 0, chars, 0, iVBytes.length);
- // System.arraycopy(slotBytes, 0, chars, IV_SIZE, slotBytes.length);
-
Array<char> *chars = encryptSlotAndPrependIV(slotBytes, slot->getSlotCryptIV());
Array<char> *chars = encryptSlotAndPrependIV(slotBytes, slot->getSlotCryptIV());
- url = buildRequest(true, sequencenumber, max);
+
URL *
url = buildRequest(true, sequencenumber, max);
timer->startTime();
timer->startTime();
- con = url->openConnection();
-
http = (HttpURLConnection
) con;
+
URLConnection *
con = url->openConnection();
+
HttpURLConnection * http = (HttpURLConnection *
) con;
http->setRequestMethod("POST");
http->setFixedLengthStreamingMode(chars->length);
http->setDoOutput(true);
http->setRequestMethod("POST");
http->setFixedLengthStreamingMode(chars->length);
http->setDoOutput(true);
- http->setConnectTimeout(TIMEOUT_MILLIS);
- http->setReadTimeout(TIMEOUT_MILLIS);
+ http->setConnectTimeout(
CloudComm_
TIMEOUT_MILLIS);
+ http->setReadTimeout(
CloudComm_
TIMEOUT_MILLIS);
http->connect();
http->connect();
- OutputStream os = http->getOutputStream();
+ OutputStream
*
os = http->getOutputStream();
os->write(chars);
os->flush();
timer->endTime();
os->write(chars);
os->flush();
timer->endTime();
- // System.out.println("Bytes Sent: " + chars.length);
- } catch (ServerException e) {
+ } catch (ServerException *e) {
timer->endTime();
throw e;
timer->endTime();
throw e;
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("putSlot failed", ServerException.TypeConnectTimeout);
timer->endTime();
throw new ServerException("putSlot failed", ServerException.TypeConnectTimeout);
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("putSlot failed");
}
throw new Error("putSlot failed");
}
@@
-342,7
+325,7
@@
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
try {
timer->startTime();
InputStream is = http->getInputStream();
try {
timer->startTime();
InputStream is = http->getInputStream();
- DataInputStream dis = new DataInputStream(is);
+ DataInputStream
*
dis = new DataInputStream(is);
Array<char> *resptype = new char[7];
dis->readFully(resptype);
timer->endTime();
Array<char> *resptype = new char[7];
dis->readFully(resptype);
timer->endTime();
@@
-354,11
+337,10
@@
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
} else
throw new Error("Bad response to putslot");
} else
throw new Error("Bad response to putslot");
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("putSlot failed", ServerException->TypeInputTimeout);
timer->endTime();
throw new ServerException("putSlot failed", ServerException->TypeInputTimeout);
- } catch (Exception e) {
- // e->printStackTrace();
+ } catch (Exception *e) {
throw new Error("putSlot failed");
}
}
throw new Error("putSlot failed");
}
}
@@
-368,10
+350,6
@@
Array<Slot *> *CloudComm::putSlot(Slot *slot, int max) {
* sequencenumber or newer->
*/
Array<Slot *> *CloudComm::getSlots(int64_t sequencenumber) {
* sequencenumber or newer->
*/
Array<Slot *> *CloudComm::getSlots(int64_t sequencenumber) {
- URL url = NULL;
- URLConnection con = NULL;
- HttpURLConnection http = NULL;
-
try {
if (salt == NULL) {
if (!getSalt()) {
try {
if (salt == NULL) {
if (!getSalt()) {
@@
-380,52
+358,50
@@
Array<Slot *> *CloudComm::getSlots(int64_t sequencenumber) {
initCrypt();
}
initCrypt();
}
- url = buildRequest(false, sequencenumber, 0);
+
URL *
url = buildRequest(false, sequencenumber, 0);
timer->startTime();
timer->startTime();
- con = url->openConnection();
- http = (HttpURLConnection) con;
+
URLConnection *
con = url->openConnection();
+
HttpURLConnection *
http = (HttpURLConnection) con;
http->setRequestMethod("POST");
http->setRequestMethod("POST");
- http->setConnectTimeout(TIMEOUT_MILLIS);
- http->setReadTimeout(TIMEOUT_MILLIS);
+ http->setConnectTimeout(
CloudComm_
TIMEOUT_MILLIS);
+ http->setReadTimeout(
CloudComm_
TIMEOUT_MILLIS);
http->connect();
timer->endTime();
http->connect();
timer->endTime();
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("getSlots failed", ServerException.TypeConnectTimeout);
timer->endTime();
throw new ServerException("getSlots failed", ServerException.TypeConnectTimeout);
- } catch (ServerException e) {
+ } catch (ServerException
*
e) {
timer->endTime();
throw e;
timer->endTime();
throw e;
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("getSlots failed");
}
try {
timer->startTime();
throw new Error("getSlots failed");
}
try {
timer->startTime();
- InputStream is = http->getInputStream();
- DataInputStream dis = new DataInputStream(is);
- Array<char> *resptype = new
char[7]
;
+ InputStream
*
is = http->getInputStream();
+ DataInputStream
*
dis = new DataInputStream(is);
+ Array<char> *resptype = new
Array<char>(7)
;
dis->readFully(resptype);
timer->endTime();
dis->readFully(resptype);
timer->endTime();
- if (!
Arrays.equals(resptype,
"getslot".getBytes()))
+ if (!
resptype->equals(
"getslot".getBytes()))
throw new Error("Bad Response: " + new String(resptype));
return processSlots(dis);
throw new Error("Bad Response: " + new String(resptype));
return processSlots(dis);
- } catch (SocketTimeoutException e) {
+ } catch (SocketTimeoutException
*
e) {
timer->endTime();
throw new ServerException("getSlots failed", ServerException.TypeInputTimeout);
timer->endTime();
throw new ServerException("getSlots failed", ServerException.TypeInputTimeout);
- } catch (Exception e) {
- // e.printStackTrace();
+ } catch (Exception *e) {
throw new Error("getSlots failed");
}
}
throw new Error("getSlots failed");
}
}
@@
-434,17
+410,17
@@
Array<Slot *> *CloudComm::getSlots(int64_t sequencenumber) {
* Method that actually handles building Slot objects from the
* server response. Shared by both putSlot and getSlots.
*/
* Method that actually handles building Slot objects from the
* server response. Shared by both putSlot and getSlots.
*/
-Array<Slot *> *CloudComm::processSlots(DataInputStream dis) {
+Array<Slot *> *CloudComm::processSlots(DataInputStream
*
dis) {
int numberofslots = dis->readInt();
int numberofslots = dis->readInt();
-
int[] sizesofslots = new int[numberofslots]
;
+
Array<int> * sizesofslots = new Array<int>(numberofslots)
;
-
Slot[] slots = new Slot[numberofslots]
;
+
Array<Slot*> * slots = new Array<Slot*>(numberofslots)
;
for (int i = 0; i < numberofslots; i++)
for (int i = 0; i < numberofslots; i++)
- sizesofslots
[i] = dis->readInt(
);
+ sizesofslots
->set(i], dis->readInt()
);
for (int i = 0; i < numberofslots; i++) {
for (int i = 0; i < numberofslots; i++) {
- Array<char> *rawData = new
char[sizesofslots[i]]
;
+ Array<char> *rawData = new
Array<char>(sizesofslots->get(i))
;
dis->readFully(rawData);
dis->readFully(rawData);
@@
-455,39
+431,35
@@
Array<Slot *> *CloudComm::processSlots(DataInputStream dis) {
Array<char> *data = stripIVAndDecryptSlot(rawData);
// data = decryptCipher.doFinal(data);
Array<char> *data = stripIVAndDecryptSlot(rawData);
// data = decryptCipher.doFinal(data);
-
- slots
[i] = Slot->decode(table, data, mac
);
+
+ slots
->set(i, Slot_decode(table, data, mac)
);
}
dis->close();
return slots;
}
Array<char> *sendLocalData(Array<char> *sendData, int64_t localSequenceNumber, String host, int port) {
}
dis->close();
return slots;
}
Array<char> *sendLocalData(Array<char> *sendData, int64_t localSequenceNumber, String host, int port) {
-
if (salt == NULL) {
return NULL;
}
try {
if (salt == NULL) {
return NULL;
}
try {
-
System.out.println("Passing Locally"
);
+
printf("Passing Locally"\m
);
mac->update(sendData);
Array<char> *genmac = mac->doFinal();
mac->update(sendData);
Array<char> *genmac = mac->doFinal();
- Array<char> *totalData = new
char[sendData->length + genmac->length]
;
- System
.arraycopy(sendData, 0, totalData, 0, sendData.length
);
- System
.arraycopy(genmac, 0, totalData, sendData.length, genmac->length
);
+ Array<char> *totalData = new
Array<char>(sendData->length() + genmac->length())
;
+ System
_arraycopy(sendData, 0, totalData, 0, sendData.length()
);
+ System
-arraycopy(genmac, 0, totalData, sendData.length, genmac->length()
);
// Encrypt the data for sending
// Encrypt the data for sending
- // Array<char> * encryptedData = encryptCipher.doFinal(totalData);
- // Array<char> * encryptedData = encryptCipher.doFinal(totalData);
Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
// Open a TCP socket connection to a local device
Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
// Open a TCP socket connection to a local device
- Socket socket = new Socket(host, port);
+ Socket
*
socket = new Socket(host, port);
socket->setReuseAddress(true);
socket->setReuseAddress(true);
- DataOutputStream output = new DataOutputStream(socket->getOutputStream());
- DataInputStream input = new DataInputStream(socket->getInputStream());
-
+ DataOutputStream* output = new DataOutputStream(socket->getOutputStream());
+ DataInputStream* input = new DataInputStream(socket->getInputStream());
timer->startTime();
// Send data to output (length of data, the data)
timer->startTime();
// Send data to output (length of data, the data)
@@
-496,119
+468,107
@@
Array<char> *sendLocalData(Array<char> *sendData, int64_t localSequenceNumber, S
output->flush();
int lengthOfReturnData = input->readInt();
output->flush();
int lengthOfReturnData = input->readInt();
- Array<char> *returnData = new
char[lengthOfReturnData]
;
+ Array<char> *returnData = new
Array<char>(lengthOfReturnData)
;
input->readFully(returnData);
timer->endTime();
input->readFully(returnData);
timer->endTime();
- // returnData = decryptCipher->doFinal(returnData);
returnData = stripIVAndDecryptSlot(returnData);
returnData = stripIVAndDecryptSlot(returnData);
- // returnData = decryptCipher->doFinal(returnData);
// We are done with this socket
socket->close();
mac->update(returnData, 0, returnData->length - HMAC_SIZE);
Array<char> *realmac = mac->doFinal();
// We are done with this socket
socket->close();
mac->update(returnData, 0, returnData->length - HMAC_SIZE);
Array<char> *realmac = mac->doFinal();
- Array<char> *recmac = new
char[HMAC_SIZE]
;
- System
->
arraycopy(returnData, returnData->length - realmac->length, recmac, 0, realmac->length);
+ Array<char> *recmac = new
Array<char>(HMAC_SIZE)
;
+ System
_
arraycopy(returnData, returnData->length - realmac->length, recmac, 0, realmac->length);
if (!Arrays->equals(recmac, realmac))
throw new Error("Local Error: Invalid HMAC! Potential Attack!");
if (!Arrays->equals(recmac, realmac))
throw new Error("Local Error: Invalid HMAC! Potential Attack!");
- Array<char> *returnData2 = new
char[lengthOfReturnData - recmac->length]
;
- System
->
arraycopy(returnData, 0, returnData2, 0, returnData2->length);
+ Array<char> *returnData2 = new
Array<char>(lengthOfReturnData - recmac->length())
;
+ System
_
arraycopy(returnData, 0, returnData2, 0, returnData2->length);
return returnData2;
return returnData2;
- } catch (Exception e) {
- e->printStackTrace();
- // throw new Error("Local comms failure...");
-
+ } catch (Exception *e) {
+ printf("Exception\n");
}
return NULL;
}
void CloudComm::localServerWorkerFunction() {
}
return NULL;
}
void CloudComm::localServerWorkerFunction() {
-
- ServerSocket inputSocket = NULL;
+ ServerSocket *inputSocket = NULL;
try {
// Local server socket
inputSocket = new ServerSocket(listeningPort);
inputSocket->setReuseAddress(true);
try {
// Local server socket
inputSocket = new ServerSocket(listeningPort);
inputSocket->setReuseAddress(true);
- inputSocket->setSoTimeout(TIMEOUT_MILLIS);
- } catch (Exception e) {
- e->printStackTrace();
+ inputSocket->setSoTimeout(CloudComm_TIMEOUT_MILLIS);
+ } catch (Exception *e) {
throw new Error("Local server setup failure...");
}
while (!doEnd) {
throw new Error("Local server setup failure...");
}
while (!doEnd) {
-
try {
// Accept incoming socket
try {
// Accept incoming socket
- Socket socket = inputSocket->accept();
+ Socket
*
socket = inputSocket->accept();
- DataInputStream input = new DataInputStream(socket->getInputStream());
- DataOutputStream output = new DataOutputStream(socket->getOutputStream());
+ DataInputStream
*
input = new DataInputStream(socket->getInputStream());
+ DataOutputStream
*
output = new DataOutputStream(socket->getOutputStream());
// Get the encrypted data from the server
int dataSize = input->readInt();
// Get the encrypted data from the server
int dataSize = input->readInt();
- Array<char> *readData = new
char[dataSize]
;
+ Array<char> *readData = new
Array<char>(dataSize)
;
input->readFully(readData);
timer->endTime();
// Decrypt the data
input->readFully(readData);
timer->endTime();
// Decrypt the data
- // readData = decryptCipher->doFinal(readData);
readData = stripIVAndDecryptSlot(readData);
mac->update(readData, 0, readData->length - HMAC_SIZE);
Array<char> *genmac = mac->doFinal();
readData = stripIVAndDecryptSlot(readData);
mac->update(readData, 0, readData->length - HMAC_SIZE);
Array<char> *genmac = mac->doFinal();
- Array<char> *recmac = new
char[HMAC_SIZE]
;
- System
->arraycopy(readData, readData->length - recmac->length, recmac, 0, recmac->length
);
+ Array<char> *recmac = new
Array<char>(HMAC_SIZE)
;
+ System
_arraycopy(readData, readData->length() - recmac->length(), recmac, 0, recmac->length()
);
- if (!
Arrays->equals(recmac,
genmac))
+ if (!
recmac->equals(
genmac))
throw new Error("Local Error: Invalid HMAC! Potential Attack!");
throw new Error("Local Error: Invalid HMAC! Potential Attack!");
- Array<char> *returnData = new
char[readData->length - recmac->length]
;
- System
->arraycopy(readData, 0, returnData, 0, returnData->length
);
+ Array<char> *returnData = new
Array<char>(readData->length() - recmac->length())
;
+ System
_arraycopy(readData, 0, returnData, 0, returnData->length()
);
// Process the data
// Process the data
- // Array<char> * sendData = table->acceptDataFromLocal(readData);
Array<char> *sendData = table->acceptDataFromLocal(returnData);
mac->update(sendData);
Array<char> *realmac = mac->doFinal();
Array<char> *sendData = table->acceptDataFromLocal(returnData);
mac->update(sendData);
Array<char> *realmac = mac->doFinal();
- Array<char> *totalData = new
char[sendData->length + realmac->length]
;
- System
->arraycopy(sendData, 0, totalData, 0, sendData->length
);
- System
->arraycopy(realmac, 0, totalData, sendData->length, realmac->length
);
+ Array<char> *totalData = new
Array<char>(sendData->length() + realmac->length())
;
+ System
_arraycopy(sendData, 0, totalData, 0, sendData->length()
);
+ System
_arraycopy(realmac, 0, totalData, sendData->length(), realmac->length()
);
// Encrypt the data for sending
// Encrypt the data for sending
- // Array<char> * encryptedData = encryptCipher->doFinal(totalData);
Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
timer->startTime();
// Send data to output (length of data, the data)
Array<char> *iv = createIV(table->getMachineId(), table->getLocalSequenceNumber());
Array<char> *encryptedData = encryptSlotAndPrependIV(totalData, iv);
timer->startTime();
// Send data to output (length of data, the data)
- output->writeInt(encryptedData->length);
- output->write(encryptedData, 0, encryptedData->length);
+ output->writeInt(encryptedData->length
()
);
+ output->write(encryptedData, 0, encryptedData->length
()
);
output->flush();
// close the socket
socket->close();
output->flush();
// close the socket
socket->close();
- } catch (Exception e) {
-
+ } catch (Exception *e) {
}
}
if (inputSocket != NULL) {
try {
inputSocket->close();
}
}
if (inputSocket != NULL) {
try {
inputSocket->close();
- } catch (Exception e) {
- e->printStackTrace();
+ } catch (Exception *e) {
throw new Error("Local server close failure...");
}
}
throw new Error("Local server close failure...");
}
}
@@
-620,12
+580,9
@@
void CloudComm::close() {
if (localServerThread != NULL) {
try {
localServerThread->join();
if (localServerThread != NULL) {
try {
localServerThread->join();
- } catch (Exception e) {
- e->printStackTrace();
+ } catch (Exception *e) {
throw new Error("Local Server thread join issue...");
}
}
throw new Error("Local Server thread join issue...");
}
}
-
- // System.out.println("Done Closing Cloud Comm");
}
}
diff --git
a/version2/src/C/CloudComm.h
b/version2/src/C/CloudComm.h
index
3e0a56e
..
fb16165
100644
(file)
--- a/
version2/src/C/CloudComm.h
+++ b/
version2/src/C/CloudComm.h
@@
-44,7
+44,7
@@
private:
/*
* Builds the URL for the given request.
*/
/*
* Builds the URL for the given request.
*/
- URL buildRequest(bool isput, int64_t sequencenumber, int64_t maxentries);
+ URL
*
buildRequest(bool isput, int64_t sequencenumber, int64_t maxentries);
void setSalt();
bool getSalt();
Array<char> *createIV(int64_t machineId, int64_t localSequenceNumber);
void setSalt();
bool getSalt();
Array<char> *createIV(int64_t machineId, int64_t localSequenceNumber);
diff --git
a/version2/src/C/TimingSingleton.h
b/version2/src/C/TimingSingleton.h
index
25f45e5
..
8083c04
100644
(file)
--- a/
version2/src/C/TimingSingleton.h
+++ b/
version2/src/C/TimingSingleton.h
@@
-4,12
+4,12
@@
class TimingSingleton {
private:
class TimingSingleton {
private:
- static TimingSingleton singleton = new TimingSingleton( );
- int64_t startTime = 0;
- int64_t totalTime = 0;
+ int64_t fldstartTime;
+ int64_t fldtotalTime;
- TimingSingleton() : startTime(0),
- totalTime(0) {
+ public:
+ TimingSingleton() : fldstartTime(0),
+ fldtotalTime(0) {
}
int64_t nanoTime() {
}
int64_t nanoTime() {
@@
-19,17
+19,16
@@
private:
return tv.tv_sec * 1000000000 + tv.tv_usec * 1000;
}
return tv.tv_sec * 1000000000 + tv.tv_usec * 1000;
}
-public:
void startTime() {
void startTime() {
- startTime = nanoTime();
+
fld
startTime = nanoTime();
}
void endTime() {
}
void endTime() {
-
totalTime += nanoTime() -
startTime;
+
fldtotalTime += nanoTime() - fld
startTime;
}
int64_t getTime() {
}
int64_t getTime() {
- return totalTime;
+ return
fld
totalTime;
}
};
}
};
diff --git
a/version2/src/C/common.h
b/version2/src/C/common.h
index
0f96b7f
..
e7b4acd
100644
(file)
--- a/
version2/src/C/common.h
+++ b/
version2/src/C/common.h
@@
-49,6
+49,8
@@
class ServerException;
//Code to write
class SecretKeySpec;
//Code to write
class SecretKeySpec;
+class PBEKeySpec;
+class SecretKey;
class Mac;
class SecureRandom;
class Thread;
class Mac;
class SecureRandom;
class Thread;