Fixed OER length encoding
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user