diff options
author | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2023-01-10 14:54:04 +0100 |
commit | 99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch) | |
tree | e663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/node-forge/nodejs/test/tls.js | |
parent | 9871b03912fc28ad38b4037ebf26a78aa937baba (diff) | |
download | pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2 pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip |
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/node-forge/nodejs/test/tls.js')
-rw-r--r-- | school/node_modules/node-forge/nodejs/test/tls.js | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/school/node_modules/node-forge/nodejs/test/tls.js b/school/node_modules/node-forge/nodejs/test/tls.js new file mode 100644 index 0000000..d9ce944 --- /dev/null +++ b/school/node_modules/node-forge/nodejs/test/tls.js @@ -0,0 +1,191 @@ +(function() { + +function Tests(ASSERT, forge) { + describe('tls', function() { + it('should test TLS 1.0 PRF', function() { + // Note: This test vector is originally from: + // http://www.imc.org/ietf-tls/mail-archive/msg01589.html + // But that link is now dead. + var secret = forge.util.createBuffer().fillWithByte(0xAB, 48).getBytes(); + var seed = forge.util.createBuffer().fillWithByte(0xCD, 64).getBytes(); + var bytes = forge.tls.prf_tls1(secret, 'PRF Testvector', seed, 104); + var expect = + 'd3d4d1e349b5d515044666d51de32bab258cb521' + + 'b6b053463e354832fd976754443bcf9a296519bc' + + '289abcbc1187e4ebd31e602353776c408aafb74c' + + 'bc85eff69255f9788faa184cbb957a9819d84a5d' + + '7eb006eb459d3ae8de9810454b8b2d8f1afbc655' + + 'a8c9a013'; + ASSERT.equal(bytes.toHex(), expect); + }); + + it('should establish a TLS connection and transfer data', function(done) { + var end = {}; + var data = {}; + + createCertificate('server', data); + createCertificate('client', data); + data.client.connection = {}; + data.server.connection = {}; + + end.client = forge.tls.createConnection({ + server: false, + caStore: [data.server.cert], + sessionCache: {}, + cipherSuites: [ + forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA, + forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA], + virtualHost: 'server', + verify: function(c, verified, depth, certs) { + data.client.connection.commonName = + certs[0].subject.getField('CN').value; + data.client.connection.certVerified = verified; + return true; + }, + connected: function(c) { + c.prepare('Hello Server'); + }, + getCertificate: function(c, hint) { + return data.client.cert; + }, + getPrivateKey: function(c, cert) { + return data.client.privateKey; + }, + tlsDataReady: function(c) { + end.server.process(c.tlsData.getBytes()); + }, + dataReady: function(c) { + data.client.connection.data = c.data.getBytes(); + c.close(); + }, + closed: function(c) { + ASSERT.equal(data.client.connection.commonName, 'server'); + ASSERT.equal(data.client.connection.certVerified, true); + ASSERT.equal(data.client.connection.data, 'Hello Client'); + done(); + }, + error: function(c, error) { + ASSERT.equal(error.message, undefined); + } + }); + + end.server = forge.tls.createConnection({ + server: true, + caStore: [data.client.cert], + sessionCache: {}, + cipherSuites: [ + forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA, + forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA], + connected: function(c) { + }, + verifyClient: true, + verify: function(c, verified, depth, certs) { + data.server.connection.commonName = + certs[0].subject.getField('CN').value; + data.server.connection.certVerified = verified; + return true; + }, + getCertificate: function(c, hint) { + data.server.connection.certHint = hint[0]; + return data.server.cert; + }, + getPrivateKey: function(c, cert) { + return data.server.privateKey; + }, + tlsDataReady: function(c) { + end.client.process(c.tlsData.getBytes()); + }, + dataReady: function(c) { + data.server.connection.data = c.data.getBytes(); + c.prepare('Hello Client'); + c.close(); + }, + closed: function(c) { + ASSERT.equal(data.server.connection.certHint, 'server'); + ASSERT.equal(data.server.connection.commonName, 'client'); + ASSERT.equal(data.server.connection.certVerified, true); + ASSERT.equal(data.server.connection.data, 'Hello Server'); + }, + error: function(c, error) { + ASSERT.equal(error.message, undefined); + } + }); + + end.client.handshake(); + + function createCertificate(cn, data) { + var keys = forge.pki.rsa.generateKeyPair(512); + var cert = forge.pki.createCertificate(); + cert.publicKey = keys.publicKey; + cert.serialNumber = '01'; + cert.validity.notBefore = new Date(); + cert.validity.notAfter = new Date(); + cert.validity.notAfter.setFullYear( + cert.validity.notBefore.getFullYear() + 1); + var attrs = [{ + name: 'commonName', + value: cn + }, { + name: 'countryName', + value: 'US' + }, { + shortName: 'ST', + value: 'Virginia' + }, { + name: 'localityName', + value: 'Blacksburg' + }, { + name: 'organizationName', + value: 'Test' + }, { + shortName: 'OU', + value: 'Test' + }]; + cert.setSubject(attrs); + cert.setIssuer(attrs); + cert.setExtensions([{ + name: 'basicConstraints', + cA: true + }, { + name: 'keyUsage', + keyCertSign: true, + digitalSignature: true, + nonRepudiation: true, + keyEncipherment: true, + dataEncipherment: true + }, { + name: 'subjectAltName', + altNames: [{ + type: 6, // URI + value: 'https://myuri.com/webid#me' + }] + }]); + cert.sign(keys.privateKey); + data[cn] = { + cert: forge.pki.certificateToPem(cert), + privateKey: forge.pki.privateKeyToPem(keys.privateKey) + }; + } + }); + }); +} + +// check for AMD +if(typeof define === 'function') { + define([ + 'forge/forge' + ], function(forge) { + Tests( + // Global provided by test harness + ASSERT, + forge + ); + }); +} else if(typeof module === 'object' && module.exports) { + // assume NodeJS + Tests( + require('assert'), + require('../../js/forge')); +} + +})(); |