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.
main.cpp@1:f7e4aaf481ff, 2015-03-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |