CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
t1_block.h
Go to the documentation of this file.
1
23
24#pragma once
25#include <stdbool.h>
26#include <stddef.h>
27#include <stdint.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
34#define T1_INF_MAX 254
35
37#define T1_DEFAULT_IFSC 32
38
40#define T1_LEN_RESERVED 0xFF
41
48
50typedef enum {
51 T1_R_OK = 0x00,
52 T1_R_EDC_ERR = 0x01,
55
67
69typedef struct {
70 uint8_t nad;
71 uint8_t pcb;
73 /* I-block fields. */
74 uint8_t i_ns;
75 bool i_more;
76 /* R-block fields. */
77 uint8_t r_nr;
79 /* S-block fields. */
81 /* Payload. */
82 const uint8_t *inf;
83 uint8_t inf_len;
84 /* EDC validation. */
85 bool edc_ok;
86 bool use_crc;
88
100
111uint8_t t1_lrc(const uint8_t *buf, size_t len);
112
118uint16_t t1_crc(const uint8_t *buf, size_t len);
119
132t1_status_t t1_block_encode_i(uint8_t nad, uint8_t ns, bool more,
133 const uint8_t *inf, uint8_t inf_len,
134 bool use_crc,
135 uint8_t *out, size_t out_cap, size_t *out_len);
136
147t1_status_t t1_block_encode_r(uint8_t nad, uint8_t nr, t1_r_error_t err,
148 bool use_crc,
149 uint8_t *out, size_t out_cap, size_t *out_len);
150
162t1_status_t t1_block_encode_s(uint8_t nad, t1_s_subtype_t subtype,
163 const uint8_t *inf, uint8_t inf_len,
164 bool use_crc,
165 uint8_t *out, size_t out_cap, size_t *out_len);
166
178t1_status_t t1_block_decode(const uint8_t *buf, size_t buf_len, bool use_crc,
179 t1_block_t *out);
180
181#ifdef __cplusplus
182}
183#endif
184
Decoded block. INF points into the buffer supplied to t1_block_decode.
Definition t1_block.h:69
uint8_t inf_len
Definition t1_block.h:83
uint8_t pcb
Definition t1_block.h:71
bool use_crc
Definition t1_block.h:86
uint8_t i_ns
Definition t1_block.h:74
const uint8_t * inf
Definition t1_block.h:82
t1_block_kind_t kind
Definition t1_block.h:72
uint8_t r_nr
Definition t1_block.h:77
uint8_t nad
Definition t1_block.h:70
bool i_more
Definition t1_block.h:75
t1_r_error_t r_err
Definition t1_block.h:78
t1_s_subtype_t s_subtype
Definition t1_block.h:80
bool edc_ok
Definition t1_block.h:85
t1_status_t t1_block_encode_r(uint8_t nad, uint8_t nr, t1_r_error_t err, bool use_crc, uint8_t *out, size_t out_cap, size_t *out_len)
Encode an R-block.
Definition t1_block.cpp:103
t1_s_subtype_t
S-block subtype (PCB bits 5-0).
Definition t1_block.h:57
@ T1_S_IFS_REQ
Definition t1_block.h:59
@ T1_S_RESYNCH_REQ
Definition t1_block.h:58
@ T1_S_ABORT_RESP
Definition t1_block.h:64
@ T1_S_WTX_RESP
Definition t1_block.h:65
@ T1_S_RESYNCH_RESP
Definition t1_block.h:62
@ T1_S_ABORT_REQ
Definition t1_block.h:60
@ T1_S_IFS_RESP
Definition t1_block.h:63
@ T1_S_WTX_REQ
Definition t1_block.h:61
t1_block_kind_t
T=1 block taxonomy.
Definition t1_block.h:43
@ T1_BLOCK_S
Definition t1_block.h:46
@ T1_BLOCK_R
Definition t1_block.h:45
@ T1_BLOCK_I
Definition t1_block.h:44
t1_r_error_t
R-block error indicator (PCB bits 1-0).
Definition t1_block.h:50
@ T1_R_OK
Definition t1_block.h:51
@ T1_R_EDC_ERR
Definition t1_block.h:52
@ T1_R_OTHER_ERR
Definition t1_block.h:53
t1_status_t t1_block_encode_s(uint8_t nad, t1_s_subtype_t subtype, const uint8_t *inf, uint8_t inf_len, bool use_crc, uint8_t *out, size_t out_cap, size_t *out_len)
Encode an S-block.
Definition t1_block.cpp:123
uint16_t t1_crc(const uint8_t *buf, size_t len)
Compute the ISO/IEC 13239 CRC-16 of a buffer (polynomial 0x1021, initial value 0xFFFF,...
Definition t1_block.cpp:41
t1_status_t
Result of t1_block_decode / t1_block_encode.
Definition t1_block.h:90
@ T1_ERR_NULL
Definition t1_block.h:98
@ T1_OK
Definition t1_block.h:91
@ T1_ERR_EDC
Definition t1_block.h:95
@ T1_ERR_OUT_BUF
Definition t1_block.h:97
@ T1_ERR_PCB
Definition t1_block.h:96
@ T1_ERR_INF_TOO_BIG
Definition t1_block.h:94
@ T1_ERR_SHORT
Definition t1_block.h:92
@ T1_ERR_LEN
Definition t1_block.h:93
uint8_t t1_lrc(const uint8_t *buf, size_t len)
Compute the longitudinal redundancy check (LRC) of a buffer.
Definition t1_block.cpp:33
t1_status_t t1_block_encode_i(uint8_t nad, uint8_t ns, bool more, const uint8_t *inf, uint8_t inf_len, bool use_crc, uint8_t *out, size_t out_cap, size_t *out_len)
Encode an I-block.
Definition t1_block.cpp:75
t1_status_t t1_block_decode(const uint8_t *buf, size_t buf_len, bool use_crc, t1_block_t *out)
Decode a T=1 block.
Definition t1_block.cpp:147