UNPKG

jose

Version:

Universal 'JSON Web Almost Everything' - JWA, JWS, JWE, JWT, JWK with no dependencies

45 lines (44 loc) 1.28 kB
const tagInteger = 0x02; const tagSequence = 0x30; export default class Asn1SequenceDecoder { constructor(buffer) { if (buffer[0] !== tagSequence) { throw new TypeError(); } this.buffer = buffer; this.offset = 1; const len = this.decodeLength(); if (len !== buffer.length - this.offset) { throw new TypeError(); } } decodeLength() { let length = this.buffer[this.offset++]; if (length & 0x80) { const nBytes = length & ~0x80; length = 0; for (let i = 0; i < nBytes; i++) length = (length << 8) | this.buffer[this.offset + i]; this.offset += nBytes; } return length; } unsignedInteger() { if (this.buffer[this.offset++] !== tagInteger) { throw new TypeError(); } let length = this.decodeLength(); if (this.buffer[this.offset] === 0) { this.offset++; length--; } const result = this.buffer.slice(this.offset, this.offset + length); this.offset += length; return result; } end() { if (this.offset !== this.buffer.length) { throw new TypeError(); } } }