From 4b36410c09843d3826e8d9694f8e8fc9bf12dad2 Mon Sep 17 00:00:00 2001 From: schneider Date: Thu, 14 Jul 2011 02:42:39 +0200 Subject: [PATCH] added xxtea encrypted packet handling --- firmware/funk/nrf24l01p.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/firmware/funk/nrf24l01p.c b/firmware/funk/nrf24l01p.c index 6229bb8..18799ab 100644 --- a/firmware/funk/nrf24l01p.c +++ b/firmware/funk/nrf24l01p.c @@ -1,6 +1,7 @@ #include #include #include "core/ssp/ssp.h" +#include "basic/xxtea.h" #define CHANNEL_BEACON 81 #define DEFAULT_SPEED R_RF_SETUP_DR_2M @@ -78,6 +79,24 @@ void nrf_write_long(const uint8_t cmd, int len, uint8_t* data){ nrf_write_long(C_W_REGISTER|(reg), len, data) // High-Level: +int nrf_rcv_pkt_time_xxtea(int maxtime, int maxsize, + uint8_t * pkt, uint32_t const k[4]) +{ + int n = nrf_rcv_pkt_time(maxtime, maxsize, pkt); + if( n ){ + if( n < 2 ) + return -4; + xxtea_decode(pkt, n, k); + uint16_t crc=crc16(pkt,n-2); + if( pkt[n-2] == ((crc>>8)&0xFF) && pkt[n-1] == (crc&0xFF) ){ + return n; + }else{ + return -5; + } + } + return n; +} + int nrf_rcv_pkt_time(int maxtime, int maxsize, uint8_t * pkt){ uint8_t buf; @@ -156,6 +175,12 @@ char nrf_snd_pkt_crc(int size, uint8_t * pkt){ return nrf_cmd_status(C_NOP); }; +char nrf_snd_pkt_xxtea(int size, uint8_t * pkt, uint32_t const k[4]) +{ + xxtea_encode(pkt, size, k); + return nrf_snd_pkt_crc(size, pkt); +} + void nrf_set_rx_mac(int pipe, int rxlen, int maclen, uint8_t * mac){ #ifdef SAFE assert(maclen>=1 || maclen<=5);