UNPKG

dns-packet-typescript

Version:

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

82 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodingLength = exports.decode = exports.encode = void 0; var types = require("./types"); var name = require("./name"); function encode(sig, buf, offset) { if (offset === void 0) { offset = 0; } if (!buf) { buf = Buffer.allocUnsafe(encodingLength(sig)); } if (!offset) { offset = 0; } var oldOffset = offset; var signature = sig.signature; if (!Buffer.isBuffer(signature)) { throw new Error('Signature must be a Buffer'); } offset += 2; // Leave space for length buf.writeUInt16BE(types.toType(sig.typeCovered), offset); offset += 2; buf.writeUInt8(sig.algorithm, offset); offset += 1; buf.writeUInt8(sig.labels, offset); offset += 1; buf.writeUInt32BE(sig.originalTTL, offset); offset += 4; buf.writeUInt32BE(sig.expiration, offset); offset += 4; buf.writeUInt32BE(sig.inception, offset); offset += 4; buf.writeUInt16BE(sig.keyTag, offset); offset += 2; name.encode(sig.signersName, buf, offset); offset += name.encode.bytes; signature.copy(buf, offset, 0, signature.length); offset += signature.length; 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 sig = {}; var length = buf.readUInt16BE(offset); offset += 2; sig.typeCovered = types.toString(buf.readUInt16BE(offset)); offset += 2; sig.algorithm = buf.readUInt8(offset); offset += 1; sig.labels = buf.readUInt8(offset); offset += 1; sig.originalTTL = buf.readUInt32BE(offset); offset += 4; sig.expiration = buf.readUInt32BE(offset); offset += 4; sig.inception = buf.readUInt32BE(offset); offset += 4; sig.keyTag = buf.readUInt16BE(offset); offset += 2; sig.signersName = name.decode(buf, offset); offset += name.decode.bytes; sig.signature = buf.slice(offset, oldOffset + length + 2); offset += sig.signature.length; decode.bytes = offset - oldOffset; return sig; } exports.decode = decode; decode.bytes = 0; function encodingLength(sig) { return 20 + name.encodingLength(sig.signersName) + Buffer.byteLength(sig.signature); } exports.encodingLength = encodingLength; //# sourceMappingURL=rrrsig.js.map