5 #include "sw/device/silicon_creator/lib/cert/cbor.h"
9 static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
10 "CBOR library assumes that the system is little endian.");
22 Cbor_Arg_Type_U8 = 24,
23 Cbor_Arg_Type_U16 = 25,
24 Cbor_Arg_Type_U32 = 26,
25 Cbor_Arg_Type_U64 = 27,
28 size_t cbor_calc_arg_size(
const uint64_t value) {
31 }
else if (value <= 0xff) {
33 }
else if (value <= 0xffff) {
35 }
else if (value <= 0xffffffff) {
42 static uint8_t cbor_calc_additional_info(
const uint64_t value) {
44 return (uint8_t)value;
45 }
else if (value <= 0xff) {
46 return Cbor_Arg_Type_U8;
47 }
else if (value <= 0xffff) {
48 return Cbor_Arg_Type_U16;
49 }
else if (value <= 0xffffffff) {
50 return Cbor_Arg_Type_U32;
52 return Cbor_Arg_Type_U64;
56 size_t cbor_calc_int_size(
const int64_t value) {
58 return cbor_calc_arg_size((uint64_t)(-(value + 1)));
60 return cbor_calc_arg_size((uint64_t)value);
63 size_t cbor_write_raw_bytes(
cbor_out_t *p,
const uint8_t *raw,
64 const size_t raw_size) {
66 memcpy(p->start + p->offset, raw, raw_size);
67 p->offset += raw_size;
73 static size_t cbor_write_type(
cbor_out_t *p, cbor_type_t type,
75 const size_t sz = cbor_calc_arg_size(arg);
78 const uint8_t add_info = cbor_calc_additional_info(arg);
79 const uint8_t *parg = (uint8_t *)&arg + sz;
81 p->start[p->offset++] = ((uint8_t)(type << 5) | add_info);
82 for (
size_t i = 0; i < sz; ++i)
83 p->start[p->offset++] = *(--parg);
89 size_t cbor_write_int(
cbor_out_t *p,
const int64_t value) {
91 return cbor_write_type(p, Cbor_Type_Sint, (uint64_t)(-(value + 1)));
93 return cbor_write_type(p, Cbor_Type_Uint, (uint64_t)value);
96 size_t cbor_write_bstr_header(
cbor_out_t *p,
const size_t bstr_size) {
97 return cbor_write_type(p, Cbor_Type_Bstr, bstr_size);
100 size_t cbor_write_tstr_header(
cbor_out_t *p,
const size_t tstr_size) {
101 return cbor_write_type(p, Cbor_Type_Tstr, tstr_size);
104 size_t cbor_write_array_header(
cbor_out_t *p,
const size_t num_elements) {
105 return cbor_write_type(p, Cbor_Type_Array, num_elements);
108 size_t cbor_write_map_header(
cbor_out_t *p,
const size_t num_pairs) {
109 return cbor_write_type(p, Cbor_Type_Map, num_pairs);