mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
Signed-off-by: Tim Perry <pimterry@gmail.com> PR-URL: https://github.com/nodejs/node/pull/65105 Reviewed-By: Filip Skokan <panva.ip@gmail.com>
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
// The 'keylog' event is emitted from the TLS library's own stack, part way
|
|
// through the handshake. Writing to the socket from the handler must not
|
|
// corrupt the connection; the data must arrive intact.
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const assert = require('assert');
|
|
const fixtures = require('../common/fixtures');
|
|
const tls = require('tls');
|
|
|
|
const PAYLOAD = 'from-keylog';
|
|
|
|
const server = tls.createServer({
|
|
key: fixtures.readKey('agent1-key.pem'),
|
|
cert: fixtures.readKey('agent1-cert.pem'),
|
|
}, common.mustCall((socket) => {
|
|
socket.on('error', common.mustNotCall());
|
|
|
|
const onPayload = common.mustCall(() => {
|
|
assert.strictEqual(received, PAYLOAD);
|
|
socket.end();
|
|
server.close();
|
|
});
|
|
|
|
let received = '';
|
|
socket.on('data', (data) => {
|
|
received += data;
|
|
if (received.length >= PAYLOAD.length) onPayload();
|
|
});
|
|
}));
|
|
|
|
server.on('tlsClientError', common.mustNotCall());
|
|
|
|
server.listen(0, common.mustCall(() => {
|
|
const client = tls.connect({
|
|
port: server.address().port,
|
|
rejectUnauthorized: false,
|
|
});
|
|
|
|
// 'keylog' fires once per secret derived, so the count is version dependent.
|
|
// Write from the first one only, to keep what the server expects exact.
|
|
let written = false;
|
|
client.on('keylog', common.mustCallAtLeast(() => {
|
|
if (written) return;
|
|
written = true;
|
|
client.write(PAYLOAD, common.mustCall());
|
|
}));
|
|
|
|
client.on('error', common.mustNotCall());
|
|
}));
|