| #include <defs.h> |
| #include <stub.c> |
| #include <aes.h> |
| |
| #define aes ((volatile int *) 0x30000000) |
| void aes_crypt(int* key, int* word){ |
| //Word |
| aes[0] = word[0]; |
| aes[1] = word[1]; |
| aes[2] = word[2]; |
| aes[3] = word[3]; |
| //Key |
| aes[4] = key[0]; |
| aes[5] = key[1]; |
| aes[6] = key[2]; |
| aes[7] = key[3]; |
| |
| //Start aes |
| aes[8] = 0x1; |
| |
| while(aes[9]==0x00000000); //aes finish |
| } |
| |
| void caravel_setup(){ |
| |
| |
| reg_spi_enable = 1; |
| reg_wb_enable = 1; //needed to enable wb transactions |
| |
| reg_mprj_io_31 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_30 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_29 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_28 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_27 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_26 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_25 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_24 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_23 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_22 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_21 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_20 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_19 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_18 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_17 = GPIO_MODE_MGMT_STD_OUTPUT; |
| reg_mprj_io_16 = GPIO_MODE_MGMT_STD_OUTPUT; |
| |
| reg_mprj_xfer = 1; |
| while (reg_mprj_xfer == 1); |
| |
| reg_la2_oenb = reg_la2_iena = 0x00000000; // [95:64] |
| |
| // Flag start of the test |
| reg_mprj_datal = 0xAB600000; |
| |
| } |
| |
| void main(int argc, char** argv) { |
| caravel_setup(); |
| int key[] = {0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f}; |
| int word[] = {0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff}; |
| aes_crypt(key , word); |
| uint8_t i, j; |
| for (i = 0; i < 4; ++i) |
| { |
| for (j = 0; j < 4; ++j) |
| { |
| // (*state)[j][i] = getSBoxValue((*state)[j][i]); |
| } |
| } |
| reg_mprj_datal = 0xCAFE0000; |
| |
| struct AES_ctx ctx; |
| uint8_t aeskey[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; |
| uint8_t str[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }; |
| reg_mprj_datal = 0x12340000; |
| reg_mprj_datal = 0xBEEF0000; |
| AES_init_ctx(&ctx, aeskey); |
| |
| reg_mprj_datal = 0x12340000; |
| reg_mprj_datal = 0xBEEF0000; |
| AES_CBC_encrypt_buffer(&ctx, str, 16); |
| |
| int k; |
| for ( k= 0; k < 16; ++k) { |
| reg_mprj_datal = (int)str[i]; |
| } |
| |
| // Flag end of the test |
| reg_mprj_datal = 0xAB610000; |
| |
| } |
| |
| |