From cb7842bd16086048c729ce22105fa0b801be784c Mon Sep 17 00:00:00 2001 From: Adam Dunkels Date: Sat, 24 Nov 2012 17:18:59 +0100 Subject: [PATCH] Added support for encryption and decryption of the packetbuf if macros NETSTACK_ENCRYPT and NETSTACK_DECRYPT are defined. Those are intended to be called as functions NETSTACK_ENCRYPT() and NETSTACK_DECRYPT() to encrypt and decrypt the packetbuf, respectively. If needed, an initialization function by the name NETSTACK_ENCRYPTION_INIT() can also be defined. --- core/net/mac/contikimac.c | 12 +++++++++++- core/net/mac/nullrdc.c | 8 ++++++++ core/net/netstack.c | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/core/net/mac/contikimac.c b/core/net/mac/contikimac.c index 08cc5119f..06998c42c 100644 --- a/core/net/mac/contikimac.c +++ b/core/net/mac/contikimac.c @@ -626,6 +626,12 @@ send_packet(mac_callback_t mac_callback, void *mac_callback_ptr, struct rdc_buf_ packetbuf_compact(); +#ifdef NETSTACK_ENCRYPT + NETSTACK_ENCRYPT(); +#endif /* NETSTACK_ENCRYPT */ + + transmit_len = packetbuf_totlen(); + NETSTACK_RADIO.prepare(packetbuf_hdrptr(), transmit_len); /* Remove the MAC-layer header since it will be recreated next time around. */ @@ -915,7 +921,11 @@ input_packet(void) } /* printf("cycle_start 0x%02x 0x%02x\n", cycle_start, cycle_start % CYCLE_TIME);*/ - + +#ifdef NETSTACK_DECRYPT + NETSTACK_DECRYPT(); +#endif /* NETSTACK_DECRYPT */ + if(packetbuf_totlen() > 0 && NETSTACK_FRAMER.parse() >= 0) { #if WITH_CONTIKIMAC_HEADER diff --git a/core/net/mac/nullrdc.c b/core/net/mac/nullrdc.c index 6d0bf1a67..1ba5d939b 100644 --- a/core/net/mac/nullrdc.c +++ b/core/net/mac/nullrdc.c @@ -114,6 +114,10 @@ send_packet(mac_callback_t sent, void *ptr) ret = MAC_TX_ERR_FATAL; } else { +#ifdef NETSTACK_ENCRYPT + NETSTACK_ENCRYPT(); +#endif /* NETSTACK_ENCRYPT */ + #if NULLRDC_802154_AUTOACK int is_broadcast; uint8_t dsn; @@ -213,6 +217,10 @@ send_list(mac_callback_t sent, void *ptr, struct rdc_buf_list *buf_list) static void packet_input(void) { +#ifdef NETSTACK_DECRYPT + NETSTACK_DECRYPT(); +#endif /* NETSTACK_DECRYPT */ + #if NULLRDC_802154_AUTOACK if(packetbuf_datalen() == ACK_LEN) { /* Ignore ack packets */ diff --git a/core/net/netstack.c b/core/net/netstack.c index 35e7f2c48..c7dc8336c 100644 --- a/core/net/netstack.c +++ b/core/net/netstack.c @@ -46,5 +46,9 @@ netstack_init(void) NETSTACK_RDC.init(); NETSTACK_MAC.init(); NETSTACK_NETWORK.init(); + +#ifdef NETSTACK_ENCRYPTION_INIT + NETSTACK_ENCRYPTION_INIT(); +#endif /* NETSTACK_ENCRYPTION_INIT */ } /*---------------------------------------------------------------------------*/