//***************************************************************************** // // Run the AES encryption/decryption example. // //***************************************************************************** int main(void) { unsigned char pucBlockBuf[16]; const unsigned *puKey; unsigned char pucTempIV[16]; // // Set the clocking to run directly from the crystal. // ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // // Initialize the UART interface. // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioInit(0); UARTprintf("\033[2JAES encryption/decryption using a pre-expanded key\n"); // // Print the plain text title // UARTprintf("Plain Text:"); PrintBuffer((unsigned char *)g_pcPlainText, sizeof(g_pcPlainText)); // // Get the expanded key to use for encryption // puKey = AESExpandedEncryptKeyData(); // // Generate the initialization vector needed for CBC mode. A temporary // copy is made that will be used with the crypt function because the crypt // function will modify the IV that is passed. // AESGenerateIV(g_pucIV, 1); memcpy(pucTempIV, g_pucIV, 16); // // Encrypt the plaintext message using CBC mode // aes_crypt_cbc(puKey, AES_ENCRYPT, 16, pucTempIV, (unsigned char *)g_pcPlainText, pucBlockBuf); // // Print the encrypted block to the display. Note that it will appear as // nonsense data. // UARTprintf("Encrypted:"); PrintBuffer(pucBlockBuf, sizeof(pucBlockBuf)); // // Get the expanded key to use for decryption // puKey = AESExpandedDecryptKeyData(); // // Decrypt the message using CBC mode // memcpy(pucTempIV, g_pucIV, 16); aes_crypt_cbc(puKey, AES_DECRYPT, 16, pucTempIV, pucBlockBuf, pucBlockBuf); // // Print the decrypted block to the display. It should be the same text // as the original message. // UARTprintf("Decrypted:"); PrintBuffer(pucBlockBuf, sizeof(pucBlockBuf)); // // Finished. // while(1) { } }
//***************************************************************************** // // Run the AES encryption/decryption example // //***************************************************************************** int main(void) { unsigned char ucBlockBuf[17]; const unsigned *puKey; unsigned char ucTempIV[16]; // // Set the clocking to run directly from the crystal. // SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); // // Initialize the OLED display. // RIT128x96x4Init(1000000); // // Print a title and the plain text to the display // RIT128x96x4StringDraw("AES Expand Example", 12, 8, 15); RIT128x96x4StringDraw("------------------", 12, 16, 15); RIT128x96x4StringDraw("Plain Text:", 30, 24, 15); RIT128x96x4StringDraw(g_cPlainText, 20, 32, 15); // // Get the expanded key to use for encryption // puKey = AESExpandedEncryptKeyData(); // // Generate the initialization vector needed for CBC mode. // A temporary copy is made that will be used with the crypt // function because the crypt function will modify the IV that is passed. // AESGenerateIV(g_ucIV, 1); memcpy(ucTempIV, g_ucIV, 16); // // Encrypt the plaintext message using CBC mode // aes_crypt_cbc(puKey, AES_ENCRYPT, 16, ucTempIV, (unsigned char *)g_cPlainText, ucBlockBuf); // // Print the encrypted block to the display. Note that it will // appear as nonsense data. The block needs to be null terminated // so that the StringDraw function will work correctly. // ucBlockBuf[16] = 0; RIT128x96x4StringDraw("Encrypted:", 34, 48, 15); RIT128x96x4StringDraw((char *)ucBlockBuf, 20, 56, 15); // // Get the expanded key to use for decryption // puKey = AESExpandedDecryptKeyData(); // // Decrypt the message using CBC mode // memcpy(ucTempIV, g_ucIV, 16); aes_crypt_cbc(puKey, AES_DECRYPT, 16, ucTempIV, ucBlockBuf, ucBlockBuf); // // Print the decrypted block to the display. It should be the same text // as the original message. // RIT128x96x4StringDraw("Decrypted:", 34, 72, 15); RIT128x96x4StringDraw((char *)ucBlockBuf, 20, 80, 15); // // Finished. // while(1) { } }
//***************************************************************************** // // Run the AES encryption/decryption example // //***************************************************************************** int main(void) { unsigned char ucBlockBuf[17]; const unsigned *puKey; unsigned char ucTempIV[16]; tContext sContext; tRectangle sRect; long lCenterX; // // Set the clocking to run directly from the crystal. // ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // // Set the pinout appropriately for this board. // PinoutSet(); // // Initialize the display driver. // Kitronix320x240x16_SSD2119Init(); // // Initialize the graphics context and find the middle X coordinate. // GrContextInit(&sContext, &g_sKitronix320x240x16_SSD2119); lCenterX = GrContextDpyWidthGet(&sContext) / 2; // // Fill the top 15 rows of the screen with blue to create the banner. // sRect.sXMin = 0; sRect.sYMin = 0; sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1; sRect.sYMax = 23; GrContextForegroundSet(&sContext, ClrDarkBlue); GrRectFill(&sContext, &sRect); // // Put a white box around the banner. // GrContextForegroundSet(&sContext, ClrWhite); GrRectDraw(&sContext, &sRect); // // Put the application name in the middle of the banner. // GrContextFontSet(&sContext, g_pFontCm20); GrStringDrawCentered(&sContext, "aes-expanded-key", -1, lCenterX, 8, 0); // // Print the plain text title // GrContextFontSet(&sContext, g_pFontCmss22b); GrStringDrawCentered(&sContext, "Plain Text:", -1, lCenterX, 60, 0); GrStringDrawCentered(&sContext, g_cPlainText, -1, lCenterX, 85, 0); // // Get the expanded key to use for encryption // puKey = AESExpandedEncryptKeyData(); // // Generate the initialization vector needed for CBC mode. // A temporary copy is made that will be used with the crypt // function because the crypt function will modify the IV that is passed. // AESGenerateIV(g_ucIV, 1); memcpy(ucTempIV, g_ucIV, 16); // // Encrypt the plaintext message using CBC mode // aes_crypt_cbc(puKey, AES_ENCRYPT, 16, ucTempIV, (unsigned char *)g_cPlainText, ucBlockBuf); // // Print the encrypted block to the display. Note that it will // appear as nonsense data. The block needs to be null terminated // so that the StringDraw function will work correctly. // ucBlockBuf[16] = 0; GrStringDrawCentered(&sContext, "Encrypted:", -1, lCenterX, 120, 0); GrStringDrawCentered(&sContext, (char *)ucBlockBuf, -1, lCenterX, 145, 0); // // Get the expanded key to use for decryption // puKey = AESExpandedDecryptKeyData(); // // Decrypt the message using CBC mode // memcpy(ucTempIV, g_ucIV, 16); aes_crypt_cbc(puKey, AES_DECRYPT, 16, ucTempIV, ucBlockBuf, ucBlockBuf); // // Print the decrypted block to the display. It should be the same text // as the original message. // GrStringDrawCentered(&sContext, "Decrypted:", -1, lCenterX, 180, 0); GrStringDrawCentered(&sContext, (char *)ucBlockBuf, -1, lCenterX, 205, 0); // // Finished. // while(1) { } }