You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.2 KiB
118 lines
2.2 KiB
5 years ago
|
#include "Device/Include/stm32f10x.h" // Device header
|
||
|
|
||
|
#include<stdint.h>
|
||
|
#include"AES_CBC_SW.h"
|
||
|
#define AES_MAXROUNDS 14
|
||
|
#define AES_BLOCKSIZE 16
|
||
|
#define AES_IV_SIZE 16
|
||
|
#define KEYSIZE 16
|
||
|
#define MSG_SIZE KEYSIZE * 4
|
||
|
|
||
|
static const uint8_t key[KEYSIZE] =
|
||
|
{
|
||
|
0xff, 0xde, 0x00, 0xad,
|
||
|
0xff, 0xb0, 0x00, 0x0b,
|
||
|
0xff, 0xde, 0x00, 0xad,
|
||
|
0xff, 0xb0, 0x00, 0x0b
|
||
|
};
|
||
|
|
||
|
static const uint8_t iv[KEYSIZE] =
|
||
|
{
|
||
|
0xff, 0xc0, 0x00, 0xfe,
|
||
|
0xff, 0xc0, 0x00, 0x7d,
|
||
|
0xff, 0xc0, 0x00, 0xfe,
|
||
|
0xff, 0xc0, 0x00, 0x7d
|
||
|
};
|
||
|
|
||
|
static const uint8_t original_msg[MSG_SIZE] =
|
||
|
{
|
||
|
0xf4, 0xfc, 0xa2, 0xf4,
|
||
|
0x93, 0xfa, 0x64, 0xeb,
|
||
|
0x87, 0xca, 0xeb, 0x62,
|
||
|
0x90, 0x89, 0x34, 0xdb,
|
||
|
0x34, 0xe3, 0xf8, 0xc6,
|
||
|
0xd7, 0xf6, 0x89, 0xe7,
|
||
|
0xc0, 0x37, 0x43, 0xcd,
|
||
|
0x32, 0x69, 0xcd, 0xbd,
|
||
|
0x05, 0xec, 0x97, 0xbf,
|
||
|
0x05, 0x92, 0xc9, 0xf7,
|
||
|
0x8d, 0x4b, 0xb0, 0x88,
|
||
|
0x1a, 0xc2, 0x15, 0x2e,
|
||
|
0xba, 0x46, 0x58, 0xf9,
|
||
|
0x4d, 0x1f, 0xe9, 0xef,
|
||
|
0xa8, 0x6b, 0x5a, 0x6f,
|
||
|
0x8b, 0xe6, 0x7d, 0x51
|
||
|
};
|
||
|
|
||
|
static uint8_t out[MSG_SIZE] ;
|
||
|
static uint8_t msg[MSG_SIZE] ;
|
||
|
|
||
|
static AES_CTX context ;
|
||
|
|
||
|
void test_setup()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void test_clear()
|
||
|
{
|
||
|
uint8_t i =0;
|
||
|
|
||
|
memcpy(msg, original_msg, MSG_SIZE);
|
||
|
memset(out, 0, MSG_SIZE);
|
||
|
memset(&context, 0, sizeof(context));
|
||
|
|
||
|
|
||
|
printf("\r\n original_msg[%d]\r\n",MSG_SIZE);
|
||
|
for(i = 0 ; i<MSG_SIZE ; i++)
|
||
|
{
|
||
|
printf("%02x", original_msg[i]);
|
||
|
}
|
||
|
printf("\r\n");
|
||
|
}
|
||
|
|
||
|
void test_run()
|
||
|
{
|
||
|
uint8_t i =0;
|
||
|
|
||
|
AES_set_key(&context, key, iv, AES_MODE_128);
|
||
|
AES_cbc_encrypt(&context, msg, out, MSG_SIZE);
|
||
|
|
||
|
printf("\r\n out[%d]\r\n",MSG_SIZE);
|
||
|
for(i = 0 ; i<MSG_SIZE ; i++)
|
||
|
{
|
||
|
printf("%02x", out[i]);
|
||
|
}
|
||
|
printf("\r\n");
|
||
|
|
||
|
memset(msg, 0, MSG_SIZE);
|
||
|
memset(&context, 0, sizeof(context));
|
||
|
AES_set_key(&context, key, iv, AES_MODE_128);
|
||
|
|
||
|
AES_convert_key(&context);
|
||
|
AES_cbc_decrypt(&context, out, msg, MSG_SIZE);
|
||
|
|
||
|
printf("\r\n msg[%d]\r\n",MSG_SIZE);
|
||
|
for(i = 0 ; i<MSG_SIZE ; i++)
|
||
|
{
|
||
|
printf("%02x", msg[i]);
|
||
|
}
|
||
|
printf("\r\n");
|
||
|
}
|
||
|
|
||
|
int test_check()
|
||
|
{
|
||
|
return 0 == memcmp(msg, original_msg, MSG_SIZE);
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
|
||
|
test_clear();
|
||
|
test_run();
|
||
|
test_check();
|
||
|
|
||
|
for(;;)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|