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