Javascript examping of encoding to a TLV (tag-length-value)

function encodeTLV (tag, value) {

var buffer = []; // array of bytes

if (tag > 0xFF) { // check if tag is multi-byte

do {

buffer.unshift(tag & 0xFF); // write last byte of tag

tag >>= 8; // remove last byte of tag

} while (tag); // until tag is zero

buffer[0] |= 0x80; // set bit 7 of first byte of tag

} else {

buffer.push(tag); // write one byte for tag

}

var length = value.length; // get length of value in bytes

if (length > 0x7F) { // check if length is multi-byte

var bytes = Math.ceil(Math.log2(length + 1) / 8); // number of bytes for length

buffer.push(0x80 | bytes); // write one byte with bit 7 set and number of bytes for length

for (var i = bytes - 1; i >= 0; i--) {

buffer.push((length >> (8 * i)) & 0xFF); // write more bytes for length

}

} else {

buffer.push(length); // write one byte for length

}

buffer = buffer.concat(value); // append value bytes to buffer

return Buffer.from(buffer); // return buffer as a Buffer object

}

Reply to this note

Please Login to reply.

Discussion

No replies yet.