kopia lustrzana https://github.com/conorpp/u2f-zero
				
				
				
			cleaned up the printing situation
							rodzic
							
								
									a809d9dc37
								
							
						
					
					
						commit
						86a56dade4
					
				| 
						 | 
				
			
			@ -15,9 +15,7 @@ SI_SBIT(SCL, SFR_P1, 3);               // and P1.3
 | 
			
		|||
SI_SBIT (LED1, SFR_P1, 4);             // LED green
 | 
			
		||||
 | 
			
		||||
// debug options
 | 
			
		||||
//#define U2F_PRINT
 | 
			
		||||
#define DBG_MESSAGE_SIZE 		30
 | 
			
		||||
#define DBG_MSG_COUNT			4
 | 
			
		||||
#define U2F_PRINT
 | 
			
		||||
 | 
			
		||||
#define KEYHANDLES_START 			(EEPROM_DATA_START + 30)
 | 
			
		||||
#define KEYHANDLES_COUNT			14
 | 
			
		||||
| 
						 | 
				
			
			@ -57,72 +55,10 @@ struct APP_DATA
 | 
			
		|||
 | 
			
		||||
extern data struct APP_DATA appdata;
 | 
			
		||||
 | 
			
		||||
struct debug_msg
 | 
			
		||||
{
 | 
			
		||||
	char buf[DBG_MESSAGE_SIZE];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void set_app_error(APP_ERROR_CODE ec);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define FIFO_HEADER(NAME, TYPE)\
 | 
			
		||||
void NAME##_fifo_init();\
 | 
			
		||||
int NAME##_fifo_append(TYPE* _data);\
 | 
			
		||||
int NAME##_fifo_get(TYPE* _data)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef U2F_PRINT
 | 
			
		||||
FIFO_HEADER(debug, struct debug_msg);
 | 
			
		||||
#else
 | 
			
		||||
#define debug_fifo_init(x)
 | 
			
		||||
#define debug_fifo_get(x)
 | 
			
		||||
#define debug_fifo_append(x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define FIFO_CREATE(NAME, TYPE, SIZE) \
 | 
			
		||||
static SI_SEGMENT_VARIABLE(NAME##MEM[SIZE],TYPE,SI_SEG_XDATA);\
 | 
			
		||||
volatile TYPE* NAME##WP;\
 | 
			
		||||
volatile TYPE* NAME##RP;\
 | 
			
		||||
void NAME##_fifo_init()\
 | 
			
		||||
{\
 | 
			
		||||
	NAME##WP = NAME##MEM;\
 | 
			
		||||
	NAME##RP = NAME##MEM;\
 | 
			
		||||
}\
 | 
			
		||||
int NAME##_fifo_append(TYPE* _data)\
 | 
			
		||||
{\
 | 
			
		||||
	volatile TYPE* next = 0;\
 | 
			
		||||
	next = NAME##WP + 1;\
 | 
			
		||||
	if (next == (NAME##MEM + SIZE))\
 | 
			
		||||
	{\
 | 
			
		||||
		next = NAME##MEM;\
 | 
			
		||||
	}\
 | 
			
		||||
	if (next == NAME##RP)\
 | 
			
		||||
	{\
 | 
			
		||||
		return -1;\
 | 
			
		||||
	}\
 | 
			
		||||
	else\
 | 
			
		||||
	{\
 | 
			
		||||
		*(NAME##WP) = *_data;\
 | 
			
		||||
		NAME##WP = next;\
 | 
			
		||||
		return 0;\
 | 
			
		||||
	}\
 | 
			
		||||
}\
 | 
			
		||||
int NAME##_fifo_get(TYPE* _data)\
 | 
			
		||||
{\
 | 
			
		||||
	if (NAME##RP == NAME##WP)\
 | 
			
		||||
	{\
 | 
			
		||||
		return -1;\
 | 
			
		||||
	}\
 | 
			
		||||
	*_data = *(NAME##RP);\
 | 
			
		||||
	NAME##RP = NAME##RP + 1;\
 | 
			
		||||
	if (NAME##RP == &NAME##MEM[SIZE])\
 | 
			
		||||
	{\
 | 
			
		||||
		NAME##RP = NAME##MEM;\
 | 
			
		||||
	}\
 | 
			
		||||
	return 0;\
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* APP_H_ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,42 +32,43 @@ SI_SBIT(LED_G, SFR_P1, 4);
 | 
			
		|||
 | 
			
		||||
void u2f_delay(int16_t ms);
 | 
			
		||||
 | 
			
		||||
void u2f_write_s(char* d);
 | 
			
		||||
 | 
			
		||||
void usb_write(uint8_t* buf, uint8_t len);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//void u2f_putv(uint32_t i, uint8_t base);
 | 
			
		||||
//
 | 
			
		||||
//#define u2f_put(i) u2f_putv(i,10)
 | 
			
		||||
//#define u2f_putx(i) u2f_putv(i,16)
 | 
			
		||||
 | 
			
		||||
#ifdef U2F_PRINT
 | 
			
		||||
 | 
			
		||||
	void dump_hex(uint8_t* hex, uint8_t len);
 | 
			
		||||
	void u2f_putb(uint8_t i);
 | 
			
		||||
	void u2f_putd(int16_t i);
 | 
			
		||||
	void u2f_putx(uint16_t i);
 | 
			
		||||
	void u2f_putl(int32_t i);
 | 
			
		||||
	void u2f_putlx(int32_t i);
 | 
			
		||||
 | 
			
		||||
#define u2f_prints(c) u2f_write_s(c)
 | 
			
		||||
	void u2f_prints(const char * str);
 | 
			
		||||
	void u2f_printb(const char * tag, uint8_t c, ...);
 | 
			
		||||
	void u2f_printd(const char * tag, uint8_t c, ...);
 | 
			
		||||
	void u2f_printx(const char * tag, uint8_t c, ...);
 | 
			
		||||
	void u2f_printl(const char * tag, uint8_t c, ...);
 | 
			
		||||
	void u2f_printlx(const char * tag, uint8_t c, ...);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef U2F_PRINT
 | 
			
		||||
 | 
			
		||||
	void u2f_print(char* fmt, ...);
 | 
			
		||||
 | 
			
		||||
	// not reentrant
 | 
			
		||||
	void dump_hex(uint8_t* hex, uint8_t len);
 | 
			
		||||
	void flush_messages();
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
	#define u2f_print(x)
 | 
			
		||||
	// #define dump_hex(x)
 | 
			
		||||
	void dump_hex(uint8_t* hex, uint8_t len);
 | 
			
		||||
	#define flush_messages(x)
 | 
			
		||||
 | 
			
		||||
	#define u2f_printx(x)
 | 
			
		||||
	#define u2f_printb(x)
 | 
			
		||||
	#define u2f_printlx(x)
 | 
			
		||||
	#define u2f_printl(x)
 | 
			
		||||
	#define u2f_printd(x)
 | 
			
		||||
	#define u2f_prints(x)
 | 
			
		||||
 | 
			
		||||
	#define u2f_putx(x)
 | 
			
		||||
	#define u2f_putb(x)
 | 
			
		||||
	#define u2f_putl(x)
 | 
			
		||||
	#define u2f_putlx(x)
 | 
			
		||||
 | 
			
		||||
	#define putf(x)
 | 
			
		||||
	#define dump_hex(x)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,7 +140,6 @@ int8_t atecc_send_recv(uint8_t cmd, uint8_t p1, uint16_t p2,
 | 
			
		|||
		if (errors > 5)
 | 
			
		||||
		{
 | 
			
		||||
			u2f_printb("fail recv ", 1,appdata.error);
 | 
			
		||||
			flush_messages();
 | 
			
		||||
		}
 | 
			
		||||
		switch(appdata.error)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,51 +16,18 @@ void u2f_delay(uint16_t ms) {
 | 
			
		|||
	{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void usb_write(uint8_t* buf, uint8_t len)
 | 
			
		||||
{
 | 
			
		||||
	int16_t ec;
 | 
			
		||||
	if (USB_STATUS_OK != (ec=USBD_Write(EP1IN, buf, len, false)))
 | 
			
		||||
	{
 | 
			
		||||
		u2f_printd("USB error",1, -ec);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef U2F_PRINT
 | 
			
		||||
 | 
			
		||||
xdata struct debug_msg dbg;
 | 
			
		||||
 | 
			
		||||
void u2f_print(char* fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	struct debug_msg dbg;
 | 
			
		||||
	va_list args;
 | 
			
		||||
 | 
			
		||||
	va_start(args,fmt);
 | 
			
		||||
	if(vsprintf(dbg.buf, fmt, args) > sizeof(struct debug_msg)-1)
 | 
			
		||||
	{
 | 
			
		||||
		u2f_write_s("vsprintf stack corrupt!\r\n");
 | 
			
		||||
	}
 | 
			
		||||
	va_end(args);
 | 
			
		||||
	debug_fifo_append(&dbg);
 | 
			
		||||
}
 | 
			
		||||
// not reentrant
 | 
			
		||||
void dump_hex(uint8_t* hex, uint8_t len)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t i;
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	for (i=0 ; i < len ; i++)
 | 
			
		||||
	{
 | 
			
		||||
		u2f_print("%02bx",hex[i]);
 | 
			
		||||
		//if ((i%4) == 3)
 | 
			
		||||
		//	u2f_print("\r\n");
 | 
			
		||||
		flush_messages();
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	u2f_print("\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void flush_messages()
 | 
			
		||||
{
 | 
			
		||||
	while(debug_fifo_get(&dbg) == 0)
 | 
			
		||||
	{
 | 
			
		||||
		u2f_write_s(dbg.buf);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void dump_hex(uint8_t* hex, uint8_t len)
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +49,7 @@ void putf(char c)
 | 
			
		|||
	for (i=0; i<200; i++){}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_write_s(char* d)
 | 
			
		||||
void u2f_prints(char* d)
 | 
			
		||||
{
 | 
			
		||||
	static SI_SEG_DATA uint16_t i;
 | 
			
		||||
	while(*d)
 | 
			
		||||
| 
						 | 
				
			
			@ -158,106 +125,105 @@ char * __int2str16(int32_t i)
 | 
			
		|||
 | 
			
		||||
void u2f_putb(uint8_t i)
 | 
			
		||||
{
 | 
			
		||||
    u2f_write_s(xint2str((uint32_t)i));
 | 
			
		||||
    u2f_prints(xint2str((uint32_t)i));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_putd(int16_t i)
 | 
			
		||||
{
 | 
			
		||||
    u2f_write_s(dint2str((int32_t)i));
 | 
			
		||||
	u2f_prints(dint2str((int32_t)i));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_putx(uint16_t i)
 | 
			
		||||
{
 | 
			
		||||
    u2f_write_s(xint2str((int32_t)i));
 | 
			
		||||
	u2f_prints(xint2str((int32_t)i));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_putl(int32_t i)
 | 
			
		||||
{
 | 
			
		||||
	u2f_write_s(dint2str((int32_t)i));
 | 
			
		||||
	u2f_prints(dint2str((int32_t)i));
 | 
			
		||||
}
 | 
			
		||||
void u2f_putlx(int32_t i)
 | 
			
		||||
{
 | 
			
		||||
	u2f_write_s(xint2str((int32_t)i));
 | 
			
		||||
	u2f_prints(xint2str((int32_t)i));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_printd(const char * tag, uint8_t c, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    u2f_write_s(tag);
 | 
			
		||||
	u2f_prints(tag);
 | 
			
		||||
    va_start(args,c);
 | 
			
		||||
    while(c--)
 | 
			
		||||
    {
 | 
			
		||||
        u2f_putd(va_arg(args, int16_t));
 | 
			
		||||
        u2f_write_s(" ");
 | 
			
		||||
        u2f_prints(" ");
 | 
			
		||||
    }
 | 
			
		||||
    u2f_write_s("\r\n");
 | 
			
		||||
    u2f_prints("\r\n");
 | 
			
		||||
    va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_printl(const char * tag, uint8_t c, ...)
 | 
			
		||||
{
 | 
			
		||||
    va_list args;
 | 
			
		||||
    u2f_write_s(tag);
 | 
			
		||||
    u2f_prints(tag);
 | 
			
		||||
    va_start(args,c);
 | 
			
		||||
    while(c--)
 | 
			
		||||
    {
 | 
			
		||||
        u2f_putl(va_arg(args, int32_t));
 | 
			
		||||
        u2f_write_s(" ");
 | 
			
		||||
        u2f_prints(" ");
 | 
			
		||||
    }
 | 
			
		||||
    u2f_write_s("\r\n");
 | 
			
		||||
    u2f_prints("\r\n");
 | 
			
		||||
    va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_printx(const char * tag, uint8_t c, ...)
 | 
			
		||||
{
 | 
			
		||||
    va_list args;
 | 
			
		||||
    u2f_write_s(tag);
 | 
			
		||||
    u2f_prints(tag);
 | 
			
		||||
    va_start(args,c);
 | 
			
		||||
    while(c--)
 | 
			
		||||
    {
 | 
			
		||||
        u2f_putx(va_arg(args, uint16_t));
 | 
			
		||||
        u2f_write_s(" ");
 | 
			
		||||
        u2f_prints(" ");
 | 
			
		||||
    }
 | 
			
		||||
    u2f_write_s("\r\n");
 | 
			
		||||
    u2f_prints("\r\n");
 | 
			
		||||
    va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_printb(const char * tag, uint8_t c, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
    u2f_write_s(tag);
 | 
			
		||||
    u2f_prints(tag);
 | 
			
		||||
    va_start(args,c);
 | 
			
		||||
    while(c--)
 | 
			
		||||
    {
 | 
			
		||||
        u2f_putb(va_arg(args, uint8_t));
 | 
			
		||||
        u2f_write_s(" ");
 | 
			
		||||
        u2f_prints(" ");
 | 
			
		||||
    }
 | 
			
		||||
    u2f_write_s("\r\n");
 | 
			
		||||
    u2f_prints("\r\n");
 | 
			
		||||
    va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void u2f_printlx(const char * tag, uint8_t c, ...)
 | 
			
		||||
{
 | 
			
		||||
    va_list args;
 | 
			
		||||
    u2f_write_s(tag);
 | 
			
		||||
    u2f_prints(tag);
 | 
			
		||||
    va_start(args,c);
 | 
			
		||||
    while(c--)
 | 
			
		||||
    {
 | 
			
		||||
        u2f_putlx(va_arg(args, int32_t));
 | 
			
		||||
        u2f_write_s(" ");
 | 
			
		||||
        u2f_prints(" ");
 | 
			
		||||
    }
 | 
			
		||||
    u2f_write_s("\r\n");
 | 
			
		||||
    u2f_prints("\r\n");
 | 
			
		||||
    va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void usb_write(uint8_t* buf, uint8_t len)
 | 
			
		||||
{
 | 
			
		||||
	int16_t ec;
 | 
			
		||||
	if (USB_STATUS_OK != (ec=USBD_Write(EP1IN, buf, len, false)))
 | 
			
		||||
	{
 | 
			
		||||
		u2f_printd("USB error",1, -ec);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,52 +18,20 @@
 | 
			
		|||
data struct APP_DATA appdata;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef U2F_PRINT
 | 
			
		||||
 | 
			
		||||
	FIFO_CREATE(debug,struct debug_msg,  DBG_MSG_COUNT)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void init(struct APP_DATA* ap)
 | 
			
		||||
{
 | 
			
		||||
	memset(ap,0, sizeof(struct APP_DATA));
 | 
			
		||||
	debug_fifo_init();
 | 
			
		||||
	u2f_hid_init();
 | 
			
		||||
	smb_init();
 | 
			
		||||
	atecc_idle();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void listen_for_pkt(struct APP_DATA* ap)
 | 
			
		||||
{
 | 
			
		||||
	USBD_Read(EP1OUT, ap->hidmsgbuf, sizeof(ap->hidmsgbuf), true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void set_app_error(APP_ERROR_CODE ec)
 | 
			
		||||
{
 | 
			
		||||
	appdata.state = APP_ERROR;
 | 
			
		||||
	appdata.error = ec;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//uint8_t readByte (uint16_t addr)
 | 
			
		||||
//{
 | 
			
		||||
//
 | 
			
		||||
//	uint8_t code * pread;               // FLASH read pointer
 | 
			
		||||
//	uint8_t byte;
 | 
			
		||||
//	DISABLE_INTERUPTS();
 | 
			
		||||
//   pread = (uint8_t code *) addr;
 | 
			
		||||
//
 | 
			
		||||
//   byte = *pread;                      // Read the byte
 | 
			
		||||
//
 | 
			
		||||
//   ENABLE_INTERUPTS();
 | 
			
		||||
//
 | 
			
		||||
//   return byte;
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int8_t test_eeprom()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,17 +47,9 @@ int16_t main(void) {
 | 
			
		|||
	data uint16_t ms_wink;
 | 
			
		||||
	data uint8_t winks = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	uint8_t b = 0x66;
 | 
			
		||||
	uint16_t  d = 7777;
 | 
			
		||||
	uint32_t l = 0x12345678;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	enter_DefaultMode_from_RESET();
 | 
			
		||||
	init(&appdata);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	// STDIO library requires TI to print
 | 
			
		||||
	SCON0_TI = 1;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -98,9 +58,6 @@ int16_t main(void) {
 | 
			
		|||
 | 
			
		||||
	u2f_prints("U2F ZERO\r\n");
 | 
			
		||||
 | 
			
		||||
	u2f_printb("b:",1,b);
 | 
			
		||||
	u2f_printd("d:",1,d);
 | 
			
		||||
	u2f_printlx("lx:",1,l);
 | 
			
		||||
	run_tests();
 | 
			
		||||
	test_eeprom();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +74,7 @@ int16_t main(void) {
 | 
			
		|||
		{
 | 
			
		||||
			if (!USBD_EpIsBusy(EP1OUT) && !USBD_EpIsBusy(EP1IN))
 | 
			
		||||
			{
 | 
			
		||||
				listen_for_pkt(&appdata);
 | 
			
		||||
				USBD_Read(EP1OUT, appdata.hidmsgbuf, sizeof(appdata.hidmsgbuf), true);
 | 
			
		||||
				u2f_prints("read added\r\n");
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +107,6 @@ int16_t main(void) {
 | 
			
		|||
				break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		flush_messages();
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,13 +44,9 @@ static struct hid_layer_param
 | 
			
		|||
	// total length of response in bytes
 | 
			
		||||
	uint16_t res_len;
 | 
			
		||||
 | 
			
		||||
#ifndef U2F_PRINT
 | 
			
		||||
	#define BUFFER_SIZE 300
 | 
			
		||||
	uint8_t buffer[BUFFER_SIZE];
 | 
			
		||||
#else
 | 
			
		||||
	#define BUFFER_SIZE 70
 | 
			
		||||
	uint8_t buffer[BUFFER_SIZE];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} hid_layer;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,40 +64,29 @@ static int test_sha()
 | 
			
		|||
static void slot_dump(void* slot)
 | 
			
		||||
{
 | 
			
		||||
	struct atecc_slot_config* a = (struct atecc_slot_config*) slot;
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	u2f_print("    readkey %bx\r\n", a->readkey);
 | 
			
		||||
	if (a->nomac) u2f_print("    nomac\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	if (a->limiteduse) u2f_print("    limiteduse\r\n");
 | 
			
		||||
	if (a->encread) u2f_print("    encread\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	if (a->secret) u2f_print("    secret\r\n");
 | 
			
		||||
	u2f_print("    writekey %bx\r\n", a->writekey);
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	u2f_print("    writeconfig %bx\r\n", a->writeconfig);
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	u2f_printb("    readkey ",1,a->readkey);
 | 
			
		||||
	if (a->nomac) u2f_prints("    nomac\r\n");
 | 
			
		||||
	if (a->limiteduse) u2f_prints("    limiteduse\r\n");
 | 
			
		||||
	if (a->encread) u2f_prints("    encread\r\n");
 | 
			
		||||
	if (a->secret) u2f_prints("    secret\r\n");
 | 
			
		||||
	u2f_printb("    writekey ", 1,a->writekey);
 | 
			
		||||
	u2f_printb("    writeconfig ",1, a->writeconfig);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void key_dump(void* slot)
 | 
			
		||||
{
 | 
			
		||||
	struct atecc_key_config* a = (struct atecc_slot_config*) slot;
 | 
			
		||||
	flush_messages();
 | 
			
		||||
 | 
			
		||||
	if (a->private) u2f_print("    private\r\n");
 | 
			
		||||
	if (a->pubinfo) u2f_print("    pubinfo\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	u2f_print("    keytype %bx\r\n", a->keytype);
 | 
			
		||||
	if (a->lockable) u2f_print("    lockable\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	if (a->reqrandom) u2f_print("    reqrandom\r\n");
 | 
			
		||||
	if (a->reqauth) u2f_print("    reqauth\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	u2f_print("    authkey %bx\r\n", a->authkey);
 | 
			
		||||
	if (a->intrusiondisable) u2f_print("    intrusiondisable\r\n");
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	if (a->rfu) u2f_print("    rfu\r\n");
 | 
			
		||||
	u2f_print("    x509id %bx\r\n", a->x509id);
 | 
			
		||||
	flush_messages();
 | 
			
		||||
	if (a->private) u2f_prints("    private\r\n");
 | 
			
		||||
	if (a->pubinfo) u2f_prints("    pubinfo\r\n");
 | 
			
		||||
	u2f_printb("    keytype  ", 1,a->keytype);
 | 
			
		||||
	if (a->lockable) u2f_prints("    lockable\r\n");
 | 
			
		||||
	if (a->reqrandom) u2f_prints("    reqrandom\r\n");
 | 
			
		||||
	if (a->reqauth) u2f_prints("    reqauth\r\n");
 | 
			
		||||
	u2f_printb("    authkey ",1, a->authkey);
 | 
			
		||||
	if (a->intrusiondisable) u2f_prints("    intrusiondisable\r\n");
 | 
			
		||||
	if (a->rfu) u2f_prints("    rfu\r\n");
 | 
			
		||||
	u2f_printb("    x509id ",1, a->x509id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int test_atecc_eeprom()
 | 
			
		||||
| 
						 | 
				
			
			@ -151,11 +140,11 @@ static int test_atecc_eeprom()
 | 
			
		|||
			ATECC_RW_CONFIG, 5,NULL,0,
 | 
			
		||||
			buf,sizeof(buf), &res);
 | 
			
		||||
 | 
			
		||||
	u2f_print("-- slot 0 --\r\n");
 | 
			
		||||
	u2f_prints("-- slot 0 --\r\n");
 | 
			
		||||
	dump_hex(res.buf,2);
 | 
			
		||||
	slot_dump(res.buf);
 | 
			
		||||
 | 
			
		||||
	u2f_print("-- slot 1 --\r\n");
 | 
			
		||||
	u2f_prints("-- slot 1 --\r\n");
 | 
			
		||||
	dump_hex(res.buf+2,2);
 | 
			
		||||
	slot_dump(res.buf+2);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -168,11 +157,11 @@ static int test_atecc_eeprom()
 | 
			
		|||
			ATECC_RW_CONFIG, 24,NULL,0,
 | 
			
		||||
			buf,sizeof(buf), &res);
 | 
			
		||||
 | 
			
		||||
	u2f_print("-- key 0 --\r\n");
 | 
			
		||||
	u2f_prints("-- key 0 --\r\n");
 | 
			
		||||
	dump_hex(res.buf,2);
 | 
			
		||||
	key_dump(res.buf);
 | 
			
		||||
 | 
			
		||||
	u2f_print("-- key 1 --\r\n");
 | 
			
		||||
	u2f_prints("-- key 1 --\r\n");
 | 
			
		||||
	dump_hex(res.buf+2,2);
 | 
			
		||||
	key_dump(res.buf+2);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +193,7 @@ int test_key_signing()
 | 
			
		|||
 | 
			
		||||
	dump_hex(res.buf, res.len);
 | 
			
		||||
 | 
			
		||||
	u2f_print("sig:\r\n");
 | 
			
		||||
	u2f_prints("sig:\r\n");
 | 
			
		||||
 | 
			
		||||
	atecc_send_recv(ATECC_CMD_SIGN,
 | 
			
		||||
			ATECC_SIGN_EXTERNAL, 0, NULL, 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -296,7 +285,7 @@ void run_tests()
 | 
			
		|||
	if (rc == 0)
 | 
			
		||||
		PRINT("--- SHA TEST SUCCESS ---\r\n");
 | 
			
		||||
	else
 | 
			
		||||
		PRINT("--- SHA TEST FAILED %d ---\r\n",rc);
 | 
			
		||||
		PRINT("--- SHA TEST FAILED ---\r\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_ATECC_EEPROM
 | 
			
		||||
| 
						 | 
				
			
			@ -305,7 +294,7 @@ void run_tests()
 | 
			
		|||
	if (rc == 0)
 | 
			
		||||
		PRINT("--- EEPROM TEST SUCCESS ---\r\n");
 | 
			
		||||
	else
 | 
			
		||||
		PRINT("--- EEPROM TEST FAILED %d ---\r\n",rc);
 | 
			
		||||
		PRINT("--- EEPROM TEST FAILED ---\r\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_KEY_SIGNING
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +303,7 @@ void run_tests()
 | 
			
		|||
	if (rc == 0)
 | 
			
		||||
		PRINT("--- KEY SIGNING SUCCESS ---\r\n");
 | 
			
		||||
	else
 | 
			
		||||
		PRINT("--- KEY SIGNING FAILED %d ---\r\n",rc);
 | 
			
		||||
		PRINT("--- KEY SIGNING FAILED ---\r\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef TEST_EFM8UB1_EEPROM
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,11 +8,11 @@
 | 
			
		|||
#ifndef TESTS_H_
 | 
			
		||||
#define TESTS_H_
 | 
			
		||||
 | 
			
		||||
#define ENABLE_TESTS
 | 
			
		||||
//#define ENABLE_TESTS
 | 
			
		||||
 | 
			
		||||
//#define TEST_SHA
 | 
			
		||||
//#define TEST_ATECC_EEPROM
 | 
			
		||||
#define TEST_EFM8UB1_EEPROM
 | 
			
		||||
//#define TEST_EFM8UB1_EEPROM
 | 
			
		||||
//#define TEST_KEY_SIGNING		// requires key and locked eeprom
 | 
			
		||||
 | 
			
		||||
#ifdef ENABLE_TESTS
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue