#include <stdbool.h>
|
|
#include "hal.h"
|
|
|
|
#define LENGTH 4
|
|
|
|
typedef struct {
|
|
volatile uint32_t key[LENGTH];
|
|
volatile uint32_t state_in[LENGTH];
|
|
volatile uint32_t useEncDec;
|
|
volatile uint32_t valid_in;
|
|
volatile uint32_t valid_out;
|
|
volatile uint32_t state_out[LENGTH];
|
|
} Aes_Mem;
|
|
|
|
#define AES_MEM ((Aes_Mem*)(0xF0030000))
|
|
|
|
void writeKey(uint32_t * key) {
|
|
for (unsigned i = 0; i < LENGTH; i++) {
|
|
AES_MEM->key[i] = key[i];
|
|
}
|
|
}
|
|
|
|
void writeState(uint32_t * state) {
|
|
for (unsigned i = 0; i < LENGTH; i++) {
|
|
AES_MEM->state_in[i] = state[i];
|
|
}
|
|
}
|
|
|
|
void setEncDec(int encDec) {
|
|
AES_MEM->useEncDec = encDec;
|
|
}
|
|
|
|
void setValidIn() {
|
|
AES_MEM->valid_in = 1;
|
|
}
|
|
|
|
void readState(uint32_t * state) {
|
|
for (unsigned i = 0; i < LENGTH; i++) {
|
|
state[i] = AES_MEM->state_out[i];
|
|
}
|
|
}
|
|
|
|
void printState(uint32_t * state) {
|
|
printf("State:\n");
|
|
for(unsigned i = 0; i < LENGTH; i++) {
|
|
printf("%08x",state[LENGTH-i-1]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void printKey(uint32_t * key) {
|
|
printf("Key:\n");
|
|
for(unsigned i = 0; i < LENGTH; i++) {
|
|
printf("%08x",key[LENGTH-i-1]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
int main(void) {
|
|
printf("HELLO WORLD\n");
|
|
|
|
// uint32_t state[LENGTH] = {0x6bc1bee2, 0x2e409f96, 0xe93d7e11, 0x7393172a};
|
|
// uint32_t key[LENGTH] = {0x2b7e1516, 0x28aed2a6, 0xabf71588, 0x09cf4f3c};
|
|
|
|
uint32_t state[LENGTH] = {0x7393172a, 0xe93d7e11, 0x2e409f96, 0x6bc1bee2};
|
|
uint32_t key[LENGTH] = {0x09cf4f3c, 0xabf71588, 0x28aed2a6, 0x2b7e1516};
|
|
|
|
writeKey(key);
|
|
|
|
while (1) {
|
|
printState(state);
|
|
printKey(key);
|
|
|
|
writeState(state);
|
|
|
|
setEncDec(1);
|
|
|
|
setValidIn();
|
|
while (AES_MEM->valid_out != 1);
|
|
|
|
readState(state);
|
|
printState(state);
|
|
|
|
writeState(state);
|
|
|
|
setEncDec(0);
|
|
|
|
setValidIn();
|
|
while (AES_MEM->valid_out != 1);
|
|
|
|
readState(state);
|
|
printState(state);
|
|
|
|
|
|
}
|
|
return 0;
|
|
}
|