added xxtea encrypted file transfer
This commit is contained in:
parent
4b36410c09
commit
3cc27add50
|
@ -6,6 +6,7 @@ OBJS =
|
||||||
|
|
||||||
OBJS += nrf24l01p.o
|
OBJS += nrf24l01p.o
|
||||||
OBJS += rftransfer.o
|
OBJS += rftransfer.o
|
||||||
|
OBJS += filetransfer.o
|
||||||
|
|
||||||
LIBNAME=funk
|
LIBNAME=funk
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include "nrf24l01p.h"
|
||||||
|
#include "filetransfer.h"
|
||||||
|
#include "rftransfer.h"
|
||||||
|
#include "basic/xxtea.h"
|
||||||
|
#include "filesystem/ff.h"
|
||||||
|
|
||||||
|
int filetransfer_send(uint8_t *filename, uint16_t size,
|
||||||
|
uint8_t *mac, uint32_t const k[4])
|
||||||
|
{
|
||||||
|
uint8_t buf[MAXSIZE];
|
||||||
|
FIL file;
|
||||||
|
FRESULT res;
|
||||||
|
UINT readbytes;
|
||||||
|
|
||||||
|
if( size > MAXSIZE )
|
||||||
|
return 1; //File to big
|
||||||
|
|
||||||
|
res=f_open(&file, (const char*)filename, FA_OPEN_EXISTING|FA_READ);
|
||||||
|
if( res )
|
||||||
|
return res;
|
||||||
|
|
||||||
|
res = f_read(&file, (char *)buf, size, &readbytes);
|
||||||
|
if( res )
|
||||||
|
return res;
|
||||||
|
if( size != readbytes)
|
||||||
|
return 1; //Error while reading
|
||||||
|
|
||||||
|
uint16_t wordcount = (size+3)/4;
|
||||||
|
uint8_t macbuf[5];
|
||||||
|
|
||||||
|
uint8_t metadata[30];
|
||||||
|
if( strlen((char*)filename) < 20 )
|
||||||
|
strcpy((char*)metadata, (char*)filename);
|
||||||
|
else
|
||||||
|
return 1; //File name too long
|
||||||
|
metadata[20] = size >> 8;
|
||||||
|
metadata[21] = size & 0xFF;
|
||||||
|
|
||||||
|
//nrf_get_tx_max(5,macbuf);
|
||||||
|
nrf_set_tx_mac(5, mac);
|
||||||
|
|
||||||
|
nrf_snd_pkt_xxtea(30, metadata, k);
|
||||||
|
xxtea_encode_words((uint32_t *)buf, wordcount, k);
|
||||||
|
rftransfer_send(wordcount*4, buf);
|
||||||
|
nrf_set_tx_mac(5, macbuf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int filetransfer_receive(uint8_t *mac, uint32_t const k[4])
|
||||||
|
{
|
||||||
|
uint8_t buf[MAXSIZE+1];
|
||||||
|
uint16_t size;
|
||||||
|
|
||||||
|
UINT written = 0;
|
||||||
|
FIL file;
|
||||||
|
FRESULT res;
|
||||||
|
uint8_t macbuf[5];
|
||||||
|
//nrf_get_tx_max(5,macbuf);
|
||||||
|
nrf_set_tx_mac(5, mac);
|
||||||
|
|
||||||
|
uint8_t metadata[30];
|
||||||
|
nrf_rcv_pkt_time_xxtea(1000, 30, metadata, k);
|
||||||
|
metadata[19] = 0; //enforce termination
|
||||||
|
size = (metadata[20] << 8) | metadata[21];
|
||||||
|
|
||||||
|
if( size > MAXSIZE ) return 1; //file to big
|
||||||
|
//if(fileexists(metadata)) return 1; //file already exists
|
||||||
|
|
||||||
|
res = f_open(&file, (const char*)metadata, FA_OPEN_ALWAYS|FA_WRITE);
|
||||||
|
if( res )
|
||||||
|
return res;
|
||||||
|
|
||||||
|
uint16_t wordcount = (size+3)/4;
|
||||||
|
rftransfer_receive(buf, wordcount*4, 1000);
|
||||||
|
|
||||||
|
nrf_set_tx_mac(5, macbuf);
|
||||||
|
|
||||||
|
xxtea_decode_words((uint32_t *)buf, wordcount, k);
|
||||||
|
|
||||||
|
res = f_write(&file, buf, size, &written);
|
||||||
|
if( res )
|
||||||
|
return res;
|
||||||
|
if( written != size )
|
||||||
|
return 1; //error while writing
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef _FILETRANSFER_H_
|
||||||
|
#define _FILETRANSFER_H_
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define MAXSIZE 1024
|
||||||
|
|
||||||
|
int filetransfer_send(uint8_t *filename, uint16_t size,
|
||||||
|
uint8_t *mac, uint32_t const k[4]);
|
||||||
|
int filetransfer_receive(uint8_t *mac, uint32_t const k[4]);
|
||||||
|
#endif
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef _NRF24L01P_H
|
#ifndef _NRF24L01P_H
|
||||||
#define _NRF24L01P_H 1
|
#define _NRF24L01P_H 1
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#define MAX_PKT (32-2) // 2 bytes are our CRC
|
#define MAX_PKT (32-2) // 2 bytes are our CRC
|
||||||
|
|
||||||
|
@ -109,7 +110,10 @@
|
||||||
|
|
||||||
/* exported functions */
|
/* exported functions */
|
||||||
int nrf_rcv_pkt_time(int maxtime, int maxsize, uint8_t * pkt);
|
int nrf_rcv_pkt_time(int maxtime, int maxsize, uint8_t * pkt);
|
||||||
|
int nrf_rcv_pkt_time_xxtea(int maxtime, int maxsize,
|
||||||
|
uint8_t * pkt, uint32_t const k[4]);
|
||||||
char nrf_snd_pkt_crc(int size, uint8_t * pkt);
|
char nrf_snd_pkt_crc(int size, uint8_t * pkt);
|
||||||
|
char nrf_snd_pkt_xxtea(int size, uint8_t * pkt, uint32_t const k[4]);
|
||||||
void nrf_init() ;
|
void nrf_init() ;
|
||||||
|
|
||||||
void nrf_cmd(uint8_t cmd);
|
void nrf_cmd(uint8_t cmd);
|
||||||
|
|
Loading…
Reference in New Issue