diff --git a/package-lock.json b/package-lock.json index 9ea21d5..837fae5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,7 +127,7 @@ }, "ansi-escapes": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, @@ -476,7 +476,7 @@ }, "array-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, @@ -888,39 +888,14 @@ } }, "binary-data": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/binary-data/-/binary-data-0.5.0.tgz", - "integrity": "sha512-vJvpeV4JPQbuzVyPCtT2dqocUa+XLZ2b/0wH8eFA6kEbd1rI14uQCz37lc2nCMrKB16qrp6rEcLzYszs8PI+DQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/binary-data/-/binary-data-0.6.0.tgz", + "integrity": "sha512-HGiT0ir03tS1u7iWdW5xjJfbPpvxH2qJbPFxXW0I3P5iOzkbjN/cJy5GlpAwmjHW5CiayGOxZ/ytLzXmYgdgqQ==", "requires": { "generate-function": "^2.3.1", "is-plain-object": "^2.0.3" } }, - "bl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.1.2.tgz", - "integrity": "sha512-DvC0x+PxmSJNx8wXoFV15pC2+GOJ3ohb4F1REq3X32a2Z3nEBpR1Guu740M7ouYAImFj4BXDNilLNZbygtG9lQ==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -1253,7 +1228,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cross-spawn": { "version": "5.1.0", @@ -1462,7 +1438,7 @@ }, "doctrine": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { @@ -2878,7 +2854,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -3458,7 +3434,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -3735,7 +3712,7 @@ }, "jest-get-type": { "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, @@ -4059,7 +4036,7 @@ }, "jsesc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, @@ -4723,7 +4700,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -4740,7 +4717,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -4815,7 +4792,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { @@ -4854,7 +4831,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -4954,7 +4931,8 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, "progress": { "version": "2.0.1", @@ -5325,7 +5303,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -6041,7 +6019,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, diff --git a/package.json b/package.json index 81d83b2..f6fa6be 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,7 @@ "dependencies": { "@fidm/asn1": "^1.0.3", "@fidm/x509": "^1.2.0", - "binary-data": "^0.5.0", - "bl": "^2.1.2", + "binary-data": "^0.6.0", "debug": "^4.1.0", "is-dtls": "^2.0.0", "is-stream": "^1.1.0", diff --git a/src/node_modules/cipher/aead.js b/src/node_modules/cipher/aead.js index 77f29f5..991b3ab 100644 --- a/src/node_modules/cipher/aead.js +++ b/src/node_modules/cipher/aead.js @@ -1,11 +1,7 @@ 'use strict'; const crypto = require('crypto'); -const { - createDecodeStream, - createEncodeStream, - encode, -} = require('binary-data'); +const { createDecode, encode } = require('binary-data'); const debug = require('utils/debug')('dtls:cipher:aead'); const { sessionType } = require('lib/constants'); const { AEADAdditionalData } = require('lib/protocol'); @@ -46,7 +42,7 @@ module.exports = class AEADCipher extends Cipher { const secret = session.masterSecret; const seed = Buffer.concat([session.serverRandom, session.clientRandom]); const keyBlock = this.prf(size, secret, 'key expansion', seed); - const stream = createDecodeStream(keyBlock); + const stream = createDecode(keyBlock); this.clientWriteKey = stream.readBuffer(this.keyLength); this.serverWriteKey = stream.readBuffer(this.keyLength); @@ -85,7 +81,6 @@ module.exports = class AEADCipher extends Cipher { const explicitNonce = iv.slice(this.nonceImplicitLength); - const additionalDataStream = createEncodeStream(); const additionalData = { epoch: header.epoch, sequence: header.sequenceNumber, @@ -94,13 +89,13 @@ module.exports = class AEADCipher extends Cipher { length: data.length, }; - encode(additionalData, additionalDataStream, AEADAdditionalData); + const additionalBuffer = encode(additionalData, AEADAdditionalData).slice(); const cipher = crypto.createCipheriv(this.blockAlgorithm, writeKey, iv, { authTagLength: this.authTagLength, }); - cipher.setAAD(additionalDataStream.slice(), { + cipher.setAAD(additionalBuffer, { plaintextLength: data.length, }); @@ -121,7 +116,7 @@ module.exports = class AEADCipher extends Cipher { decrypt(session, data, header) { const isClient = session.type === sessionType.CLIENT; const iv = isClient ? this.serverNonce : this.clientNonce; - const final = createDecodeStream(data); + const final = createDecode(data); const explicitNonce = final.readBuffer(this.nonceExplicitLength); explicitNonce.copy(iv, this.nonceImplicitLength); @@ -130,7 +125,6 @@ module.exports = class AEADCipher extends Cipher { const authTag = final.readBuffer(this.authTagLength); const writeKey = isClient ? this.serverWriteKey : this.clientWriteKey; - const additionalDataStream = createEncodeStream(); const additionalData = { epoch: header.epoch, sequence: header.sequenceNumber, @@ -139,7 +133,7 @@ module.exports = class AEADCipher extends Cipher { length: encryted.length, }; - encode(additionalData, additionalDataStream, AEADAdditionalData); + const additionalBuffer = encode(additionalData, AEADAdditionalData).slice(); const decipher = crypto.createDecipheriv( this.blockAlgorithm, @@ -151,7 +145,7 @@ module.exports = class AEADCipher extends Cipher { ); decipher.setAuthTag(authTag); - decipher.setAAD(additionalDataStream.slice(), { + decipher.setAAD(additionalBuffer, { plaintextLength: encryted.length, }); diff --git a/src/node_modules/filter/decoder.js b/src/node_modules/filter/decoder.js index c5f8f78..ec3a69d 100644 --- a/src/node_modules/filter/decoder.js +++ b/src/node_modules/filter/decoder.js @@ -1,7 +1,7 @@ 'use strict'; const { Transform } = require('readable-stream'); -const { decode, createDecodeStream } = require('binary-data'); +const { decode, createDecode } = require('binary-data'); const { contentType } = require('lib/constants'); const { DTLSPlaintext, Handshake } = require('lib/protocol'); const debug = require('utils/debug')('dtls:decoder'); @@ -39,7 +39,7 @@ module.exports = class Decoder extends Transform { * @param {*} callback */ _transform(chunk, enc, callback) { - const stream = createDecodeStream(chunk); + const stream = createDecode(chunk); while (stream.length > 0) { debug('process new chunk'); diff --git a/src/node_modules/fsm/protocol.js b/src/node_modules/fsm/protocol.js index f594ce3..285e6fb 100644 --- a/src/node_modules/fsm/protocol.js +++ b/src/node_modules/fsm/protocol.js @@ -14,7 +14,7 @@ const { namedCurves, signatureScheme, } = require('lib/constants'); -const { decode, createDecodeStream } = require('binary-data'); +const { decode, createDecode } = require('binary-data'); const { HelloVerifyRequest, ServerHello, @@ -280,7 +280,7 @@ module.exports = class Protocol12ReaderClient extends Writable { } try { - const istream = createDecodeStream(handshake.body); + const istream = createDecode(handshake.body); const serverHello = decode(istream, ServerHello); if (serverHello.serverVersion !== this.session.version) { @@ -410,7 +410,7 @@ module.exports = class Protocol12ReaderClient extends Writable { throw new Error('Invalid key exchange type.'); } - const rstream = createDecodeStream(handshake.body); + const rstream = createDecode(handshake.body); const ecdheParams = decode(rstream, ServerECDHParams); const ecdheParamsSize = decode.bytes; @@ -472,8 +472,7 @@ module.exports = class Protocol12ReaderClient extends Writable { debug('got certificate request'); const handshake = this.message.fragment; - const rstream = createDecodeStream(handshake.body); - const certificateRequest = decode(rstream, CertificateRequest); + const certificateRequest = decode(handshake.body, CertificateRequest); const { certificateTypes, signatures } = certificateRequest; this.session.isCertificateRequested = true; diff --git a/src/node_modules/lib/sender.js b/src/node_modules/lib/sender.js index 0e3569c..1650f99 100644 --- a/src/node_modules/lib/sender.js +++ b/src/node_modules/lib/sender.js @@ -2,8 +2,7 @@ const { Readable } = require('readable-stream'); const debug = require('utils/debug')('dtls:sender'); -const { createEncodeStream, encode } = require('binary-data'); -const bl = require('bl'); +const { createEncode, encode, BinaryStream } = require('binary-data'); const { contentType, handshakeType, @@ -99,9 +98,9 @@ module.exports = class Sender extends Readable { super(); const output = { - alert: createEncodeStream(Alert), - record: createEncodeStream(DTLSPlaintext), - handshake: createEncodeStream(Handshake), + alert: createEncode(Alert), + record: createEncode(DTLSPlaintext), + handshake: createEncode(Handshake), }; output.alert.on('data', packet => { @@ -118,7 +117,7 @@ module.exports = class Sender extends Readable { this[_output] = output; this[_session] = session; this[_queue] = []; - this[_nextPacketQueue] = bl(); + this[_nextPacketQueue] = new BinaryStream(); session.on('send', state => this[senders[state]]()); @@ -297,7 +296,7 @@ module.exports = class Sender extends Readable { compressionMethods: defaultCompressionMethods, }; - const output = createEncodeStream(); + const output = createEncode(); encode(clientHello, output, ClientHello); const extensions = []; @@ -316,12 +315,14 @@ module.exports = class Sender extends Readable { }); if (this.session.alpnProtocols.length > 0) { - const alpnOutput = createEncodeStream(); - encode(this.session.alpnProtocols, alpnOutput, ALPNProtocolNameList); + const alpnOutput = encode( + this.session.alpnProtocols, + ALPNProtocolNameList + ); extensions.push({ type: extensionTypes.APPLICATION_LAYER_PROTOCOL_NEGOTIATION, - data: alpnOutput.slice(), + data: alpnOutput, }); } @@ -343,7 +344,7 @@ module.exports = class Sender extends Readable { [_clientKeyExchange]() { debug('send Client Key Exchange'); - const output = createEncodeStream(); + const output = createEncode(); if (this.session.nextCipher.kx.id === kxTypes.RSA) { const pubkey = this.session.serverPublicKey; @@ -388,9 +389,7 @@ module.exports = class Sender extends Readable { packet.certificateList.push(this.session.clientCertificate.raw); } - const output = createEncodeStream(); - - encode(packet, output, Certificate); + const output = encode(packet, Certificate); this.sendHandshake(output.slice(), handshakeType.CERTIFICATE); } @@ -406,8 +405,7 @@ module.exports = class Sender extends Readable { signature: this.session.clientCertificateSignature, }; - const output = createEncodeStream(); - encode(digitalSignature, output, DigitallySigned); + const output = encode(digitalSignature, DigitallySigned); this.sendHandshake(output.slice(), handshakeType.CERTIFICATE_VERIFY); } diff --git a/src/node_modules/session/abstract.js b/src/node_modules/session/abstract.js index 4aae7d6..7a1b241 100644 --- a/src/node_modules/session/abstract.js +++ b/src/node_modules/session/abstract.js @@ -6,8 +6,7 @@ const assert = require('assert'); const crypto = require('crypto'); const Emitter = require('events'); -const bl = require('bl'); -const { createEncodeStream, encode } = require('binary-data'); +const { encode, BinaryStream } = require('binary-data'); const { protocolVersion, signTypes, sessionType } = require('lib/constants'); const { createMasterSecret, @@ -61,7 +60,7 @@ module.exports = class AbstractSession extends Emitter { this.peerExtendedMasterSecret = false; this.handshakeProtocolReaderState = null; - this.handshakeQueue = bl(); + this.handshakeQueue = new BinaryStream(); this.retransmitter = null; this.window = new SlidingWindow(); @@ -262,10 +261,7 @@ module.exports = class AbstractSession extends Emitter { assert(this.isHandshakeInProcess); if (!Buffer.isBuffer(packet)) { - const output = createEncodeStream(); - encode(packet, output, Handshake); - - packet = output.slice(); // eslint-disable-line no-param-reassign + packet = encode(packet, Handshake).buffer; // eslint-disable-line no-param-reassign } debug('packet added to handshake queue, type = %s', packet.readUInt8(0)); @@ -277,7 +273,7 @@ module.exports = class AbstractSession extends Emitter { */ resetHandshakeQueue() { debug('reset handshake queue'); - this.handshakeQueue = bl(); + this.handshakeQueue = new BinaryStream(); } /**