blob: 9cb985d7c38363ce171b0dc6886f73006992a0f8 [file] [log] [blame]
#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;
}