UNPKG

dns-packet-typescript

Version:

An abstract-encoding compliant module for encoding / decoding DNS packets

82 lines 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodingLength = exports.decode = exports.encode = void 0; var typebitmap = require("./typebitmap"); function encode(record, buf, offset) { if (offset === void 0) { offset = 0; } if (!buf) { buf = Buffer.allocUnsafe(encodingLength(record)); } if (!offset) { offset = 0; } var oldOffset = offset; var salt = record.salt; if (!Buffer.isBuffer(salt)) { throw new Error('salt must be a Buffer'); } var nextDomain = record.nextDomain; if (!Buffer.isBuffer(nextDomain)) { throw new Error('nextDomain must be a Buffer'); } offset += 2; // Leave space for length buf.writeUInt8(record.algorithm, offset); offset += 1; buf.writeUInt8(record.flags, offset); offset += 1; buf.writeUInt16BE(record.iterations, offset); offset += 2; buf.writeUInt8(salt.length, offset); offset += 1; salt.copy(buf, offset, 0, salt.length); offset += salt.length; buf.writeUInt8(nextDomain.length, offset); offset += 1; nextDomain.copy(buf, offset, 0, nextDomain.length); offset += nextDomain.length; typebitmap.encode(record.rrtypes, buf, offset); offset += typebitmap.encode.bytes; encode.bytes = offset - oldOffset; buf.writeUInt16BE(encode.bytes - 2, oldOffset); return buf; } exports.encode = encode; encode.bytes = 0; function decode(buf, offset) { if (offset === void 0) { offset = 0; } if (!offset) { offset = 0; } var oldOffset = offset; var record = {}; var length = buf.readUInt16BE(offset); offset += 2; record.algorithm = buf.readUInt8(offset); offset += 1; record.flags = buf.readUInt8(offset); offset += 1; record.iterations = buf.readUInt16BE(offset); offset += 2; var saltLength = buf.readUInt8(offset); offset += 1; record.salt = buf.slice(offset, offset + saltLength); offset += saltLength; var hashLength = buf.readUInt8(offset); offset += 1; record.nextDomain = buf.slice(offset, offset + hashLength); offset += hashLength; record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset)); offset += typebitmap.decode.bytes; decode.bytes = offset - oldOffset; return record; } exports.decode = decode; decode.bytes = 0; function encodingLength(record) { return 8 + record.salt.length + record.nextDomain.length + typebitmap.encodingLength(record.rrtypes); } exports.encodingLength = encodingLength; //# sourceMappingURL=rnsec3.js.map