-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathatecc_config_zone.h
58 lines (43 loc) · 1.75 KB
/
atecc_config_zone.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#pragma once
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define BIT(n) (0x1U << (n))
// Configuration Zone addresses
#define CONFIG_ZONE_SLOT_CONFIG_OFFSET 20
#define CONFIG_ZONE_KEY_CONFIG_OFFSET 96
#define CONFIG_ZONE_COUNTER0_OFFSET 52
#define CONFIG_ZONE_COUNTER0_LENGTH 8
#define CONFIG_ZONE_COUNTER1_OFFSET 60
#define CONFIG_ZONE_COUNTER1_LENGTH 8
#define SLOT_CONFIG_READ_KEY_OFFSET 0
#define SLOT_CONFIG_READ_KEY_MASK (0b1111 << SLOT_CONFIG_READ_KEY_OFFSET)
#define SLOT_CONFIG_EXT_SIGN_ENABLED BIT(0)
#define SLOT_CONFIG_INT_SIGN_ENABLED BIT(1)
#define SLOT_CONFIG_ECDH_PERMITTED BIT(2)
#define SLOT_CONFIG_ECDH_MASTER_SECRET_MODE BIT(3)
#define SLOT_CONFIG_NO_MAC BIT(4)
#define SLOT_CONFIG_LIMITED_USE BIT(5)
#define SLOT_CONFIG_ENCRYPT_READ BIT(6)
#define SLOT_CONFIG_IS_SECRET BIT(7)
#define SLOT_CONFIG_WRITE_KEY_OFFSET 8
#define SLOT_CONFIG_WRITE_KEY_MASK (0b1111 << SLOT_CONFIG_WRITE_KEY_OFFSET)
#define SLOT_CONFIG_WRITE_CONFIG_OFFSET 12
#define SLOT_CONFIG_WRITE_CONFIG_MASK (0b1111 << SLOT_CONFIG_WRITE_CONFIG_OFFSET)
#define KEY_CONFIG_PRIVATE BIT(0)
#define KEY_CONFIG_PUB_INFO BIT(1)
#define KEY_CONFIG_KEY_TYPE_OFFSET 2
#define KEY_CONFIG_KEY_TYPE_MASK (0b111 << KEY_CONFIG_KEY_TYPE_OFFSET)
#define KEY_CONFIG_LOCKABLE BIT(5)
#define KEY_CONFIG_REQ_RANDOM BIT(6)
#define KEY_CONFIG_REQ_AUTH BIT(7)
#define KEY_CONFIG_AUTH_KEY_OFFSET 8
#define KEY_CONFIG_AUTH_KEY_MASK (0b1111 << KEY_CONFIG_AUTH_KEY_OFFSET)
#define KEY_CONFIG_INTRUSION_DISABLE BIT(12)
#define KEY_CONFIG_X509_ID_OFFSET 14
#define KEY_CONFIG_X509_ID_MASK (0b11 << KEY_CONFIG_X509_ID_OFFSET)
void dump_slot_config(uint16_t value);
void dump_key_config(uint16_t value);
uint16_t swap_bytes_16(uint16_t val);
uint32_t parse_counter_value(uint8_t data[4]);