Determining Cause of Spark Core Crash

Hey @bko

Here is my latest. I memset message array to all 0s and then populate the array. It is for sure null terminated. Take a look:

String aes_client::cbcDecrypt(String message, size_t len){
	//Base 64 Decode data
	const char *messageChars = message.c_str();
	int length = len/4 *3;
	if (messageChars[length - 1] == '=') (length)--;
	if (messageChars[length - 2] == '=') (length)--;

	unsigned char messageBuf[length];
	size_t* decodeLength;
	base64_decode(message.c_str(), message.length(), decodeLength, messageBuf);

	//Copy Base 64 decoded data into buffer for decryption
	unsigned char data[length];
	memset(data, 0, sizeof data);
	memcpy(data, messageBuf, length);

	//get round key for decryption
	memcpy(oIV, nIV, 16);

	//Create output buffer for decryption.
	unsigned char oBuf[length];

	//Make sure buffers are empty
	memset(oBuf, 0, length);

//	Serial.print("Decrypt IV oIV: ");
//	hexPrint(oIV, 16);
//
//	Serial.print("Decrypt IV nIV: ");
//	hexPrint(nIV, 16);

	//Decrypt message into output buffer
	aes_setkey_dec(&mAES, mKey, 128);
	aes_crypt_cbc(&mAES, AES_DECRYPT, length, oIV, data, oBuf);

	//Store first 16 decrypted characters as round key for next cbc encrypted send
	memcpy(nIV, oBuf, 16);

	if(validatePacket(oBuf)){
		//Get checkin interval from packet
		checkInInterval = ((oBuf[devIDLen+16] *256)+oBuf[devIDLen+17])*1000;

		//Get message out of packet
		char messageArray[(sizeof oBuf - (devIDLen+18))+1];
		//Make sure messageArray is empty
		memset(messageArray, 0, sizeof messageArray);

		for(int i = 0; i < (sizeof oBuf - (devIDLen+18)); i++){
			messageArray[i] = oBuf[i+18+devIDLen];
		}
		String message(messageArray);
		//Extrapolate message from received data.  All messages are appended with ~ so trim off information past that symbol
		int end = message.indexOf("~");
		String trimmed = message.substring(0,end);
		Serial.print("Length of return String after Decrypt: ");
		Serial.println(trimmed.length());
		delay(100);
		Serial.print("Decrypted: ");
		Serial.println(trimmed);
		delay(100);
		return trimmed;

	}else{

		//Get message out of packet
		char messageArray[(sizeof oBuf - (devIDLen+18))+1];
		//Make sure messageArray is empty
		memset(messageArray, 0, sizeof messageArray);

		for(int i = 0; i < sizeof messageArray; i++){
			messageArray[i] = oBuf[i+18+devIDLen];
		}
		String message(messageArray);
		//Extrapolate message from received data.  All messages are appended with ~ so trim off information past that symbol
		int end = message.indexOf("~");
		String trimmed = message.substring(0,end);
		Serial.println(trimmed);

		return "Fail";
	}
}

I’ve edited your post to properly format the code. Please check out this post, so you know how to do this yourself in the future. Thanks in advance! ~Jordy