From 0488cd9cffc837e99490a0761216bbc5847ff400 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 28 Apr 2013 22:52:23 -0700 Subject: [PATCH] altos: Build test framework for AES code Simple CBC-CMAC test with a constant 0 key and constant 0 data for now. Signed-off-by: Keith Packard --- src/aes/ao_aes.c | 9 +++++++- src/aes/ao_aes_int.h | 2 ++ src/test/Makefile | 7 ++++-- src/test/ao_aes_test.c | 52 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/test/ao_aes_test.c diff --git a/src/aes/ao_aes.c b/src/aes/ao_aes.c index 4977aaf8..71ffadb1 100644 --- a/src/aes/ao_aes.c +++ b/src/aes/ao_aes.c @@ -11,7 +11,9 @@ * Vincent Rijmen */ +#ifndef AO_AES_TEST #include +#endif #include #include "ao_aes_int.h" @@ -193,6 +195,7 @@ static inline void xAddInvMix(word32 res[MAXBC], word32 a[MAXBC], #endif /* code included for reference */ +static int xrijndaelKeySched(word32 key[], int keyBits, int blockBits, roundkey *rkk) { @@ -280,6 +283,7 @@ int xrijndaelKeySched(word32 key[], int keyBits, int blockBits, /* Encryption of one block. */ +static void xrijndaelEncrypt(word32 block[], roundkey *rkk) { word32 block2[MAXBC]; /* hold intermediate result */ @@ -306,6 +310,7 @@ void xrijndaelEncrypt(word32 block[], roundkey *rkk) xKeyAddition(block, block2, rp, BC); } +static void xrijndaelDecrypt(word32 block[], roundkey *rkk) { word32 block2[MAXBC]; /* hold intermediate result */ @@ -349,6 +354,7 @@ void xrijndaelDecrypt(word32 block[], roundkey *rkk) } uint8_t ao_aes_mutex; +static uint8_t key[16]; static roundkey rkk; static uint8_t iv[16]; @@ -362,7 +368,8 @@ ao_aes_set_mode(enum ao_aes_mode mode) void ao_aes_set_key(__xdata uint8_t *in) { - xrijndaelKeySched((word32 *) in, 128, 128, &rkk); + memcpy(key, in, 16); + xrijndaelKeySched((word32 *) key, 128, 128, &rkk); } void diff --git a/src/aes/ao_aes_int.h b/src/aes/ao_aes_int.h index 7990a2e1..4d9b3ba7 100644 --- a/src/aes/ao_aes_int.h +++ b/src/aes/ao_aes_int.h @@ -41,6 +41,7 @@ typedef struct { word32 rk[MAXRK]; } roundkey; +#if 0 /* keys and blocks are externally treated as word32 arrays, to make sure they are aligned on 4-byte boundaries on architectures that require it. */ @@ -60,5 +61,6 @@ int xrijndaelKeySched(word32 key[], int keyBits, int blockBits, void xrijndaelEncrypt(word32 block[], roundkey *rkk); void xrijndaelDecrypt(word32 block[], roundkey *rkk); +#endif #endif /* __RIJNDAEL_H */ diff --git a/src/test/Makefile b/src/test/Makefile index a62b59c5..d4d98e54 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -1,8 +1,8 @@ -vpath % ..:../core:../drivers:../util:../micropeak +vpath % ..:../core:../drivers:../util:../micropeak:../aes PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_flight_test_noisy_accel ao_flight_test_mm \ ao_gps_test ao_gps_test_skytraq ao_convert_test ao_convert_pa_test ao_fec_test \ - ao_aprs_test ao_micropeak_test ao_fat_test + ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test INCS=ao_kalman.h ao_ms5607.h ao_log.h ao_data.h altitude-pa.h altitude.h @@ -67,3 +67,6 @@ ao_micropeak_test: ao_micropeak_test.c ao_microflight.c ao_kalman.h ao_fat_test: ao_fat_test.c ao_fat.c ao_bufio.c cc $(CFLAGS) -o $@ ao_fat_test.c -lssl + +ao_aes_test: ao_aes_test.c ao_aes.c ao_aes_tables.c + cc $(CFLAGS) -o $@ ao_aes_test.c diff --git a/src/test/ao_aes_test.c b/src/test/ao_aes_test.c new file mode 100644 index 00000000..dcedbfca --- /dev/null +++ b/src/test/ao_aes_test.c @@ -0,0 +1,52 @@ +/* + * Copyright © 2013 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#define __pdata +#define __data +#define __xdata +#define __code +#define __reentrant + +#include +#include + +#define AO_AES_TEST 1 + +#include "../aes/ao_aes_tables.c" +#include "../aes/ao_aes.c" + +static uint8_t key[16]; +static uint8_t text[16]; +static uint8_t cbc[16]; + +int +main (int argc, char **argv) +{ + int i; + + ao_aes_init(); + ao_aes_set_mode(ao_aes_mode_cbc_mac); + ao_aes_set_key(key); + ao_aes_zero_iv(); + ao_aes_run(text, cbc); + + printf ("CBC"); + for (i = 0; i < sizeof (cbc); i++) + printf (" %02x", cbc[i]); + printf ("\n"); + return 0; +} -- 2.30.2