12 const uint8_t *buf = (
const uint8_t *)bufptr;
18 oct = *(
const uint8_t *)buf;
19 if((oct & 0x80) == 0) {
29 if(_is_constructed && oct == 0x80) {
40 for(len = 0, buf++, skipped = 1;
41 oct && (++skipped <= size); buf++, oct--) {
43 len = (len << 8) | *buf;
45 || (len >> ((8 *
sizeof(len)) - 8) && oct > 1)) {
63 if(lenplusepsilon < 0) {
79 int _is_constructed,
const void *ptr,
size_t size) {
95 if(ll <= 0)
return ll;
111 for(skip = ll, ptr = ((
const char *)ptr) + ll, size -= ll;;) {
116 if(tl <= 0)
return tl;
120 ((
const char *)ptr) + tl, size - tl);
121 if(ll <= 0)
return ll;
130 if(((
const uint8_t *)ptr)[0] == 0
131 && ((
const uint8_t *)ptr)[1] == 0)
134 ptr = ((
const char *)ptr) + tl + ll;
143 size_t required_size;
144 uint8_t *buf = (uint8_t *)bufp;
150 if(size) *buf = (uint8_t)len;
157 for(required_size = 1, i = 8; i < 8 *
sizeof(len); i += 8) {
164 if(size <= required_size)
165 return required_size + 1;
167 *buf++ = (uint8_t)(0x80 | required_size);
172 end = buf + required_size;
173 for(i -= 8; buf < end; i -= 8, buf++)
174 *buf = (uint8_t)(len >> i);
176 return required_size + 1;
ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r)
#define BER_TLV_CONSTRUCTED(tagptr)
ssize_t ber_skip_length(asn_codec_ctx_t *opt_codec_ctx, int _is_constructed, const void *ptr, size_t size)
static int _ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx)
size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size)
ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r)
static void ASN_DEBUG(const char *fmt,...)