diff --git a/examples/avr-rss2/AES128HW_test/AES128HW_test.c b/examples/avr-rss2/AES128HW_test/AES128HW_test.c new file mode 100644 index 000000000..da7935838 --- /dev/null +++ b/examples/avr-rss2/AES128HW_test/AES128HW_test.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2015, Copyright Robert Olsson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * Author : Robert Olsson + * roolss@kth.se & robert@radio-sensors.com + * Created : 2017-04-22 + */ + +/** + * \file + * A simple AES128 crypto emmgine test for Atmel radios + */ + +#include "contiki.h" +#include "dev/radio.h" +#include "net/netstack.h" +#include "sys/etimer.h" +#include +#include +#include +#include "rf230bb.h" + +PROCESS(aes_crypto_process, "AES HW crypto process"); +AUTOSTART_PROCESSES(&aes_crypto_process); + +unsigned char aes_key[16] = "abcdefghijklmnop"; +unsigned char aes_p[128]; +unsigned char aes_c[128]; +unsigned char aes_s[128]; +unsigned char tmp[16]; +uint8_t i; +int res; + +PROCESS_THREAD(aes_crypto_process, ev, data) +{ + PROCESS_BEGIN(); + + /* AES engine on */ + NETSTACK_RADIO.on(); + + strcpy((char *)aes_s, "Teststring______"); + + for(i = 0; i < 16; i++) { + printf("%02X", aes_s[i]); + } + printf(" Uncrypted \n"); + + res = rf230_aes_encrypt_ebc(aes_key, aes_s, aes_c); + if(!res) { + printf("ERR encryption\n"); + exit(0); + } + for(i = 0; i < 16; i++) { + printf("%02X", aes_c[i]); + } + printf(" AES-128 EBC Crypted\n"); + + res = rf230_aes_decrypt_ebc(aes_key, aes_c, aes_p); + if(!res) { + printf("ERR decryption\n"); + exit(0); + } + for(i = 0; i < 16; i++) { + printf("%02X", aes_p[i]); + } + printf(" Decrypted \n"); + + res = rf230_aes_encrypt_cbc(aes_key, aes_s, sizeof(aes_s), aes_c); + if(!res) { + printf("ERR encryption\n"); + exit(0); + } + for(i = 0; i < 16; i++) { + printf("%02X", aes_c[i]); + } + printf(" AES-128 MIC\n"); + + PROCESS_END(); +} + diff --git a/examples/avr-rss2/AES128HW_test/Makefile b/examples/avr-rss2/AES128HW_test/Makefile new file mode 100644 index 000000000..44c80fb3b --- /dev/null +++ b/examples/avr-rss2/AES128HW_test/Makefile @@ -0,0 +1,18 @@ +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" +CONTIKI_PROJECT = AES128HW_test +all: $(CONTIKI_PROJECT) + +# We use floating vars. Add library. +PRINTF_LIB_FLT = -Wl,-u,vfprintf -lprintf_flt -lm +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min +PRINTF_LIB = $(PRINTF_LIB_FLT) +CLIBS = $(PRINTF_LIB) + +CUSTOM_RULE_LINK = 1 +%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a + $(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} ${filter %.a,$^} $(TARGET_LIBFILES) -o $@ $(CLIBS) + +CONTIKI_WITH_RIME = 1 + +CONTIKI = ../../.. +include $(CONTIKI)/Makefile.include diff --git a/examples/avr-rss2/AES128HW_test/README.md b/examples/avr-rss2/AES128HW_test/README.md new file mode 100644 index 000000000..ebcaaa7fb --- /dev/null +++ b/examples/avr-rss2/AES128HW_test/README.md @@ -0,0 +1,24 @@ +AES128HW_test +============= + +Scope +----- +Simple demo to use the AES crypto engine in the Atmel radios. + +Build +----- +make TARGET=avr-rss2 + +Program output +-------------- +*******Booting Contiki-3.x-3252-g0783591******* +I2C: AT24MAC +MAC address 7d:c2: +PAN=0xABCD, MAC=nullmac, RDC=nullrdc, NETWORK=Rime, channel=26, check-rate-Hz=128, tx-power=0 +Routing Enabled + +54657374737472696E675F5F5F5F5F5F Uncrypted +6FDE14E8F9453C6714B7B45B24876CBF AES-128 EBC Crypted +54657374737472696E675F5F5F5F5F5F Decrypted +215C9836DCDB443F15AFED576E9F7F72 AES-128 MIC + diff --git a/examples/avr-rss2/AES128HW_test/project-conf.h b/examples/avr-rss2/AES128HW_test/project-conf.h new file mode 100644 index 000000000..5ae870b6f --- /dev/null +++ b/examples/avr-rss2/AES128HW_test/project-conf.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, Copyright Robert Olsson / Radio Sensors AB + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + * + * + * Author : Robert Olsson robert@radio-sensors.com + * Created : 2017-04-22 + */ + +/** + * \file + * Project specific configuration defines for example + * + */ + +#ifndef PROJECT_CONF_H_ +#define PROJECT_CONF_H_ + +#define AES_128_HW_CONF 1 + +#endif /* PROJECT_CONF_H_ */