#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;

}


