dns-packet
Advanced tools
Comparing version 5.3.1 to 5.4.0
60
index.js
@@ -1297,2 +1297,61 @@ 'use strict' | ||
const rsshfp = exports.sshfp = {} | ||
rsshfp.getFingerprintLengthForHashType = function getFingerprintLengthForHashType (hashType) { | ||
switch (hashType) { | ||
case 1: return 20 | ||
case 2: return 32 | ||
} | ||
} | ||
rsshfp.encode = function encode (record, buf, offset) { | ||
if (!buf) buf = Buffer.alloc(rsshfp.encodingLength(record)) | ||
if (!offset) offset = 0 | ||
const oldOffset = offset | ||
offset += 2 // The function call starts with the offset pointer at the RDLENGTH field, not the RDATA one | ||
buf[offset] = record.algorithm | ||
offset += 1 | ||
buf[offset] = record.hash | ||
offset += 1 | ||
const fingerprintBuf = Buffer.from(record.fingerprint.toUpperCase(), 'hex') | ||
if (fingerprintBuf.length !== rsshfp.getFingerprintLengthForHashType(record.hash)) { | ||
throw new Error('Invalid fingerprint length') | ||
} | ||
fingerprintBuf.copy(buf, offset) | ||
offset += fingerprintBuf.byteLength | ||
rsshfp.encode.bytes = offset - oldOffset | ||
buf.writeUInt16BE(rsshfp.encode.bytes - 2, oldOffset) | ||
return buf | ||
} | ||
rsshfp.encode.bytes = 0 | ||
rsshfp.decode = function decode (buf, offset) { | ||
if (!offset) offset = 0 | ||
const oldOffset = offset | ||
const record = {} | ||
offset += 2 // Account for the RDLENGTH field | ||
record.algorithm = buf[offset] | ||
offset += 1 | ||
record.hash = buf[offset] | ||
offset += 1 | ||
const fingerprintLength = rsshfp.getFingerprintLengthForHashType(record.hash) | ||
record.fingerprint = buf.slice(offset, offset + fingerprintLength).toString('hex').toUpperCase() | ||
offset += fingerprintLength | ||
rsshfp.decode.bytes = offset - oldOffset | ||
return record | ||
} | ||
rsshfp.decode.bytes = 0 | ||
rsshfp.encodingLength = function (record) { | ||
return 4 + Buffer.from(record.fingerprint, 'hex').byteLength | ||
} | ||
const renc = exports.record = function (type) { | ||
@@ -1319,2 +1378,3 @@ switch (type.toUpperCase()) { | ||
case 'NSEC3': return rnsec3 | ||
case 'SSHFP': return rsshfp | ||
case 'DS': return rds | ||
@@ -1321,0 +1381,0 @@ } |
{ | ||
"name": "dns-packet", | ||
"version": "5.3.1", | ||
"version": "5.4.0", | ||
"description": "An abstract-encoding compliant module for encoding / decoding DNS packets", | ||
@@ -29,3 +29,2 @@ "author": "Mathias Buus", | ||
"eslint-plugin-standard": "^4.0.0", | ||
"nyc": "^13.3.0", | ||
"tape": "^4.10.1" | ||
@@ -32,0 +31,0 @@ }, |
# dns-packet | ||
[![](https://img.shields.io/npm/v/dns-packet.svg?style=flat)](https://www.npmjs.org/package/dns-packet) [![](https://img.shields.io/npm/dm/dns-packet.svg)](https://www.npmjs.org/package/dns-packet) [![](https://api.travis-ci.org/mafintosh/dns-packet.svg?style=flat)](https://travis-ci.org/mafintosh/dns-packet) [![Coverage Status](https://coveralls.io/repos/github/mafintosh/dns-packet/badge.svg?branch=master)](https://coveralls.io/github/mafintosh/dns-packet?branch=master) | ||
[![](https://img.shields.io/npm/v/dns-packet.svg?style=flat)](https://www.npmjs.org/package/dns-packet) [![](https://img.shields.io/npm/dm/dns-packet.svg)](https://www.npmjs.org/package/dns-packet) [![](https://github.com/github/mafintosh/dns-packet/workflows/ci.yml/badge.svg)](https://github.com/github/mafintosh/dns-packet/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/mafintosh/dns-packet/badge.svg?branch=master)](https://coveralls.io/github/mafintosh/dns-packet?branch=master) | ||
@@ -305,2 +305,12 @@ An [abstract-encoding](https://github.com/mafintosh/abstract-encoding) compliant module for encoding / decoding DNS packets. Lifted out of [multicast-dns](https://github.com/mafintosh/multicast-dns) as a separate module. | ||
#### `SSHFP` | ||
``` js | ||
{ | ||
algorithm: 1, | ||
hash: 1, | ||
fingerprint: 'A108C9F834354D5B37AF988141C9294822F5BC00' | ||
} | ||
```` | ||
#### `RRSIG` | ||
@@ -307,0 +317,0 @@ |
57029
7
1576
376
9