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--) {
44 if(!(len >> ((8 *
sizeof(len)) - (8+1)))) {
45 len = (len << 8) | *buf;
69 int _is_constructed,
const void *ptr,
size_t size) {
85 if(ll <= 0)
return ll;
100 ASN_DEBUG(
"Skipping indefinite length");
101 for(skip = ll, ptr = ((
const char *)ptr) + ll, size -= ll;;) {
106 if(tl <= 0)
return tl;
110 ((
const char *)ptr) + tl, size - tl);
111 if(ll <= 0)
return ll;
120 if(((
const uint8_t *)ptr)[0] == 0
121 && ((
const uint8_t *)ptr)[1] == 0)
124 ptr = ((
const char *)ptr) + tl + ll;
133 size_t required_size;
134 uint8_t *buf = (uint8_t *)bufp;
140 if(size) *buf = (uint8_t)len;
147 for(required_size = 1, i = 8; i < 8 * (int)
sizeof(len); i += 8) {
154 if(size <= required_size)
155 return required_size + 1;
157 *buf++ = (uint8_t)(0x80 | required_size);
162 end = buf + required_size;
163 for(i -= 8; buf < end; i -= 8, buf++)
164 *buf = (uint8_t)(len >> i);
166 return required_size + 1;