Fixed OER length encoding
This commit is contained in:
@ -56,22 +56,24 @@ uint oer_get_length(OER_Stream *oer, uint *value) {
|
|||||||
if (!oer)
|
if (!oer)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int len = *oer->ptr++;
|
uint len = *oer->ptr++;
|
||||||
int val = len & 0x7f;
|
uint size = 1;
|
||||||
int size = 1;
|
uint val = 0;
|
||||||
|
|
||||||
// if length > 127
|
|
||||||
if (len & 0x80) {
|
|
||||||
// slurp
|
|
||||||
val <<= 8;
|
|
||||||
val |= *oer->ptr++;
|
|
||||||
size = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (len & 0x80) {
|
||||||
|
len &= 0x7f;
|
||||||
|
size += len;
|
||||||
|
while (len--) {
|
||||||
|
val <<= 8;
|
||||||
|
val |= *oer->ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
val = len & 0x7f;
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
*value = val;
|
*value = val;
|
||||||
size *= 8;
|
oer->consumed += (size*8);
|
||||||
oer->consumed += size;
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -57,14 +57,17 @@ uint oer_put_length(OER_Stream *oer, uint value)
|
|||||||
if (!oer || !oer->ptr)
|
if (!oer || !oer->ptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int size = 8;
|
int size = 1;
|
||||||
if (value > 0x7f) {
|
if (value > 0x7f) {
|
||||||
*oer->ptr++ = (value >> 8) | 0x80;
|
*oer->ptr++ = 0x82;
|
||||||
size = 16;
|
*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;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user