Since `common/crypto` already exists, it makes sense to keep crypto-related utilities there. The only exception being common.hasCrypto which is needed up front to determine if tests should be skipped. Eliminate the redundant check in hasFipsCrypto and just use crypto.getFips() directly where needed. PR-URL: https://github.com/nodejs/node/pull/56714 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
83 lines
1.7 KiB
JavaScript
83 lines
1.7 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto) {
|
|
common.skip('missing crypto');
|
|
}
|
|
|
|
const { opensslCli } = require('../common/crypto');
|
|
|
|
if (!opensslCli) {
|
|
common.skip('missing openssl cli');
|
|
}
|
|
|
|
const assert = require('assert');
|
|
|
|
const tls = require('tls');
|
|
const spawn = require('child_process').spawn;
|
|
|
|
const CIPHERS = 'PSK+HIGH';
|
|
const KEY = 'd731ef57be09e5204f0b205b60627028';
|
|
const IDENTITY = 'TestUser';
|
|
|
|
const server = tls.createServer({
|
|
ciphers: CIPHERS,
|
|
pskIdentityHint: IDENTITY,
|
|
pskCallback(socket, identity) {
|
|
assert.ok(socket instanceof tls.TLSSocket);
|
|
assert.ok(typeof identity === 'string');
|
|
if (identity === IDENTITY)
|
|
return Buffer.from(KEY, 'hex');
|
|
}
|
|
});
|
|
|
|
server.on('connection', common.mustCall());
|
|
|
|
server.on('secureConnection', (socket) => {
|
|
socket.write('hello\r\n');
|
|
|
|
socket.on('data', (data) => {
|
|
socket.write(data);
|
|
});
|
|
});
|
|
|
|
let gotHello = false;
|
|
let sentWorld = false;
|
|
let gotWorld = false;
|
|
|
|
server.listen(0, () => {
|
|
const client = spawn(opensslCli, [
|
|
's_client',
|
|
'-connect', `127.0.0.1:${server.address().port}`,
|
|
'-cipher', CIPHERS,
|
|
'-psk', KEY,
|
|
'-psk_identity', IDENTITY,
|
|
]);
|
|
|
|
let out = '';
|
|
|
|
client.stdout.setEncoding('utf8');
|
|
client.stdout.on('data', (d) => {
|
|
out += d;
|
|
|
|
if (!gotHello && /hello/.test(out)) {
|
|
gotHello = true;
|
|
client.stdin.write('world\r\n');
|
|
sentWorld = true;
|
|
}
|
|
|
|
if (!gotWorld && /world/.test(out)) {
|
|
gotWorld = true;
|
|
client.stdin.end();
|
|
}
|
|
});
|
|
|
|
client.on('exit', common.mustCall((code) => {
|
|
assert.ok(gotHello);
|
|
assert.ok(sentWorld);
|
|
assert.ok(gotWorld);
|
|
assert.strictEqual(code, 0);
|
|
server.close();
|
|
}));
|
|
});
|