Lines Matching refs:cbb

26 void CBB_zero(CBB *cbb) {  in CBB_zero()  argument
27 OPENSSL_memset(cbb, 0, sizeof(CBB)); in CBB_zero()
30 static int cbb_init(CBB *cbb, uint8_t *buf, size_t cap) { in cbb_init() argument
45 cbb->base = base; in cbb_init()
46 cbb->is_child = 0; in cbb_init()
50 int CBB_init(CBB *cbb, size_t initial_capacity) { in CBB_init() argument
51 CBB_zero(cbb); in CBB_init()
58 if (!cbb_init(cbb, buf, initial_capacity)) { in CBB_init()
66 int CBB_init_fixed(CBB *cbb, uint8_t *buf, size_t len) { in CBB_init_fixed() argument
67 CBB_zero(cbb); in CBB_init_fixed()
69 if (!cbb_init(cbb, buf, len)) { in CBB_init_fixed()
73 cbb->base->can_resize = 0; in CBB_init_fixed()
77 void CBB_cleanup(CBB *cbb) { in CBB_cleanup() argument
80 assert(!cbb->is_child); in CBB_cleanup()
81 if (cbb->is_child) { in CBB_cleanup()
85 if (cbb->base) { in CBB_cleanup()
86 if (cbb->base->can_resize) { in CBB_cleanup()
87 OPENSSL_free(cbb->base->buf); in CBB_cleanup()
89 OPENSSL_free(cbb->base); in CBB_cleanup()
91 cbb->base = NULL; in CBB_cleanup()
173 int CBB_finish(CBB *cbb, uint8_t **out_data, size_t *out_len) { in CBB_finish() argument
174 if (cbb->is_child) { in CBB_finish()
178 if (!CBB_flush(cbb)) { in CBB_finish()
182 if (cbb->base->can_resize && (out_data == NULL || out_len == NULL)) { in CBB_finish()
188 *out_data = cbb->base->buf; in CBB_finish()
191 *out_len = cbb->base->len; in CBB_finish()
193 cbb->base->buf = NULL; in CBB_finish()
194 CBB_cleanup(cbb); in CBB_finish()
201 int CBB_flush(CBB *cbb) { in CBB_flush() argument
207 if (cbb->base == NULL || cbb->base->error) { in CBB_flush()
211 if (cbb->child == NULL || cbb->child->pending_len_len == 0) { in CBB_flush()
215 child_start = cbb->child->offset + cbb->child->pending_len_len; in CBB_flush()
217 if (!CBB_flush(cbb->child) || in CBB_flush()
218 child_start < cbb->child->offset || in CBB_flush()
219 cbb->base->len < child_start) { in CBB_flush()
223 len = cbb->base->len - child_start; in CBB_flush()
225 if (cbb->child->pending_is_asn1) { in CBB_flush()
232 assert (cbb->child->pending_len_len == 1); in CBB_flush()
258 if (!cbb_buffer_add(cbb->base, NULL, extra_bytes)) { in CBB_flush()
261 OPENSSL_memmove(cbb->base->buf + child_start + extra_bytes, in CBB_flush()
262 cbb->base->buf + child_start, len); in CBB_flush()
264 cbb->base->buf[cbb->child->offset++] = initial_length_byte; in CBB_flush()
265 cbb->child->pending_len_len = len_len - 1; in CBB_flush()
268 for (i = cbb->child->pending_len_len - 1; i < cbb->child->pending_len_len; in CBB_flush()
270 cbb->base->buf[cbb->child->offset + i] = (uint8_t)len; in CBB_flush()
277 cbb->child->base = NULL; in CBB_flush()
278 cbb->child = NULL; in CBB_flush()
283 cbb->base->error = 1; in CBB_flush()
287 const uint8_t *CBB_data(const CBB *cbb) { in CBB_data() argument
288 assert(cbb->child == NULL); in CBB_data()
289 return cbb->base->buf + cbb->offset + cbb->pending_len_len; in CBB_data()
292 size_t CBB_len(const CBB *cbb) { in CBB_len() argument
293 assert(cbb->child == NULL); in CBB_len()
294 assert(cbb->offset + cbb->pending_len_len <= cbb->base->len); in CBB_len()
296 return cbb->base->len - cbb->offset - cbb->pending_len_len; in CBB_len()
299 static int cbb_add_length_prefixed(CBB *cbb, CBB *out_contents, in cbb_add_length_prefixed() argument
303 if (!CBB_flush(cbb)) { in cbb_add_length_prefixed()
307 size_t offset = cbb->base->len; in cbb_add_length_prefixed()
308 if (!cbb_buffer_add(cbb->base, &prefix_bytes, len_len)) { in cbb_add_length_prefixed()
314 out_contents->base = cbb->base; in cbb_add_length_prefixed()
316 cbb->child = out_contents; in cbb_add_length_prefixed()
317 cbb->child->offset = offset; in cbb_add_length_prefixed()
318 cbb->child->pending_len_len = len_len; in cbb_add_length_prefixed()
319 cbb->child->pending_is_asn1 = 0; in cbb_add_length_prefixed()
324 int CBB_add_u8_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u8_length_prefixed() argument
325 return cbb_add_length_prefixed(cbb, out_contents, 1); in CBB_add_u8_length_prefixed()
328 int CBB_add_u16_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u16_length_prefixed() argument
329 return cbb_add_length_prefixed(cbb, out_contents, 2); in CBB_add_u16_length_prefixed()
332 int CBB_add_u24_length_prefixed(CBB *cbb, CBB *out_contents) { in CBB_add_u24_length_prefixed() argument
333 return cbb_add_length_prefixed(cbb, out_contents, 3); in CBB_add_u24_length_prefixed()
339 static int add_base128_integer(CBB *cbb, uint64_t v) { in add_base128_integer() argument
355 if (!CBB_add_u8(cbb, byte)) { in add_base128_integer()
362 int CBB_add_asn1(CBB *cbb, CBB *out_contents, unsigned tag) { in CBB_add_asn1() argument
363 if (!CBB_flush(cbb)) { in CBB_add_asn1()
372 if (!CBB_add_u8(cbb, tag_bits | 0x1f) || in CBB_add_asn1()
373 !add_base128_integer(cbb, tag_number)) { in CBB_add_asn1()
376 } else if (!CBB_add_u8(cbb, tag_bits | tag_number)) { in CBB_add_asn1()
380 size_t offset = cbb->base->len; in CBB_add_asn1()
381 if (!CBB_add_u8(cbb, 0)) { in CBB_add_asn1()
386 out_contents->base = cbb->base; in CBB_add_asn1()
388 cbb->child = out_contents; in CBB_add_asn1()
389 cbb->child->offset = offset; in CBB_add_asn1()
390 cbb->child->pending_len_len = 1; in CBB_add_asn1()
391 cbb->child->pending_is_asn1 = 1; in CBB_add_asn1()
396 int CBB_add_bytes(CBB *cbb, const uint8_t *data, size_t len) { in CBB_add_bytes() argument
399 if (!CBB_flush(cbb) || in CBB_add_bytes()
400 !cbb_buffer_add(cbb->base, &dest, len)) { in CBB_add_bytes()
407 int CBB_add_space(CBB *cbb, uint8_t **out_data, size_t len) { in CBB_add_space() argument
408 if (!CBB_flush(cbb) || in CBB_add_space()
409 !cbb_buffer_add(cbb->base, out_data, len)) { in CBB_add_space()
415 int CBB_reserve(CBB *cbb, uint8_t **out_data, size_t len) { in CBB_reserve() argument
416 if (!CBB_flush(cbb) || in CBB_reserve()
417 !cbb_buffer_reserve(cbb->base, out_data, len)) { in CBB_reserve()
423 int CBB_did_write(CBB *cbb, size_t len) { in CBB_did_write() argument
424 size_t newlen = cbb->base->len + len; in CBB_did_write()
425 if (cbb->child != NULL || in CBB_did_write()
426 newlen < cbb->base->len || in CBB_did_write()
427 newlen > cbb->base->cap) { in CBB_did_write()
430 cbb->base->len = newlen; in CBB_did_write()
434 int CBB_add_u8(CBB *cbb, uint8_t value) { in CBB_add_u8() argument
435 if (!CBB_flush(cbb)) { in CBB_add_u8()
439 return cbb_buffer_add_u(cbb->base, value, 1); in CBB_add_u8()
442 int CBB_add_u16(CBB *cbb, uint16_t value) { in CBB_add_u16() argument
443 if (!CBB_flush(cbb)) { in CBB_add_u16()
447 return cbb_buffer_add_u(cbb->base, value, 2); in CBB_add_u16()
450 int CBB_add_u16le(CBB *cbb, uint16_t value) { in CBB_add_u16le() argument
451 return CBB_add_u16(cbb, CRYPTO_bswap2(value)); in CBB_add_u16le()
454 int CBB_add_u24(CBB *cbb, uint32_t value) { in CBB_add_u24() argument
455 if (!CBB_flush(cbb)) { in CBB_add_u24()
459 return cbb_buffer_add_u(cbb->base, value, 3); in CBB_add_u24()
462 int CBB_add_u32(CBB *cbb, uint32_t value) { in CBB_add_u32() argument
463 if (!CBB_flush(cbb)) { in CBB_add_u32()
467 return cbb_buffer_add_u(cbb->base, value, 4); in CBB_add_u32()
470 int CBB_add_u32le(CBB *cbb, uint32_t value) { in CBB_add_u32le() argument
471 return CBB_add_u32(cbb, CRYPTO_bswap4(value)); in CBB_add_u32le()
474 int CBB_add_u64(CBB *cbb, uint64_t value) { in CBB_add_u64() argument
475 if (!CBB_flush(cbb)) { in CBB_add_u64()
478 return cbb_buffer_add_u(cbb->base, value, 8); in CBB_add_u64()
481 int CBB_add_u64le(CBB *cbb, uint64_t value) { in CBB_add_u64le() argument
482 return CBB_add_u64(cbb, CRYPTO_bswap8(value)); in CBB_add_u64le()
485 void CBB_discard_child(CBB *cbb) { in CBB_discard_child() argument
486 if (cbb->child == NULL) { in CBB_discard_child()
490 cbb->base->len = cbb->child->offset; in CBB_discard_child()
492 cbb->child->base = NULL; in CBB_discard_child()
493 cbb->child = NULL; in CBB_discard_child()
496 int CBB_add_asn1_uint64(CBB *cbb, uint64_t value) { in CBB_add_asn1_uint64() argument
500 if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER)) { in CBB_add_asn1_uint64()
528 return CBB_flush(cbb); in CBB_add_asn1_uint64()
531 int CBB_add_asn1_int64(CBB *cbb, int64_t value) { in CBB_add_asn1_int64() argument
533 return CBB_add_asn1_uint64(cbb, value); in CBB_add_asn1_int64()
548 if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER)) { in CBB_add_asn1_int64()
556 return CBB_flush(cbb); in CBB_add_asn1_int64()
559 int CBB_add_asn1_octet_string(CBB *cbb, const uint8_t *data, size_t data_len) { in CBB_add_asn1_octet_string() argument
561 if (!CBB_add_asn1(cbb, &child, CBS_ASN1_OCTETSTRING) || in CBB_add_asn1_octet_string()
563 !CBB_flush(cbb)) { in CBB_add_asn1_octet_string()
570 int CBB_add_asn1_bool(CBB *cbb, int value) { in CBB_add_asn1_bool() argument
572 if (!CBB_add_asn1(cbb, &child, CBS_ASN1_BOOLEAN) || in CBB_add_asn1_bool()
574 !CBB_flush(cbb)) { in CBB_add_asn1_bool()
612 int CBB_add_asn1_oid_from_text(CBB *cbb, const char *text, size_t len) { in CBB_add_asn1_oid_from_text() argument
613 if (!CBB_flush(cbb)) { in CBB_add_asn1_oid_from_text()
632 !add_base128_integer(cbb, 40u * a + b)) { in CBB_add_asn1_oid_from_text()
639 !add_base128_integer(cbb, a)) { in CBB_add_asn1_oid_from_text()
665 int CBB_flush_asn1_set_of(CBB *cbb) { in CBB_flush_asn1_set_of() argument
666 if (!CBB_flush(cbb)) { in CBB_flush_asn1_set_of()
672 CBS_init(&cbs, CBB_data(cbb), CBB_len(cbb)); in CBB_flush_asn1_set_of()
690 size_t buf_len = CBB_len(cbb); in CBB_flush_asn1_set_of()
691 uint8_t *buf = OPENSSL_memdup(CBB_data(cbb), buf_len); in CBB_flush_asn1_set_of()
705 cbb->base->len = cbb->offset + cbb->pending_len_len; in CBB_flush_asn1_set_of()
707 if (!CBB_add_bytes(cbb, CBS_data(&children[i]), CBS_len(&children[i]))) { in CBB_flush_asn1_set_of()
711 assert(CBB_len(cbb) == buf_len); in CBB_flush_asn1_set_of()