dns-packet-typescript
Version:
An abstract-encoding compliant module for encoding / decoding DNS packets
82 lines • 2.55 kB
JavaScript
;
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