Files
portfolio/node_modules/.cache/babel-loader/ac696a72e63d6b5380d439e40de6a757.json
2021-09-20 16:54:47 -04:00

1 line
18 KiB
JSON

{"ast":null,"code":"// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\nvar assert = require('assert');\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar ASN1 = require('./types');\n\nvar errors = require('./errors'); // --- Globals\n\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error; // --- API\n\nfunction Reader(data) {\n if (!data || !Buffer.isBuffer(data)) throw new TypeError('data must be a node Buffer');\n this._buf = data;\n this._size = data.length; // These hold the \"current\" state\n\n this._len = 0;\n this._offset = 0;\n}\n\nObject.defineProperty(Reader.prototype, 'length', {\n enumerable: true,\n get: function () {\n return this._len;\n }\n});\nObject.defineProperty(Reader.prototype, 'offset', {\n enumerable: true,\n get: function () {\n return this._offset;\n }\n});\nObject.defineProperty(Reader.prototype, 'remain', {\n get: function () {\n return this._size - this._offset;\n }\n});\nObject.defineProperty(Reader.prototype, 'buffer', {\n get: function () {\n return this._buf.slice(this._offset);\n }\n});\n/**\n * Reads a single byte and advances offset; you can pass in `true` to make this\n * a \"peek\" operation (i.e., get the byte, but don't advance the offset).\n *\n * @param {Boolean} peek true means don't move offset.\n * @return {Number} the next byte, null if not enough data.\n */\n\nReader.prototype.readByte = function (peek) {\n if (this._size - this._offset < 1) return null;\n var b = this._buf[this._offset] & 0xff;\n if (!peek) this._offset += 1;\n return b;\n};\n\nReader.prototype.peek = function () {\n return this.readByte(true);\n};\n/**\n * Reads a (potentially) variable length off the BER buffer. This call is\n * not really meant to be called directly, as callers have to manipulate\n * the internal buffer afterwards.\n *\n * As a result of this call, you can call `Reader.length`, until the\n * next thing called that does a readLength.\n *\n * @return {Number} the amount of offset to advance the buffer.\n * @throws {InvalidAsn1Error} on bad ASN.1\n */\n\n\nReader.prototype.readLength = function (offset) {\n if (offset === undefined) offset = this._offset;\n if (offset >= this._size) return null;\n var lenB = this._buf[offset++] & 0xff;\n if (lenB === null) return null;\n\n if ((lenB & 0x80) === 0x80) {\n lenB &= 0x7f;\n if (lenB === 0) throw newInvalidAsn1Error('Indefinite length not supported');\n if (lenB > 4) throw newInvalidAsn1Error('encoding too long');\n if (this._size - offset < lenB) return null;\n this._len = 0;\n\n for (var i = 0; i < lenB; i++) this._len = (this._len << 8) + (this._buf[offset++] & 0xff);\n } else {\n // Wasn't a variable length\n this._len = lenB;\n }\n\n return offset;\n};\n/**\n * Parses the next sequence in this BER buffer.\n *\n * To get the length of the sequence, call `Reader.length`.\n *\n * @return {Number} the sequence's tag.\n */\n\n\nReader.prototype.readSequence = function (tag) {\n var seq = this.peek();\n if (seq === null) return null;\n if (tag !== undefined && tag !== seq) throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + ': got 0x' + seq.toString(16));\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null) return null;\n this._offset = o;\n return seq;\n};\n\nReader.prototype.readInt = function () {\n return this._readTag(ASN1.Integer);\n};\n\nReader.prototype.readBoolean = function () {\n return this._readTag(ASN1.Boolean) === 0 ? false : true;\n};\n\nReader.prototype.readEnumeration = function () {\n return this._readTag(ASN1.Enumeration);\n};\n\nReader.prototype.readString = function (tag, retbuf) {\n if (!tag) tag = ASN1.OctetString;\n var b = this.peek();\n if (b === null) return null;\n if (b !== tag) throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + ': got 0x' + b.toString(16));\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null) return null;\n if (this.length > this._size - o) return null;\n this._offset = o;\n if (this.length === 0) return retbuf ? Buffer.alloc(0) : '';\n\n var str = this._buf.slice(this._offset, this._offset + this.length);\n\n this._offset += this.length;\n return retbuf ? str : str.toString('utf8');\n};\n\nReader.prototype.readOID = function (tag) {\n if (!tag) tag = ASN1.OID;\n var b = this.readString(tag, true);\n if (b === null) return null;\n var values = [];\n var value = 0;\n\n for (var i = 0; i < b.length; i++) {\n var byte = b[i] & 0xff;\n value <<= 7;\n value += byte & 0x7f;\n\n if ((byte & 0x80) === 0) {\n values.push(value);\n value = 0;\n }\n }\n\n value = values.shift();\n values.unshift(value % 40);\n values.unshift(value / 40 >> 0);\n return values.join('.');\n};\n\nReader.prototype._readTag = function (tag) {\n assert.ok(tag !== undefined);\n var b = this.peek();\n if (b === null) return null;\n if (b !== tag) throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + ': got 0x' + b.toString(16));\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null) return null;\n if (this.length > 4) throw newInvalidAsn1Error('Integer too long: ' + this.length);\n if (this.length > this._size - o) return null;\n this._offset = o;\n var fb = this._buf[this._offset];\n var value = 0;\n\n for (var i = 0; i < this.length; i++) {\n value <<= 8;\n value |= this._buf[this._offset++] & 0xff;\n }\n\n if ((fb & 0x80) === 0x80 && i !== 4) value -= 1 << i * 8;\n return value >> 0;\n}; // --- Exported API\n\n\nmodule.exports = Reader;","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/asn1/lib/ber/reader.js"],"names":["assert","require","Buffer","ASN1","errors","newInvalidAsn1Error","Reader","data","isBuffer","TypeError","_buf","_size","length","_len","_offset","Object","defineProperty","prototype","enumerable","get","slice","readByte","peek","b","readLength","offset","undefined","lenB","i","readSequence","tag","seq","toString","o","readInt","_readTag","Integer","readBoolean","Boolean","readEnumeration","Enumeration","readString","retbuf","OctetString","alloc","str","readOID","OID","values","value","byte","push","shift","unshift","join","ok","fb","module","exports"],"mappings":"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","sourcesContent":["// Copyright 2011 Mark Cavage <mcavage@gmail.com> All rights reserved.\n\nvar assert = require('assert');\nvar Buffer = require('safer-buffer').Buffer;\n\nvar ASN1 = require('./types');\nvar errors = require('./errors');\n\n\n// --- Globals\n\nvar newInvalidAsn1Error = errors.newInvalidAsn1Error;\n\n\n\n// --- API\n\nfunction Reader(data) {\n if (!data || !Buffer.isBuffer(data))\n throw new TypeError('data must be a node Buffer');\n\n this._buf = data;\n this._size = data.length;\n\n // These hold the \"current\" state\n this._len = 0;\n this._offset = 0;\n}\n\nObject.defineProperty(Reader.prototype, 'length', {\n enumerable: true,\n get: function () { return (this._len); }\n});\n\nObject.defineProperty(Reader.prototype, 'offset', {\n enumerable: true,\n get: function () { return (this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'remain', {\n get: function () { return (this._size - this._offset); }\n});\n\nObject.defineProperty(Reader.prototype, 'buffer', {\n get: function () { return (this._buf.slice(this._offset)); }\n});\n\n\n/**\n * Reads a single byte and advances offset; you can pass in `true` to make this\n * a \"peek\" operation (i.e., get the byte, but don't advance the offset).\n *\n * @param {Boolean} peek true means don't move offset.\n * @return {Number} the next byte, null if not enough data.\n */\nReader.prototype.readByte = function (peek) {\n if (this._size - this._offset < 1)\n return null;\n\n var b = this._buf[this._offset] & 0xff;\n\n if (!peek)\n this._offset += 1;\n\n return b;\n};\n\n\nReader.prototype.peek = function () {\n return this.readByte(true);\n};\n\n\n/**\n * Reads a (potentially) variable length off the BER buffer. This call is\n * not really meant to be called directly, as callers have to manipulate\n * the internal buffer afterwards.\n *\n * As a result of this call, you can call `Reader.length`, until the\n * next thing called that does a readLength.\n *\n * @return {Number} the amount of offset to advance the buffer.\n * @throws {InvalidAsn1Error} on bad ASN.1\n */\nReader.prototype.readLength = function (offset) {\n if (offset === undefined)\n offset = this._offset;\n\n if (offset >= this._size)\n return null;\n\n var lenB = this._buf[offset++] & 0xff;\n if (lenB === null)\n return null;\n\n if ((lenB & 0x80) === 0x80) {\n lenB &= 0x7f;\n\n if (lenB === 0)\n throw newInvalidAsn1Error('Indefinite length not supported');\n\n if (lenB > 4)\n throw newInvalidAsn1Error('encoding too long');\n\n if (this._size - offset < lenB)\n return null;\n\n this._len = 0;\n for (var i = 0; i < lenB; i++)\n this._len = (this._len << 8) + (this._buf[offset++] & 0xff);\n\n } else {\n // Wasn't a variable length\n this._len = lenB;\n }\n\n return offset;\n};\n\n\n/**\n * Parses the next sequence in this BER buffer.\n *\n * To get the length of the sequence, call `Reader.length`.\n *\n * @return {Number} the sequence's tag.\n */\nReader.prototype.readSequence = function (tag) {\n var seq = this.peek();\n if (seq === null)\n return null;\n if (tag !== undefined && tag !== seq)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + seq.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n this._offset = o;\n return seq;\n};\n\n\nReader.prototype.readInt = function () {\n return this._readTag(ASN1.Integer);\n};\n\n\nReader.prototype.readBoolean = function () {\n return (this._readTag(ASN1.Boolean) === 0 ? false : true);\n};\n\n\nReader.prototype.readEnumeration = function () {\n return this._readTag(ASN1.Enumeration);\n};\n\n\nReader.prototype.readString = function (tag, retbuf) {\n if (!tag)\n tag = ASN1.OctetString;\n\n var b = this.peek();\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n\n if (o === null)\n return null;\n\n if (this.length > this._size - o)\n return null;\n\n this._offset = o;\n\n if (this.length === 0)\n return retbuf ? Buffer.alloc(0) : '';\n\n var str = this._buf.slice(this._offset, this._offset + this.length);\n this._offset += this.length;\n\n return retbuf ? str : str.toString('utf8');\n};\n\nReader.prototype.readOID = function (tag) {\n if (!tag)\n tag = ASN1.OID;\n\n var b = this.readString(tag, true);\n if (b === null)\n return null;\n\n var values = [];\n var value = 0;\n\n for (var i = 0; i < b.length; i++) {\n var byte = b[i] & 0xff;\n\n value <<= 7;\n value += byte & 0x7f;\n if ((byte & 0x80) === 0) {\n values.push(value);\n value = 0;\n }\n }\n\n value = values.shift();\n values.unshift(value % 40);\n values.unshift((value / 40) >> 0);\n\n return values.join('.');\n};\n\n\nReader.prototype._readTag = function (tag) {\n assert.ok(tag !== undefined);\n\n var b = this.peek();\n\n if (b === null)\n return null;\n\n if (b !== tag)\n throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) +\n ': got 0x' + b.toString(16));\n\n var o = this.readLength(this._offset + 1); // stored in `length`\n if (o === null)\n return null;\n\n if (this.length > 4)\n throw newInvalidAsn1Error('Integer too long: ' + this.length);\n\n if (this.length > this._size - o)\n return null;\n this._offset = o;\n\n var fb = this._buf[this._offset];\n var value = 0;\n\n for (var i = 0; i < this.length; i++) {\n value <<= 8;\n value |= (this._buf[this._offset++] & 0xff);\n }\n\n if ((fb & 0x80) === 0x80 && i !== 4)\n value -= (1 << (i * 8));\n\n return value >> 0;\n};\n\n\n\n// --- Exported API\n\nmodule.exports = Reader;\n"]},"metadata":{},"sourceType":"script"}