![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Ritesh
main.cpp
- Committer:
- ritesh2094
- Date:
- 2017-05-05
- Revision:
- 0:20df98087dc9
File content as of revision 0:20df98087dc9:
#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]; } }