cleanup, starting u2f

vtcsec_summit
conor 2016-02-24 22:06:31 -05:00
rodzic 6538dd36da
commit 03544ba25f
3 zmienionych plików z 77 dodań i 44 usunięć

Wyświetl plik

@ -8,73 +8,73 @@
#ifndef ATECC508A_H_ #ifndef ATECC508A_H_
#define ATECC508A_H_ #define ATECC508A_H_
#define ATECC508A_ADDR 0xc0 #define ATECC508A_ADDR 0xc0
#define ATECC_CMD_COUNTER 0x24 #define ATECC_CMD_COUNTER 0x24
#define ATECC_COUNTER0 0 #define ATECC_COUNTER0 0
#define ATECC_COUNTER1 1 #define ATECC_COUNTER1 1
#define ATECC_COUNTER_READ 0 #define ATECC_COUNTER_READ 0
#define ATECC_COUNTER_INC 1 #define ATECC_COUNTER_INC 1
#define ATECC_CMD_RNG 0x1B #define ATECC_CMD_RNG 0x1B
#define ATECC_RNG_P1 0 #define ATECC_RNG_P1 0
#define ATECC_RNG_P2 0 #define ATECC_RNG_P2 0
#define ATECC_CMD_SHA 0x47 #define ATECC_CMD_SHA 0x47
// P1 // P1
#define ATECC_SHA_START 0x0 #define ATECC_SHA_START 0x0
#define ATECC_SHA_UPDATE 0x1 #define ATECC_SHA_UPDATE 0x1
#define ATECC_SHA_END 0x2 #define ATECC_SHA_END 0x2
#define ATECC_CMD_READ 0x02 #define ATECC_CMD_READ 0x02
// P1 // P1
#define ATECC_RW_CONFIG 0x00 #define ATECC_RW_CONFIG 0x00
#define ATECC_RW_OTP 0x01 #define ATECC_RW_OTP 0x01
#define ATECC_RW_DATA 0x02 #define ATECC_RW_DATA 0x02
#define ATECC_RW_EXT 0x80 #define ATECC_RW_EXT 0x80
// P2 read addr // P2 read addr
#define ATECC_CMD_WRITE 0x12 #define ATECC_CMD_WRITE 0x12
// P1 same for read // P1 same for read
// P2 write addr // P2 write addr
#define ATECC_EEPROM_SLOT(x) (0x5 + ((x)>>1)) #define ATECC_EEPROM_SLOT(x) (0x5 + ((x)>>1))
#define ATECC_EEPROM_SLOT_OFFSET(x) ( (x) & 1 ? 2 : 0 ) #define ATECC_EEPROM_SLOT_OFFSET(x) ( (x) & 1 ? 2 : 0 )
#define ATECC_EEPROM_SLOT_SIZE 0x2 #define ATECC_EEPROM_SLOT_SIZE 0x2
#define ATECC_EEPROM_KEY(x) (24 + ((x)>>1)) #define ATECC_EEPROM_KEY(x) (24 + ((x)>>1))
#define ATECC_EEPROM_KEY_OFFSET(x) ( (x) & 1 ? 2 : 0 ) #define ATECC_EEPROM_KEY_OFFSET(x) ( (x) & 1 ? 2 : 0 )
#define ATECC_EEPROM_KEY_SIZE 0x2 #define ATECC_EEPROM_KEY_SIZE 0x2
#define ATECC_EEPROM_B2A(b) ((b)>>2) #define ATECC_EEPROM_B2A(b) ((b)>>2)
#define ATECC_EEPROM_B2O(b) ((b)&0x3) #define ATECC_EEPROM_B2O(b) ((b)&0x3)
#define ATECC_CMD_LOCK 0x17 #define ATECC_CMD_LOCK 0x17
// P1 flags // P1 flags
#define ATECC_LOCK_CONFIG 0x00 #define ATECC_LOCK_CONFIG 0x00
#define ATECC_LOCK_DATA_OTP 0x01 #define ATECC_LOCK_DATA_OTP 0x01
#define ATECC_LOCK_SLOT 0x02 #define ATECC_LOCK_SLOT 0x02
#define ATECC_LOCK_SLOTNUM(x) (((x)&0xf)<<2) #define ATECC_LOCK_SLOTNUM(x) (((x)&0xf)<<2)
#define ATECC_LOCK_IGNORE_SUMMARY 0x08 #define ATECC_LOCK_IGNORE_SUMMARY 0x08
// P2 is CRC or 0 // P2 is CRC or 0
#define ATECC_CMD_GENKEY 0x40 #define ATECC_CMD_GENKEY 0x40
// P1 // P1
#define ATECC_GENKEY_PRIVATE 0x04 #define ATECC_GENKEY_PRIVATE 0x04
#define ATECC_GENKEY_PUBDIGEST 0x08 #define ATECC_GENKEY_PUBDIGEST 0x08
#define ATECC_GENKEY_PUBDIGEST2 0x10 #define ATECC_GENKEY_PUBDIGEST2 0x10
// P2 is keyid // P2 is keyid
#define ATECC_CMD_NONCE 0x16 #define ATECC_CMD_NONCE 0x16
// P1 // P1
#define ATECC_NONCE_RNG_UPDATE 0x0 #define ATECC_NONCE_RNG_UPDATE 0x0
#define ATECC_NONCE_TEMP_UPDATE 0x3 #define ATECC_NONCE_TEMP_UPDATE 0x3
// P2 is 0 // P2 is 0
#define ATECC_CMD_SIGN 0x41 #define ATECC_CMD_SIGN 0x41
// P1 // P1
#define ATECC_SIGN_INTERNAL 0x00 #define ATECC_SIGN_INTERNAL 0x00
#define ATECC_SIGN_EXTERNAL 0x80 #define ATECC_SIGN_EXTERNAL 0x80
// P2 is keyid // P2 is keyid
struct atecc_response struct atecc_response

