Lines Matching refs:cbb
25 void CBB_zero(CBB *cbb) { in CBB_zero() argument
26 OPENSSL_memset(cbb, 0, sizeof(CBB)); in CBB_zero()
29 static int cbb_init(CBB *cbb, uint8_t *buf, size_t cap) { in cbb_init() argument
44 cbb->base = base; in cbb_init()
45 cbb->is_top_level = 1; in cbb_init()
49 int CBB_init(CBB *cbb, size_t initial_capacity) { in CBB_init() argument
50 CBB_zero(cbb); in CBB_init()
57 if (!cbb_init(cbb, buf, initial_capacity)) { in CBB_init()
65 int CBB_init_fixed(CBB *cbb, uint8_t *buf, size_t len) { in CBB_init_fixed() argument
66 CBB_zero(cbb); in CBB_init_fixed()
68 if (!cbb_init(cbb, buf, len)) { in CBB_init_fixed()
72 cbb->base->can_resize = 0; in CBB_init_fixed()
76 void CBB_cleanup(CBB *cbb) { in CBB_cleanup() argument
77 if (cbb->base) { in CBB_cleanup()
80 assert(cbb->is_top_level); in CBB_cleanup()
82 if (cbb->base->can_resize) { in CBB_cleanup()
83 OPENSSL_free(cbb->base->buf); in CBB_cleanup()
85 OPENSSL_free(cbb->base); in CBB_cleanup()
87 cbb->base = NULL; in CBB_cleanup()
169 int CBB_finish(CBB *cbb, uint8_t **out_data, size_t *out_len) { in CBB_finish() argument
170 if (!cbb->is_top_level) { in CBB_finish()
174 if (!CBB_flush(cbb)) { in CBB_finish()
178 if (cbb->base->can_resize && (out_data == NULL || out_len == NULL)) { in CBB_finish()
184 *out_data = cbb->base->buf; in CBB_finish()
187 *out_len = cbb->base->len; in CBB_finish()
189 cbb->base->buf = NULL; in CBB_finish()
190 CBB_cleanup(cbb); in CBB_finish()
197 int CBB_flush(CBB *cbb) { in CBB_flush() argument
203 if (cbb->base == NULL || cbb->base->error) { in CBB_flush()
207 if (cbb->child == NULL || cbb->child->pending_len_len == 0) { in CBB_flush()
211 child_start = cbb->child->offset + cbb->child->pending_len_len; in CBB_flush()
213 if (!CBB_flush(cbb->child) || in CBB_flush()
214 child_start < cbb->child->offset || in CBB_flush()
215 cbb->base->len < child_start) { in CBB_flush()
219 len = cbb->base->len - child_start; in CBB_flush()
221 if (cbb->child->pending_is_asn1) { in CBB_flush()
228 assert (cbb->child->pending_len_len == 1); in CBB_flush()
254 if (!cbb_buffer_add(cbb->base, NULL, extra_bytes)) { in CBB_flush()
257 OPENSSL_memmove(cbb->base->buf + child_start + extra_bytes, in CBB_flush()
258 cbb->base->buf + child_start, len); in CBB_flush()
260 cbb->base->buf[cbb->child->offset++] = initial_length_byte; in CBB_flush()
261 cbb->child->pending_len_len = len_len - 1; in CBB_flush()
264 for (i = cbb->child->pending_len_len - 1; i < cbb->child->pending_len_len; in CBB_flush()
266 cbb->base->buf[cbb->child->offset + i] = (uint8_t)len; in CBB_flush()
273 cbb->child->base = NULL; in CBB_flush()
274 cbb->child = NULL; in CBB_flush()
279 cbb->base->error = 1; in CBB_flush()
283 const uint8_t *CBB_data(const CBB *cbb) { in CBB_data() argument
284 assert(cbb->child == NULL); in CBB_data()
285 return cbb->base->buf + cbb->offset + cbb->pending_len_len; in CBB_data()
288 size_t CBB_len(const CBB *cbb) { in CBB_len() argument
289 assert(cbb->child == NULL); in CBB_len()
290 assert(cbb->offset + cbb->pending_len_len <= cbb->base->len); in CBB_len()
292 return cbb->base->len - cbb->offset - cbb->pending_len_len; in CBB_len()
295 static int cbb_add_length_prefixed(CBB *cbb, CBB *out_contents, in cbb_add_length_prefixed() argument
299 if (!CBB_flush(cbb)) { in cbb_add_length_prefixed()
303 size_t offset = cbb->base->len; in cbb_add_length_prefixed()
304 if (!cbb_buffer_add(cbb->base, &prefix_bytes, len_len)) { in cbb_add_length_prefixed()
310 out_contents->base = cbb->base; in cbb_add_length_prefixed()
311 cbb->child = out_contents; in cbb_add_length_prefixed()
312 cbb->child->offset = offset; in cbb_add_length_prefixed()
313 cbb->child->pending_len_len = len_len; in cbb_add_length_prefixed()
314 cbb->child->pending_is_asn1 = 0; in cbb_add_length_prefixed()
319 int CBB_add_u8_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u8_length_prefixed() argument
320 return cbb_add_length_prefixed(cbb, out_contents, 1); in CBB_add_u8_length_prefixed()
323 int CBB_add_u16_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u16_length_prefixed() argument
324 return cbb_add_length_prefixed(cbb, out_contents, 2); in CBB_add_u16_length_prefixed()
327 int CBB_add_u24_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u24_length_prefixed() argument
328 return cbb_add_length_prefixed(cbb, out_contents, 3); in CBB_add_u24_length_prefixed()
331 int CBB_add_asn1(CBB *cbb, CBB *out_contents, unsigned tag) { in CBB_add_asn1() argument
336 cbb->base->error = 1; in CBB_add_asn1()
340 if (!CBB_flush(cbb) || in CBB_add_asn1()
342 !CBB_add_u8(cbb, (uint8_t)tag)) { in CBB_add_asn1()
346 size_t offset = cbb->base->len; in CBB_add_asn1()
347 if (!CBB_add_u8(cbb, 0)) { in CBB_add_asn1()
352 out_contents->base = cbb->base; in CBB_add_asn1()
353 cbb->child = out_contents; in CBB_add_asn1()
354 cbb->child->offset = offset; in CBB_add_asn1()
355 cbb->child->pending_len_len = 1; in CBB_add_asn1()
356 cbb->child->pending_is_asn1 = 1; in CBB_add_asn1()
361 int CBB_add_bytes(CBB *cbb, const uint8_t *data, size_t len) { in CBB_add_bytes() argument
364 if (!CBB_flush(cbb) || in CBB_add_bytes()
365 !cbb_buffer_add(cbb->base, &dest, len)) { in CBB_add_bytes()
372 int CBB_add_space(CBB *cbb, uint8_t **out_data, size_t len) { in CBB_add_space() argument
373 if (!CBB_flush(cbb) || in CBB_add_space()
374 !cbb_buffer_add(cbb->base, out_data, len)) { in CBB_add_space()
380 int CBB_reserve(CBB *cbb, uint8_t **out_data, size_t len) { in CBB_reserve() argument
381 if (!CBB_flush(cbb) || in CBB_reserve()
382 !cbb_buffer_reserve(cbb->base, out_data, len)) { in CBB_reserve()
388 int CBB_did_write(CBB *cbb, size_t len) { in CBB_did_write() argument
389 size_t newlen = cbb->base->len + len; in CBB_did_write()
390 if (cbb->child != NULL || in CBB_did_write()
391 newlen < cbb->base->len || in CBB_did_write()
392 newlen > cbb->base->cap) { in CBB_did_write()
395 cbb->base->len = newlen; in CBB_did_write()
399 int CBB_add_u8(CBB *cbb, uint8_t value) { in CBB_add_u8() argument
400 if (!CBB_flush(cbb)) { in CBB_add_u8()
404 return cbb_buffer_add_u(cbb->base, value, 1); in CBB_add_u8()
407 int CBB_add_u16(CBB *cbb, uint16_t value) { in CBB_add_u16() argument
408 if (!CBB_flush(cbb)) { in CBB_add_u16()
412 return cbb_buffer_add_u(cbb->base, value, 2); in CBB_add_u16()
415 int CBB_add_u24(CBB *cbb, uint32_t value) { in CBB_add_u24() argument
416 if (!CBB_flush(cbb)) { in CBB_add_u24()
420 return cbb_buffer_add_u(cbb->base, value, 3); in CBB_add_u24()
423 int CBB_add_u32(CBB *cbb, uint32_t value) { in CBB_add_u32() argument
424 if (!CBB_flush(cbb)) { in CBB_add_u32()
428 return cbb_buffer_add_u(cbb->base, value, 4); in CBB_add_u32()
431 void CBB_discard_child(CBB *cbb) { in CBB_discard_child() argument
432 if (cbb->child == NULL) { in CBB_discard_child()
436 cbb->base->len = cbb->child->offset; in CBB_discard_child()
438 cbb->child->base = NULL; in CBB_discard_child()
439 cbb->child = NULL; in CBB_discard_child()
442 int CBB_add_asn1_uint64(CBB *cbb, uint64_t value) { in CBB_add_asn1_uint64() argument
446 if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER)) { in CBB_add_asn1_uint64()
474 return CBB_flush(cbb); in CBB_add_asn1_uint64()