#include #include #include #include #include #include "basic/basic.h" #include "lcd/render.h" #include "lcd/allfonts.h" #include "basic/ecc.h" #include "funk/nrf24l01p.h" #include "filesystem/ff.h" #include "filesystem/diskio.h" #include "funk/filetransfer.h" #include "lcd/print.h" uint8_t mac[5] = {1,2,3,2,1}; void ram(void) { if( sendKeys() ) return; char priv[42]; UINT readbytes; FIL file; if( f_open(&file, "priv.key", FA_OPEN_EXISTING|FA_READ) ){ return; } if( f_read(&file, priv, 41, &readbytes) || readbytes != 41 ){ return; } f_close(&file); priv[41] = 0; uint8_t done = 0; uint8_t key; uint8_t k1[16], k2[16], rx[4*NUMWORDS], ry[4*NUMWORDS]; while( !done ){ lcdClear(); lcdPrintln("Receiving file"); lcdPrintln("Down=Abort"); lcdRefresh(); key = getInput(); delayms(20); if( key == BTN_DOWN ){ return -1; } if( receiveR(rx,ry) ) continue; lcdPrintln("Creating key"); lcdRefresh(); ECIES_decryptkeygen(rx, ry, k1, k2, priv); if( filetransfer_receive(mac,(uint32_t*)k1) < 0 ) continue; lcdPrintln("Right=OK"); lcdPrintln("Left=Retry"); lcdPrintln("Down=Abort"); lcdRefresh(); while(1){ key = getInput(); delayms(20); if( key == BTN_LEFT ){ break; }else if( key == BTN_RIGHT ){ done = 1; break; }else if( key == BTN_DOWN ){ return -1; } } } } void sendPublicKey(void) { uint8_t exp[2 + 4*NUMWORDS + 2]; char buf[42]; UINT readbytes; FIL file; if( f_open(&file, "pubx.key", FA_OPEN_EXISTING|FA_READ) ){ return; } if( f_read(&file, buf, 41, &readbytes) || readbytes != 41 ){ return; } f_close(&file); buf[41] = 0; exp[0] = 'P'; bitstr_parse_export((char*)exp+2, buf); exp[1] = 'X'; nrf_snd_pkt_crc(32, exp); delayms(10); if( f_open(&file, "puby.key", FA_OPEN_EXISTING|FA_READ) ){ return; } if( f_read(&file, buf, 41, &readbytes) || readbytes != 41 ){ return; } f_close(&file); buf[41] = 0; exp[1] = 'Y'; bitstr_parse_export((char*)exp+2, buf); nrf_snd_pkt_crc(32, exp); delayms(10); } int receiveKey(uint8_t type, uint8_t *x, uint8_t *y) { uint8_t buf[32]; uint8_t n; n = nrf_rcv_pkt_time(1000, 32, buf); if( n == 32 && buf[0] == type && buf[1] == 'X' ){ for(int i=0; i