Wyświetl plik

@ -10,12 +10,46 @@
#include <stdint.h> #include <stdint.h>
#define SW_NO_ERROR 0x00
#define SW_CONDITIONS_NOT_SATISFIED 0x01
#define SW_WRONG_DATA 0x02
#define U2F_EC_FMT_UNCOMPRESSED 0x04
#define U2F_EC_POINT_SIZE 32
#define U2F_EC_PUBKEY_SIZE 65
// U2F native commands
#define U2F_REGISTER 0x01
#define U2F_AUTHENTICATE 0x02
#define U2F_VERSION 0x03
#define U2F_VENDOR_FIRST 0xc0
#define U2F_VENDOR_LAST 0xff
// U2F_CMD_REGISTER command defines
#define U2F_REGISTER_ID 0x05
#define U2F_REGISTER_HASH_ID 0x00
struct u2f_message struct u2f_message
{ {
uint8_t hihuht[8]; uint8_t cla;
int wat; uint8_t ins;
uint8_t p1;
uint8_t p2;
uint8_t LC1;
uint8_t LC2;
uint8_t LC3;
}; };
struct u2f_ec_point
{
uint8_t fmt;
uint8_t x[U2F_EC_POINT_SIZE];
uint8_t y[U2F_EC_POINT_SIZE];
};
int u2f_request(struct u2f_message* req, struct u2f_message* res); int u2f_request(struct u2f_message* req, struct u2f_message* res);

Wyświetl plik

@ -76,7 +76,6 @@ int8_t test_ecc508a()
int16_t main(void) { int16_t main(void) {
uint8_t zeros[] = {0,0,0,0};
data uint8_t i = 0; data uint8_t i = 0;
data uint16_t last_ms = get_ms(); data uint16_t last_ms = get_ms();
data uint16_t ms_heart; data uint16_t ms_heart;