Fixed OER length encoding

This commit is contained in:
2021-02-06 10:18:39 -05:00
parent 69bd1f5bd9
commit 72bdbe17e3
2 changed files with 23 additions and 18 deletions

View File

@ -56,22 +56,24 @@ uint oer_get_length(OER_Stream *oer, uint *value) {
if (!oer)
return 0;
int len = *oer->ptr++;
int val = len & 0x7f;
int size = 1;
// if length > 127
if (len & 0x80) {
// slurp
val <<= 8;
val |= *oer->ptr++;
size = 2;
}
uint len = *oer->ptr++;
uint size = 1;
uint val = 0;
if (len & 0x80) {
len &= 0x7f;
size += len;
while (len--) {
val <<= 8;
val |= *oer->ptr++;
}
}
else
val = len & 0x7f;
if (value)
*value = val;
size *= 8;
oer->consumed += size;
oer->consumed += (size*8);
return val;
}

View File

@ -57,14 +57,17 @@ uint oer_put_length(OER_Stream *oer, uint value)
if (!oer || !oer->ptr)
return 0;
int size = 8;
int size = 1;
if (value > 0x7f) {
*oer->ptr++ = (value >> 8) | 0x80;
size = 16;
*oer->ptr++ = 0x82;
*oer->ptr++ = value >> 8;
*oer->ptr++ = value;
size += 2;
}
*oer->ptr++ = value & 0xff;
else
*oer->ptr++ = value & 0x7f;
oer->consumed += size;
oer->consumed += (size*8);
return size;
}