in source/der.c [293:317]
static int s_der_encoder_end_container(struct aws_der_encoder *encoder) {
struct der_tlv tlv;
if (aws_array_list_back(&encoder->stack, &tlv)) {
return AWS_OP_ERR;
}
aws_array_list_pop_back(&encoder->stack);
/* update the buffer to point at the next container on the stack */
if (encoder->stack.length > 0) {
struct der_tlv outer;
if (aws_array_list_back(&encoder->stack, &outer)) {
return AWS_OP_ERR;
}
encoder->buffer = (struct aws_byte_buf *)outer.value;
} else {
encoder->buffer = &encoder->storage;
}
struct aws_byte_buf *seq_buf = (struct aws_byte_buf *)tlv.value;
tlv.length = (uint32_t)seq_buf->len;
tlv.value = seq_buf->buffer;
int result = s_der_write_tlv(&tlv, encoder->buffer);
aws_byte_buf_clean_up_secure(seq_buf);
aws_mem_release(encoder->allocator, seq_buf);
return result;
}