/* * AES-CTR buffer encryption/decryption */ int aes_crypt_ctr( aes_context *ctx, size_t length, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, unsigned char *output ) { if( CRYP_AES_CTR(ctx->dir, nonce_counter, ctx->key, ctx->keySize, (uint8_t*)input, length, (uint8_t*)output) == ERROR ) { printf("ERROR in CRYP_AES_CTR.\n"); return -1; } return 0; }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup files (startup_stm32f40_41xxx.s/startup_stm32f427_437xx.s/startup_stm32f429_439xx.s) before to branch to application main. */ /* USARTx configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_Config(); /* Enable CRYP clock */ RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); while(1) { /* Display Plain Data*/ Display_PlainData(AES_TEXT_SIZE); /******************************************************************************/ /* AES mode ECB */ /******************************************************************************/ /*===================================================== Encryption ECB mode ======================================================*/ PressToContinue(); /****************************************/ /* AES 128 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_ECB(MODE_ENCRYPT, AES128key, 128, Plaintext, AES_TEXT_SIZE, Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(ECB,128,AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_ECB(MODE_ENCRYPT,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(ECB,192,AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_ECB(MODE_ENCRYPT,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(ECB, 256,AES_TEXT_SIZE); } /*===================================================== Decryption in ECB mode ======================================================*/ PressToContinue(); /****************************************/ /* AES 128 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_ECB(MODE_DECRYPT,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(ECB,128,AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_ECB(MODE_DECRYPT,AES192key, 192,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(ECB, 192,AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_ECB(MODE_DECRYPT,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(ECB,256,AES_TEXT_SIZE); } /******************************************************************************/ /* AES mode CBC */ /******************************************************************************/ PressToContinue(); /*===================================================== Encryption CBC mode ======================================================*/ /****************************************/ /* AES 128 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES128key,128,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CBC,128,AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CBC,192,AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CBC(MODE_ENCRYPT,IV_1,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CBC, 256,AES_TEXT_SIZE); } /*===================================================== Decryption in CBC mode ======================================================*/ PressToContinue(); /* Deinitializes the CRYP peripheral */ CRYP_DeInit(); /****************************************/ /* AES 128 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CBC,128,AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Deinitializes the CRYP peripheral */ CRYP_DeInit(); /* Decrypt the plaintext message */ if(CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES192key, 192,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CBC, 192,AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Deinitializes the CRYP peripheral */ CRYP_DeInit(); /* Decrypt the plaintext message */ if(CRYP_AES_CBC(MODE_DECRYPT,IV_1,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CBC,256,AES_TEXT_SIZE); } /******************************************************************************/ /* AES mode CTR */ /******************************************************************************/ /*===================================================== Encryption CTR mode ======================================================*/ PressToContinue(); /****************************************/ /* AES 128 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES128key,128,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CTR,128, AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES192key,192,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CTR,192, AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Encrypt the plaintext message*/ if(CRYP_AES_CTR(MODE_ENCRYPT,IV_1,AES256key,256,Plaintext,AES_TEXT_SIZE,Encryptedtext) == SUCCESS) { /* Display encrypted Data*/ Display_EncryptedData(CTR, 256, AES_TEXT_SIZE); } /*===================================================== Decryption in CTR mode ======================================================*/ PressToContinue(); /****************************************/ /* AES 128 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES128key,128,Ciphertext,AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CTR, 128, AES_TEXT_SIZE); } /****************************************/ /* AES 192 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES192key,192,Ciphertext,AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CTR, 192, AES_TEXT_SIZE); } /****************************************/ /* AES 256 **/ /****************************************/ /* Decrypt the plaintext message */ if(CRYP_AES_CTR(MODE_DECRYPT,IV_1,AES256key, 256,Ciphertext, AES_TEXT_SIZE,Decryptedtext) == SUCCESS) { /* Display decrypted data*/ Display_DecryptedData(CTR, 256, AES_TEXT_SIZE); } /******************************************************************************/ PressToContinue(); printf("\n\r Example restarted...\n "); } }