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

Wyświetl plik

@ -10,12 +10,46 @@
#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
{
uint8_t hihuht[8];
int wat;
uint8_t cla;
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);

Wyświetl plik

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