![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Ritesh
Diff: main.cpp
- Revision:
- 0:20df98087dc9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri May 05 20:14:32 2017 +0000 @@ -0,0 +1,109 @@ +#include "mbed.h" + +//------------------------------------ +// Hyperterminal configuration +// 9600 bauds, 8-bit data, no parity +//------------------------------------ + +#include "mbedtls/aes.h" + +#define IV_SIZE 16 +#define INPUT_SIZE 256 + +Serial pc(USBTX, USBRX); + +// Indicator LED +DigitalOut myled(LED1); + +// This function initializes the initilization vector to the original one. +void init_ivs(unsigned char iv_orig[], unsigned char iv1[], unsigned char iv2[]); + + +int main() +{ + int i=0; + + // We create two AES contexts + mbedtls_aes_context aes; + mbedtls_aes_context aes2; + + // Our KEY , should be shared only with the receiver and has to be as random as possible. + // Here we use this simple example for ease and simplicity + unsigned char key[32] = "1234567812345678123456781234567" ; + key[31] = '8'; // we replace the 32th (index 31) which contains '/0' with the '8' char. + + // This is the Init Vector generated with the random KEY from http://aes.online-domain-tools.com/ + unsigned char orig_iv[] = {0x8d, 0xf8, 0x4d, 0xed, 0x5f, 0xbd, 0x51, 0x57, 0x5c, 0x55, 0x17, 0xb0, 0x66, 0xee, 0xb1, 0x2b}; // e053a4a22fd6bfaf43fd5e8b5"; {0xb2, 0x4b, 0xf2, 0xf7, 0x7a, 0xc5, 0xec, 0x0c, 0x5e, 0x1f, 0x4d, 0xc1, 0xae, 0x46, 0x5e, 0x75}; + unsigned char iv1[IV_SIZE] = {0}; + unsigned char iv2[IV_SIZE] = {0}; + + // This is the text that we want to encrypt and send + unsigned char my_txt[] = "My name is Ritesh Reddy Sadula"; + + unsigned char input[INPUT_SIZE] = {0}; + + for(int m=0; m<strlen((const char*)my_txt); m++) + { + input[m] = *(my_txt+m); + } + + + // Output of encryption + unsigned char output[INPUT_SIZE] = {0}; + // Output of decryption + unsigned char output2[INPUT_SIZE] = {0}; + + int ret =0; + + // To be a valid length, it has to be a multiple of 16, so we take the muliple of 16 that is nearly bigger than the actual size + // Or the + int TXT_VALID_LENGTH = ((strlen((const char*)my_txt)%16 == 0) ? strlen((const char*)my_txt) : (strlen((const char*)my_txt)/16 + 1)*16); + while(1){ + init_ivs(orig_iv , iv1, iv2); + + + mbedtls_aes_setkey_enc( &aes, key, 256); + ret = mbedtls_aes_crypt_cbc( &aes, MBEDTLS_AES_ENCRYPT, TXT_VALID_LENGTH, iv1, input, output ); + pc.printf("%d - Ret: %d - strlen(input)=%d - ENCRYPTED output %s\n", i, ret , TXT_VALID_LENGTH, output); + + // We can use 64encoding to send data and to avoid encoding problems + // In our case we use haxadecimal representation of the characters so no need. + // mbedtls_base64_encode(encoded64, 200, &out_len, (const unsigned char *)output, strlen((const char*)output) ); + // printf("%d 64ENCODED ENCRYPTED output %s\n", i, encoded64); + + pc.printf("%d HEX ENCRYPTED output\n", i); + for(int j=0; j<TXT_VALID_LENGTH; j++) + { + pc.printf("%02x ", output[j]); + } + pc.printf("\n"); + + // We decrypt the OUTPUT1 and we get the same input string + + mbedtls_aes_setkey_dec( &aes2, key, 256); + ret = mbedtls_aes_crypt_cbc(&aes2, MBEDTLS_AES_DECRYPT, TXT_VALID_LENGTH, iv2, output, output2 ); + pc.printf("%d - Ret: %d - DECRYPTED output %s\n\n", i , ret, output2); + + // Showing the decrypted result in HEX + pc.printf("%d HEX DECRYPTED output\n", i, output2); + for(int j=0; j<TXT_VALID_LENGTH; j++) + { + pc.printf("%02x ", output2[j]); + } + pc.printf("\n\n\n"); + + i++; + // Wait 2 seconds and re-do it. + wait(2); + } + +} + +void init_ivs(unsigned char iv_orig[], unsigned char iv1[], unsigned char iv2[]) +{ + for(int i=0; i<IV_SIZE; i++){ + + iv2[i] = iv1[i] = iv_orig[i]; + + } +} \ No newline at end of file