UNPKG

@reclaimprotocol/tls

Version:

WebCrypto Based Cross Platform TLS

56 lines (55 loc) 1.78 kB
import { Socket } from 'net'; import { pino } from 'pino'; import { makeTLSClient, uint8ArrayToStr } from "../index.js"; const LOGGER = pino(); LOGGER.level = process.env.LOG_LEVEL || 'info'; const host = readArg('--host'); if (!host) { console.error('Please provide a host to connect to using --host <hostname>'); process.exit(1); } const port = Number(readArg('--port') || 443); const socket = new Socket(); await new Promise((resolve, reject) => { const tls = makeTLSClient({ host, verifyServerCertificate: true, logger: LOGGER, // write raw bytes to the socket async write({ header, content }) { socket.write(header); socket.write(content); }, async onHandshake() { console.log('handshake completed successfully'); await tls.end(); socket.end(); }, onApplicationData(plaintext) { const str = uint8ArrayToStr(plaintext); console.log('received application data: ', str); }, onTlsEnd(error) { if (error) { reject(error); return; } resolve(); console.error('TLS connect ended: ', error); } }); socket.on('data', tls.handleReceivedBytes); // start handshake as soon as the socket connects socket.on('connect', () => tls.startHandshake()); socket.once('error', (err) => reject(err)); // use the TCP socket to connect to the server socket.connect({ host, port }); }); console.log(`Connected to ${host} successfully`); function readArg(arg) { const index = process.argv.indexOf(arg); if (index === -1) { return undefined; } return process.argv[index + 1] || ''; }