CyaSSL mbed example for my Educational purposes

Dependencies:   CyaSSL MbedJSONValue TempSensor mbed-rtos mbed

I DO NOT have any specific licenses attached to my example other then the Libraries that where imported (CyaSSL, MbedJSONValue, TempSensor, mbed-rtos, mbed). Feel free to import my example and edit to suite your own needs :-)

This CyaSSL example is currently broken. This CyaSSL_Example will be on going project to learn how encryption works.

Committer:
d0773d
Date:
Tue Mar 03 22:55:58 2015 +0000
Revision:
1:f7e4aaf481ff
Parent:
0:c5c5b0824b56
CyaSSL mbed example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
d0773d 0:c5c5b0824b56 1 #include "mbed.h"
d0773d 0:c5c5b0824b56 2
d0773d 0:c5c5b0824b56 3 #include "cyassl/ctaocrypt/hmac.h"
d0773d 0:c5c5b0824b56 4 #include "cyassl/ctaocrypt/aes.h"
d0773d 0:c5c5b0824b56 5
d0773d 0:c5c5b0824b56 6 #include "MbedJSONValue.h"
d0773d 0:c5c5b0824b56 7 #include "LinearTempSensor.h"
d0773d 0:c5c5b0824b56 8
d0773d 0:c5c5b0824b56 9 int main() {
d0773d 0:c5c5b0824b56 10
d0773d 0:c5c5b0824b56 11 pc.baud(115200);
d0773d 0:c5c5b0824b56 12
d0773d 0:c5c5b0824b56 13 MbedJSONValue sensorResults;
d0773d 0:c5c5b0824b56 14
d0773d 0:c5c5b0824b56 15 Aes enc;
d0773d 0:c5c5b0824b56 16 Aes dec;
d0773d 0:c5c5b0824b56 17
d0773d 0:c5c5b0824b56 18 Hmac hmac;
d0773d 0:c5c5b0824b56 19
d0773d 0:c5c5b0824b56 20 bytekey[24]; // fill key with keying material
d0773d 0:c5c5b0824b56 21 bytebuferr[2048]; // fill buffer with data to digest
d0773d 0:c5c5b0824b56 22 bytehmacDigest[SHA256_DIGEST_SIZE];
d0773d 0:c5c5b0824b56 23
d0773d 0:c5c5b0824b56 24 HmacSetKey(&hmac, SHA256, key, sizeof(key));
d0773d 0:c5c5b0824b56 25 HmacUpdate(&hmac, buffer, sizeof(buffer));
d0773d 0:c5c5b0824b56 26 HmacFinal(&hmac, hmacDigest);
d0773d 0:c5c5b0824b56 27
d0773d 0:c5c5b0824b56 28 const byte key[16] = { 'm', 'n', 'b', 'v', 'c', 'x', 'z', 'l', 'k', 'j', 'h', 'g', 'f', 'd', 's', 'a' };
d0773d 0:c5c5b0824b56 29 const byte iv[16] = { 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'p', 'o', 'i', 'u', 'y', 't', 'r' };
d0773d 0:c5c5b0824b56 30
d0773d 0:c5c5b0824b56 31 byte plain[128]; // an increment of 16, fill with data
d0773d 0:c5c5b0824b56 32 byte cipher[32];
d0773d 0:c5c5b0824b56 33
d0773d 0:c5c5b0824b56 34 std::string s;
d0773d 0:c5c5b0824b56 35
d0773d 0:c5c5b0824b56 36 Vout = sensor.Sense(); // Sample data (read sensor)
d0773d 0:c5c5b0824b56 37 Tav = sensor.GetAverageTemp(); // Calculate average temperature from N samples
d0773d 0:c5c5b0824b56 38 To = sensor.GetLatestTemp(); // Calculate temperature from the latest sample
d0773d 0:c5c5b0824b56 39
d0773d 0:c5c5b0824b56 40 TempValue = sensor.GetAverageTemp();
d0773d 0:c5c5b0824b56 41
d0773d 0:c5c5b0824b56 42 //Create JSON
d0773d 0:c5c5b0824b56 43 sensorResults["DATA1"][0] = "Result";
d0773d 0:c5c5b0824b56 44 sensorResults["DATA1"][1] = 5.5;
d0773d 0:c5c5b0824b56 45 sensorResults["DATA2"][0] = "Result";
d0773d 0:c5c5b0824b56 46 sensorResults["DATA2"][1] = 700;
d0773d 0:c5c5b0824b56 47 sensorResults["DATA3"][0] = "Result";
d0773d 0:c5c5b0824b56 48 sensorResults["DATA3"][1] = TempValue;
d0773d 0:c5c5b0824b56 49
d0773d 0:c5c5b0824b56 50 //Serialize JSON
d0773d 0:c5c5b0824b56 51 s = sensorResults.serialize();
d0773d 0:c5c5b0824b56 52 //sl = s.size();
d0773d 0:c5c5b0824b56 53
d0773d 0:c5c5b0824b56 54 //Print JSON string
d0773d 0:c5c5b0824b56 55 pc.printf("json: %s\r\n", s.c_str());
d0773d 0:c5c5b0824b56 56
d0773d 0:c5c5b0824b56 57 //Convert JSON string to a char array to encrypt
d0773d 0:c5c5b0824b56 58 //char *a=new char[s.size()+1];
d0773d 0:c5c5b0824b56 59 plain[s.size()]=0;
d0773d 0:c5c5b0824b56 60 memcpy(plain,s.c_str(),s.size());//<-- Fills plain array with the JSON values
d0773d 0:c5c5b0824b56 61
d0773d 0:c5c5b0824b56 62 // encrypt
d0773d 0:c5c5b0824b56 63 AesSetKey(&enc, key, sizeof(key), iv, AES_ENCRYPTION);
d0773d 0:c5c5b0824b56 64 AesCbcEncrypt(&enc, cipher, plain, sizeof(plain));
d0773d 0:c5c5b0824b56 65
d0773d 0:c5c5b0824b56 66 //cipher now contains the cipher text from the plain text.
d0773d 0:c5c5b0824b56 67
d0773d 0:c5c5b0824b56 68 // decrypt
d0773d 0:c5c5b0824b56 69 AesSetKey(&dec, key, sizeof(key), iv, AES_DECRYPTION);
d0773d 0:c5c5b0824b56 70 AesCbcDecrypt(&dec, plain, cipher, sizeof(cipher));
d0773d 0:c5c5b0824b56 71 }