38 QCBOREncode_OpenArray(enc);
40 QCBOREncode_AddUInt64(enc, obj->
scheme);
46 QCBOREncode_OpenArray(enc);
51 QCBOREncode_AddUInt64(enc, ipn->
svc_num);
54 QCBOREncode_AddUInt64(enc, ipn->
auth_num);
55 QCBOREncode_AddUInt64(enc, ipn->
node_num);
56 QCBOREncode_AddUInt64(enc, ipn->
svc_num);
62 QCBOREncode_CloseArray(enc);
68 QCBOREncode_AddEncoded(enc, (UsefulBufC) { raw->
ptr, raw->
len });
73 QCBOREncode_CloseArray(enc);
77static const uint8_t zero_crc[] = { 0, 0, 0, 0 };
81 const size_t begin = QCBOREncode_Tell(enc);
82 QCBOREncode_OpenArray(enc);
84 QCBOREncode_AddUInt64(enc, blk->version);
85 QCBOREncode_AddUInt64(enc, blk->flags);
86 QCBOREncode_AddUInt64(enc, blk->crc_type);
92 QCBOREncode_OpenArray(enc);
93 QCBOREncode_AddUInt64(enc, blk->timestamp.bundle_creation_time);
94 QCBOREncode_AddUInt64(enc, blk->timestamp.seq_num);
95 QCBOREncode_CloseArray(enc);
97 QCBOREncode_AddUInt64(enc, blk->lifetime);
101 QCBOREncode_AddUInt64(enc, blk->frag_offset);
102 QCBOREncode_AddUInt64(enc, blk->adu_length);
105 switch (blk->crc_type)
108 QCBOREncode_AddBytes(enc, (UsefulBufC) { zero_crc, 2 });
111 QCBOREncode_AddBytes(enc, (UsefulBufC) { zero_crc, 4 });
118 QCBOREncode_CloseArray(enc);
119 const size_t end = QCBOREncode_Tell(enc);
121 mock_bpa_crc_apply(QCBOREncode_RetrieveOutputStorage(enc), begin, end, blk->crc_type);
128 const size_t begin = QCBOREncode_Tell(enc);
129 QCBOREncode_OpenArray(enc);
131 QCBOREncode_AddUInt64(enc, blk->blk_type);
132 QCBOREncode_AddUInt64(enc, blk->blk_num);
133 QCBOREncode_AddUInt64(enc, blk->flags);
134 QCBOREncode_AddUInt64(enc, blk->crc_type);
135 QCBOREncode_AddBytes(enc, (UsefulBufC) { blk->btsd, blk->btsd_len });
137 switch (blk->crc_type)
140 QCBOREncode_AddBytes(enc, (UsefulBufC) { zero_crc, 2 });
143 QCBOREncode_AddBytes(enc, (UsefulBufC) { zero_crc, 4 });
150 QCBOREncode_CloseArray(enc);
151 const size_t end = QCBOREncode_Tell(enc);
153 mock_bpa_crc_apply(QCBOREncode_RetrieveOutputStorage(enc), begin, end, blk->crc_type);
159static int _cmp(
const void *a,
const void *b)
164 return block_b->blk_type - block_a->blk_type;
169 QCBOREncode_OpenArrayIndefiniteLength(enc);
174 size_t block_id_nitems = 0;
176 for (
size_t index = 0; index < bundle->block_count; index++)
179 block_ref_array[block_id_nitems++] = info;
187 for (
size_t index = 0; index < block_id_nitems; index++)
193 QCBOREncode_CloseArrayIndefiniteLength(enc);
Single entry-point include file for all of the BPSec Lib (BSL) frontend API.
@ BSL_BUNDLE_IS_FRAGMENT
Set if this bundle is a fragment.
#define CHKERR1(cond)
Return the error value 1 if condition fails.
@ BSL_BUNDLECRCTYPE_16
CRC-16.
@ BSL_BUNDLECRCTYPE_32
CRC-32C.
Declarations for Agent initialization.
void mock_bpa_crc_apply(UsefulBuf buf, size_t begin, size_t end, BSL_BundleCRCType_e crc_type)
Apply a CRC function to an encoded block.
Declarations for BPv7 block CRC handling.
@ BSL_MOCK_EID_IPN
The "ipn" scheme.
int bsl_mock_encode_canonical(QCBOREncodeContext *enc, const MockBPA_CanonicalBlock_t *blk)
This is an overloaded member function, provided for convenience. It differs from the above function o...
int bsl_mock_encode_bundle(QCBOREncodeContext *enc, const MockBPA_Bundle_t *bundle)
This is an overloaded member function, provided for convenience. It differs from the above function o...
int bsl_mock_encode_primary(QCBOREncodeContext *enc, const MockBPA_PrimaryBlock_t *blk)
Encode primary block to a CBOR data.
int bsl_mock_encode_eid(QCBOREncodeContext *enc, const BSL_HostEID_t *eid)
Encode a single EID.
Declarations for bundle and block encoding.
Heap data storage and views.
size_t len
Size of the data buffer.
BSL_DataPtr_t ptr
Pointer to the front of the buffer.
Opaque pointer to BPA-specific Endpoint ID storage.
void * handle
Opaque pointer for BPA backend to use.
Scheme-specific part for IPN scheme.
int ncomp
The number of components when encoded, either 2 or 3.
uint64_t svc_num
The service number component.
uint64_t node_num
The node number component.
uint64_t auth_num
The authority number component.
Struct to be used as a BSL_HostEID_t::handle.
union bsl_mock_eid_t::@0 ssp
Interpreted according to scheme code.
bsl_eid_ipn_ssp_t as_ipn
Used when scheme is BSL_MOCK_EID_IPN.
uint64_t scheme
Code point for EID schemes from .
BSL_Data_t as_raw
Used in all other cases, copied from source.