#include "Slot.h"
#include "Crypto.h"
#include "ByteBuffer.h"
+#include "aes.h"
#include <sys/socket.h>
#include <unistd.h>
{
}
-void * threadWrapper(void * cloud) {
+void *threadWrapper(void *cloud) {
CloudComm *c = (CloudComm *) cloud;
c->localServerWorkerFunction();
return NULL;
*/
AESKey *CloudComm::initKey() {
try {
- AESKey * key = new AESKey(password->internalBytes(),
- salt,
- 65536,
- 128);
+ AESKey *key = new AESKey(password->internalBytes(),
+ salt,
+ 65536,
+ 128);
return key;
} catch (Exception *e) {
throw new Error("Failed generating key.");
try {
key = initKey();
password = NULL;// drop password
- mac = Mac_getInstance("HmacSHA256");
+ mac = new Mac();
mac->init(key);
} catch (Exception *e) {
throw new Error("Failed To Initialize Ciphers");
void writeURLData(int fd, Array<char> *data) {
}
-void readURLData(int fd, Array<char> * output) {
+void readURLData(int fd, Array<char> *output) {
}
int readURLInt(int fd) {
bool CloudComm::getSalt() {
int fd = -1;
IoTString *urlstr = NULL;
-
+
try {
char *buffer = (char *) malloc(baseurl->length() + 100);
memcpy(buffer, baseurl->internalBytes(), baseurl->length());
return buffer->array();
}
-Array<char> *AESEncrypt(Array<char> * ivBytes, AESKey * key, Array<char> * data) {
- return NULL;
+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->getKey()->internalArray(), key->getKey()->length()/(sizeof(WORD)/sizeof(BYTE)), (BYTE *)ivBytes->internalArray());
+ return output;
}
-Array<char> *AESDecrypt(Array<char> * ivBytes, AESKey * key, Array<char> * data) {
- return NULL;
+Array<char> *AESDecrypt(Array<char> *ivBytes, AESKey *key, Array<char> *data) {
+ Array<char> * output=new Array<char>(data->length());
+ aes_decrypt_ctr((BYTE *)data->internalArray(), data->length(), (BYTE *)output->internalArray(), (WORD *)key->getKey()->internalArray(), key->getKey()->length()/(sizeof(WORD)/sizeof(BYTE)), (BYTE *)ivBytes->internalArray());
+ return output;
}
Array<char> *CloudComm::encryptSlotAndPrependIV(Array<char> *rawData, Array<char> *ivBytes) {
return slots;
}
-Array<char> *CloudComm::sendLocalData(Array<char> *sendData, int64_t localSequenceNumber, IoTString * host, int port) {
+Array<char> *CloudComm::sendLocalData(Array<char> *sendData, int64_t localSequenceNumber, IoTString *host, int port) {
if (salt == NULL)
return NULL;
try {