From 23563c7188e089929b60f9e10721c6fc43a220ff Mon Sep 17 00:00:00 2001 From: RaindropsSys Date: Thu, 22 Jun 2023 23:06:12 +0200 Subject: Updated 15 files, added includes/maintenance/deleteUnusedAssets.php and deleted 4944 files (automated) --- .../node_modules/node-forge/nodejs/.istanbul.yml | 2 - .../node_modules/node-forge/nodejs/README.md | 34 - .../school/node_modules/node-forge/nodejs/build.js | 8 - .../node_modules/node-forge/nodejs/minify.js | 8 - .../node_modules/node-forge/nodejs/package.json | 24 - .../node_modules/node-forge/nodejs/server.js | 46 - .../node_modules/node-forge/nodejs/test/aes.js | 1498 -------------------- .../node_modules/node-forge/nodejs/test/asn1.js | 262 ---- .../node_modules/node-forge/nodejs/test/browser.js | 41 - .../node_modules/node-forge/nodejs/test/csr.js | 148 -- .../node_modules/node-forge/nodejs/test/des.js | 155 -- .../node_modules/node-forge/nodejs/test/hmac.js | 85 -- .../node_modules/node-forge/nodejs/test/kem.js | 198 --- .../node_modules/node-forge/nodejs/test/md5.js | 117 -- .../node_modules/node-forge/nodejs/test/mgf1.js | 39 - .../node_modules/node-forge/nodejs/test/pbkdf2.js | 140 -- .../node_modules/node-forge/nodejs/test/pem.js | 104 -- .../node_modules/node-forge/nodejs/test/pkcs1.js | 1105 --------------- .../node_modules/node-forge/nodejs/test/pkcs12.js | 687 --------- .../node_modules/node-forge/nodejs/test/pkcs7.js | 350 ----- .../node_modules/node-forge/nodejs/test/random.js | 70 - .../node_modules/node-forge/nodejs/test/rc2.js | 109 -- .../node_modules/node-forge/nodejs/test/rsa.js | 602 -------- .../node_modules/node-forge/nodejs/test/sha1.js | 75 - .../node_modules/node-forge/nodejs/test/sha256.js | 81 -- .../node_modules/node-forge/nodejs/test/sha512.js | 174 --- .../node_modules/node-forge/nodejs/test/ssh.js | 193 --- .../node_modules/node-forge/nodejs/test/tls.js | 191 --- .../node_modules/node-forge/nodejs/test/util.js | 406 ------ .../node_modules/node-forge/nodejs/test/x509.js | 734 ---------- .../node_modules/node-forge/nodejs/ui/index.html | 12 - .../node_modules/node-forge/nodejs/ui/require.js | 35 - .../node_modules/node-forge/nodejs/ui/test.js | 36 - .../node_modules/node-forge/nodejs/ui/test.min.js | 1 - 34 files changed, 7770 deletions(-) delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/.istanbul.yml delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/README.md delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/build.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/minify.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/package.json delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/server.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/aes.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/asn1.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/browser.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/csr.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/des.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/hmac.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/kem.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/md5.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/mgf1.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/pbkdf2.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/pem.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/pkcs1.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/pkcs12.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/pkcs7.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/random.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/rc2.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/rsa.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/sha1.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/sha256.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/sha512.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/ssh.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/tls.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/util.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/test/x509.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/ui/index.html delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/ui/require.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/ui/test.js delete mode 100644 includes/external/school/node_modules/node-forge/nodejs/ui/test.min.js (limited to 'includes/external/school/node_modules/node-forge/nodejs') diff --git a/includes/external/school/node_modules/node-forge/nodejs/.istanbul.yml b/includes/external/school/node_modules/node-forge/nodejs/.istanbul.yml deleted file mode 100644 index 8a69b69..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/.istanbul.yml +++ /dev/null @@ -1,2 +0,0 @@ -instrumentation: - root: .. diff --git a/includes/external/school/node_modules/node-forge/nodejs/README.md b/includes/external/school/node_modules/node-forge/nodejs/README.md deleted file mode 100644 index 1be00fa..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/README.md +++ /dev/null @@ -1,34 +0,0 @@ -Running all the tests (headless-browser and node.js) -==================================================== - - npm install - npm test - -Running the browser-based tests -=============================== - - npm install - node server.js - -Then go to http://localhost:8083/. - -Testing Require.js optimised version of the JavaScript ------------------------------------------------------- - - npm install -g requirejs - r.js -o build.js - -You will now have a single optimised JS file at ui/test.min.js, containing the -tests and all the forge dependencies. - -Now edit ui/index.html and change `data-main="test"` to `data-main="test.min"`, -then reload http://localhost:8083/. - -Building a minimized single file for all forge modules ------------------------------------------------------- - - npm install -g requirejs - r.js -o minify.js - -You will now have forge.min.js, in the 'js' directory, which will contain all -forge modules. diff --git a/includes/external/school/node_modules/node-forge/nodejs/build.js b/includes/external/school/node_modules/node-forge/nodejs/build.js deleted file mode 100644 index 30ba7b5..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/build.js +++ /dev/null @@ -1,8 +0,0 @@ -({ - paths: { - forge: '../js' - }, - name: 'ui/test.js', - out: 'ui/test.min.js', - preserveLicenseComments: false -}) diff --git a/includes/external/school/node_modules/node-forge/nodejs/minify.js b/includes/external/school/node_modules/node-forge/nodejs/minify.js deleted file mode 100644 index 69d96a9..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/minify.js +++ /dev/null @@ -1,8 +0,0 @@ -({ - paths: { - forge: '../js' - }, - name: '../js/forge', - out: '../js/forge.min.js', - preserveLicenseComments: false -}) diff --git a/includes/external/school/node_modules/node-forge/nodejs/package.json b/includes/external/school/node_modules/node-forge/nodejs/package.json deleted file mode 100644 index cb88fc3..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "forge-nodejs-example", - "version": "0.1.0", - "private": true, - "main": "server.js", - "dependencies": { - "express": "~3.1.0", - "mocha": "~1.21.5", - "chai": "~1.10.0", - "grunt": "~0.4.5", - "grunt-mocha": "~0.4.12" - }, - "scripts": { - "run": "node server", - "test": "mocha -t 30000 -R spec test/*.js", - "coverage": "rm -rf coverage && ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- -u exports -t 30000 -R spec test/*.js", - "coverage-lcov": "rm -rf coverage && ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha --report lcovonly -- -u exports -t 30000 -R spec test/*.js", - "coverage-report": "./node_modules/.bin/istanbul report" - }, - "devDependencies": { - "istanbul": "^0.3.14", - "mocha-lcov-reporter": "0.0.2" - } -} diff --git a/includes/external/school/node_modules/node-forge/nodejs/server.js b/includes/external/school/node_modules/node-forge/nodejs/server.js deleted file mode 100644 index 175bd56..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/server.js +++ /dev/null @@ -1,46 +0,0 @@ -var PATH = require('path'); -var express = require('express'); -var PORT = 8083; - -exports.main = function(callback) { - try { - var app = express(); - - mountStaticDir(app, /^\/forge\/(.*)$/, PATH.join(__dirname, '../js')); - mountStaticDir(app, /^\/test\/(.*)$/, PATH.join(__dirname, 'test')); - mountStaticDir(app, /^\/mocha\/(.*)$/, PATH.join(__dirname, 'node_modules/mocha')); - mountStaticDir(app, /^\/chai\/(.*)$/, PATH.join(__dirname, 'node_modules/chai')); - app.get(/^\//, express.static(PATH.join(__dirname, 'ui'))); - - var server = app.listen(PORT); - - console.log('open http://localhost:' + PORT + '/'); - - return callback(null, { - server: server, - port: PORT - }); - } catch(err) { - return callback(err); - } -}; - -function mountStaticDir(app, route, path) { - app.get(route, function(req, res, next) { - var originalUrl = req.url; - req.url = req.params[0]; - express.static(path)(req, res, function() { - req.url = originalUrl; - return next.apply(null, arguments); - }); - }); -} - -if(require.main === module) { - exports.main(function(err) { - if(err) { - console.error(err.stack); - process.exit(1); - } - }); -} diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/aes.js b/includes/external/school/node_modules/node-forge/nodejs/test/aes.js deleted file mode 100644 index 6d8b221..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/aes.js +++ /dev/null @@ -1,1498 +0,0 @@ -(function() { - -function Tests(ASSERT, CIPHER, AES, UTIL) { - describe('aes', function() { - it('should encrypt a single block with a 128-bit key', function() { - var key = [0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f]; - var block = [0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff]; - - var output = []; - var w = AES._expandKey(key, false); - AES._updateBlock(w, block, output, false); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), '69c4e0d86a7b0430d8cdb78070b4c55a'); - }); - - it('should decrypt a single block with a 128-bit key', function() { - var key = [0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f]; - var block = [0x69c4e0d8, 0x6a7b0430, 0xd8cdb780, 0x70b4c55a]; - - var output = []; - var w = AES._expandKey(key, true); - AES._updateBlock(w, block, output, true); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), '00112233445566778899aabbccddeeff'); - }); - - it('should encrypt a single block with a 192-bit key', function() { - var key = [ - 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, - 0x10111213, 0x14151617]; - var block = [0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff]; - - var output = []; - var w = AES._expandKey(key, false); - AES._updateBlock(w, block, output, false); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), 'dda97ca4864cdfe06eaf70a0ec0d7191'); - }); - - it('should decrypt a single block with a 192-bit key', function() { - var key = [ - 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, - 0x10111213, 0x14151617]; - var block = [0xdda97ca4, 0x864cdfe0, 0x6eaf70a0, 0xec0d7191]; - - var output = []; - var w = AES._expandKey(key, true); - AES._updateBlock(w, block, output, true); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), '00112233445566778899aabbccddeeff'); - }); - - it('should encrypt a single block with a 256-bit key', function() { - var key = [ - 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, - 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f]; - var block = [0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff]; - - var output = []; - var w = AES._expandKey(key, false); - AES._updateBlock(w, block, output, false); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), '8ea2b7ca516745bfeafc49904b496089'); - }); - - it('should decrypt a single block with a 256-bit key', function() { - var key = [ - 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, - 0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f]; - var block = [0x8ea2b7ca, 0x516745bf, 0xeafc4990, 0x4b496089]; - - var output = []; - var w = AES._expandKey(key, true); - AES._updateBlock(w, block, output, true); - - var out = UTIL.createBuffer(); - out.putInt32(output[0]); - out.putInt32(output[1]); - out.putInt32(output[2]); - out.putInt32(output[3]); - - ASSERT.equal(out.toHex(), '00112233445566778899aabbccddeeff'); - }); - - // AES-128-ECB - (function() { - var keys = [ - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - '3ad77bb40d7a3660a89ecaf32466ef97', - 'f5d3d58503b9699de785895a96fdbaaf', - '43b1cd7f598ece23881b00e3ed030688', - '7b0c785e27e8ad3f8223207104725dd4' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-ecb encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-ECB', key); - cipher.mode.pad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-128-ecb decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-ECB', key); - cipher.mode.unpad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - })(i); - } - })(); - - // AES-192-ECB - (function() { - var keys = [ - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'bd334f1d6e45f25ff712a214571fa5cc', - '974104846d0ad3ad7734ecb3ecee4eef', - 'ef7afd2270e2e60adce0ba2face6444e', - '9a4b41ba738d6c72fb16691603c18e0e' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-192-ecb encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-ECB', key); - cipher.mode.pad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-192-ecb decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-ECB', key); - cipher.mode.unpad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - })(i); - } - })(); - - // AES-256-ECB - (function() { - var keys = [ - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'f3eed1bdb5d2a03c064b5a7e3db181f8', - '591ccb10d410ed26dc5ba74a31362870', - 'b6ed21b99ca6f4f9f153e7b1beafed1d', - '23304b7a39f9f3ff067d8d8f9e24ecc7' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-256-ecb encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-ECB', key); - cipher.mode.pad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-256-ecb decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-ECB', key); - cipher.mode.unpad = false; - cipher.start(); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - })(i); - } - })(); - - // AES-128-CBC - (function() { - var keys = [ - '06a9214036b8a15b512e03d534120006', - 'c286696d887c9aa0611bbb3e2025a45a', - '6c3ea0477630ce21a2ce334aa746c2cd', - '56e47a38c5598974bc46903dba290349' - ]; - - var ivs = [ - '3dafba429d9eb430b422da802c9fac41', - '562e17996d093d28ddb3ba695a2e6f58', - 'c782dc4c098c66cbd9cd27d825682c81', - '8ce82eefbea0da3c44699ed7db51b7d9' - ]; - - var inputs = [ - 'Single block msg', - '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', - 'This is a 48-byte message (exactly 3 AES blocks)', - 'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' + - 'b0b1b2b3b4b5b6b7b8b9babbbcbdbebf' + - 'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf' + - 'd0d1d2d3d4d5d6d7d8d9dadbdcdddedf' - ]; - - var outputs = [ - 'e353779c1079aeb82708942dbe77181a', - 'd296cd94c2cccf8a3a863028b5e1dc0a7586602d253cfff91b8266bea6d61ab1', - 'd0a02b3836451753d493665d33f0e886' + - '2dea54cdb293abc7506939276772f8d5' + - '021c19216bad525c8579695d83ba2684', - 'c30e32ffedc0774e6aff6af0869f71aa' + - '0f3af07a9a31a9c684db207eb0ef8e4e' + - '35907aa632c3ffdf868bb7b29d3d46ad' + - '83ce9f9a102ee99d49a53e87f4c3da55' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = (i & 1) ? UTIL.hexToBytes(inputs[i]) : inputs[i]; - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-cbc encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-CBC', key); - cipher.mode.pad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-128-cbc decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-CBC', key); - cipher.mode.unpad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = (i & 1) ? cipher.output.toHex() : cipher.output.bytes(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-192-CBC - (function() { - var keys = [ - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' - ]; - - var ivs = [ - '000102030405060708090A0B0C0D0E0F', - '4F021DB243BC633D7178183A9FA071E8', - 'B4D9ADA9AD7DEDF4E5E738763F69145A', - '571B242012FB7AE07FA9BAAC3DF102E0' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - '4f021db243bc633d7178183a9fa071e8', - 'b4d9ada9ad7dedf4e5e738763f69145a', - '571b242012fb7ae07fa9baac3df102e0', - '08b0e27988598881d920a9e64f5615cd' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-192-cbc encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-CBC', key); - cipher.mode.pad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-192-cbc decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-CBC', key); - cipher.mode.unpad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-256-CBC - (function() { - var keys = [ - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4' - ]; - - var ivs = [ - '000102030405060708090A0B0C0D0E0F', - 'F58C4C04D6E5F1BA779EABFB5F7BFBD6', - '9CFC4E967EDB808D679F777BC6702C7D', - '39F23369A9D9BACFA530E26304231461' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'f58c4c04d6e5f1ba779eabfb5f7bfbd6', - '9cfc4e967edb808d679f777bc6702c7d', - '39f23369a9d9bacfa530e26304231461', - 'b2eb05e2c39be9fcda6c19078c6a9d1b' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-256-cbc encrypt: ' + inputs[i], function() { - // encrypt w/no padding - var cipher = CIPHER.createCipher('AES-CBC', key); - cipher.mode.pad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-256-cbc decrypt: ' + outputs[i], function() { - // decrypt w/no padding - var cipher = CIPHER.createDecipher('AES-CBC', key); - cipher.mode.unpad = false; - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-128-CFB - (function() { - var keys = [ - '00000000000000000000000000000000', - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c', - '2b7e151628aed2a6abf7158809cf4f3c', - '00000000000000000000000000000000' - ]; - - var ivs = [ - '80000000000000000000000000000000', - '000102030405060708090a0b0c0d0e0f', - '3B3FD92EB72DAD20333449F8E83CFB4A', - 'C8A64537A0B3A93FCDE3CDAD9F1CE58B', - '26751F67A3CBB140B1808CF187A4F4DF', - '60f9ff04fac1a25657bf5b36b5efaf75' - ]; - - var inputs = [ - '00000000000000000000000000000000', - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710', - 'This is a 48-byte message (exactly 3 AES blocks)' - ]; - - var outputs = [ - '3ad78e726c1ec02b7ebfe92b23d9ec34', - '3b3fd92eb72dad20333449f8e83cfb4a', - 'c8a64537a0b3a93fcde3cdad9f1ce58b', - '26751f67a3cbb140b1808cf187a4f4df', - 'c04b05357c5d1c0eeac4c66f9ff7f2e6', - '52396a2ba1ba420c5e5b699a814944d8' + - 'f4e7fbf984a038319fbc0b4ee45cfa6f' + - '07b2564beab5b5e92dbd44cb345f49b4' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = (i !== 5) ? UTIL.hexToBytes(inputs[i]) : inputs[i]; - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-cfb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-128-cfb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = (i !== 5) ? - cipher.output.toHex() : cipher.output.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - - it('should aes-128-cfb encrypt (one byte at a time): ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CFB', key); - cipher.start({iv: iv}); - var input_ = UTIL.createBuffer(input); - var out = UTIL.createBuffer(); - while(input_.length() > 0) { - cipher.update(UTIL.createBuffer(input_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - ASSERT.equal(out.toHex(), outputs[i]); - }); - - it('should aes-128-cfb decrypt (one byte at a time): ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CFB', key); - cipher.start({iv: iv}); - var output_ = UTIL.createBuffer(output); - var out = UTIL.createBuffer(); - while(output_.length() > 0) { - cipher.update(UTIL.createBuffer(output_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - out = (i !== 5) ? out.toHex() : out.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-192-CFB - (function() { - var keys = [ - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' - ]; - - var ivs = [ - '000102030405060708090A0B0C0D0E0F', - 'CDC80D6FDDF18CAB34C25909C99A4174', - '67CE7F7F81173621961A2B70171D3D7A', - '2E1E8A1DD59B88B1C8E60FED1EFAC4C9' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'cdc80d6fddf18cab34c25909c99a4174', - '67ce7f7f81173621961a2b70171d3d7a', - '2e1e8a1dd59b88b1c8e60fed1efac4c9', - 'c05f9f9ca9834fa042ae8fba584b09ff' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-192-cfb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-192-cfb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-256-CFB - (function() { - var keys = [ - '861009ec4d599fab1f40abc76e6f89880cff5833c79c548c99f9045f191cd90b' - ]; - - var ivs = [ - 'd927ad81199aa7dcadfdb4e47b6dc694' - ]; - - var inputs = [ - 'MY-DATA-AND-HERE-IS-MORE-DATA' - ]; - - var outputs = [ - '80eb666a9fc9e263faf71e87ffc94451d7d8df7cfcf2606470351dd5ac' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = inputs[i]; - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-256-cfb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-256-cfb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-128-OFB - (function() { - var keys = [ - '00000000000000000000000000000000', - '00000000000000000000000000000000', - '00000000000000000000000000000000' - ]; - - var ivs = [ - '80000000000000000000000000000000', - 'c8ca0d6a35dbeac776e911ee16bea7d3', - '80000000000000000000000000000000' - ]; - - var inputs = [ - '00000000000000000000000000000000', - 'This is a 48-byte message (exactly 3 AES blocks)', - '0000' - ]; - - var outputs = [ - '3ad78e726c1ec02b7ebfe92b23d9ec34', - '39c0190727a76b2a90963426f63689cf' + - 'cdb8a2be8e20c5e877a81a724e3611f6' + - '2ecc386f2e941b2441c838906002be19', - '3ad7' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = (i !== 1) ? UTIL.hexToBytes(inputs[i]) : inputs[i]; - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-ofb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-128-ofb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = (i !== 1) ? - cipher.output.toHex() : cipher.output.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - - it('should aes-128-ofb encrypt (one byte at a time): ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-OFB', key); - cipher.start({iv: iv}); - var input_ = UTIL.createBuffer(input); - var out = UTIL.createBuffer(); - while(input_.length() > 0) { - cipher.update(UTIL.createBuffer(input_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - ASSERT.equal(out.toHex(), outputs[i]); - }); - - it('should aes-128-ofb decrypt (one byte at a time): ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-OFB', key); - cipher.start({iv: iv}); - var output_ = UTIL.createBuffer(output); - var out = UTIL.createBuffer(); - while(output_.length() > 0) { - cipher.update(UTIL.createBuffer(output_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - out = (i !== 1) ? out.toHex() : out.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-192-OFB - (function() { - var keys = [ - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' - ]; - - var ivs = [ - '000102030405060708090A0B0C0D0E0F', - 'A609B38DF3B1133DDDFF2718BA09565E', - '52EF01DA52602FE0975F78AC84BF8A50', - 'BD5286AC63AABD7EB067AC54B553F71D' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'cdc80d6fddf18cab34c25909c99a4174', - 'fcc28b8d4c63837c09e81700c1100401', - '8d9a9aeac0f6596f559c6d4daf59a5f2', - '6d9f200857ca6c3e9cac524bd9acc92a' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-192-ofb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-192-ofb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-256-OFB - (function() { - var keys = [ - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4' - ]; - - var ivs = [ - '000102030405060708090A0B0C0D0E0F', - 'B7BF3A5DF43989DD97F0FA97EBCE2F4A', - 'E1C656305ED1A7A6563805746FE03EDC', - '41635BE625B48AFC1666DD42A09D96E7' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'ae2d8a571e03ac9c9eb76fac45af8e51', - '30c81c46a35ce411e5fbc1191a0a52ef', - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - 'dc7e84bfda79164b7ecd8486985d3860', - '4febdc6740d20b3ac88f6ad82a4fb08d', - '71ab47a086e86eedf39d1c5bba97c408', - '0126141d67f37be8538f5a8be740e484' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-256-ofb encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-256-ofb decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-OFB', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-128-CTR - (function() { - var keys = [ - '2b7e151628aed2a6abf7158809cf4f3c', - '00000000000000000000000000000000', - '2b7e151628aed2a6abf7158809cf4f3c' - ]; - - var ivs = [ - 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', - '650cdb80ff9fc758342d2bd99ee2abcf', - 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a', - 'This is a 48-byte message (exactly 3 AES blocks)', - '6bc1be' - ]; - - var outputs = [ - '874d6191b620e3261bef6864990db6ce', - '5ede11d00e9a76ec1d5e7e811ea3dd1c' + - 'e09ee941210f825d35718d3282796f1c' + - '07c3f1cb424f2b365766ab5229f5b5a4', - '874d61' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = (i !== 1) ? UTIL.hexToBytes(inputs[i]) : inputs[i]; - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-ctr encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-128-ctr decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = (i !== 1) ? - cipher.output.toHex() : cipher.output.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - - it('should aes-128-ctr encrypt (one byte at a time): ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CTR', key); - cipher.start({iv: iv}); - var input_ = UTIL.createBuffer(input); - var out = UTIL.createBuffer(); - while(input_.length() > 0) { - cipher.update(UTIL.createBuffer(input_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - ASSERT.equal(out.toHex(), outputs[i]); - }); - - it('should aes-128-ctr decrypt (one byte at a time): ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CTR', key); - cipher.start({iv: iv}); - var output_ = UTIL.createBuffer(output); - var out = UTIL.createBuffer(); - while(output_.length() > 0) { - cipher.update(UTIL.createBuffer(output_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - out = (i !== 1) ? out.toHex() : out.getBytes(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-192-CTR - (function() { - var keys = [ - '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b' - ]; - - var ivs = [ - 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a' + - 'ae2d8a571e03ac9c9eb76fac45af8e51' + - '30c81c46a35ce411e5fbc1191a0a52ef' + - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - '1abc932417521ca24f2b0459fe7e6e0b' + - '090339ec0aa6faefd5ccc2c6f4ce8e94' + - '1e36b26bd1ebc670d1bd1d665620abf7' + - '4f78a7f6d29809585a97daec58c6b050' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-192-ctr encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-192-ctr decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-256-CTR - (function() { - var keys = [ - '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4' - ]; - - var ivs = [ - 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' - ]; - - var inputs = [ - '6bc1bee22e409f96e93d7e117393172a' + - 'ae2d8a571e03ac9c9eb76fac45af8e51' + - '30c81c46a35ce411e5fbc1191a0a52ef' + - 'f69f2445df4f9b17ad2b417be66c3710' - ]; - - var outputs = [ - '601ec313775789a5b7a7f504bbf3d228' + - 'f443e3ca4d62b59aca84e990cacaf5c5' + - '2b0930daa23de94ce87017ba2d84988d' + - 'dfc9c58db67aada613c2dd08457941a6' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-256-ctr encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - }); - - it('should aes-256-ctr decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-CTR', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer(output)); - cipher.finish(); - var out = cipher.output.toHex(); - ASSERT.equal(out, inputs[i]); - }); - })(i); - } - })(); - - // AES-128-GCM - (function() { - var keys = [ - '00000000000000000000000000000000', - '00000000000000000000000000000000', - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308', - '00000000000000000000000000000000' - ]; - - var ivs = [ - '000000000000000000000000', - '000000000000000000000000', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbad', - '9313225df88406e555909c5aff5269aa' + - '6a7a9538534f7da1e4c303d2a318a728' + - 'c3c0c95156809539fcf0e2429a6b5254' + - '16aedbf5a0de6a57a637b39b', - '000000000000000000000000' - ]; - - var adatas = [ - '', - '', - '', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - '' - ]; - - var inputs = [ - '', - '00000000000000000000000000000000', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b391aafd255', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - '0000' - ]; - - var outputs = [ - '', - '0388dace60b6a392f328c2b971b2fe78', - '42831ec2217774244b7221b784d0d49c' + - 'e3aa212f2c02a4e035c17e2329aca12e' + - '21d514b25466931c7d8f6a5aac84aa05' + - '1ba30b396a0aac973d58e091473f5985', - '42831ec2217774244b7221b784d0d49c' + - 'e3aa212f2c02a4e035c17e2329aca12e' + - '21d514b25466931c7d8f6a5aac84aa05' + - '1ba30b396a0aac973d58e091', - '61353b4c2806934a777ff51fa22a4755' + - '699b2a714fcdc6f83766e5f97b6c7423' + - '73806900e49f24b22b097544d4896b42' + - '4989b5e1ebac0f07c23f4598', - '8ce24998625615b603a033aca13fb894' + - 'be9112a5c3a211a8ba262a3cca7e2ca7' + - '01e4a9a4fba43c90ccdcb281d48c7c6f' + - 'd62875d2aca417034c34aee5', - '0388' - ]; - - var tags = [ - '58e2fccefa7e3061367f1d57a4e7455a', - 'ab6e47d42cec13bdf53a67b21257bddf', - '4d5c2af327cd64a62cf35abd2ba6fab4', - '5bc94fbc3221a5db94fae95ae7121a47', - '3612d2e79e3b0785561be14aaca2fccb', - '619cc5aefffe0bfa462af43c1699d050', - '93dcdd26f79ec1dd9bff57204d9b33f5' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var adata = UTIL.hexToBytes(adatas[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-gcm encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-GCM', key); - cipher.start({iv: iv, additionalData: adata}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - }); - - it('should aes-128-gcm decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-GCM', key); - cipher.start({ - iv: iv, - additionalData: adata, - tag: UTIL.hexToBytes(tags[i]) - }); - cipher.update(UTIL.createBuffer(output)); - var pass = cipher.finish(); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - ASSERT.equal(pass, true); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - - it('should aes-128-gcm encrypt (one byte at a time): ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-GCM', key); - cipher.start({iv: iv, additionalData: adata}); - var input_ = UTIL.createBuffer(input); - var out = UTIL.createBuffer(); - while(input_.length() > 0) { - cipher.update(UTIL.createBuffer(input_.getBytes(1))); - ASSERT.equal(cipher.output.length(), 1); - out.putByte(cipher.output.getByte()); - } - cipher.finish(); - ASSERT.equal(out.toHex(), outputs[i]); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - }); - })(i); - } - })(); - - // AES-192-GCM - (function() { - var keys = [ - '00000000000000000000000000000000' + - '0000000000000000', - '00000000000000000000000000000000' + - '0000000000000000', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c' - ]; - - var ivs = [ - '000000000000000000000000', - '000000000000000000000000', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbad', - '9313225df88406e555909c5aff5269aa' + - '6a7a9538534f7da1e4c303d2a318a728' + - 'c3c0c95156809539fcf0e2429a6b5254' + - '16aedbf5a0de6a57a637b39b' - ]; - - var adatas = [ - '', - '', - '', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2' - ]; - - var inputs = [ - '', - '00000000000000000000000000000000', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b391aafd255', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39' - ]; - - var outputs = [ - '', - '98e7247c07f0fe411c267e4384b0f600', - '3980ca0b3c00e841eb06fac4872a2757' + - '859e1ceaa6efd984628593b40ca1e19c' + - '7d773d00c144c525ac619d18c84a3f47' + - '18e2448b2fe324d9ccda2710acade256', - '3980ca0b3c00e841eb06fac4872a2757' + - '859e1ceaa6efd984628593b40ca1e19c' + - '7d773d00c144c525ac619d18c84a3f47' + - '18e2448b2fe324d9ccda2710', - '0f10f599ae14a154ed24b36e25324db8' + - 'c566632ef2bbb34f8347280fc4507057' + - 'fddc29df9a471f75c66541d4d4dad1c9' + - 'e93a19a58e8b473fa0f062f7', - 'd27e88681ce3243c4830165a8fdcf9ff' + - '1de9a1d8e6b447ef6ef7b79828666e45' + - '81e79012af34ddd9e2f037589b292db3' + - 'e67c036745fa22e7e9b7373b' - ]; - - var tags = [ - 'cd33b28ac773f74ba00ed1f312572435', - '2ff58d80033927ab8ef4d4587514f0fb', - '9924a7c8587336bfb118024db8674a14', - '2519498e80f1478f37ba55bd6d27618c', - '65dcc57fcf623a24094fcca40d3533f8', - 'dcf566ff291c25bbb8568fc3d376a6d9' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var adata = UTIL.hexToBytes(adatas[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-gcm encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-GCM', key); - cipher.start({iv: iv, additionalData: adata}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - }); - - it('should aes-128-gcm decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-GCM', key); - cipher.start({ - iv: iv, - additionalData: adata, - tag: UTIL.hexToBytes(tags[i]) - }); - cipher.update(UTIL.createBuffer(output)); - var pass = cipher.finish(); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - ASSERT.equal(pass, true); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - })(i); - } - })(); - - // AES-256-GCM - (function() { - var keys = [ - '00000000000000000000000000000000' + - '00000000000000000000000000000000', - '00000000000000000000000000000000' + - '00000000000000000000000000000000', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c6d6a8f9467308308', - 'feffe9928665731c6d6a8f9467308308' + - 'feffe9928665731c6d6a8f9467308308' - ]; - - var ivs = [ - '000000000000000000000000', - '000000000000000000000000', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbaddecaf888', - 'cafebabefacedbad', - '9313225df88406e555909c5aff5269aa' + - '6a7a9538534f7da1e4c303d2a318a728' + - 'c3c0c95156809539fcf0e2429a6b5254' + - '16aedbf5a0de6a57a637b39b' - ]; - - var adatas = [ - '', - '', - '', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2', - 'feedfacedeadbeeffeedfacedeadbeef' + - 'abaddad2' - ]; - - var inputs = [ - '', - '00000000000000000000000000000000', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b391aafd255', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39', - 'd9313225f88406e5a55909c5aff5269a' + - '86a7a9531534f7da2e4c303d8a318a72' + - '1c3c0c95956809532fcf0e2449a6b525' + - 'b16aedf5aa0de657ba637b39' - ]; - - var outputs = [ - '', - 'cea7403d4d606b6e074ec5d3baf39d18', - '522dc1f099567d07f47f37a32a84427d' + - '643a8cdcbfe5c0c97598a2bd2555d1aa' + - '8cb08e48590dbb3da7b08b1056828838' + - 'c5f61e6393ba7a0abcc9f662898015ad', - '522dc1f099567d07f47f37a32a84427d' + - '643a8cdcbfe5c0c97598a2bd2555d1aa' + - '8cb08e48590dbb3da7b08b1056828838' + - 'c5f61e6393ba7a0abcc9f662', - 'c3762df1ca787d32ae47c13bf19844cb' + - 'af1ae14d0b976afac52ff7d79bba9de0' + - 'feb582d33934a4f0954cc2363bc73f78' + - '62ac430e64abe499f47c9b1f', - '5a8def2f0c9e53f1f75d7853659e2a20' + - 'eeb2b22aafde6419a058ab4f6f746bf4' + - '0fc0c3b780f244452da3ebf1c5d82cde' + - 'a2418997200ef82e44ae7e3f' - ]; - - var tags = [ - '530f8afbc74536b9a963b4f1c4cb738b', - 'd0d1c8a799996bf0265b98b5d48ab919', - 'b094dac5d93471bdec1a502270e3cc6c', - '76fc6ece0f4e1768cddf8853bb2d551b', - '3a337dbf46a792c45e454913fe2ea8f2', - 'a44a8266ee1c8eb0c8b5d4cf5ae9f19a' - ]; - - for(var i = 0; i < keys.length; ++i) { - (function(i) { - var key = UTIL.hexToBytes(keys[i]); - var iv = UTIL.hexToBytes(ivs[i]); - var adata = UTIL.hexToBytes(adatas[i]); - var input = UTIL.hexToBytes(inputs[i]); - var output = UTIL.hexToBytes(outputs[i]); - - it('should aes-128-gcm encrypt: ' + inputs[i], function() { - // encrypt - var cipher = CIPHER.createCipher('AES-GCM', key); - cipher.start({iv: iv, additionalData: adata}); - cipher.update(UTIL.createBuffer(input)); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), outputs[i]); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - }); - - it('should aes-128-gcm decrypt: ' + outputs[i], function() { - // decrypt - var cipher = CIPHER.createDecipher('AES-GCM', key); - cipher.start({ - iv: iv, - additionalData: adata, - tag: UTIL.hexToBytes(tags[i]) - }); - cipher.update(UTIL.createBuffer(output)); - var pass = cipher.finish(); - ASSERT.equal(cipher.mode.tag.toHex(), tags[i]); - ASSERT.equal(pass, true); - ASSERT.equal(cipher.output.toHex(), inputs[i]); - }); - })(i); - } - })(); - }); -} - -// check for AMD -var forge = {}; -if(typeof define === 'function') { - define([ - 'forge/cipher', - 'forge/aes', - 'forge/util' - ], function(CIPHER, AES, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - CIPHER(forge), - AES(forge), - UTIL(forge) - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/cipher')(forge), - require('../../js/aes')(forge), - require('../../js/util')(forge)); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/asn1.js b/includes/external/school/node_modules/node-forge/nodejs/test/asn1.js deleted file mode 100644 index 7d0880e..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/asn1.js +++ /dev/null @@ -1,262 +0,0 @@ -(function() { - -function Tests(ASSERT, ASN1, UTIL) { - describe('asn1', function() { - // TODO: add more ASN.1 coverage - - it('should convert an OID to DER', function() { - ASSERT.equal(ASN1.oidToDer('1.2.840.113549').toHex(), '2a864886f70d'); - }); - - it('should convert an OID from DER', function() { - var der = UTIL.hexToBytes('2a864886f70d'); - ASSERT.equal(ASN1.derToOid(der), '1.2.840.113549'); - }); - - it('should convert INTEGER 0 to DER', function() { - ASSERT.equal(ASN1.integerToDer(0).toHex(), '00'); - }); - - it('should convert INTEGER 1 to DER', function() { - ASSERT.equal(ASN1.integerToDer(1).toHex(), '01'); - }); - - it('should convert INTEGER 127 to DER', function() { - ASSERT.equal(ASN1.integerToDer(127).toHex(), '7f'); - }); - - it('should convert INTEGER 128 to DER', function() { - ASSERT.equal(ASN1.integerToDer(128).toHex(), '0080'); - }); - - it('should convert INTEGER 256 to DER', function() { - ASSERT.equal(ASN1.integerToDer(256).toHex(), '0100'); - }); - - it('should convert INTEGER -128 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-128).toHex(), '80'); - }); - - it('should convert INTEGER -129 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-129).toHex(), 'ff7f'); - }); - - it('should convert INTEGER 32768 to DER', function() { - ASSERT.equal(ASN1.integerToDer(32768).toHex(), '008000'); - }); - - it('should convert INTEGER -32768 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-32768).toHex(), '8000'); - }); - - it('should convert INTEGER -32769 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-32769).toHex(), 'ff7fff'); - }); - - it('should convert INTEGER 8388608 to DER', function() { - ASSERT.equal(ASN1.integerToDer(8388608).toHex(), '00800000'); - }); - - it('should convert INTEGER -8388608 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-8388608).toHex(), '800000'); - }); - - it('should convert INTEGER -8388609 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-8388609).toHex(), 'ff7fffff'); - }); - - it('should convert INTEGER 2147483647 to DER', function() { - ASSERT.equal(ASN1.integerToDer(2147483647).toHex(), '7fffffff'); - }); - - it('should convert INTEGER -2147483648 to DER', function() { - ASSERT.equal(ASN1.integerToDer(-2147483648).toHex(), '80000000'); - }); - - it('should convert INTEGER 0 from DER', function() { - var der = UTIL.hexToBytes('00'); - ASSERT.equal(ASN1.derToInteger(der), 0); - }); - - it('should convert INTEGER 1 from DER', function() { - var der = UTIL.hexToBytes('01'); - ASSERT.equal(ASN1.derToInteger(der), 1); - }); - - it('should convert INTEGER 127 from DER', function() { - var der = UTIL.hexToBytes('7f'); - ASSERT.equal(ASN1.derToInteger(der), 127); - }); - - it('should convert INTEGER 128 from DER', function() { - var der = UTIL.hexToBytes('0080'); - ASSERT.equal(ASN1.derToInteger(der), 128); - }); - - it('should convert INTEGER 256 from DER', function() { - var der = UTIL.hexToBytes('0100'); - ASSERT.equal(ASN1.derToInteger(der), 256); - }); - - it('should convert INTEGER -128 from DER', function() { - var der = UTIL.hexToBytes('80'); - ASSERT.equal(ASN1.derToInteger(der), -128); - }); - - it('should convert INTEGER -129 from DER', function() { - var der = UTIL.hexToBytes('ff7f'); - ASSERT.equal(ASN1.derToInteger(der), -129); - }); - - it('should convert INTEGER 32768 from DER', function() { - var der = UTIL.hexToBytes('008000'); - ASSERT.equal(ASN1.derToInteger(der), 32768); - }); - - it('should convert INTEGER -32768 from DER', function() { - var der = UTIL.hexToBytes('8000'); - ASSERT.equal(ASN1.derToInteger(der), -32768); - }); - - it('should convert INTEGER -32769 from DER', function() { - var der = UTIL.hexToBytes('ff7fff'); - ASSERT.equal(ASN1.derToInteger(der), -32769); - }); - - it('should convert INTEGER 8388608 from DER', function() { - var der = UTIL.hexToBytes('00800000'); - ASSERT.equal(ASN1.derToInteger(der), 8388608); - }); - - it('should convert INTEGER -8388608 from DER', function() { - var der = UTIL.hexToBytes('800000'); - ASSERT.equal(ASN1.derToInteger(der), -8388608); - }); - - it('should convert INTEGER -8388609 from DER', function() { - var der = UTIL.hexToBytes('ff7fffff'); - ASSERT.equal(ASN1.derToInteger(der), -8388609); - }); - - it('should convert INTEGER 2147483647 from DER', function() { - var der = UTIL.hexToBytes('7fffffff'); - ASSERT.equal(ASN1.derToInteger(der), 2147483647); - }); - - it('should convert INTEGER -2147483648 from DER', function() { - var der = UTIL.hexToBytes('80000000'); - ASSERT.equal(ASN1.derToInteger(der), -2147483648); - }); - - (function() { - var tests = [{ - in: '20110223123400', - out: 1298464440000 - }, { - in: '20110223123400.1', - out: 1298464440100 - }, { - in: '20110223123400.123', - out: 1298464440123 - }]; - for(var i = 0; i < tests.length; ++i) { - var test = tests[i]; - it('should convert local generalized time "' + test.in + '" to a Date', function() { - var d = ASN1.generalizedTimeToDate(test.in); - var localOffset = d.getTimezoneOffset() * 60000; - ASSERT.equal(d.getTime(), test.out + localOffset); - }); - } - })(); - - (function() { - var tests = [{ - in: '20110223123400Z', // Wed Feb 23 12:34:00.000 UTC 2011 - out: 1298464440000 - }, { - in: '20110223123400.1Z', // Wed Feb 23 12:34:00.100 UTC 2011 - out: 1298464440100 - }, { - in: '20110223123400.123Z', // Wed Feb 23 12:34:00.123 UTC 2011 - out: 1298464440123 - }, { - in: '20110223123400+0200', // Wed Feb 23 10:34:00.000 UTC 2011 - out: 1298457240000 - }, { - in: '20110223123400.1+0200', // Wed Feb 23 10:34:00.100 UTC 2011 - out: 1298457240100 - }, { - in: '20110223123400.123+0200', // Wed Feb 23 10:34:00.123 UTC 2011 - out: 1298457240123 - }, { - in: '20110223123400-0200', // Wed Feb 23 14:34:00.000 UTC 2011 - out: 1298471640000 - }, { - in: '20110223123400.1-0200', // Wed Feb 23 14:34:00.100 UTC 2011 - out: 1298471640100 - }, { - in: '20110223123400.123-0200', // Wed Feb 23 14:34:00.123 UTC 2011 - out: 1298471640123 - }]; - for(var i = 0; i < tests.length; ++i) { - var test = tests[i]; - it('should convert utc generalized time "' + test.in + '" to a Date', function() { - var d = ASN1.generalizedTimeToDate(test.in); - ASSERT.equal(d.getTime(), test.out); - }); - } - })(); - - (function() { - var tests = [{ - in: '1102231234Z', // Wed Feb 23 12:34:00 UTC 2011 - out: 1298464440000 - }, { - in: '1102231234+0200', // Wed Feb 23 10:34:00 UTC 2011 - out: 1298457240000 - }, { - in: '1102231234-0200', // Wed Feb 23 14:34:00 UTC 2011 - out: 1298471640000 - }, { - in: '110223123456Z', // Wed Feb 23 12:34:56 UTC 2011 - out: 1298464496000 - }, { - in: '110223123456+0200', // Wed Feb 23 10:34:56 UTC 2011 - out: 1298457296000 - }, { - in: '110223123456-0200', // Wed Feb 23 14:34:56 UTC 2011 - out: 1298471696000 - }]; - for(var i = 0; i < tests.length; ++i) { - var test = tests[i]; - it('should convert utc time "' + test.in + '" to a Date', function() { - var d = ASN1.utcTimeToDate(test.in); - ASSERT.equal(d.getTime(), test.out); - }); - } - })(); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/asn1', - 'forge/util' - ], function(ASN1, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - ASN1(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/asn1')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/browser.js b/includes/external/school/node_modules/node-forge/nodejs/test/browser.js deleted file mode 100644 index a96b2d6..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/browser.js +++ /dev/null @@ -1,41 +0,0 @@ -var server = require('../server'); -var grunt = require('grunt'); - -describe('browser', function() { - it('should run tests', function(done) { - this.timeout(60 * 1000 * 5); - - return server.main(function(err, info) { - if(err) { - return done(err); - } - - grunt.initConfig({ - mocha: { - all: { - options: { - reporter: 'List', - urls: ['http://localhost:' + info.port + '/index.html'] - } - } - } - }); - - grunt.loadNpmTasks('grunt-mocha'); - - grunt.registerInitTask('default', function() { - grunt.task.run(['mocha']); - }); - grunt.tasks(['default'], { - //debug: true - }, function() { - if(err) { - return done(err); - } - // finish immediately - done(null); - return info.server.close(); - }); - }); - }); -}); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/csr.js b/includes/external/school/node_modules/node-forge/nodejs/test/csr.js deleted file mode 100644 index 340c09f..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/csr.js +++ /dev/null @@ -1,148 +0,0 @@ -(function() { - -function Tests(ASSERT, PKI) { - var _pem = { - privateKey: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICXQIBAAKBgQDL0EugUiNGMWscLAVM0VoMdhDZEJOqdsUMpx9U0YZI7szokJqQ\r\n' + - 'NIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMGTkP3VF29vXBo+dLq5e+8VyAy\r\n' + - 'Q3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGtvnM+z0MYDdKo80efzwIDAQAB\r\n' + - 'AoGAIzkGONi5G+JifmXlLJdplom486p3upf4Ce2/7mqfaG9MnkyPSairKD/JXvfh\r\n' + - 'NNWkkN8DKKDKBcVVElPgORYT0qwrWc7ueLBMUCbRXb1ZyfEulimG0R3kjUh7NYau\r\n' + - 'DaIkVgfykXGSQMZx8FoaT6L080zd+0emKDDYRrb+/kgJNJECQQDoUZoiC2K/DWNY\r\n' + - 'h3/ppZ0ane2y4SBmJUHJVMPQ2CEgxsrJTxet668ckNCKaOP/3VFPoWC41f17DvKq\r\n' + - 'noYINNntAkEA4JbZBZBVUrQFhHlrpXT4jzqtO2RlKZzEq8qmFZfEErxOT1WMyyCi\r\n' + - 'lAQ5gUKardo1Kf0omC8Xq/uO9ZYdED55KwJBALs6cJ65UFaq4oLJiQPzLd7yokuE\r\n' + - 'dcj8g71PLBTW6jPxIiMFNA89nz3FU9wIVp+xbMNhSoMMKqIPVPC+m0Rn260CQQDA\r\n' + - 'I83fWK/mZWUjBM33a68KumRiH238v8XyQxj7+C8i6D8G2GXvkigFAehAkb7LZZd+\r\n' + - 'KLuGFyPlWv3fVWHf99KpAkBQFKk3MRMl6IGJZUEFQe4l5whm8LkGU4acSqv9B3xt\r\n' + - 'qROkCrsFrMPqjuuzEmyHoQZ64r2PLJg7FOuyhBnQUOt4\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKey: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDL0EugUiNGMWscLAVM0VoMdhDZ\r\n' + - 'EJOqdsUMpx9U0YZI7szokJqQNIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMG\r\n' + - 'TkP3VF29vXBo+dLq5e+8VyAyQ3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGt\r\n' + - 'vnM+z0MYDdKo80efzwIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n' - }; - - describe('csr', function() { - it('should generate a certification request', function() { - var keys = { - privateKey: PKI.privateKeyFromPem(_pem.privateKey), - publicKey: PKI.publicKeyFromPem(_pem.publicKey) - }; - var csr = PKI.createCertificationRequest(); - csr.publicKey = keys.publicKey; - csr.setSubject([{ - name: 'commonName', - value: 'example.org' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]); - // add optional attributes - csr.setAttributes([{ - name: 'challengePassword', - value: 'password' - }, { - name: 'unstructuredName', - value: 'My company' - }, { - name: 'extensionRequest', - extensions: [{ - name: 'subjectAltName', - altNames: [{ - // type 2 is DNS - type: 2, - value: 'test.domain.com' - }, { - type: 2, - value: 'other.domain.com' - }, { - type: 2, - value: 'www.domain.net' - }] - }] - }]); - - // sign certification request - csr.sign(keys.privateKey); - - var pem = PKI.certificationRequestToPem(csr); - csr = PKI.certificationRequestFromPem(pem); - ASSERT.ok(csr.getAttribute({name: 'extensionRequest'})); - ASSERT.equal(csr.getAttribute({name: 'extensionRequest'}).extensions[0].name, 'subjectAltName'); - ASSERT.deepEqual(csr.getAttribute({name: 'extensionRequest'}).extensions[0].altNames, [{ - // type 2 is DNS - type: 2, - value: 'test.domain.com' - }, { - type: 2, - value: 'other.domain.com' - }, { - type: 2, - value: 'www.domain.net' - }]); - ASSERT.ok(csr.verify()); - }); - - it('should load an OpenSSL-generated certification request', function() { - var pem = '-----BEGIN CERTIFICATE REQUEST-----\r\n' + - 'MIICdTCCAV0CAQAwMDEVMBMGA1UEAwwMTXlDb21tb25OYW1lMRcwFQYDVQQKDA5N\r\n' + - 'eU9yZ2FuaXphdGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKRU\r\n' + - 'zrAMbiiSjAYYl3PWsOrNwY0VtemgRZc0t7+3FlWp1e8uIA3KxZFZY875wo0QOvD+\r\n' + - 'AdNv5+YnokgzOi83F3T4yewBSR0TiO3Pa4tL4C7CzWnhYliC/owk5bHCV0HLkYUW\r\n' + - 'F6z7Lx3HyhoxlKmrHySSPPZRLKp7KcwxbjFc2EfhQV21I73Z1mCG6MEp7cN2qBbQ\r\n' + - 'PyOMNjAUibOWs4JJEdUjWhm86EZm9+qfgpL5tlpZCe+kXySrKTp56mMsfSOQvlol\r\n' + - 'pRO8pP9AUjaEqRikCZ745I/9W7dHNPUoyxkWV5jRDwcT7s652+L6oxtoqVOXpg28\r\n' + - 'uAL0kUZQMa8wkYUKZiMCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQCXQH+ut6tr\r\n' + - 'Z/FdIDOljrc7uh8XpFRKS3GqC/PJsEwrV7d3CX5HuWPTuPc9FU5FQ88w6evXEA0o\r\n' + - 'ijxHuydeXmdjpy433vXWo1TaRSXh1WaBMG5pW/SlGZK9/Hr1P0v7KN/KCY5nXxoQ\r\n' + - 'k3Ndg9HzGrYnRoJVXzvdQeBGwCoJFk4FH+Rxa/F03VTUU5nwx66TsL9JUp9pnbI7\r\n' + - 'MR6DIA97LnTmut8Xp0Uurw+zsS5rif9iv0BKHd7eGpNNGl0RXu8E5dbT0zD90TSa\r\n' + - 'P5WjxjvY+Udg8XZU+UwT3kcyTEFpiQdkzTIKXg0dFurfUE9XG/9aic9oMZ/IBZz9\r\n' + - 'a535a7e9RkbJ\r\n' + - '-----END CERTIFICATE REQUEST-----\r\n'; - - var csr = PKI.certificationRequestFromPem(pem); - ASSERT.equal(csr.subject.getField('CN').value, 'MyCommonName'); - ASSERT.equal(csr.subject.getField('O').value, 'MyOrganization'); - ASSERT.equal(csr.signatureOid, PKI.oids.sha1WithRSAEncryption); - ASSERT.equal(csr.publicKey.e.toString(16), '10001'); - ASSERT.equal(csr.publicKey.n.toString(16).toUpperCase(), 'A454CEB00C6E28928C06189773D6B0EACDC18D15B5E9A0459734B7BFB71655A9D5EF2E200DCAC5915963CEF9C28D103AF0FE01D36FE7E627A248333A2F371774F8C9EC01491D1388EDCF6B8B4BE02EC2CD69E1625882FE8C24E5B1C25741CB91851617ACFB2F1DC7CA1A3194A9AB1F24923CF6512CAA7B29CC316E315CD847E1415DB523BDD9D66086E8C129EDC376A816D03F238C36301489B396B3824911D5235A19BCE84666F7EA9F8292F9B65A5909EFA45F24AB293A79EA632C7D2390BE5A25A513BCA4FF40523684A918A4099EF8E48FFD5BB74734F528CB19165798D10F0713EECEB9DBE2FAA31B68A95397A60DBCB802F491465031AF3091850A6623'); - ASSERT.ok(csr.verify()); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pki' - ], function(PKI) { - Tests( - // Global provided by test harness - ASSERT, - PKI() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pki')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/des.js b/includes/external/school/node_modules/node-forge/nodejs/test/des.js deleted file mode 100644 index 8be2c68..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/des.js +++ /dev/null @@ -1,155 +0,0 @@ -(function() { - -function Tests(ASSERT, CIPHER, DES, UTIL) { - describe('des', function() { - // OpenSSL equivalent: - // openssl enc -des-ecb -K a1c06b381adf3651 -nosalt - it('should des-ecb encrypt: foobar', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf3651')); - - var cipher = CIPHER.createCipher('DES-ECB', key); - cipher.start(); - cipher.update(UTIL.createBuffer('foobar')); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), 'b705ffcf3dff06b3'); - }); - - // OpenSSL equivalent: - // openssl enc -d -des-ecb -K a1c06b381adf3651 -nosalt - it('should des-ecb decrypt: b705ffcf3dff06b3', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf3651')); - - var decipher = CIPHER.createDecipher('DES-ECB', key); - decipher.start(); - decipher.update(UTIL.createBuffer(UTIL.hexToBytes('b705ffcf3dff06b3'))); - decipher.finish(); - ASSERT.equal(decipher.output.getBytes(), 'foobar'); - }); - - // OpenSSL equivalent: - // openssl enc -des -K a1c06b381adf3651 -iv 818bcf76efc59662 -nosalt - it('should des-cbc encrypt: foobar', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf3651')); - var iv = new UTIL.createBuffer( - UTIL.hexToBytes('818bcf76efc59662')); - - var cipher = CIPHER.createCipher('DES-CBC', key); - cipher.start({iv: iv}); - cipher.update(UTIL.createBuffer('foobar')); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '3261e5839a990454'); - }); - - // OpenSSL equivalent: - // openssl enc -d -des -K a1c06b381adf3651 -iv 818bcf76efc59662 -nosalt - it('should des-cbc decrypt: 3261e5839a990454', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf3651')); - var iv = new UTIL.createBuffer( - UTIL.hexToBytes('818bcf76efc59662')); - - var decipher = CIPHER.createDecipher('DES-CBC', key); - decipher.start({iv: iv}); - decipher.update(UTIL.createBuffer(UTIL.hexToBytes('3261e5839a990454'))); - decipher.finish(); - ASSERT.equal(decipher.output.getBytes(), 'foobar'); - }); - - // OpenSSL equivalent: - // openssl enc -des-ede3 -K a1c06b381adf36517e84575552777779da5e3d9f994b05b5 -nosalt - it('should 3des-ecb encrypt: foobar', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf36517e84575552777779da5e3d9f994b05b5')); - - var cipher = CIPHER.createCipher('3DES-ECB', key); - cipher.start(); - cipher.update(UTIL.createBuffer('foobar')); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), 'fce8b1ee8c6440d1'); - }); - - // OpenSSL equivalent: - // openssl enc -d -des-ede3 -K a1c06b381adf36517e84575552777779da5e3d9f994b05b5 -nosalt - it('should 3des-ecb decrypt: fce8b1ee8c6440d1', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf36517e84575552777779da5e3d9f994b05b5')); - - var decipher = CIPHER.createDecipher('3DES-ECB', key); - decipher.start(); - decipher.update(UTIL.createBuffer(UTIL.hexToBytes('fce8b1ee8c6440d1'))); - decipher.finish(); - ASSERT.equal(decipher.output.getBytes(), 'foobar'); - }); - - // OpenSSL equivalent: - // openssl enc -des3 -K a1c06b381adf36517e84575552777779da5e3d9f994b05b5 -iv 818bcf76efc59662 -nosalt - it('should 3des-cbc encrypt "foobar", restart, and encrypt "foobar,,"', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf36517e84575552777779da5e3d9f994b05b5')); - var iv = new UTIL.createBuffer( - UTIL.hexToBytes('818bcf76efc59662')); - - var cipher = CIPHER.createCipher('3DES-CBC', key); - cipher.start({iv: iv.copy()}); - cipher.update(UTIL.createBuffer('foobar')); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '209225f7687ca0b2'); - - cipher.start({iv: iv.copy()}); - cipher.update(UTIL.createBuffer('foobar,,')); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '57156174c48dfc37293831bf192a6742'); - }); - - // OpenSSL equivalent: - // openssl enc -d -des3 -K a1c06b381adf36517e84575552777779da5e3d9f994b05b5 -iv 818bcf76efc59662 -nosalt - it('should 3des-cbc decrypt "209225f7687ca0b2", restart, and decrypt "57156174c48dfc37293831bf192a6742,,"', function() { - var key = new UTIL.createBuffer( - UTIL.hexToBytes('a1c06b381adf36517e84575552777779da5e3d9f994b05b5')); - var iv = new UTIL.createBuffer( - UTIL.hexToBytes('818bcf76efc59662')); - - var decipher = CIPHER.createDecipher('3DES-CBC', key); - decipher.start({iv: iv.copy()}); - decipher.update(UTIL.createBuffer(UTIL.hexToBytes('209225f7687ca0b2'))); - decipher.finish(); - ASSERT.equal(decipher.output.getBytes(), 'foobar'); - - decipher.start({iv: iv.copy()}); - decipher.update( - UTIL.createBuffer(UTIL.hexToBytes('57156174c48dfc37293831bf192a6742'))); - decipher.finish(); - ASSERT.equal(decipher.output.getBytes(), 'foobar,,'); - }); - }); -} - -// check for AMD -var forge = {}; -if(typeof define === 'function') { - define([ - 'forge/cipher', - 'forge/des', - 'forge/util' - ], function(CIPHER, DES, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - CIPHER(forge), - DES(forge), - UTIL(forge) - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/cipher')(forge), - require('../../js/des')(forge), - require('../../js/util')(forge)); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/hmac.js b/includes/external/school/node_modules/node-forge/nodejs/test/hmac.js deleted file mode 100644 index 404b36b..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/hmac.js +++ /dev/null @@ -1,85 +0,0 @@ -(function() { - -function Tests(ASSERT, HMAC, UTIL) { - describe('hmac', function() { - it('should md5 hash "Hi There", 16-byte key', function() { - var key = UTIL.hexToBytes('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b'); - var hmac = HMAC.create(); - hmac.start('MD5', key); - hmac.update('Hi There'); - ASSERT.equal(hmac.digest().toHex(), '9294727a3638bb1c13f48ef8158bfc9d'); - }); - - it('should md5 hash "what do ya want for nothing?", "Jefe" key', function() { - var hmac = HMAC.create(); - hmac.start('MD5', 'Jefe'); - hmac.update('what do ya want for nothing?'); - ASSERT.equal(hmac.digest().toHex(), '750c783e6ab0b503eaa86e310a5db738'); - }); - - it('should md5 hash "Test Using Larger Than Block-Size Key - Hash Key First", 80-byte key', function() { - var key = UTIL.hexToBytes( - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); - var hmac = HMAC.create(); - hmac.start('MD5', key); - hmac.update('Test Using Larger Than Block-Size Key - Hash Key First'); - ASSERT.equal(hmac.digest().toHex(), '6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd'); - }); - - it('should sha1 hash "Hi There", 20-byte key', function() { - var key = UTIL.hexToBytes('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b'); - var hmac = HMAC.create(); - hmac.start('SHA1', key); - hmac.update('Hi There'); - ASSERT.equal( - hmac.digest().toHex(), 'b617318655057264e28bc0b6fb378c8ef146be00'); - }); - - it('should sha1 hash "what do ya want for nothing?", "Jefe" key', function() { - var hmac = HMAC.create(); - hmac.start('SHA1', 'Jefe'); - hmac.update('what do ya want for nothing?'); - ASSERT.equal( - hmac.digest().toHex(), 'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79'); - }); - - it('should sha1 hash "Test Using Larger Than Block-Size Key - Hash Key First", 80-byte key', function() { - var key = UTIL.hexToBytes( - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + - 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); - var hmac = HMAC.create(); - hmac.start('SHA1', key); - hmac.update('Test Using Larger Than Block-Size Key - Hash Key First'); - ASSERT.equal( - hmac.digest().toHex(), 'aa4ae5e15272d00e95705637ce8a3b55ed402112'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/hmac', - 'forge/util' - ], function(HMAC, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - HMAC(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/hmac')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/kem.js b/includes/external/school/node_modules/node-forge/nodejs/test/kem.js deleted file mode 100644 index 0415abe..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/kem.js +++ /dev/null @@ -1,198 +0,0 @@ -(function() { - -function Tests(ASSERT, KEM, MD, RSA, UTIL, JSBN, RANDOM) { - - function FixedSecureRandom(str) { - var bytes = UTIL.hexToBytes(str); - this.getBytesSync = function(count) { - // prepend zeros - return UTIL.fillString(String.fromCharCode(0), bytes.length - count) + - bytes; - }; - } - - describe('kem', function() { - it('should generate and encrypt a symmetric key and decrypt it 10x', function() { - for(var i = 0; i < 10; ++i) { - var kdf = new KEM.kdf1(MD.sha256.create()); - var kem = KEM.rsa.create(kdf); - - var pair = RSA.generateKeyPair(512); - - var result = kem.encrypt(pair.publicKey, 256); - var key1 = result.key; - var key2 = kem.decrypt(pair.privateKey, result.encapsulation, 256); - - ASSERT.equal(UTIL.bytesToHex(key1), UTIL.bytesToHex(key2)); - } - }); - }); - - /** - * According to section "C.6 Test vectors for RSA-KEM" from ISO-18033-2 final - * draft. - */ - describe('C.6 Test vectors for RSA-KEM from ISO-18033-2 final', function() { - it('should pass test vector C.6.1', function() { - var n = '5888113332502691251761936431009284884966640757179802337490546478326238537107326596800820237597139824869184990638749556269785797065508097452399642780486933'; - var e = '65537'; - var d = '3202313555859948186315374524474173995679783580392140237044349728046479396037520308981353808895461806395564474639124525446044708705259675840210989546479265'; - - var C0 = '4603e5324cab9cef8365c817052d954d44447b1667099edc69942d32cd594e4ffcf268ae3836e2c35744aaa53ae201fe499806b67dedaa26bf72ecbd117a6fc0'; - var K = '5f8de105b5e96b2e490ddecbd147dd1def7e3b8e0e6a26eb7b956ccb8b3bdc1ca975bc57c3989e8fbad31a224655d800c46954840ff32052cdf0d640562bdfadfa263cfccf3c52b29f2af4a1869959bc77f854cf15bd7a25192985a842dbff8e13efee5b7e7e55bbe4d389647c686a9a9ab3fb889b2d7767d3837eea4e0a2f04'; - - var kdf = new KEM.kdf1(MD.sha1.create()); - var rnd = new FixedSecureRandom('032e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var kem = KEM.rsa.create(kdf, {prng: rnd}); - - var rsaPublicKey = RSA.setPublicKey( - new JSBN.BigInteger(n), new JSBN.BigInteger(e)); - var rsaPrivateKey = RSA.setPrivateKey( - new JSBN.BigInteger(n), null, new JSBN.BigInteger(d)); - - var result = kem.encrypt(rsaPublicKey, 128); - ASSERT.equal(UTIL.bytesToHex(result.encapsulation), C0); - ASSERT.equal(UTIL.bytesToHex(result.key), K); - - var decryptedKey = kem.decrypt(rsaPrivateKey, result.encapsulation, 128); - ASSERT.equal(UTIL.bytesToHex(decryptedKey), K); - }); - - it('should pass test vector C.6.2', function() { - var n = '5888113332502691251761936431009284884966640757179802337490546478326238537107326596800820237597139824869184990638749556269785797065508097452399642780486933'; - var e = '65537'; - var d = '3202313555859948186315374524474173995679783580392140237044349728046479396037520308981353808895461806395564474639124525446044708705259675840210989546479265'; - - var C0 = '4603e5324cab9cef8365c817052d954d44447b1667099edc69942d32cd594e4ffcf268ae3836e2c35744aaa53ae201fe499806b67dedaa26bf72ecbd117a6fc0'; - var K = '0e6a26eb7b956ccb8b3bdc1ca975bc57c3989e8fbad31a224655d800c46954840ff32052cdf0d640562bdfadfa263cfccf3c52b29f2af4a1869959bc77f854cf15bd7a25192985a842dbff8e13efee5b7e7e55bbe4d389647c686a9a9ab3fb889b2d7767d3837eea4e0a2f04b53ca8f50fb31225c1be2d0126c8c7a4753b0807'; - - var kdf = new KEM.kdf2(MD.sha1.create()); - var rnd = new FixedSecureRandom('032e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var kem = KEM.rsa.create(kdf, {prng: rnd}); - - var rsaPublicKey = RSA.setPublicKey( - new JSBN.BigInteger(n), new JSBN.BigInteger(e)); - var rsaPrivateKey = RSA.setPrivateKey( - new JSBN.BigInteger(n), null, new JSBN.BigInteger(d)); - - var result = kem.encrypt(rsaPublicKey, 128); - ASSERT.equal(UTIL.bytesToHex(result.encapsulation), C0); - ASSERT.equal(UTIL.bytesToHex(result.key), K); - - var decryptedKey = kem.decrypt(rsaPrivateKey, result.encapsulation, 128); - ASSERT.equal(UTIL.bytesToHex(decryptedKey), K); - }); - - it('should pass test vector C.6.3', function() { - var n = '5888113332502691251761936431009284884966640757179802337490546478326238537107326596800820237597139824869184990638749556269785797065508097452399642780486933'; - var e = '65537'; - var d = '3202313555859948186315374524474173995679783580392140237044349728046479396037520308981353808895461806395564474639124525446044708705259675840210989546479265'; - - var C0 = '4603e5324cab9cef8365c817052d954d44447b1667099edc69942d32cd594e4ffcf268ae3836e2c35744aaa53ae201fe499806b67dedaa26bf72ecbd117a6fc0'; - var K = '09e2decf2a6e1666c2f6071ff4298305e2643fd510a2403db42a8743cb989de86e668d168cbe604611ac179f819a3d18412e9eb45668f2923c087c12fee0c5a0d2a8aa70185401fbbd99379ec76c663e875a60b4aacb1319fa11c3365a8b79a44669f26fb555c80391847b05eca1cb5cf8c2d531448d33fbaca19f6410ee1fcb'; - - var kdf = new KEM.kdf1(MD.sha256.create(), 20); - var rnd = new FixedSecureRandom('032e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var kem = KEM.rsa.create(kdf, {prng: rnd}); - - var rsaPublicKey = RSA.setPublicKey( - new JSBN.BigInteger(n), new JSBN.BigInteger(e)); - var rsaPrivateKey = RSA.setPrivateKey( - new JSBN.BigInteger(n), null, new JSBN.BigInteger(d)); - - var result = kem.encrypt(rsaPublicKey, 128); - ASSERT.equal(UTIL.bytesToHex(result.encapsulation), C0); - ASSERT.equal(UTIL.bytesToHex(result.key), K); - - var decryptedKey = kem.decrypt(rsaPrivateKey, result.encapsulation, 128); - ASSERT.equal(UTIL.bytesToHex(decryptedKey), K); - }); - - it('should pass test vector C.6.4', function() { - var n = '5888113332502691251761936431009284884966640757179802337490546478326238537107326596800820237597139824869184990638749556269785797065508097452399642780486933'; - var e = '65537'; - var d = '3202313555859948186315374524474173995679783580392140237044349728046479396037520308981353808895461806395564474639124525446044708705259675840210989546479265'; - - var C0 = '4603e5324cab9cef8365c817052d954d44447b1667099edc69942d32cd594e4ffcf268ae3836e2c35744aaa53ae201fe499806b67dedaa26bf72ecbd117a6fc0'; - var K = '10a2403db42a8743cb989de86e668d168cbe604611ac179f819a3d18412e9eb45668f2923c087c12fee0c5a0d2a8aa70185401fbbd99379ec76c663e875a60b4aacb1319fa11c3365a8b79a44669f26fb555c80391847b05eca1cb5cf8c2d531448d33fbaca19f6410ee1fcb260892670e0814c348664f6a7248aaf998a3acc6'; - - var kdf = new KEM.kdf2(MD.sha256.create(), 20); - var rnd = new FixedSecureRandom('00032e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var kem = KEM.rsa.create(kdf, {prng: rnd}); - - var rsaPublicKey = RSA.setPublicKey( - new JSBN.BigInteger(n), new JSBN.BigInteger(e)); - var rsaPrivateKey = RSA.setPrivateKey( - new JSBN.BigInteger(n), null, new JSBN.BigInteger(d)); - - var result = kem.encrypt(rsaPublicKey, 128); - ASSERT.equal(UTIL.bytesToHex(result.encapsulation), C0); - ASSERT.equal(UTIL.bytesToHex(result.key), K); - - var decryptedKey = kem.decrypt(rsaPrivateKey, result.encapsulation, 128); - ASSERT.equal(UTIL.bytesToHex(decryptedKey), K); - }); - }); - - describe('prepended zeros test', function() { - it('should pass when random has leading zeros', function() { - var n = '5888113332502691251761936431009284884966640757179802337490546478326238537107326596800820237597139824869184990638749556269785797065508097452399642780486933'; - var e = '65537'; - var d = '3202313555859948186315374524474173995679783580392140237044349728046479396037520308981353808895461806395564474639124525446044708705259675840210989546479265'; - - var C0 = '5f268a76c1aed04bc195a143d7ee768bee0aad308d16196274a02d9c1a72bbe10cbf718de323fc0135c5f8129f96ac8f504d9623960dc54cd87bddee94f5a0b2'; - var K = '8bf41e59dc1b83142ee32569a347a94539e48c98347c685a29e3aa8b7a3ea714d68c1a43c4a760c9d4a45149b0ce8b681e98076bdd4393394c7832a7fa71848257772ac38a4e7fbe96e8bb383becbb7242841946e82e35d9ef1667245fc82601e7edf53b897f5ce2b6bce8e1e3212abd5a8a99a0c9b99472e22a313dac396383'; - - var kdf = new KEM.kdf1(MD.sha1.create()); - var rnd = new FixedSecureRandom('000e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var kem = KEM.rsa.create(kdf, {prng: rnd}); - - var rsaPublicKey = RSA.setPublicKey( - new JSBN.BigInteger(n), new JSBN.BigInteger(e)); - var rsaPrivateKey = RSA.setPrivateKey( - new JSBN.BigInteger(n), null, new JSBN.BigInteger(d)); - - var result = kem.encrypt(rsaPublicKey, 128); - ASSERT.equal(UTIL.bytesToHex(result.encapsulation), C0); - ASSERT.equal(UTIL.bytesToHex(result.key), K); - - var decryptedKey = kem.decrypt(rsaPrivateKey, result.encapsulation, 128); - ASSERT.equal(UTIL.bytesToHex(decryptedKey), K); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/kem', - 'forge/md', - 'forge/rsa', - 'forge/util', - 'forge/jsbn', - 'forge/random' - ], function(KEM, MD, RSA, UTIL, JSBN, RANDOM) { - Tests( - // Global provided by test harness - ASSERT, - KEM(), - MD(), - RSA(), - UTIL(), - JSBN(), - RANDOM() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/kem')(), - require('../../js/md')(), - require('../../js/rsa')(), - require('../../js/util')(), - require('../../js/jsbn')(), - require('../../js/random')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/md5.js b/includes/external/school/node_modules/node-forge/nodejs/test/md5.js deleted file mode 100644 index 5ab3d58..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/md5.js +++ /dev/null @@ -1,117 +0,0 @@ -(function() { - -function Tests(ASSERT, MD5, UTIL) { - describe('md5', function() { - it('should digest the empty string', function() { - var md = MD5.create(); - ASSERT.equal(md.digest().toHex(), 'd41d8cd98f00b204e9800998ecf8427e'); - }); - - it('should digest "abc"', function() { - var md = MD5.create(); - md.update('abc'); - ASSERT.equal(md.digest().toHex(), '900150983cd24fb0d6963f7d28e17f72'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = MD5.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal(md.digest().toHex(), '9e107d9d372bb6826bd81d3542a419d6'); - }); - - it('should digest "c\'\u00e8"', function() { - var md = MD5.create(); - md.update("c\'\u00e8", 'utf8'); - ASSERT.equal(md.digest().toHex(), '8ef7c2941d78fe89f31e614437c9db59'); - }); - - it('should digest "THIS IS A MESSAGE"', function() { - var md = MD5.create(); - md.start(); - md.update('THIS IS '); - md.update('A MESSAGE'); - // do twice to check continuing digest - ASSERT.equal(md.digest().toHex(), '78eebfd9d42958e3f31244f116ab7bbe'); - ASSERT.equal(md.digest().toHex(), '78eebfd9d42958e3f31244f116ab7bbe'); - }); - - it('should digest a long message', function() { - var input = UTIL.hexToBytes( - '0100002903018d32e9c6dc423774c4c39a5a1b78f44cc2cab5f676d39' + - 'f703d29bfa27dfeb870000002002f01000200004603014c2c1e835d39' + - 'da71bc0857eb04c2b50fe90dbb2a8477fe7364598d6f0575999c20a6c' + - '7248c5174da6d03ac711888f762fc4ed54f7254b32273690de849c843' + - '073d002f000b0003d20003cf0003cc308203c8308202b0a0030201020' + - '20100300d06092a864886f70d0101050500308186310b300906035504' + - '0613025553311d301b060355040a13144469676974616c2042617a616' + - '1722c20496e632e31443042060355040b133b4269746d756e6b206c6f' + - '63616c686f73742d6f6e6c7920436572746966696361746573202d204' + - '17574686f72697a6174696f6e20766961204254503112301006035504' + - '0313096c6f63616c686f7374301e170d3130303231343137303931395' + - 'a170d3230303231333137303931395a308186310b3009060355040613' + - '025553311d301b060355040a13144469676974616c2042617a6161722' + - 'c20496e632e31443042060355040b133b4269746d756e6b206c6f6361' + - '6c686f73742d6f6e6c7920436572746966696361746573202d2041757' + - '4686f72697a6174696f6e207669612042545031123010060355040313' + - '096c6f63616c686f737430820122300d06092a864886f70d010101050' + - '00382010f003082010a0282010100dc436f17d6909d8a9d6186ea218e' + - 'b5c86b848bae02219bd56a71203daf07e81bc19e7e98134136bcb0128' + - '81864bf03b3774652ad5eab85dba411a5114ffeac09babce75f313143' + - '45512cd87c91318b2e77433270a52185fc16f428c3ca412ad6e9484bc' + - '2fb87abb4e8fb71bf0f619e31a42340b35967f06c24a741a31c979c0b' + - 'b8921a90a47025fbeb8adca576979e70a56830c61170c9647c18c0794' + - 'd68c0df38f3aac5fc3b530e016ea5659715339f3f3c209cdee9dbe794' + - 'b5af92530c5754c1d874b78974bfad994e0dfc582275e79feb522f6e4' + - 'bcc2b2945baedfb0dbdaebb605f9483ff0bea29ecd5f4d6f2769965d1' + - 'b3e04f8422716042680011ff676f0203010001a33f303d300c0603551' + - 'd130101ff04023000300e0603551d0f0101ff0404030204f0301d0603' + - '551d250416301406082b0601050507030106082b06010505070302300' + - 'd06092a864886f70d010105050003820101009c4562be3f2d8d8e3880' + - '85a697f2f106eaeff4992a43f198fe3dcf15c8229cf1043f061a38204' + - 'f73d86f4fb6348048cc5279ed719873aa10e3773d92b629c2c3fcce04' + - '012c81ba3b4ec451e9644ec5191078402d845e05d02c7b4d974b45882' + - '76e5037aba7ef26a8bddeb21e10698c82f425e767dc401adf722fa73a' + - 'b78cfa069bd69052d7ca6a75cc9225550e315d71c5f8764362ea4dbc6' + - 'ecb837a8471043c5a7f826a71af145a053090bd4bccca6a2c552841cd' + - 'b1908a8352f49283d2e641acdef667c7543af441a16f8294251e2ac37' + - '6fa507b53ae418dd038cd20cef1e7bfbf5ae03a7c88d93d843abaabbd' + - 'c5f3431132f3e559d2dd414c3eda38a210b80e0000001000010201002' + - '6a220b7be857402819b78d81080d01a682599bbd00902985cc64edf8e' + - '520e4111eb0e1729a14ffa3498ca259cc9ad6fc78fa130d968ebdb78d' + - 'c0b950c0aa44355f13ba678419185d7e4608fe178ca6b2cef33e41937' + - '78d1a70fe4d0dfcb110be4bbb4dbaa712177655728f914ab4c0f6c4ae' + - 'f79a46b3d996c82b2ebe9ed1748eb5cace7dc44fb67e73f452a047f2e' + - 'd199b3d50d5db960acf03244dc8efa4fc129faf8b65f9e52e62b55447' + - '22bd17d2358e817a777618a4265a3db277fc04851a82a91fe6cdcb812' + - '7f156e0b4a5d1f54ce2742eb70c895f5f8b85f5febe69bc73e891f928' + - '0826860a0c2ef94c7935e6215c3c4cd6b0e43e80cca396d913d36be'); - - var md = MD5.create(); - md.update(input); - ASSERT.equal(md.digest().toHex(), 'd15a2da0e92c3da55dc573f885b6e653'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/md5', - 'forge/util' - ], function(MD5, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - MD5(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/md5')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/mgf1.js b/includes/external/school/node_modules/node-forge/nodejs/test/mgf1.js deleted file mode 100644 index 6c54ff1..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/mgf1.js +++ /dev/null @@ -1,39 +0,0 @@ -(function() { - -function Tests(ASSERT, MGF, MD, UTIL) { - describe('mgf1', function() { - it('should digest the empty string', function() { - var seed = UTIL.hexToBytes('032e45326fa859a72ec235acff929b15d1372e30b207255f0611b8f785d764374152e0ac009e509e7ba30cd2f1778e113b64e135cf4e2292c75efe5288edfda4'); - var expect = UTIL.hexToBytes('5f8de105b5e96b2e490ddecbd147dd1def7e3b8e0e6a26eb7b956ccb8b3bdc1ca975bc57c3989e8fbad31a224655d800c46954840ff32052cdf0d640562bdfadfa263cfccf3c52b29f2af4a1869959bc77f854cf15bd7a25192985a842dbff8e13efee5b7e7e55bbe4d389647c686a9a9ab3fb889b2d7767d3837eea4e0a2f04'); - var mgf = MGF.mgf1.create(MD.sha1.create()); - var result = mgf.generate(seed, expect.length); - ASSERT.equal(result, expect); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/mgf', - 'forge/md', - 'forge/util' - ], function(MGF, MD, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - MGF(), - MD(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/mgf')(), - require('../../js/md')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/pbkdf2.js b/includes/external/school/node_modules/node-forge/nodejs/test/pbkdf2.js deleted file mode 100644 index 90e36f0..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/pbkdf2.js +++ /dev/null @@ -1,140 +0,0 @@ -(function() { - -function Tests(ASSERT, PBKDF2, MD, UTIL) { - describe('pbkdf2', function() { - it('should derive a password with hmac-sha-1 c=1', function() { - var dkHex = UTIL.bytesToHex(PBKDF2('password', 'salt', 1, 20)); - ASSERT.equal(dkHex, '0c60c80f961f0e71f3a9b524af6012062fe037a6'); - }); - - it('should derive a password with hmac-sha-1 c=2', function() { - var dkHex = UTIL.bytesToHex(PBKDF2('password', 'salt', 2, 20)); - ASSERT.equal(dkHex, 'ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957'); - }); - - it('should derive a password with hmac-sha-1 c=5 keylen=8', function() { - var salt = UTIL.hexToBytes('1234567878563412'); - var dkHex = UTIL.bytesToHex(PBKDF2('password', salt, 5, 8)); - ASSERT.equal(dkHex, 'd1daa78615f287e6'); - }); - - it('should derive a password with hmac-sha-1 c=4096', function() { - // Note: might be too slow on old browsers - var dkHex = UTIL.bytesToHex(PBKDF2('password', 'salt', 4096, 20)); - ASSERT.equal(dkHex, '4b007901b765489abead49d926f721d065a429c1'); - }); - - /* - it('should derive a password with hmac-sha-1 c=16777216', function() { - // Note: too slow - var dkHex = UTIL.bytesToHex(PBKDF2('password', 'salt', 16777216, 20)); - ASSERT.equal(dkHex, 'eefe3d61cd4da4e4e9945b3d6ba2158c2634e984'); - });*/ - - it('should derive a password with hmac-sha-256 c=1000', function() { - // Note: might be too slow on old browsers - var salt = '4bcda0d1c689fe465c5b8a817f0ddf3d'; - var md = MD.sha256.create(); - var dkHex = UTIL.bytesToHex(PBKDF2('password', salt, 1000, 48, md)); - ASSERT.equal(dkHex, '9da8a5f4ae605f35e82e5beac5f362df15c4255d88f738d641466a4107f9970238e768e72af29ac89a1b16ff277b31d2'); - }); - - it('should derive a password with hmac-sha-256 (passed as an algorithm identifier) c=1000', function() { - // Note: might be too slow on old browsers - var salt = '4bcda0d1c689fe465c5b8a817f0ddf3d'; - var dkHex = UTIL.bytesToHex(PBKDF2('password', salt, 1000, 48, 'sha256')); - ASSERT.equal(dkHex, '9da8a5f4ae605f35e82e5beac5f362df15c4255d88f738d641466a4107f9970238e768e72af29ac89a1b16ff277b31d2'); - }); - - it('should asynchronously derive a password with hmac-sha-1 c=1', function(done) { - PBKDF2('password', 'salt', 1, 20, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, '0c60c80f961f0e71f3a9b524af6012062fe037a6'); - done(); - }); - }); - - it('should asynchronously derive a password with hmac-sha-1 c=2', function(done) { - PBKDF2('password', 'salt', 2, 20, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, 'ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957'); - done(); - }); - }); - - it('should asynchronously derive a password with hmac-sha-1 c=5 keylen=8', function(done) { - var salt = UTIL.hexToBytes('1234567878563412'); - PBKDF2('password', salt, 5, 8, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, 'd1daa78615f287e6'); - done(); - }); - }); - - it('should asynchronously derive a password with hmac-sha-1 c=4096', function(done) { - // Note: might be too slow on old browsers - PBKDF2('password', 'salt', 4096, 20, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, '4b007901b765489abead49d926f721d065a429c1'); - done(); - }); - }); - - /* - it('should asynchronously derive a password with hmac-sha-1 c=16777216', function(done) { - // Note: too slow - PBKDF2('password', 'salt', 16777216, 20, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, 'eefe3d61cd4da4e4e9945b3d6ba2158c2634e984'); - done(); - }); - });*/ - - it('should asynchronously derive a password with hmac-sha-256 c=1000', function(done) { - // Note: might be too slow on old browsers - var salt = '4bcda0d1c689fe465c5b8a817f0ddf3d'; - var md = MD.sha256.create(); - PBKDF2('password', salt, 1000, 48, md, function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, '9da8a5f4ae605f35e82e5beac5f362df15c4255d88f738d641466a4107f9970238e768e72af29ac89a1b16ff277b31d2'); - done(); - }); - }); - - it('should asynchronously derive a password with hmac-sha-256 (passed as an algorithm identifier) c=1000', function(done) { - // Note: might be too slow on old browsers - var salt = '4bcda0d1c689fe465c5b8a817f0ddf3d'; - PBKDF2('password', salt, 1000, 48, 'sha256', function(err, dk) { - var dkHex = UTIL.bytesToHex(dk); - ASSERT.equal(dkHex, '9da8a5f4ae605f35e82e5beac5f362df15c4255d88f738d641466a4107f9970238e768e72af29ac89a1b16ff277b31d2'); - done(); - }); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pbkdf2', - 'forge/md', - 'forge/util' - ], function(PBKDF2, MD, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - PBKDF2(), - MD(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pbkdf2')(), - require('../../js/md')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/pem.js b/includes/external/school/node_modules/node-forge/nodejs/test/pem.js deleted file mode 100644 index 6b405cb..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/pem.js +++ /dev/null @@ -1,104 +0,0 @@ -(function() { - -function Tests(ASSERT, PEM) { - var _input = '-----BEGIN PRIVACY-ENHANCED MESSAGE-----\r\n' + - 'Proc-Type: 4,ENCRYPTED\r\n' + - 'Content-Domain: RFC822\r\n' + - 'DEK-Info: DES-CBC,F8143EDE5960C597\r\n' + - 'Originator-ID-Symmetric: linn@zendia.enet.dec.com,,\r\n' + - 'Recipient-ID-Symmetric: linn@zendia.enet.dec.com,ptf-kmc,3\r\n' + - 'Key-Info: DES-ECB,RSA-MD2,9FD3AAD2F2691B9A,\r\n' + - ' B70665BB9BF7CBCDA60195DB94F727D3\r\n' + - 'Recipient-ID-Symmetric: pem-dev@tis.com,ptf-kmc,4\r\n' + - 'Key-Info: DES-ECB,RSA-MD2,161A3F75DC82EF26,\r\n' + - ' E2EF532C65CBCFF79F83A2658132DB47\r\n' + - '\r\n' + - 'LLrHB0eJzyhP+/fSStdW8okeEnv47jxe7SJ/iN72ohNcUk2jHEUSoH1nvNSIWL9M\r\n' + - '8tEjmF/zxB+bATMtPjCUWbz8Lr9wloXIkjHUlBLpvXR0UrUzYbkNpk0agV2IzUpk\r\n' + - 'J6UiRRGcDSvzrsoK+oNvqu6z7Xs5Xfz5rDqUcMlK1Z6720dcBWGGsDLpTpSCnpot\r\n' + - 'dXd/H5LMDWnonNvPCwQUHg==\r\n' + - '-----END PRIVACY-ENHANCED MESSAGE-----\r\n' + - '-----BEGIN PRIVACY-ENHANCED MESSAGE-----\r\n' + - 'Proc-Type: 4,ENCRYPTED\r\n' + - 'Content-Domain: RFC822\r\n' + - 'DEK-Info: DES-CBC,BFF968AA74691AC1\r\n' + - 'Originator-Certificate:\r\n' + - ' MIIBlTCCAScCAWUwDQYJKoZIhvcNAQECBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNV\r\n' + - ' BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDzAN\r\n' + - ' BgNVBAsTBk5PVEFSWTAeFw05MTA5MDQxODM4MTdaFw05MzA5MDMxODM4MTZaMEUx\r\n' + - ' CzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEU\r\n' + - ' MBIGA1UEAxMLVGVzdCBVc2VyIDEwWTAKBgRVCAEBAgICAANLADBIAkEAwHZHl7i+\r\n' + - ' yJcqDtjJCowzTdBJrdAiLAnSC+CnnjOJELyuQiBgkGrgIh3j8/x0fM+YrsyF1u3F\r\n' + - ' LZPVtzlndhYFJQIDAQABMA0GCSqGSIb3DQEBAgUAA1kACKr0PqphJYw1j+YPtcIq\r\n' + - ' iWlFPuN5jJ79Khfg7ASFxskYkEMjRNZV/HZDZQEhtVaU7Jxfzs2wfX5byMp2X3U/\r\n' + - ' 5XUXGx7qusDgHQGs7Jk9W8CW1fuSWUgN4w==\r\n' + - 'Key-Info: RSA,\r\n' + - ' I3rRIGXUGWAF8js5wCzRTkdhO34PTHdRZY9Tuvm03M+NM7fx6qc5udixps2Lng0+\r\n' + - ' wGrtiUm/ovtKdinz6ZQ/aQ==\r\n' + - 'Issuer-Certificate:\r\n' + - ' MIIB3DCCAUgCAQowDQYJKoZIhvcNAQECBQAwTzELMAkGA1UEBhMCVVMxIDAeBgNV\r\n' + - ' BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMQ8wDQYDVQQLEwZCZXRhIDExDTAL\r\n' + - ' BgNVBAsTBFRMQ0EwHhcNOTEwOTAxMDgwMDAwWhcNOTIwOTAxMDc1OTU5WjBRMQsw\r\n' + - ' CQYDVQQGEwJVUzEgMB4GA1UEChMXUlNBIERhdGEgU2VjdXJpdHksIEluYy4xDzAN\r\n' + - ' BgNVBAsTBkJldGEgMTEPMA0GA1UECxMGTk9UQVJZMHAwCgYEVQgBAQICArwDYgAw\r\n' + - ' XwJYCsnp6lQCxYykNlODwutF/jMJ3kL+3PjYyHOwk+/9rLg6X65B/LD4bJHtO5XW\r\n' + - ' cqAz/7R7XhjYCm0PcqbdzoACZtIlETrKrcJiDYoP+DkZ8k1gCk7hQHpbIwIDAQAB\r\n' + - ' MA0GCSqGSIb3DQEBAgUAA38AAICPv4f9Gx/tY4+p+4DB7MV+tKZnvBoy8zgoMGOx\r\n' + - ' dD2jMZ/3HsyWKWgSF0eH/AJB3qr9zosG47pyMnTf3aSy2nBO7CMxpUWRBcXUpE+x\r\n' + - ' EREZd9++32ofGBIXaialnOgVUn0OzSYgugiQ077nJLDUj0hQehCizEs5wUJ35a5h\r\n' + - 'MIC-Info: RSA-MD5,RSA,\r\n' + - ' UdFJR8u/TIGhfH65ieewe2lOW4tooa3vZCvVNGBZirf/7nrgzWDABz8w9NsXSexv\r\n' + - ' AjRFbHoNPzBuxwmOAFeA0HJszL4yBvhG\r\n' + - 'Recipient-ID-Asymmetric:\r\n' + - ' MFExCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5j\r\n' + - ' LjEPMA0GA1UECxMGQmV0YSAxMQ8wDQYDVQQLEwZOT1RBUlk=,66\r\n' + - 'Key-Info: RSA,\r\n' + - ' O6BS1ww9CTyHPtS3bMLD+L0hejdvX6Qv1HK2ds2sQPEaXhX8EhvVphHYTjwekdWv\r\n' + - ' 7x0Z3Jx2vTAhOYHMcqqCjA==\r\n' + - '\r\n' + - 'qeWlj/YJ2Uf5ng9yznPbtD0mYloSwIuV9FRYx+gzY+8iXd/NQrXHfi6/MhPfPF3d\r\n' + - 'jIqCJAxvld2xgqQimUzoS1a4r7kQQ5c/Iua4LqKeq3ciFzEv/MbZhA==\r\n' + - '-----END PRIVACY-ENHANCED MESSAGE-----\r\n' + - '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIIBPAIBAAJBALjXU+IdHkSkdBscgXf+EBoa55ruAIsU50uDFjFBkp+rWFt5AOGF\r\n' + - '9xL1/HNIby5M64BCw021nJTZKEOmXKdmzYsCAwEAAQJBAApyYRNOgf9vLAC8Q7T8\r\n' + - 'bvyKuLxQ50b1D319EywFgLv1Yn0s/F9F+Rew6c04Q0pIqmuOGUM7z94ul/y5OlNJ\r\n' + - '2cECIQDveEW1ib2+787l7Y0tMeDzf/HQl4MAWdcxXWOeUFK+7QIhAMWZsukutEn9\r\n' + - '9/yqFMt8bL/dclfNn1IAgUL4+dMJ7zdXAiEAhaxGhVKxN28XuCOFhe/s2R/XdQ/O\r\n' + - 'UZjU1bqCzDGcLvUCIGYmxu71Tg7SVFkyM/3eHPozKOFrU2m5CRnuTHhlMl2RAiEA\r\n' + - '0vhM5TEmmNWz0anPVabqDj9TA0z5MsDJQcn5NmO9xnw=\r\n' + - '-----END RSA PRIVATE KEY-----\r\n'; - - describe('pem', function() { - it('should decode and re-encode PEM messages', function() { - var msgs = PEM.decode(_input); - - var output = ''; - for(var i = 0; i < msgs.length; ++i) { - output += PEM.encode(msgs[i]); - } - - ASSERT.equal(output, _input); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pem' - ], function(PEM) { - Tests( - // Global provided by test harness - ASSERT, - PEM() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pem')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs1.js b/includes/external/school/node_modules/node-forge/nodejs/test/pkcs1.js deleted file mode 100644 index 889eb6d..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs1.js +++ /dev/null @@ -1,1105 +0,0 @@ -(function() { - -function Tests(ASSERT, PKI, PKCS1, MD, JSBN, UTIL) { - var BigInteger = JSBN.BigInteger; - - // RSA's test vectors for Forge's RSA-OAEP implementation: - // http://www.rsa.com/rsalabs/node.asp?id=2125 - describe('pkcs1', function() { - it('should detect invalid RSAES-OAEP padding', function() { - var keys = makeKey(); - - // provide the seed to test the same input each time - var seed = UTIL.decode64('JRTfRpV1WmeyiOr0kFw27sZv0v0='); - - // test decrypting corrupted data: flip every bit (skip first byte to - // avoid triggering other invalid encryption error) in the message this - // tests the padding error handling - var encoded = PKCS1.encode_rsa_oaep( - keys.publicKey, 'datadatadatadata', {seed: seed}); - var encrypted = keys.publicKey.encrypt(encoded, null); - var bitLength = encrypted.length * 8; - // FIXME: test it too slow to run all the time -- temporary - // change only does partial checks, need a longer term fix - bitLength /= 8; - for(var bit = 8; bit < bitLength; ++bit) { - var byteIndex = bit / 8; - var bitInByte = bit % 8; - - var out = encrypted.substring(0, byteIndex); - var mask = 0x1 << bitInByte; - out += String.fromCharCode(encrypted.charCodeAt(byteIndex) ^ mask); - out += encrypted.substring(byteIndex + 1); - - try { - var decrypted = keys.privateKey.decrypt(out, null); - PKCS1.decode_rsa_oaep(keys.privateKey, decrypted); - throw { - message: 'Expected an exception.' - }; - } catch(e) { - ASSERT.equal(e.message, 'Invalid RSAES-OAEP padding.'); - } - } - }); - - it('should detect leading zero bytes', function() { - var keys = makeKey(); - var message = UTIL.fillString('\x00', 80); - var encoded = PKCS1.encode_rsa_oaep(keys.publicKey, message); - var ciphertext = keys.publicKey.encrypt(encoded, null); - var decrypted = keys.privateKey.decrypt(ciphertext, null); - var decoded = PKCS1.decode_rsa_oaep(keys.privateKey, decrypted); - ASSERT.equal(message, decoded); - }); - - testOAEP(); - testOAEPSHA256(); - - function testOAEP() { - var modulus, exponent, d, p, q, dP, dQ, qInv, pubkey, privateKey; - var examples; - - // Example 1: A 1024-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'qLOyhK+OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx+CwgtaTpef87Wdc9GaFEncsDLxkp0LGxjD1M8jMcvYq6DPEC/JYQumEu3i9v5fAEH1VvbZi9cTg+rmEXLUUjvc5LdOq/5OuHmtme7PUJHYW1PW6ENTP0ibeiNOfFvs='; - exponent = 'AQAB'; - d = 'UzOc/befyEZqZVxzFqyoXFX9j23YmP2vEZUX709S6P2OJY35P+4YD6DkqylpPNg7FSpVPUrE0YEri5+lrw5/Vf5zBN9BVwkm8zEfFcTWWnMsSDEW7j09LQrzVJrZv3y/t4rYhPhNW+sEck3HNpsx3vN9DPU56c/N095lNynq1dE='; - p = '0yc35yZ//hNBstXA0VCoG1hvsxMr7S+NUmKGSpy58wrzi+RIWY1BOhcu+4AsIazxwRxSDC8mpHHcrSEurHyjnQ=='; - q = 'zIhT0dVNpjD6wAT0cfKBx7iYLYIkpJDtvrM9Pj1cyTxHZXA9HdeRZC8fEWoN2FK+JBmyr3K/6aAw6GCwKItddw=='; - dP = 'DhK/FxjpzvVZm6HDiC/oBGqQh07vzo8szCDk8nQfsKM6OEiuyckwX77L0tdoGZZ9RnGsxkMeQDeWjbN4eOaVwQ=='; - dQ = 'lSl7D5Wi+mfQBwfWCd/U/AXIna/C721upVvsdx6jM3NNklHnkILs2oZu/vE8RZ4aYxOGt+NUyJn18RLKhdcVgw=='; - qInv = 'T0VsUCSTvcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mNXb79cyY+NygUJ0OBgWbtfdY2h90qjKHS9PvY4Q=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 1.1', - message: 'ZigZThIHPbA7qUzanvlTI5fVDbp5uYcASv7+NA==', - seed: 'GLd26iEGnWl3ajPpa61I4d2gpe8=', - encrypted: 'NU/me0oSbV01/jbHd3kaP3uhPe9ITi05CK/3IvrUaPshaW3pXQvpEcLTF0+K/MIBA197bY5pQC3lRRYYwhpTX6nXv8W43Z/CQ/jPkn2zEyLW6IHqqRqZYXDmV6BaJmQm2YyIAD+Ed8EicJSg2foejEAkMJzh7My1IQA11HrHLoo=' - }, { - title: 'RSAES-OAEP Encryption Example 1.2', - message: 'dQxAR/VH6OQUEYVlIymKybriRe+vE5f75W+d1Q==', - seed: 'DMdCzkqbfzL5UbyyUe/ZJf5P418=', - encrypted: 'ZA2xrMWOBWj+VAfl+bcB3/jDyR5xbFNvx/zsbLW3HBFlmI1KJ54Vd9cw/Hopky4/AMgVFSNtjY4xAXp6Cd9DUtkEzet5qlg63MMeppikwFKD2rqQib5UkfZ8Gk7kjcdLu+ZkOu+EZnm0yzlaNS1e0RWRLfaW/+BwKTKUbXFJK0Q=' - }, { - title: 'RSAES-OAEP Encryption Example 1.3', - message: '2Urggy5kRc5CMxywbVMagrHbS6rTD3RtyRbfJNTjwkUf/1mmQj6w4dAtT+ZGz2md/YGMbpewUQ==', - seed: 'JRTfRpV1WmeyiOr0kFw27sZv0v0=', - encrypted: 'Qjc27QNfYCavJ2w1wLN0GzZeX3bKCRtOjCni8L7+5gNZWqgyLWAtLmJeleuBsvHJck6CLsp224YYzwnFNDUDpDYINbWQO8Y344efsF4O8yaF1a7FBnzXzJb+SyZwturDBmsfz1aGtoWJqvt9YpsC2PhiXKODNiTUgA+wgbHPlOs=' - }, { - title: 'RSAES-OAEP Encryption Example 1.4', - message: 'UuZQ2Y5/KgSLT4aFIVO5fgHdMW80ahn2eoU=', - seed: 'xENaPhoYpotoIENikKN877hds/s=', - encrypted: 'RerUylUeZiyYAPGsqCg7BSXmq64wvktKunYvpA/T044iq+/Gl5T267vAXduxEhYkfS9BL9D7qHxuOs2IiBNkb9DkjnhSBPnD9z1tgjlWJyLd3Ydx/sSLg6Me5vWSxM/UvIgXTzsToRKq47n3uA4PxvclW6iA3H2AIeIq1qhfB1U=' - }, { - title: 'RSAES-OAEP Encryption Example 1.5', - message: 'jaif2eX5dKKf7/tGK0kYD2z56AI=', - seed: 'sxjELfO+D4P+qCP1p7R+1eQlo7U=', - encrypted: 'NvbjTZSo002qy6M6ITnQCthak0WoYFHnMHFiAFa5IOIZAFhVohOg8jiXzc1zG0UlfHd/6QggK+/dC1g4axJE6gz1OaBdXRAynaROEwMP12Dc1kTP7yCU0ZENP0M+HHxt0YvB8t9/ZD1mL7ndN+rZBZGQ9PpmyjnoacTrRJy9xDk=' - }, { - title: 'RSAES-OAEP Encryption Example 1.6', - message: 'JlIQUIRCcQ==', - seed: '5OwJgsIzbzpnf2o1YXTrDOiHq8I=', - encrypted: 'Qs7iYXsezqTbP0gpOG+9Ydr78DjhgNg3yWNm3yTAl7SrD6xr31kNghyfEGQuaBrQW414s3jA9Gzi+tY/dOCtPfBrB11+tfVjb41AO5BZynYbXGK7UqpFAC6nC6rOCN7SQ7nYy9YqaK3iZYMrVlZOQ6b6Qu0ZmgmXaXQt8VOeglU=' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 2: A 1025-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'AZR8f86QQl9HJ55whR8l1eYjFv6KHfGTcePmKOJgVD5JAe9ggfaMC4FBGQ0q6Nq6fRJQ7G22NulE7Dcih3x8HQpn8UsWlMXwN5RRpD5Joy3eg2cLc9qRocmbwjtDamAFXGEPC6+ZwaB5VluVo/FSZjLR1Npg8g7aJeZTxPACdm9F'; - exponent = 'AQAB'; - d = 'CCPyD6212okIip0AiT4h+kobEfvJPGSjvguq6pf7O5PD/3E3BMGcljwdEHqumQVHOfeeAuGG3ob4em3e/qbYzNHTyBpHv6clW+IGAaSksvCKFnteJ51xWxtFW91+qyRZQdl2i5rO+zzNpZUto87nJSW0UBZjqO4VyemS2SRi/jk='; - p = 'AVnb3gSjPvBvtgi4CxkPTT4ivME6yOSggQM6v6QW7bCzOKoItXMJ6lpSQOfcblQ3jGlBTDHZfdsfQG2zdpzEGkM='; - q = 'AStlLzBAOzi0CZX9b/QaGsyK2nA3Mja3IC05su4wz7RtsJUR9vMHzGHMIWBsGKdbimL4It8DG6DfDa/VUG9Wi9c='; - dP = 'Q271CN5zZRnC2kxYDZjILLdFKj+1763Ducd4mhvGWE95Wt270yQ5x0aGVS7LbCwwek069/U57sFXJIx7MfGiVQ=='; - dQ = 'ASsVqJ89+ys5Bz5z8CvdDBp7N53UNfBc3eLv+eRilIt87GLukFDV4IFuB4WoVrSRCNy3XzaDh00cpjKaGQEwZv8='; - qInv = 'AnDbF9WRSwGNdhGLJDiac1Dsg2sAY6IXISNv2O222JtR5+64e2EbcTLLfqc1bCMVHB53UVB8eG2e4XlBcKjI6A=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 2.1', - message: 'j/AMqmBccCgwY02abD1CxlK1jPHZL+xXC+7n', - seed: 'jEB7XsKJnlCZxT6M55O/lOcbF4I=', - encrypted: 'AYGviSK5/LTXnZLr4ZgVmS/AwUOdi81JE5ig9K06Mppb2ThVYNtTJoPIt9oE5LEq7Wqs30ccNMnNqJGt3MLfNFZlOqY4Lprlm1RFUlfrCZ1WK74QRT8rbRPFnALhDx+Ku12g0FcJMtrPLQkB23KdD+/MBU5wlo6lQMgbBLyu/nIO' - }, { - title: 'RSAES-OAEP Encryption Example 2.2', - message: 'LQ==', - seed: 'tgDPPC5QbX8Wd4yRDTqLAD7uYdU=', - encrypted: 'AYdZ/x32OyeSQQViMUQWqK6vKsY0tG+UCrgtZNvxZe7jMBHadJ1Lq24vzRgSnJ5JJ32EUxErQpoiKoRxsHCZOZjnWIYcTT9tdJ2RxCkNMyx6SrP36jX/OgfUl8lV/w/8lQBrYsbSloENm/qwJBlseTQBLC35eO8pmrojmUDLoQJF' - }, { - title: 'RSAES-OAEP Encryption Example 2.3', - message: 'dPyIxRvJD3evnV6aSnATPUtOCzTaPDfH744=', - seed: 'pzdoruqpH52MHtb50rY0Z/B8yuM=', - encrypted: 'AYgCurBMYDJegcSWIxHyvnwq3OkwQaAHGciPlXV18sefG3vIztEVxwazEcCKLZhso7apM2sUfCnG8ilAnd7GUb0f3VoLf2EMmTf9tKOnYjZLizIGtOpIX9CY0I9j1KqLsml9Ant1DDLX906vUYDS6bZrF8svpVUjvCgNoQ0UviBT' - }, { - title: 'RSAES-OAEP Encryption Example 2.4', - message: 'p+sqUDaTHSfU6JEybZlpL/rdqb9+/T405iLErcCF9yHf6IUHLHiiA7FRc5vlQPqMFToQ8Ao=', - seed: 'mns7DnCL2W+BkOyrT7mys4BagVY=', - encrypted: 'AKRXjLwXYximOPun0B3xV0avRNT2zZbX58SVy/QlsJxknTK/iG2kj7r5iaIRcYfK+x+1gDF2kOPM1EaSC3r4KzHbWATYfQFRSsv6kVbngvhn9r7ZRJ4OmiwJvOzGqgh2NpZeNLPsdm8v4uQwGKL93rFAYWoOnYLlMxAk7gZS/HZB' - }, { - title: 'RSAES-OAEP Encryption Example 2.5', - message: 'LvKwZvhUwz873LtZlKQ15z1sbA==', - seed: '6zzrvErcFrtI6IyK7A40r39Cf9M=', - encrypted: 'AOvF9f2nfP2tPINkGpAl531y2Kb7M6gQ9ZUPjXTHPo2THoY02GqxJGJWrge2AFtxt/L7mDUSGDMc5puP+9ydoIu8nHBPh23rnfn8LsBlyth/kJCweswXqn+ZeyespIgG6Jf3cdlRQf5FJtilMBtnhifvq3B/1A++vW55KiVhPnrs' - }, { - title: 'RSAES-OAEP Encryption Example 2.6', - message: 'in+zRMi2yyzy7x9kP5oyGPbhm7qJwA==', - seed: 'TEXPTVfJjj1tIJWtxRxInrUN/4Q=', - encrypted: 'AQg57CDCe5BS5Vvvubd+b8JukHXXpUN4xkar31HkRb1XFd6BeJ9W8YA9kXB2Sp6Ty3h5hpQCPuc5POBLxdj4xaUsFx1Dg346ymL2CesKpf+wlg7wQZjddU9X9/vmq/dlzxGLTKRDsjtaqyZvlSMmrEWBEAZEMl+LchrNXQT/FO86' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 3: A 1026-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'ArWP7AOahgcApNe2Ri+T5s3UkRYd3XT06BC0DjwWUgBqXCd7J3TBEwWky6taeO+lfheobfej+jb8Sx0iSfIux8LdakYyMqzOqQbWbr6AtXBLEHKdpvgzI0q7Xv3UopLL+tM7TTP6ehS4w5e1bjrNISA0KLd836M6bacGs9iw/EPp'; - exponent = 'AQAB'; - d = 'FbSKW1aDqUZw4jtXGPgU+g4T+FA49QcRGCy6YVEFgfPSLH4jLvk34i5VHWi4bi+MsarYvi5Ij13379J54/Vo1Orzb4DPcUGs5g/MkRP7bEqEH9ULvHxRL/y+/yFIeqgR6zyoxiAFNGqG3oa/odipSP0/NIwi6q3zM8PObOEyCP0='; - p = 'Ab8B0hbXNZXPAnDCvreNQKDYRH0x2pGamD9+6ngbd9hf43Gz6Tc+e2khfTFQoC2JWN5/rZ1VUWCVi0RUEn4Ofq8='; - q = 'AY0zmWWBZts4KYFteylUFnWenJGYf1stiuzWOwS0i9ey/PIpu3+KbciLoT3S45rVW20aBhYHCPlwC+gLj9N0TOc='; - dP = 'BsCiSdIKby7nXIi0lNU/aq6ZqkJ8iMKLFjp2lEXl85DPQMJ0/W6mMppc58fOA6IVg5buKnhFeG4J4ohalyjk5Q=='; - dQ = '0dJ8Kf7dkthsNI7dDMv6wU90bgUc4dGBHfNdYfLuHJfUvygEgC9kJxh7qOkKivRCQ7QHmwNEXmAuKfpRk+ZP6Q=='; - qInv = 'jLL3Vr2JQbHTt3DlrTHuNzsorNpp/5tvQP5Xi58a+4WDb5Yn03rP9zwneeY0uyYBHCyPfzNhriqepl7WieNjmg=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 3.1', - message: 'CHggtWno+o0=', - seed: 'jO1rGWKQgFeQ6QkHQBXmogsMSJQ=', - encrypted: 'AmoEhdlq69lrQ4IIUJm5Yuaivew9kMjbYl4UNy3oXi1be6q2XI+vkbtVBPtJWvzlyYiz9qUuIOHWy9NWbFzR8rgxi7VCzA6iXEqrmTKvogdg6t3seEOWoH6g7yTU5vTTflBSp6MeFGqkgKERu+kmQBMH4A9BADOEK22C/lzk366A' - }, { - title: 'RSAES-OAEP Encryption Example 3.2', - message: 'RlOsrxcZYLAfUqe+Y6OrIdw2jsQ7UNguw3geBA==', - seed: 'tCkdZWdVCEjMFWlnyAm6q2ylB/A=', - encrypted: 'Ak24nHgCmJvgeDhHhjCElBvyCddhmH44+Xy19vG8iNpypQtz668RyHnE+V3ze4ULj2XXYi4lsbiJ6A/oC6yiBp1uDh2CmVP8RZBp3pjql5i0UeVX6Zq/j+PZzPkJbrvz5SVdO04cbS7K3wZ6NZ7qhkBazUfV4WVRfMr9R9bb7kv1' - }, { - title: 'RSAES-OAEP Encryption Example 3.3', - message: '2UzQ4I+kBO2J', - seed: 'zoko9gWVWCVACLrdl5T63NL9H2U=', - encrypted: 'Ajm85oEDJEFSiHfW0ci7KKo7yX8d9YRWNhiZV5doOETKhmZHMvS+16CqsIOqq/tyOPWC4wlYwgJOROVwQ7l5UP1UPal3yQzd5TN9YYRC+Z5g13g6tZzm3Z1pxHrR6WK+wi0FiVz/jT9k7VJh2SsmeFEDk0hJkLo/fwaBiub/zoo6' - }, { - title: 'RSAES-OAEP Encryption Example 3.4', - message: 'bMZBtrYeb5Y5dNrSOpATKE7x', - seed: 'bil59S1oFKV9g7CQBUiI8RmluaM=', - encrypted: 'AplMYq/Xb0mLof0s9kKFf8qB9Dc8sI8cuu5vAlw7UStCw+h3kRNHZkgDnb4Ek/kkYpL6wolQYA58DzLt+cgbnexFw73gzI2IR1kBaZB7fcWZHOspuwcU1hPZbfDxLsXY01B8jueueN2D8hb6Yd4QA2OspIp+kUrp9C3fvpQ7Cdmg' - }, { - title: 'RSAES-OAEP Encryption Example 3.5', - message: '31FRgyth9PJYkftBcvMo0u3fg3H/z9vpl5OSlfMOymkYAXz9oRU796avh1kyIw==', - seed: 'LXYL/jjFneNM3IuMeKOOZihKLSc=', - encrypted: 'AWIEL/aWlZKmFnAxgRojmDTOY4q/VP7IuZR4Eir+LuZ/jFsYsDOYBb/bxaTmcgs3xZz7qUJGTFl/9TKhGYIVRf0uWbEU5h2vcYIFKfUCnPUklUMnw07F5vW6fvzE3pQ6uK1O14exRUMp9w23mKOo9NkvgnTispSK3mJ86O4z5Dxg' - }, { - title: 'RSAES-OAEP Encryption Example 3.6', - message: 'PDutiTxUSm1SCrAiMZGIyNUEt6eIuFCQO4WXLqoYVS4RNKetYJiCYlT/erZys9jrMVj6xtTLrvE=', - seed: '8XR3nF/Tz+AHuty3o2ybVb/Pvw4=', - encrypted: 'ABEgUeddBklDvER4B15DSC/VnO4Ged5ok+7DqUPapJC5aRyT38BGS2YjufPb0+cAgyZPA0s3T3QWThoAdjcl5XR0S6C524NDTzHflvbiom9tjro0i9RobCI4rAfDeqw3hdHH7qL4Gf2RSReY7Y6c715Dt4Gw4CduN8Q/+UktAFcw' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 4: A 1027-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'BRJAtswABPpI0BNGccB4x8jew7Pi8lvCVkRnM52ziFPQa4XupbLeNTv/QqwuRryX+uaslhjalTelyPVTweNXYlmR1hCNzXiF+zolQT9T78rZSMs1zZua6cHGdibRE9V93kxb6na7W7felsANBzculoWm11z50jn6FI1wkxtfP7A5'; - exponent = 'AQAB'; - d = 'BBH/yjt8penpvn/jioUQXjU4ltsFxXlq7NKnJRYes2UchimpuGK5BNewx7N/jLWhwrVAAQGKAKHrLK/k7k6UksNIvCvtq0ueu/Bk6O/zIrkAn47sZTkF9A34ijzcSdRWf3VifUGspiQSm0agt8aY5eZfK3uhAsdJoQE1tlQNBAE='; - p = 'AnRYwZ7BY2kZ5zbJryXWCaUbj1YdGca/aUPdHuGriko/IyEAvUC4jezGuiNVSLbveSoRyd6CPQp5IscJW266VwE='; - q = 'AhDumzOrYXFuJ9JRvUZfSzWhojLi2gCQHClL8iNQzkkNCZ9kK1N1YS22O6HyA4ZJK/BNNLPCK865CdE0QbU7UTk='; - dP = 'OfoCi4JuiMESG3UKiyQvqaNcW2a9/R+mN9PMSKhKT0V6GU53J+Sfe8xuWlpBJlf8RwxzIuvDdBbvRYwweowJAQ=='; - dQ = 'AV2ZqEGVlDl5+p4b4sPBtp9DL0b9A+R9W++7v9ax0Tcdg++zMKPgIJQrL+0RXl0CviT9kskBnRzs1t1M8eVMyJk='; - qInv = 'AfC3AVFws/XkIiO6MDAcQabYfLtw4wy308Z9JUc9sfbL8D4/kSbj6XloJ5qGWywrQmUkz8UqaD0x7TDrmEvkEro='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 4.1', - message: 'SoZglTTuQ0psvKP36WLnbUVeMmTBn2Bfbl/2E3xlxW1/s0TNUryTN089FmyfDG+cUGutGTMJctI=', - seed: 'HKwZzpk971X5ggP2hSiWyVzMofM=', - encrypted: 'BMzhlhSEXglBUqP+GOVOMzDETl77xkrhaIbLGGkBTMV4Gx+PngRThNARKhNcoNEunIio5AY0Ft6q44RPYNbpb+FVFF9FJbmjRDHKN2YYD3DhWl5djosaUW/4cGCfE/iWk1ztGIJ5pY7RPQcRQnfXXGVoYH4KsJL9gDoiPkqO4LGo' - }, { - title: 'RSAES-OAEP Encryption Example 4.2', - message: 'sK3E8/4R2lnOmSdz2QWZQ8AwRkl+6dn5oG3xFm20bZj1jSfsB0wC7ubL4kSci5/FCAxcP0QzCSUS7EaqeTdDyA==', - seed: '9UXViXWF49txqgy42nbFHQMq6WM=', - encrypted: 'AJe2mMYWVkWzA0hvv1oqRHnA7oWIm1QabwuFjWtll7E7hU60+DmvAzmagNeb2mV4yEH5DWRXFbKA03FDmS3RhsgLlJt3XK6XNw5OyXRDE2xtpITpcP/bEyOiCEeCHTsYOB3hO7SarqZlMMSkuCcfPq4XLNNm4H5mNvEBnSoortFe' - }, { - title: 'RSAES-OAEP Encryption Example 4.3', - message: 'v21C5wFwex0CBrDItFoccmQf8SiJIZqCveqWW155qWsNAWPtnVeOya2iDy+88eo8QInYNBm6gbDGDzYG2pk=', - seed: 'rZl/7vcw1up75g0NxS5y6sv90nU=', - encrypted: 'AwH5NenEery0isu+CYldn1lxrxSDnaT/lUF+5FPR/XcxkHK7cpfhtV11Yc2dG7JMGpo3xhmGQwgkKASHnYbr0AHc5Rg5deFQaYm3DlqDQ0FU1cv9aiR4fmDrDGWNKsGTMC0RksbmItShKtS1OSO8okbfMcY5XjdwLGp4rggfudBl' - }, { - title: 'RSAES-OAEP Encryption Example 4.4', - message: '+y7xEvXnZuuUAZKXk0eU974vb8HFjg==', - seed: 'E2RU31cw9zyAen5A2MGjEqxbndM=', - encrypted: 'AtEQrTCvtye+tpHdDPF9CvGh5/oMwEDsGkuiakLFnQp5ai4iyPNXzMmLZRms62gulF5iy3NGFKUpQHzUUr7j5E/s6EI8wZ5VVIuLmUuEnH7N5JM+dgN+HQzkQnWwhxDGjkMBMLkpcw7XfgmwFWQsVZPwTk/7lBB5gQKo6W/9/hHk' - }, { - title: 'RSAES-OAEP Encryption Example 4.5', - message: 'KMzUR7uehRZtq7nlt9GtrcS5058gTpbV5EDOmtkovBwihA==', - seed: 'vKgFf4JLLqJX8oYUB+72PTMghoE=', - encrypted: 'ANu4p0OdkO/ZGaN3xU+uj+EexYw7hYNi4jrRuKRDEHmQZrmTR6pSVpHSrcWNmwbjTyiMFwOQxfDhHAqjZFlZ8Y7nno8r6NesXCPQYfGN10uMXypY/LXrDFT5nwGoMkdWgpJTZYM0CUjXqMl8Ss0emNHincMg6XomBTKoqnp1ih7C' - }, { - title: 'RSAES-OAEP Encryption Example 4.6', - message: '8iJCdR7GsQ==', - seed: 'Ln4eF/ZHtd3QM+FUcvkPaBLzrE4=', - encrypted: 'AKX/pHaMi77K7i23fo8u7JlZWTNUVSCDXlun25ST0+F83e/mpfVnYkRxkI204tg6D77mBgj8hASVA7IjSgfcg7J7IoR62JIP9C9nTvebdigLACM9K1G4yycDqdQr+8glDJbsMsBR5X8bS6Uo24nDfkxU4n5uZKxpY1roh9lUFhmp' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 5: A 1028-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'Cq3z+cEl5diR8xrESOmT3v5YD4ArRfnX8iulAh6cR1drWh5oAxup205tq+TZah1vPSZyaM/0CABfEY78rbmYiNHCNEZxZrKiuEmgWoicBgrA2gxfrotV8wm6YucDdC+gMm8tELARAhSJ/0l3cBkNiV/Tn1IpPDnv1zppi9q58Q7Z'; - exponent = 'AQAB'; - d = 'AlbrTLpwZ/LSvlQNzf9FgqNrfTHRyQmbshS3mEhGaiaPgPWKSawEwONkiTSgIGwEU3wZsjZkOmCCcyFE33X6IXWI95RoK+iRaCdtxybFwMvbhNMbvybQpDr0lXF/fVKKz+40FWH2/zyuBcV4+EcNloL5wNBy+fYGi1bViA9oK+LF'; - p = 'A7DTli9tF1Scv8oRKUNI3PDn45+MK8aCTyFktgbWh4YNrh5jI5PP7fUTIoIpBp4vYOSs1+YzpDYGP4I4X0iZNwc='; - q = 'AuTDLi9Rcmm3ByMJ8AwOMTZffOKLI2uCkS3yOavzlXLPDtYEsCmC5TVkxS1qBTl95cBSov3cFB73GJg2NGrrMx8='; - dP = 'AehLEZ0lFh+mewAlalvZtkXSsjLssFsBUYACmohiKtw/CbOurN5hYat83iLCrSbneX31TgcsvTsmc4ALPkM429U='; - dQ = '65CqGkATW0zqBxl87ciBm+Hny/8lR2YhFvRlpKn0h6sS87pP7xOCImWmUpfZi3ve2TcuP/6Bo4s+lgD+0FV1Tw=='; - qInv = 'AS9/gTj5QEBi64WkKSRSCzj1u4hqAZb0i7jc6mD9kswCfxjngVijSlxdX4YKD2wEBxp9ATEsBlBi8etIt50cg8s='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 5.1', - message: 'r3GpAeOmHTEy8Pwf20dPnqZXklf/wk0WQXAUWz296A==', - seed: 'RMkuKD93uUmcYD2WNmDIfS+TlGE=', - encrypted: 'A2BGpKR9ntO6mokTnBBQOOt0krBaXWi/1TrM/0WX96aGUbR7SkYn2Sfkhe7XtFZkIOi0CYeeXWBuriUdIqXfeZ95IL/BF7mSVypTsSYxRrzqAzhcxehTyaEByMPhvaMaUZgHSWxsteXvtAiCOjUrj6BmH7Zk763Vk965n/9e0ADl' - }, { - title: 'RSAES-OAEP Encryption Example 5.2', - message: 'o7hEoII5qKxBYFrxemz9pNNQE2WFkDpBenkmh2BRmktKwzA+xz8Ph8+zI5k=', - seed: 'yyj1hgZZ/O7knD7q/OYlpwgDvTI=', - encrypted: 'A9brZU7c5hW8WfRVJl7U5aGCI8u5vk5AabRzgE1d6W9U3KqmA9BJxdlKoUcN/NIlQGa3x7Yf8fb2dw4yFcUTmf1ONOxQgrxI8ImECtBDVK5m3A8b0Y5GGjPMEli0Q6KDem3yZ1mqIwIzSYb4c4DJzJ1Tvp+ZYF0smpfaewkVpKet' - }, { - title: 'RSAES-OAEP Encryption Example 5.3', - message: 'MIsOy9LHbLd/xvcMXt0jP9LyCSnWKfAmlTu2Ko9KOjFL3hld6FtfgW2iqrB00my2rN3zI647nGeKw88S+93n', - seed: 'IoX0DXcEgvmp76LHLLOsVXFtwMo=', - encrypted: 'B3CVIYFkn5+fB/9ib/OiLDXEYkQ9kF1Fap/Qv/Q8rCynqfVU6UeLmsw6yDiwIED/0+GEfeLkJTkp+d2e5ARDJamwXKu4CLLuhA004V0QWj8feydpWhoHotc/4I7KqjycnU1aif+JDVRyfXrkDA7BqN2GFl2O4sY2gUEBaki1W2ln' - }, { - title: 'RSAES-OAEP Encryption Example 5.4', - message: 'FcW57hGF', - seed: 'SfpF06eN0Q39V3OZ0esAr37tVRM=', - encrypted: 'CBK3Z2jry2QtBAJY5fREGgGFIb2WaH5sXomfzWwXWI/1moLMiuA6S0WzEpmvF4jDKffc0oX4z0ztgmBrl2EmcaRb7coTNEIUTRYX0RT4AoV/D51zl1HFej+e5ACRLGHi5pkr4DGkPdSPproU7vfEIrXtxOevoE/dOPQC0ci7cZq/' - }, { - title: 'RSAES-OAEP Encryption Example 5.5', - message: 'IQJuaADH+nKPyqug0ZauKNeirE/9irznlPCYX2DIpnNydzZdP+oR24kjogKa', - seed: '8Ch0EyNMxQNHJKCUxFhrh6/xM/w=', - encrypted: 'B7YOFOyVS/0p5g0AR+eJ9R1XGGxjWJkDMGeTztP2gkHHQ1KaumpjdPkuGeAWPvozaX4Zb3Zh36qkeqxr3l5R3rUHxyxYmiyhaT2WsUYDgSSbLNuerER2nySJxdPS+Z8O48fuW/ZKWsecQr1DPxSb6MtZVINhZAWVUTyXr3vCUJcj' - }, { - title: 'RSAES-OAEP Encryption Example 5.6', - message: 'VB43totsiHK4TAI=', - seed: '2fukXJbyHm4m0p6yzctlhb6cs0E=', - encrypted: 'CMNtTdozQjsu1oMNhfZBG6Hc9HCh+uDr7+58CJ8lbO90y5bqacOPYPOavuRBKby0yS3n95diOyAHTj2cKJlwHtkHHh76C92E1MPlEwMC2PAkC6ukuEpxzAMvIjWl/w+uJ3w+j5ESvvRMmuINF1/JpAWL/JMLoxsC4uT0REg3EPJK' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 6: A 1029-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'ErF/ba0uzRn/RtwT94YPCeDgz7Z3s4pSWSMFzq8CLBZtuQ0ErCnjP33RLZ+vZuCBa7Y+rSZ8x9RsF8N74hS8oqItcjpk5EQHQ2tvyWVymu/CVU83bNXc6mgpN4CmK/OdAClIWhYLu55dwJctIaUE9S5e4CiqQWMy9RCy6c/19yKv'; - exponent = 'AQAB'; - d = 'ApXso1YGGDaVWc7NMDqpz9r8HZ8GlZ33X/75KaqJaWG80ZDcaZftp/WWPnJNB7TcEfMGXlrpfZaDURIoC5CEuxTyoh69ToidQbnEEy7BlW/KuLsv7QV1iEk2Uixf99MyYZBIJOfK3uTguzctJFfPeOK9EoYij/g/EHMc5jyQz/P5'; - p = 'BKbOi3NY36ab3PdCYXAFr7U4X186WKJO90oiqMBct8w469TMnZqdeJpizQ9g8MuUHTQjyWku+k/jrf8pDEdJo4s='; - q = 'BATJqAM3H+20xb4588ALAJ5eCKY74eQANc2spQEcxwHPfuvLmfD/4Xz9Ckv3vv0t1TaslG23l/28Sr6PKTSbke0='; - dP = 'A5Ycj3YKor1RVMeq/XciWzus0BOa57WUjqMxH8zYb7lcda+nZyhLmy3lWVcvFdjQRMfrg6G+X63yzDd8DYR1KUs='; - dQ = 'AiGX4GZ0IZaqvAP6L+605wsVy3h9YXrNMbt1x7wjStcG98SNIYLR8P+cIo3PQZZ7bAum0sCtEQobhXgx7CReLLE='; - qInv = 'BAHEwMU9RdvbXp2W0P7PQnXfCXS8Sgc2tKdMMmkFPvtoas4kBuIsngWN20rlQGJ64v2wgmHo5+S8vJlNqvowXEU='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 6.1', - message: 'QEbKi6ozR8on9J4NgfnMHXG+m6UX1A==', - seed: '3Q9s/kFeiOWkaaUfu6bf1ArbQ4Q=', - encrypted: 'BjDuvNKFbCT3mIBuQfnmc0Xtqc7aOGrMn6yuoe7tBqzlg3CXGNnRafrfQU1cdvkploM+8wW3Wx5LlfZiog+u3DuuDEgnqL+KiO29V+wgOieoQfAuQ6YVurGoysBwHeNN6972KgiAibVew26nUi/T7I0GtqBz5t+DMVO8Cu/ZO9Gj' - }, { - title: 'RSAES-OAEP Encryption Example 6.2', - message: 'XMcsYCMd8Ds9QPm1eTG8MRCflyUn8osZ50gMcojLPJKyJRIhTkvmyRR5Ldq99X+qiqc=', - seed: 'jRS9lGoTURSPXK4u2aDGU+hevYU=', - encrypted: 'Drw3N2FzpP0vicxVwspismsR1Rw8fOSeiEX3TnYHMXxDa8jSO5Zn3+udCHI0tHvGg3F1rlwFWfa4HX0iQW0+UPSsUz2PCBLy2555H+nHdayLatD1Na2c6yOkoCAUxYqz+NMWFJmiYPOTSOcUriodNEMgj9i3Isz9+zk+mAEfmeY/' - }, { - title: 'RSAES-OAEP Encryption Example 6.3', - message: 'sg5lEwMJL0vMtDBwwPhtIwSTYu2WZC/FYywn20pS49gx8qsGiyOxSYecAC9r8/7ul1kRElYs', - seed: 'bAdbxFUg8WXAv16kxd8ZG8nvDkQ=', - encrypted: 'Cpi/EJNhk5RDbPaNjzji8Vj96OpU80NfI5uNBrgyGEQgJHau7ZYAlJJIDOOo1wVJjEyMaPAVAdyB22CPYAhzUMjDsL0unvaoFFi3yAG4ny5P6Z1JALpqS15althl3Gdsd1WSh5QTDWKAqBYKGQ8t8+p8+aoCcdiOnmkF7PHFFS1l' - }, { - title: 'RSAES-OAEP Encryption Example 6.4', - message: 'aE4wOMXAQfc=', - seed: 'O7w71mN9/hKEaQECm/WwwHEDQ5w=', - encrypted: 'AI56Z8rPtcTiS+x97hSRF/GVmM6MRYCP74jGCP+c1uaVJjuaPArUuLpMlSOOlqhCK4U1YpyNU4I3RHmtE/o5l0skL5p1nur5yDrVqMoYlAoBYrp1WHbfJj9L1QxlJcVgkCZ8Hw4JzgiZoM81nogSCr2b+JNEWzyud9Ngc1mumlL4' - }, { - title: 'RSAES-OAEP Encryption Example 6.5', - message: 'MkiMsmLQQdbk3TX5h788ppbbHwasKaRGkw==', - seed: 'tGtBiT6L7zJvZ1k4OoMHHa5/yrw=', - encrypted: 'AAA0dEFse2i9+WHDhXN5RNfx9AyzlTQ8aTzAtP5jsx/t8erurJzMBnizHcMuCXdIlRTE8JCF9imKllPwGupARf9YLuiHviauV1tz7vfzd0kh43Wj0ZrdoMoxqhhJiHwfQsrJZ396L06SP25ahos4wITvGHWU3J9/BI/qLgKVU4Sr' - }, { - title: 'RSAES-OAEP Encryption Example 6.6', - message: 'ULoUvoRicgJ5wwa6', - seed: 'CiQDMSpB49UvBg+8E6Z95c92Cac=', - encrypted: 'CgJt2l/IeF972b91Mntj6F4sD97l2ttl69ysmuHelcksZyq0M6p6jmnOam2Il/rErEpU3oQa5eW7znaHh515Y0zqejBoQGXHFNUkCbkoJWu/U+q81SMetyWVBFNzmb0pFktybTOkbacBNgpBaKCRzKty1Epi/tJGwP/qWxNIq1Rw' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 7: A 1030-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'MRF58Lz8m508oxXQDvMNe906LPrpkRv+3LlIs6R4LQcytqtEqkvwN0GmRNwBvsPmmwGgM+Z12KzXxJJcaxrsMRkFHf2Jdi0hXUVHX/y1n5CBSGI/NxdxVvauht16fF9D3B4fkIJUBYooSl8GwAIXk6h/GsX+/33K7mnF5Ro3ieNz'; - exponent = 'AQAB'; - d = 'Bwz8/y/rgnbidDLEXf7kj0m3kX1lMOHwyjRg8y4CdhdEh8VuIqRdJQDXd1SVIZ19Flqc872Swyr5qY2NycwpaACtyUoKVPtA80KRv4TujqErbxCTWcbTVCpQ+cdn9c//BaaBwuZW+3fKqttL6UaNirzU35j1jobSBT+hNJ90jiGx'; - p = 'B0kmLBEc1HDsJWbms3MvwJMpRpqhkHHTucAZBlFMbx0muqFL6rCXHIt+YRpPeQCdb+p3aSjKJShbDeNkPRo/jHE='; - q = 'BrweUOlsAr9jbp7qi4mbvr92Ud533UdMPpvCO62BgrYZBMfZffvr+x4AEIh4tuZ+QVOR1nlCwrK/m0Q1+IsMsCM='; - dP = 'A7x+p/CqsUOrxs6LlxGGNqMBcuTP4CyPoN2jt7qvkPgJKYKYVSX0iL38tL1ybiJjmsZKMJKrf/y/HVM0z6ULW/E='; - dQ = 'AmKmqinCo8Z9xTRsBjga/Zh6o8yTz7/s9U/dn514fX9ZpSPTmJedoTei9jgf6UgB98lNohUY3DTLQIcMRpeZStk='; - qInv = 'ZJ1MF7buFyHnctA4mlWcPTzflVDUV8RrA3t0ZBsdUhZq+KITyDliBs37pEIvGNb2Hby10hTJcb9IKuuXanNwwg=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 7.1', - message: 'R6rpCQ==', - seed: 'Q90JoH/0ysccqkYy7l4cHa7kzY8=', - encrypted: 'FojkzneUu6bLcBQWns1VnO3iowtWpSto2f4Yzxlz75eyoDFTlRx1X2KUqkmtvbVYRatodfs5hsk+z5J5YoQNKC+eVM6LaQ98DLi71zRA2VcdGxbNkmD56rR4PMSC5SI9xglzhxeD7Cewrg/UdzLLwoahc/ySsA+0umgkZHzZPIXB' - }, { - title: 'RSAES-OAEP Encryption Example 7.2', - message: 'HZsuIiPZvBO/ufFiznNdtIunxo9oIqChp7auFlg05w==', - seed: 'Opw87HuE+b063svGc+yZ1UsivJs=', - encrypted: 'EFLtOXsuAeHQ7hxQvyQ2P5XlBPSgNDSgj9giV07WuXNu27XzkNsQMhR5qKE5NQ4r1Jd8N3jvMx8+eK4RiyaEUfIKLwHUcfXVPFZpNxcbLbwtS95FmleZ8DctZXQjmyMj0kXQu4HChrY8iaNhAXM35JAviKRn9MfyRL/Vq0ZDf/O2' - }, { - title: 'RSAES-OAEP Encryption Example 7.3', - message: '2Xb8', - seed: 'dqdeW2FXpVbPiIS7LkXCk91UXPU=', - encrypted: 'IVXNhD/ySk7outt2lCYAKKSQgTuos2mky/EG7BSOUphwf1llvn0QHBBJ6oWEwkzWNFWtnBBNaGKC0/uAOkwRwcLpuRxxeIAdG2ZA8AP1co3wB7ikzMkrzgXkGicnjXyFAYxSQUMTpQd3iQAdTwGRC3Kq0F0iCqFKWHM6dIm8VFVr' - }, { - title: 'RSAES-OAEP Encryption Example 7.4', - message: '1HOGI98iOqQ4Q9+EZ1NMQdAT4MgDxiTiY2ZrI5veQKXymuuN5549qmHdA3D0m9SwE4NLmCEq72scXuNzs8s=', - seed: 'eGYxSmrW8rJQo1lB2yj1hktYWFk=', - encrypted: 'CrFMNzrrfUMo0KqtjAlNiLnrCYuV8hBUopCCUivnwnoxKHi2N5F+PYGebDxWjbXYQ4ArBtUdnpiivgv0DAMUI7AO37/4Mg77kXG9IERlOky5xRIvbGXoPNouw8EmAnqcGla6h00P6iPzgLgs8kC4z1QABHWMTHfZNBV6dPP8Er+s' - }, { - title: 'RSAES-OAEP Encryption Example 7.5', - message: 'u0cjHKXqHTrUbJk0XZqKYQ==', - seed: 'shZu1HLVjbEMqyxrAAzM8Qp9xQk=', - encrypted: 'AoOHoxgndDR5i02X9GAGjfUpj6ulBBuhF2Ghy3MWskGEEU7FACV+JYntO2B6HrvpemzC4CvxtoH0IxKjO3p32OeFXEpt4D48BGQ/eGuRomSg1oBeLOqR5oF363pk2SVeTyfnE7fM7ADcIA69IcLqK7iQ/q5JQt+UHcP5eJDtNHR4' - }, { - title: 'RSAES-OAEP Encryption Example 7.6', - message: 'IYSCcJXTXD+G9gDo5ZdUATKW', - seed: 'Umc73iyhZsKqRhMawdyAjWfX07E=', - encrypted: 'FMZ4qUrWBSXvOelZsvO6XAl6lP+RK2fbrOgFNcGHq9R9B1QgsYchUrugj3/DHzE7v5JzyRL8TAFJqbDPt5gH40brMyBpYRvsD/m80Wjx98M+dzE86kVLlOJUnuzwAuKs9/by0oRdT+CqsuWpLd9oxICuESR5NdH2JXSEIhauZ0EV' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 8: A 1031-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'W98OMNMh3aUUf4gkCPppGVSA34+A0/bov1gYUE82QnypsfVUC5xlqPaXTPhEeiRNkoAgG7Sfy75jeNGUTNIn4jD5bj0Q+Bnc7ydsZKALKktnAefQHeX6veOx6aDfgvRjE1nNImaWR/uxcXJGE07XtJfP/73EK1nHOpbtkBZiEt/3'; - exponent = 'AQAB'; - d = 'D30enlqqJf0T5KBmOuFE4NFfXNGLzbCd8sx+ZOPF6RWtYmRTBBYdCYxxW7eri9AdB+rz/tfH7QivKopi70SrFrMg4Ur3Kkj5av4mKgrkz2XmNekQeQzU7lzqdopLJjn35vZ3s/C7a+MrdXR9iQkDbwJk9Y1AHNuhMXFhV6dez2Mx'; - p = 'CgLvhEjZ+ti70NAEyMKql1HvlyHBsNAyNqVLDflHy67VolXuno4g1JHqFyP+CUcEqXYuiK/RbrtZlEEsqWbcT58='; - q = 'CS02Ln7ToL/Z6f0ObAMBtt8pFZz1DMg7mwz01u6nGmHgArRuCuny3mLSW110UtSYuByaxvxYWT1MP7T11y37sKk='; - dP = 'B8cUEK8QOWLbNnQE43roULqk6cKd2SFFgVKUpnx9HG3tJjqgMKm2M65QMD4UA10a8BQSPrpoeCAwjY68hbaVfX0='; - dQ = 'rix1OAwCwBatBYkbMwHeiB8orhFxGCtrLIO+p8UV7KnKKYx7HKtYF6WXBo/IUGDeTaigFjeKrkPH+We8w3kEuQ=='; - qInv = 'BZjRBZ462k9jIHUsCdgF/30fGuDQF67u6c76DX3X/3deRLV4Mi9kBdYhHaGVGWZqqH/cTNjIj2tuPWfpYdy7o9A='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 8.1', - message: 'BQt1Xl5ogPe56daSp0w3quRJsxv+pt7/g3R6iX9sLIJbsa2/hQo8lplLXeWzPLx9SheROnln', - seed: 'dwb/yh7PsevuKlXlxuJM0nl6QSU=', - encrypted: 'CbNoPYousPspW2LtH7kpC3FEV7eCUxn0ZHhyr4ibMECUcgIK0SkSvxmxHUgZ9JYUgk/9hNCcChfn0XMJ0SkZeQQQqimVaZ9qhtvjJCtazCOvRWkQgNaxroEPs+MFcIfwlwCSzgC+lWL/QFO2Jizgyqk+E3I9LjpboHXUXw1htUth' - }, { - title: 'RSAES-OAEP Encryption Example 8.2', - message: 'TraNzZPKmxnfERvUNgj1VwJv5KodXPrCJ6PrWrlUjBigbd7SP4GCWYay/NcRCezvfv+Ihz8HXCqgxGn2nJK8', - seed: 'o3F9oUO03P+8dCZlqPqVBYVUg0M=', - encrypted: 'Ls8VyXxaFbFHaumGs3G1eiQoT0oWKo0MgYLnkF55IlbxgSul+D8fehMOQtzAIjKETtwUoxpo7peuVko4OjQRZWQkxfYt22Rgk8Nnvh/NpCbPAKBtist+V3dvu9hVrD31BvwWsdfD8hEPPYBo6R4YY2ODHIQJaA2NqezYzx+iDuOd' - }, { - title: 'RSAES-OAEP Encryption Example 8.3', - message: 'hgSsVjKMGrWtkXhh', - seed: '7gYgkHPMoCa7Jk5Rhb+MaLdzn4Y=', - encrypted: 'S8iRMKWy2rt8L8+Q610Or55oG3FGo48xc6PZz+xS6p4KQZMuZIqdaTRMUNp2P1GgPJV2ITHoBSJU3NIkjLpA/TFmd4bOBaK3tTGsnaye1YSlm2d8GortjF0V1owFVp4r54C/fbY4/Sv9KoWrJ2hg83dzOPypif/XQ9E+4I4MqYk/' - }, { - title: 'RSAES-OAEP Encryption Example 8.4', - message: '/dpfv27DYanZpKxoryFqBob0OLHg5cNrlV904QfznA3dzA==', - seed: 'mQrVc9xIqXMjW22CVDYY8ulVEF0=', - encrypted: 'LkVoR9j8Nv8BR9aZNZS5OXIn1Xd1LHnQ+QT8sDnU2BL+pgWntXTdgsp4b5N1I0hDjun1tUVJhdXw4WmePnrRdaMuFfA96wQquf4d2dsbuG+MCJzLRefvDF7nyptykMprFb7UcDl4ioqT/4Pg6NYkTHEAY2Le72m29Bb7PGhDg/vQ' - }, { - title: 'RSAES-OAEP Encryption Example 8.5', - message: 'Sl9JFL7iXePGk0HeBw==', - seed: '7MY7KPB1byL1Ksjm7BJRpuwwRxg=', - encrypted: 'H7k1b9XEsXltsuv30NOTzIEK32FF3vwvznFPedk4ANXirCEeqLvsyktlS5TDsYsw3Vds403JVDbvV6CUFWRZIzWaXXtBce8iwkZw8bIp02A+kfdmcbffl+cxfJdzRHbV89F9Ic+Ctbqfg98uWI02mE/RtYRGi9I7LodfMvaJU/ey' - }, { - title: 'RSAES-OAEP Encryption Example 8.6', - message: 'jgfWb3uICnJWOrzT81CSvDNAn7f4jyRyvg==', - seed: 'OSXHGzYtQKCm3kIUVXm6Hn3UWfw=', - encrypted: 'Ov2cZgAUeyF5jYGMZVoPTJIS2ybQsN/cKnWUzLPSL1vx18PhEs1z/H1QnHqLr908J00TmQCflgnsS+ZHfkU/B1qjPbOChwwcNAmu85LXOGrjppa5mpS02gWJRH6VXRbJixdgKlm9c2J5/Nj7KAxEYtWQv6m/E/7VcOr96XMwosIQ' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 9: A 1536-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'zyzUHjTKOnKOpcuK/2TDbSe971Nk4zb9aNMSPFoZaowocBPoU9UVbVjRUZVFIPtPbXsXq7aBd2WQnFdhGWWdkCsZBu2KKxDBVcJNEkUo2rnurjeb6sZuSkEXhty4/QBi68Aw3hIZoEwqjBt90xMeTWtsruLjGl7UGsFQmy7x7iqxg2S+VoypQcJezIT/nWQ7XsGqrhAqINc/R5t4D9bakQdSEtnqwDoGdNiZ66LkMfTES2Fba6IjK9SzO67XPWJd'; - exponent = 'AQAB'; - d = 'GYwUHiNxWpK8z2oRmlvBE4lGjSgR9UjXJ+F7SrDrmG1vIR77U7cffMvqh+5px17mFQCMUzLetSvzkKvfv+N9cgU2gVmyY4wd4ybiHSIlHw+1hIs78VAF0qdDMPCv6RbuYszBNE0dg6cJ5gZ2JzhA9/N3QkpeCk2nXwGzH/doGc+cv90hUkPDkXwD7zgZkxLlZ7O/eu06tFfzce+KFCP0W2jG4oLsERu6KDO5h/1p+tg7wbjGE8Xh6hbBHtEl6n7B'; - p = '/I1sBL7E65qBksp5AMvlNuLotRnezzOyRZeYxpCd9PF2230jGQ/HK4hlpxiviV8bzZFFKYAnQjtgXnCkfPWDkKjD6I/IxI6LMuPaIQ374+iB6lZ0tqNIwh6T+eVepl79'; - q = '0gDUXniKrOpgakAdBGD4fdXBAn4S3BoNdYbok52c94m0D1GsBEKWHefSHMIeBcgxVcHyqpGTOHz9+VbLSNFTuicEBvm7ulN9SYfZ4vmULXoUy//+p0/s3ako0j4ln17h'; - dP = '2xaAL3mi8NRfNY1p/TPkS4H66ChiLpOlQlPpl9AbB0N1naDoErSqTmyL6rIyjVQxlVpBimf/JqjFyAel2jVOBe8xzIz3WPRjcylQsD4mVyb7lOOdalcqJiRKsI23V1Kt'; - dQ = 'oKMXz+ffFCP4em3uhFH04rSmflSX8ptPHk6DC5+t2UARZwJvVZblo5yXgX4PXxbifhnsmQLgHX6m+5qjx2Cv7h44G2neasnAdYWgatnEugC/dcitL6iYpHnoCuKU/tKh'; - qInv = 'CyHzNcNTNC60TDqiREV4DC1lW5QBdMrjjHyKTmSTwLqf0wN0gmewg7mnpsth5C2zYrjJiW23Bk4CrVrmFYfaFbRknJBZSQn+s328tlS+tyaOyAHlqLSqORG+vYhULwW+'; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 9.1', - message: '9zX9VbqSWSw7Urj5xPaaqhy++P6IrdCVWVQSRn+c9OwLiWxZ7aFiEOdUnIq7EM28IaEuyba1uP0vEDmetg==', - seed: 'jsll8TSj7Jkx6SocoNyBadXqcFw=', - encrypted: 'JnvNEYrKsfyLqByF1zADy4YQ+lXB2X2o1Ip8fwaJak23UaooQlW502rWXzdlPYKfGzf5e4ABlCVFsvwsVac3bKehvksXYMjgWjPlqiUmuNmOMXCI54NMdVsqWbEmMaGCwF1dQ6sXeSZPhFb1Fc5X399RLVST2re3M43Et9eNucCRrDuvU3pp/H9UnZefDv+alP2kFpvU0dGaacmeM8O1VJDVAbObHtrhGP9nk6FTJhWE06Xzn25oLj0XyM0SYfpy' - }, { - title: 'RSAES-OAEP Encryption Example 9.2', - message: 'gbkGYFAVpjqr5C3fEeGXiRL1QEx0dLJtzj7Ugr+WHsyBi/QgxUZZ', - seed: '7LG4sl+lDNqwjlYEKGf0r1gm0Ww=', - encrypted: 'k6yfBnHsKay7RE7/waV0E1HWD9sOOT+/dUrPDeSXYaFIQd93cum8gnc5ZqFYTE1yuuoAEY+D81zKblN8vU2BH1WDspeD2KbZTNMb5w1vUmwQ/wnG+nzgaXlaP80FEf1fy1ZLzIDqnHjzi4ABJTnYpN32/oHpzdt/UNu7vMfl2GCXzPTsSRifuL8xi+bVoHFdUWtJrxkSWM0y3IM85utGc8A6Gbus6IzFSJX2NswMHsiQltEc4jWiZcoXZCMqaJro' - }, { - title: 'RSAES-OAEP Encryption Example 9.3', - message: '/TJkKd+biQ4JtUsYuPNPHiQ=', - seed: '6JuwMsbOYiy9tTvJRmAU6nf3d8A=', - encrypted: 'gevdlQVLDIIu+a12k/Woet+0tMTOcN8t+E7UnATaWLpfwgoZ4abot6OQCyJ5bcToae5rQnktFajs61bAnGmRToE86o9pMeS47W9CGvKY1ZXJf0eJx8qmEsfvNgmEwhuT7cVAEGi1r0x4qHcbmE1TuOqK3y9qfUoLp2x14d2fZY8g3tSkYHHUbXeRtWgD2P6n8LD45Brj8JODpvlYX+d1Pqr/0r+UVjEIvuzCB7u1NfX8xwXw3en3CMYvSanJA3HT' - }, { - title: 'RSAES-OAEP Encryption Example 9.4', - message: '8UWbXwyS8BoPcjouVmJITY+MCiD8KdrWrNQ7tfPv/fThtj4H/f5mKNDXTKGb8taeSgq/htKTklp5Z3L4CI4=', - seed: 'YG87mcC5zNdx6qKeoOTIhPMYnMw=', - encrypted: 'vMNflM3mbLETZiXWJblEMqNbIvPS+hGmE/8PylvVf4e5AszcHNCuvLBxXuhp0dH+OV9nkwA/XspGUFnIhmDURv9fCBhVICJVfjjAimfq2ZEmIlTxBoKXXsVjl3aFN/SXevbV9qrOt/sl3sWTcjAjH9iXivSRGaKfKeQkq4JytHVieS1clPd0uIKdCw2fGoye3fN1dNX6JI7vqcUnH8XsJXnIG91htBD6Yf425CQiHBE63bJ1ZkyAHTTKjGNR5KhY' - }, { - title: 'RSAES-OAEP Encryption Example 9.5', - message: 'U+boxynW+cMZ3TF+dLDbjkzMol88gwV0bhN6xjpj7zc557WVq7lujVXlT3vUGrQzN4/7kR0=', - seed: '/LxCFALp7KvGCCr6QLpfJlIshA4=', - encrypted: 'Iyr7ySf6CML2onuH1KXLCcB9wm+uc9c6kFWIOfT9ZtKBuH7HNLziN7oWZpjtgpEGp95pQs1s3OeP7Y0uTYFCjmZJDQNiZM75KvlB0+NQVf45geFNKcu5pPZ0cwY7rseaEXn1oXycGDLyg4/X1eWbuWWdVtzooBnt7xuzrMxpfMbMenePYKBkx/b11SnGIQJi4APeWD6B4xZ7iZcfuMDhXUT//vibU9jWTdeX0Vm1bSsI6lMH6hLCQb1Y1O4nih8u' - }, { - title: 'RSAES-OAEP Encryption Example 9.6', - message: 'trKOohmNDBAIvGQ=', - seed: 'I6reDh4Iu5uaeNIwKlL5whsuG6I=', - encrypted: 'Q4zH3AimjaJJ5CUF+Fc7pg4sJ3PVspD0z53/cY6EIIHDg+ZwJKDylZTqmHudJeS3OPKFlw0ZWrs6jIBU49eda5yagye6WW8SWeJxJmdHZpB9jVgv86hHYVSSmtsebRI1ssy07I9mO6nMZwqSvr2FPI2/acZDbQFvYa3YNulHMkUENCB/n9TEPewqEqlY76Ae/iZpiZteYEwlXFX7cWbeVYnjaVl7sJFowG3V2xd+BqF0DrLVyC+uym2S/O6ZMbqf' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - - // Example 10: A 2048-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'rkXtVgHOxrjMBfgDk1xnTdvg11xMCf15UfxrDK7DE6jfOZcMUYv/ul7Wjz8NfyKkAp1BPxrgfk6+nkF3ziPn9UBLVp5O4b3PPB+wPvETgC1PhV65tRNLWnyAha3K5vovoUF+w3Y74XGwxit2Dt4jwSrZK5gIhMZB9aj6wmva1KAzgaIv4bdUiFCUyCUG1AGaU1ooav6ycbubpZLeGNz2AMKu6uVuAvfPefwUzzvcfNhP67v5UMqQMEsiGaeqBjrvosPBmA5WDNZK/neVhbYQdle5V4V+/eYBCYirfeQX/IjY84TE5ucsP5Q+DDHAxKXMNvh52KOsnX1Zhg6q2muDuw=='; - exponent = 'AQAB'; - d = 'BWsEIW/l81SsdyUKS2sMhSWoXFmwvYDFZFCiLV9DjllqMzqodeKR3UP0jLiLnV/A1Jn5/NHDl/mvwHDNnjmMjRnmHbfHQQprJnXfv100W4BNIBrdUC1c4t/LCRzpmXu+vlcwbzg+TViBA/A29+hdGTTRUqMj5KjbRR1vSlsbDxAswVDgL+7iuI3qStTBusyyTYQHLRTh0kpncfdAjuMFZPuG1Dk6NLzwt4hQHRkzA/E6IoSwAfD2Ser3kyjUrFxDCrRBSSCpRg7Rt7xA7GU+h20Jq8UJrkW1JRkBFqDCYQGEgphQnBw786SD5ydAVOFelwdQNumJ9gkygHtSV3UeeQ=='; - p = '7PWuzR5VFf/6y9daKBbG6/SQGM37RjjhhdZqc5a2+AkPgBjH/ZXMNLhX3BfwzGUWuxNGq01YLK2te0EDNSOHtwM40IQEfJ2VObZJYgSz3W6kQkmSB77AH5ZCh/9jNsOYRlgzaEb1bkaGGIHBAjPSF2vxWl6W3ceAvIaKp30852k='; - q = 'vEbEZPxqxMp4Ow6wijyEG3cvfpsvKLq9WIroheGgxh5IWKD7JawpmZDzW+hRZMJZuhF1zdcZJwcTUYSZK2wpt0bdDSyr4UKDX30UjMFhUktKCZRtSLgoRz8c52tstohsNFwD4F9B1RtcOpCj8kBzx9dKT+JdnPIcdZYPP8OGMYM='; - dP = 'xzVkVx0A+xXQij3plXpQkV1xJulELaz0K8guhi5Wc/9qAI7U0uN0YX34nxehYLQ7f9qctra3QhhgmBX31FyiY8FZqjLSctEn+vS8jKLXc3jorrGbCtfaPLPeCucxSYD2K21LCoddHfA8G645zNgz72zX4tlSi/CE0flp55Tp9sE='; - dQ = 'Jlizf235wQML4dtoEX+p2H456itpO35tOi9wlHQT7sYULhj7jfy2rFRdfIagrUj4RXFw8O+ya8SBJsU+/R0WkgGY3CoRB9woLbaoDNMGI2C6P6E/cOQxL/GmzWuPxM2cXD2xfG1qVyEvc64p9hkye61ZsVOFhYW6Tii2CmKkXkk='; - qInv = 'bzhSazklCFU07z5BWoNu3ouGFYosfL/sywvYNDBP7Gg7qNT0ecQz1DQW5jJpYjzqEAd22Fr/QB0//2EO5lQRzjsTY9Y6lwnu3kJkfOpWFJPVRXCoecGGgs2XcQuWIF7DERfXO182Ij+t1ui6kN18DuYdROFjJR4gx/ZuswURfLg='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 10.1', - message: 'i7pr+CpsD4bV8XVul5VocLCJU7BrTrIFvBaU7g==', - seed: 'R+GrcRn+5WyV7l6q2G9A0KpjvTM=', - encrypted: 'U+pdwIzSYPs7hYVnKH+pFVLDCy/r+6IT8K6HcC0GjRm6sH/ldFI9+0ITnWjDxa/u4L/ky3lpy/OCuATW5hOWFE4tDmB0H4mTwwFLWLmxlXqLq80jr4VPTDVvsWYqpyv8x+WGVZ3EKA0WDBJnhacj6+6+/3HxFZRECq74fRB5Ood0ojnUoEyH/hRnudr4UgjsbHJVeUqWzCkUL5qL1Bjjwf1nNEsM0IKd87K+xgJTGWKTxrNNP3XTLyE91Fxic9UFrfTM7RBXy3WPwmru+kQSVe1OZMGZ7gdefxZkYYL9tGRzm2irXa/w5j6VUgFoJPBUv008jJCpe7a2VTKE60KfzA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.2', - message: '5q0YHwU7WKkE8kV1EDc+Vw==', - seed: 'bRf1tMH/rDUdGVv3sJ0J8JpAec8=', - encrypted: 'orGkMKnWV+L6HCu17UP/slwFowj+kJPAEDF5X1h0QAEQgorlj7m1gc6d3dPlSa4EoJhUWb3mxiZZTnsF3EJ4sqFGXBNoQIgjyF6W3GbDowmDxjlmT8RWmjf+IeWhlbV3bu0t+NjTYa9obnUCKbvWY/FhhopQYV4MM3vsDKNf7AuxnDbrLgu8wFgvodk6rNsGEGP1nyzh7kNgXl2J7KGD0qzf6fgQEQIq07Q6PdQX2slLThHqgbGSlm6WaxgggucZZGB7T4AC82KZhEoR8q4PrqwurnD49PmAiKzc0KxVbp/MxRFSGQj60m8ExkIBRQMFd4dYsFOL+LW7FEqCjmKXlQ==' - }, { - title: 'RSAES-OAEP Encryption Example 10.3', - message: 'UQos9g6Gb6I0BVPJTqOfvCVjEeg+lEVLQSQ=', - seed: 'OFOHUU3szHx0DdjN+druSaHL/VQ=', - encrypted: 'mIbD5nZKi5qE6EFI69jDsaqAUDgaePZocUwW2c/Spu3FaXnFNdne47RLhcGL6JKJkjcXEUciFtld2pjS7oNHybFN/9/4SqSNJawG99fmU5islnsc6Qkl9n3OBJt/gS2wdCmXp01E/oHb4Oej/q8uXECviI1VDdu+O8IGV6KVQ/j8KRO5vRphsqsiVuxAm719wNF3F+olxD9C7Sffhzi/SvxnZv96/whZVV7ig5IPTIpjxKc0DLr93DOezbSwUVAC+WyTK1t5Fnr2mcCtP8z98PROhacCYr8uGP40uFBYmXXoZ/+WnUjqvyEicVRs3AWmnstSblKHDINvMHvXmHgO3g==' - }, { - title: 'RSAES-OAEP Encryption Example 10.4', - message: 'vN0ZDaO30wDfmgbiLKrip18QyR/2Z7fBa96LUwZKJkmpQEXJ', - seed: 'XKymoPdkFhqWhPhdkrbg7zfKi2U=', - encrypted: 'Yxjp+1wNBeUwfhaDQ26QMpOsRkI1iqoiPXFjATq6h+Lf2o5gxoYOKaHpJoYWPqC5F18ynKOxMaHt06d3Wai5e61qT49DlvKM9vOcpYES5IFg1uID2qWFbzrKX/7Vd69JlAjj39Iz4+YE2+NKnEyQgt5lUnysYzHSncgOBQig+nEi5/Mp9sylz6NNTR2kF4BUV+AIvsVJ5Hj/nhKnY8R30Vu7ePW2m9V4MPwsTtaG15vHKpXYX4gTTGsK/laozPvIVYKLszm9F5Cc8dcN4zNa4HA5CT5gbWVTZd5lULhyzW3h1EDuAxthlF9imtijU7DUCTnpajxFDSqNXu6fZ4CTyA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.5', - message: 'p91sfcJLRvndXx6RraTDs9+UfodyMqk=', - seed: 'lbyp44WYlLPdhp+n7NW7xkAb8+Q=', - encrypted: 'dSkIcsz9SkUFZg1lH1babaoJyhMB2JBjL2qZLz1WXO5GSv3tQO07W+k1ZxTqWqdlX0oTZsLxfHKPbyxaXR+OKEKbxOb48s/42o3A4KmAjkX9CeovpAyyts5v//XA4VnRG2jZCoX3uE4QOwnmgmZkgMZXUFwJKSWUaKMUeG106rExVzzyNL9X232eZsxnSBkuAC3A3uqTBYXwgx/c2bwz1R957S/8Frz01ZgS/OvKo/kGmw5EVobWRMJcz2O0Vu5fpv/pbxnN91H+2erzWVd1Tb9L/qUhaqGETcUHyy0IDnIuuhUDCMK1/xGTYg8XZuz0SBuvuUO9KSh38hNspJSroA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.6', - message: '6vGnOhsMRglTfeac2SKLvPuajKjGw++vBW/kp/RjTtALfDnsaSLXuOosBOus', - seed: 'n0fd9C6X7qhWqb28cU6zrCL26zI=', - encrypted: 'LSB6c0Mqj7TAMFGz9zsophdkCY36NMR6IJlfgRWqaBZnm1V+gtvuWEkIxuaXgtfes029Za8GPVf8p2pf0GlJL9YGjZmE0gk1BWWmLlx38jA4wSyxDGY0cJtUfEb2tKcJvYXKEi10Rl75d2LCl2Pgbbx6nnOMeL/KAQLcXnnWW5c/KCQMqrLhYaeLV9JiRX7YGV1T48eunaAhiDxtt8JK/dIyLqyXKtPDVMX87x4UbDoCkPtnrfAHBm4AQo0s7BjOWPkyhpje/vSy617HaRj94cGYy7OLevxnYmqa7+xDIr/ZDSVjSByaIh94yCcsgtG2KrkU4cafavbvMMpSYNtKRg==' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha1', examples); - } - - function testOAEPSHA256() { - var modulus, exponent, d, p, q, dP, dQ, qInv, pubkey, privateKey; - var examples; - - // Example 1: A 1024-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'qLOyhK+OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx+CwgtaTpef87Wdc9GaFEncsDLxkp0LGxjD1M8jMcvYq6DPEC/JYQumEu3i9v5fAEH1VvbZi9cTg+rmEXLUUjvc5LdOq/5OuHmtme7PUJHYW1PW6ENTP0ibeiNOfFvs='; - exponent = 'AQAB'; - d = 'UzOc/befyEZqZVxzFqyoXFX9j23YmP2vEZUX709S6P2OJY35P+4YD6DkqylpPNg7FSpVPUrE0YEri5+lrw5/Vf5zBN9BVwkm8zEfFcTWWnMsSDEW7j09LQrzVJrZv3y/t4rYhPhNW+sEck3HNpsx3vN9DPU56c/N095lNynq1dE='; - p = '0yc35yZ//hNBstXA0VCoG1hvsxMr7S+NUmKGSpy58wrzi+RIWY1BOhcu+4AsIazxwRxSDC8mpHHcrSEurHyjnQ=='; - q = 'zIhT0dVNpjD6wAT0cfKBx7iYLYIkpJDtvrM9Pj1cyTxHZXA9HdeRZC8fEWoN2FK+JBmyr3K/6aAw6GCwKItddw=='; - dP = 'DhK/FxjpzvVZm6HDiC/oBGqQh07vzo8szCDk8nQfsKM6OEiuyckwX77L0tdoGZZ9RnGsxkMeQDeWjbN4eOaVwQ=='; - dQ = 'lSl7D5Wi+mfQBwfWCd/U/AXIna/C721upVvsdx6jM3NNklHnkILs2oZu/vE8RZ4aYxOGt+NUyJn18RLKhdcVgw=='; - qInv = 'T0VsUCSTvcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mNXb79cyY+NygUJ0OBgWbtfdY2h90qjKHS9PvY4Q=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 1.1', - message: 'ZigZThIHPbA7qUzanvlTI5fVDbp5uYcASv7+NA==', - seed: 'GLd26iEGnWl3ajPpa61I4d2gpe8Yt3bqIQadaXdqM+k=', - encrypted: 'W1QN+A1CKWotV6aZW7NYnUy7SmZd34SiX0jiPiLj9+8sZW6O/L7793+IFFSO3VKbPWhrjJPyR3ZmZ+yHDCzTDkRth+s5FN3nuFtlD3XQmmh0+x60PvAUiXJnAMcwxV96wHKjsUNPSnE1fsrCPBpIO5ZRaJ1pIF6R25IeuMwDujo=' - }, { - title: 'RSAES-OAEP Encryption Example 1.2', - message: 'dQxAR/VH6OQUEYVlIymKybriRe+vE5f75W+d1Q==', - seed: 'DMdCzkqbfzL5UbyyUe/ZJf5P418Mx0LOSpt/MvlRvLI=', - encrypted: 'jsKSyOW1BkucnZpnt9fS72P/lamWQqexXEDPVs8uzGlFj24Rj+cqGYVlt7i9nTmOGj2YrvM8swUTJQCYIF+QBiKbkcA7WBTBXfiUlkHvpWQD0bLwOkp1CmwfpF4sq2gTsCuSaGzZAc50ZAIOvpldizU7uOCwNNGOlERcFkvhfEE=' - }, { - title: 'RSAES-OAEP Encryption Example 1.3', - message: '2Urggy5kRc5CMxywbVMagrHbS6rTD3RtyRbfJNTjwkUf/1mmQj6w4dAtT+ZGz2md/YGMbpewUQ==', - seed: 'JRTfRpV1WmeyiOr0kFw27sZv0v0lFN9GlXVaZ7KI6vQ=', - encrypted: 'LcQ1BhOH4Vs0XX8/QJ6q/L0vSs9BUXfA20lQ6mwAt/gvUaUOvKJWBujoxt1QgpRnU6WuH7cSCFWXuKNnrhofpFF3CBTLIUbHZFoou0A4Roi4vFGFvYYu96Boy+oWivwB9/BKs1QMQeHADgNwUgqVD15+q27yHdfIH7kGp+DiGas=' - }, { - title: 'RSAES-OAEP Encryption Example 1.4', - message: 'UuZQ2Y5/KgSLT4aFIVO5fgHdMW80ahn2eoU=', - seed: 'xENaPhoYpotoIENikKN877hds/vEQ1o+Ghimi2ggQ2I=', - encrypted: 'ZMkqw9CM3SuY2zPBr8/9QbgXaVon4O4AKIufl3i7RVPD07fiTOnXF0aSWKUcdXNhE6ZcXc0Ha97/S5aw6mQKYfbmjaSq/H45s2nfZYTNIa74OgsV1DTDDLSF6/3J2UKhsG0LGIFaV9cNjfucDA5KbfQbzTq8u/+WN06J6nbInrI=' - }, { - title: 'RSAES-OAEP Encryption Example 1.5', - message: 'jaif2eX5dKKf7/tGK0kYD2z56AI=', - seed: 'sxjELfO+D4P+qCP1p7R+1eQlo7WzGMQt874Pg/6oI/U=', - encrypted: 'NzKEr8KhWRbX/VHniUE8ap0HzdDEWOyfl7dfNHXjL4h/320dmK633rGUvlA7sE4z9yuMj/xF++9ZeBzN6oSPLhVJV/aivUfcC8J99lwwp49W7phnvkUA4WUSmUeX+XRhwj8cR27mf5lu/6kKKbgasdt4BHqXcc5jOZICnld6vdE=' - }, { - title: 'RSAES-OAEP Encryption Example 1.6', - message: 'JlIQUIRCcQ==', - seed: '5OwJgsIzbzpnf2o1YXTrDOiHq8Lk7AmCwjNvOmd/ajU=', - encrypted: 'nfQEzsDY2gS9UYXF85t+u0Tm7HrOmmf+LqxCD+6N4XD36NoQ96PE9Squ83PvxKy8Bj8Q0N2L8E5Z5/9AWxLPCBqOkqkqIqO7ZDQMmpHml3H1yz82rpAzAQi6acZDSFQAW8NKhg4nEEwfwKdaGQcI0JZm6FrTQUuXskOqFUT0NJc=' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 2: A 1025-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'AZR8f86QQl9HJ55whR8l1eYjFv6KHfGTcePmKOJgVD5JAe9ggfaMC4FBGQ0q6Nq6fRJQ7G22NulE7Dcih3x8HQpn8UsWlMXwN5RRpD5Joy3eg2cLc9qRocmbwjtDamAFXGEPC6+ZwaB5VluVo/FSZjLR1Npg8g7aJeZTxPACdm9F'; - exponent = 'AQAB'; - d = 'CCPyD6212okIip0AiT4h+kobEfvJPGSjvguq6pf7O5PD/3E3BMGcljwdEHqumQVHOfeeAuGG3ob4em3e/qbYzNHTyBpHv6clW+IGAaSksvCKFnteJ51xWxtFW91+qyRZQdl2i5rO+zzNpZUto87nJSW0UBZjqO4VyemS2SRi/jk='; - p = 'AVnb3gSjPvBvtgi4CxkPTT4ivME6yOSggQM6v6QW7bCzOKoItXMJ6lpSQOfcblQ3jGlBTDHZfdsfQG2zdpzEGkM='; - q = 'AStlLzBAOzi0CZX9b/QaGsyK2nA3Mja3IC05su4wz7RtsJUR9vMHzGHMIWBsGKdbimL4It8DG6DfDa/VUG9Wi9c='; - dP = 'Q271CN5zZRnC2kxYDZjILLdFKj+1763Ducd4mhvGWE95Wt270yQ5x0aGVS7LbCwwek069/U57sFXJIx7MfGiVQ=='; - dQ = 'ASsVqJ89+ys5Bz5z8CvdDBp7N53UNfBc3eLv+eRilIt87GLukFDV4IFuB4WoVrSRCNy3XzaDh00cpjKaGQEwZv8='; - qInv = 'AnDbF9WRSwGNdhGLJDiac1Dsg2sAY6IXISNv2O222JtR5+64e2EbcTLLfqc1bCMVHB53UVB8eG2e4XlBcKjI6A=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 2.1', - message: 'j/AMqmBccCgwY02abD1CxlK1jPHZL+xXC+7n', - seed: 'jEB7XsKJnlCZxT6M55O/lOcbF4KMQHtewomeUJnFPow=', - encrypted: 'AR3o2JwhHLKUfOLZ26KXD9INUK1/fWJzdZix7E545qladDYdpHRaE5zBP9nf6IPmZvBUPq75n1E4suxm+Bom7crf9be1HXCFZnmR/wo92CKg4D1zRlBwr/3Gitr3h9rU6N+tid2x9yOYj955rf3Bq4j6wmjYQpWphbhBIBMoliyJ' - }, { - title: 'RSAES-OAEP Encryption Example 2.2', - message: 'LQ==', - seed: 'tgDPPC5QbX8Wd4yRDTqLAD7uYdW2AM88LlBtfxZ3jJE=', - encrypted: 'AIeYuAD2aYZYnEu1YK+INur95FfP2pTz8/k4r3xwL4bVMufgvzWFLdVK24fP96jTteLkrX6HjmebBVeUhSWG3ahebh3LH5yVS9yx+xHzM1Jxc8X1rS+kYgdCGWFbszMF/vP0ogisy5XthHqcoHNEM4Rzln7ugrXuS+dNuuPEjIAf' - }, { - title: 'RSAES-OAEP Encryption Example 2.3', - message: 'dPyIxRvJD3evnV6aSnATPUtOCzTaPDfH744=', - seed: 'pzdoruqpH52MHtb50rY0Z/B8yuOnN2iu6qkfnYwe1vk=', - encrypted: 'AMkW9IJHAFs0JbfwRZhrRITtj1bQVDLcjFCwYxHMDBlSHIqpDzSAL8aMxiUq41Feo9S2O/1ZTXIiK8baJpWs9y+BPqgi1lABB6JJIvU2QZYMzWK0XgjkWk12g6HSPFhuK4yf+LQ1UYpbKVquUdZ9POOCR8S7yS+tdful6qP8Wpkm' - }, { - title: 'RSAES-OAEP Encryption Example 2.4', - message: 'p+sqUDaTHSfU6JEybZlpL/rdqb9+/T405iLErcCF9yHf6IUHLHiiA7FRc5vlQPqMFToQ8Ao=', - seed: 'mns7DnCL2W+BkOyrT7mys4BagVaaezsOcIvZb4GQ7Ks=', - encrypted: 'AJ6YQ3DNjd7YXZzjHASKxPmwFbHKwoEpof+P+Li3+o6Xa95C21XyWZF0iCXc5USp5jwLt66T6G3aYQkEpoyFGvSPA3NV6tOUabopdmslYCkOwuOIsFLiuzkJc4Hu6nWXeJtTVtHn7FmzQgzQOMjuty1YConfe78YuQvyE3IAKkr2' - }, { - title: 'RSAES-OAEP Encryption Example 2.5', - message: 'LvKwZvhUwz873LtZlKQ15z1sbA==', - seed: '6zzrvErcFrtI6IyK7A40r39Cf9PrPOu8StwWu0jojIo=', - encrypted: 'AMv457W0EOt8RH+LAEoMQ7dKjZamzOdwTHJepDkaGGoQHi2z8coCiVemL5XYZ+ctjPBdw3y3nlMn1sif9i3WCzY26ram8PL5eVYk7Bm3XBjv9wuhw1RZmLFzKfJS+3vi+RTFhwjyyeaJrc07f5E7Cu7CVWNh3Oe3lvSF3TB2HUI8' - }, { - title: 'RSAES-OAEP Encryption Example 2.6', - message: 'in+zRMi2yyzy7x9kP5oyGPbhm7qJwA==', - seed: 'TEXPTVfJjj1tIJWtxRxInrUN/4RMRc9NV8mOPW0gla0=', - encrypted: 'AJ5iMVr3Q6ZZlqLj/x8wWewQBcUMnRoaS2lrejzqRk12Bw120fXolT6pgo20OtM6/ZpZSN7vCpmPOYgCf93MOqKpN1pqumUH33+iP1a+tos5351SidwwNb2hLy3JfhkapvjB+c9JvbIolIgr+xeWhWPmMDam/Du/y+EsBOdZrbYc' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 3: A 1026-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'ArWP7AOahgcApNe2Ri+T5s3UkRYd3XT06BC0DjwWUgBqXCd7J3TBEwWky6taeO+lfheobfej+jb8Sx0iSfIux8LdakYyMqzOqQbWbr6AtXBLEHKdpvgzI0q7Xv3UopLL+tM7TTP6ehS4w5e1bjrNISA0KLd836M6bacGs9iw/EPp'; - exponent = 'AQAB'; - d = 'FbSKW1aDqUZw4jtXGPgU+g4T+FA49QcRGCy6YVEFgfPSLH4jLvk34i5VHWi4bi+MsarYvi5Ij13379J54/Vo1Orzb4DPcUGs5g/MkRP7bEqEH9ULvHxRL/y+/yFIeqgR6zyoxiAFNGqG3oa/odipSP0/NIwi6q3zM8PObOEyCP0='; - p = 'Ab8B0hbXNZXPAnDCvreNQKDYRH0x2pGamD9+6ngbd9hf43Gz6Tc+e2khfTFQoC2JWN5/rZ1VUWCVi0RUEn4Ofq8='; - q = 'AY0zmWWBZts4KYFteylUFnWenJGYf1stiuzWOwS0i9ey/PIpu3+KbciLoT3S45rVW20aBhYHCPlwC+gLj9N0TOc='; - dP = 'BsCiSdIKby7nXIi0lNU/aq6ZqkJ8iMKLFjp2lEXl85DPQMJ0/W6mMppc58fOA6IVg5buKnhFeG4J4ohalyjk5Q=='; - dQ = '0dJ8Kf7dkthsNI7dDMv6wU90bgUc4dGBHfNdYfLuHJfUvygEgC9kJxh7qOkKivRCQ7QHmwNEXmAuKfpRk+ZP6Q=='; - qInv = 'jLL3Vr2JQbHTt3DlrTHuNzsorNpp/5tvQP5Xi58a+4WDb5Yn03rP9zwneeY0uyYBHCyPfzNhriqepl7WieNjmg=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 3.1', - message: 'CHggtWno+o0=', - seed: 'jO1rGWKQgFeQ6QkHQBXmogsMSJSM7WsZYpCAV5DpCQc=', - encrypted: 'AJqBCgTJGSHjv2OR0lObiDY2gZmWdutHfVeadCdFr2W4mS3ZHwet283wbtY/bsM8w0rVxNAPh3NZNrcRt56NhoT0NzD2IK3WNy39Im/CfbicvC6Vq2PyXUh1iza+90PUM3jECPP5NsOx658MzEnYyFZFb9izZIna6YLsXwkWoHVO' - }, { - title: 'RSAES-OAEP Encryption Example 3.2', - message: 'RlOsrxcZYLAfUqe+Y6OrIdw2jsQ7UNguw3geBA==', - seed: 'tCkdZWdVCEjMFWlnyAm6q2ylB/C0KR1lZ1UISMwVaWc=', - encrypted: 'ARCj8j/hSsscyXtuINlyU0HuC+d7wZc7bSekF60BJFWKeKa1p28d4KsJXmdqI22sxha7PgkI9bgpfgdBd8KHp12g5y68uXiwRyPOvv8s6YDKmJFhbW13LHbE3iZHch2YG1eHi/20M/IrsAqCuk/W5Q/dP5eSVM1hLT9LBVsX3rIH' - }, { - title: 'RSAES-OAEP Encryption Example 3.3', - message: '2UzQ4I+kBO2J', - seed: 'zoko9gWVWCVACLrdl5T63NL9H2XOiSj2BZVYJUAIut0=', - encrypted: 'Anfa/o/QML7UxLCHcSUWFPUWhcp955u97b5wLqXuLnWqoeQ3POhwasFh3/ow2lkzjjIdU47jkYJEk6A0dNgYiBuDg57/KN5yS2Px/QOSV+2nYEzPgSUHGyZacrHVkj/ZVyZ+ni7Iyf/QkNTfvPGxqmZtX6cq095jgdG1ELgYsTdr' - }, { - title: 'RSAES-OAEP Encryption Example 3.4', - message: 'bMZBtrYeb5Y5dNrSOpATKE7x', - seed: 'bil59S1oFKV9g7CQBUiI8RmluaNuKXn1LWgUpX2DsJA=', - encrypted: 'AalUnNYX91mP0FrqphpfhU22832WgnjDNRU1pkpSrd5eD7t7Q1YhYE+pKds6glA8i1AE/li216hJs2IbCJMddyaXrDzT8V9/UfIUaSkLfcRYBrTn9DEDOTjY1Xnn38poLOFykpZbAz5hdbOh0qG39qFgl5QZG0+aTBd1tmlMZBfO' - }, { - title: 'RSAES-OAEP Encryption Example 3.5', - message: '31FRgyth9PJYkftBcvMo0u3fg3H/z9vpl5OSlfMOymkYAXz9oRU796avh1kyIw==', - seed: 'LXYL/jjFneNM3IuMeKOOZihKLSctdgv+OMWd40zci4w=', - encrypted: 'AGgQQYTuy9dW6e3SwV5UFYbEtqQD7TDtxcrMYOmYlTPgTwIFpo4GbQbtgD9BMFAW7a1lIzLxKEld49jH6m95Xgtq/BAVFl/gXin5MMbiZfRTOl38miBTg5a6IS9w6tcrWIBeY5Z5n4iCuUqF9r/m9TqvxWF0aMP2VGVKZn+LHMVj' - }, { - title: 'RSAES-OAEP Encryption Example 3.6', - message: 'PDutiTxUSm1SCrAiMZGIyNUEt6eIuFCQO4WXLqoYVS4RNKetYJiCYlT/erZys9jrMVj6xtTLrvE=', - seed: '8XR3nF/Tz+AHuty3o2ybVb/Pvw7xdHecX9PP4Ae63Lc=', - encrypted: 'Aps8BQrRkPPwpNIjHw3NBznsDvp1hIHmlbG5wRERr9+Ar4ervO2GA/MMUVNijdZEtFnCGjbLwpM6RKzCk96jJX1bIgzq7hnmIzwKmq2Ue4qqO29rQL39jpCS87BBo/YKMbkYsPc2yYSDMBMOe9VDG63pvDgFGrlk/3Yfz1km3+/Y' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 4: A 1027-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'BRJAtswABPpI0BNGccB4x8jew7Pi8lvCVkRnM52ziFPQa4XupbLeNTv/QqwuRryX+uaslhjalTelyPVTweNXYlmR1hCNzXiF+zolQT9T78rZSMs1zZua6cHGdibRE9V93kxb6na7W7felsANBzculoWm11z50jn6FI1wkxtfP7A5'; - exponent = 'AQAB'; - d = 'BBH/yjt8penpvn/jioUQXjU4ltsFxXlq7NKnJRYes2UchimpuGK5BNewx7N/jLWhwrVAAQGKAKHrLK/k7k6UksNIvCvtq0ueu/Bk6O/zIrkAn47sZTkF9A34ijzcSdRWf3VifUGspiQSm0agt8aY5eZfK3uhAsdJoQE1tlQNBAE='; - p = 'AnRYwZ7BY2kZ5zbJryXWCaUbj1YdGca/aUPdHuGriko/IyEAvUC4jezGuiNVSLbveSoRyd6CPQp5IscJW266VwE='; - q = 'AhDumzOrYXFuJ9JRvUZfSzWhojLi2gCQHClL8iNQzkkNCZ9kK1N1YS22O6HyA4ZJK/BNNLPCK865CdE0QbU7UTk='; - dP = 'OfoCi4JuiMESG3UKiyQvqaNcW2a9/R+mN9PMSKhKT0V6GU53J+Sfe8xuWlpBJlf8RwxzIuvDdBbvRYwweowJAQ=='; - dQ = 'AV2ZqEGVlDl5+p4b4sPBtp9DL0b9A+R9W++7v9ax0Tcdg++zMKPgIJQrL+0RXl0CviT9kskBnRzs1t1M8eVMyJk='; - qInv = 'AfC3AVFws/XkIiO6MDAcQabYfLtw4wy308Z9JUc9sfbL8D4/kSbj6XloJ5qGWywrQmUkz8UqaD0x7TDrmEvkEro='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 4.1', - message: 'SoZglTTuQ0psvKP36WLnbUVeMmTBn2Bfbl/2E3xlxW1/s0TNUryTN089FmyfDG+cUGutGTMJctI=', - seed: 'HKwZzpk971X5ggP2hSiWyVzMofMcrBnOmT3vVfmCA/Y=', - encrypted: 'AooWJVOiXRikAgxb8XW7nkDMKIcrCgZNTV0sY352+QatjTq4go6/DtieHvIgUgb/QYBYlOPOZkdiMWXtOFdapIMRFraGeq4mKhEVmSM8G5mpVgc62nVR0jX49AXeuw7kMGxnKTV4whJanPYYQRoOb0L4Mf+8uJ5QdqBE03Ohupsp' - /* FIXME: could not convert 4.2', to SHA-256, message too long - }, { - title: 'RSAES-OAEP Encryption Example 4.2', - message: 'sK3E8/4R2lnOmSdz2QWZQ8AwRkl+6dn5oG3xFm20bZj1jSfsB0wC7ubL4kSci5/FCAxcP0QzCSUS7EaqeTdDyA==', - seed: '9UXViXWF49txqgy42nbFHQMq6WM=', - encrypted: 'AJe2mMYWVkWzA0hvv1oqRHnA7oWIm1QabwuFjWtll7E7hU60+DmvAzmagNeb2mV4yEH5DWRXFbKA03FDmS3RhsgLlJt3XK6XNw5OyXRDE2xtpITpcP/bEyOiCEeCHTsYOB3hO7SarqZlMMSkuCcfPq4XLNNm4H5mNvEBnSoortFe' - */ - }, { - title: 'RSAES-OAEP Encryption Example 4.3', - message: 'v21C5wFwex0CBrDItFoccmQf8SiJIZqCveqWW155qWsNAWPtnVeOya2iDy+88eo8QInYNBm6gbDGDzYG2pk=', - seed: 'rZl/7vcw1up75g0NxS5y6sv90nWtmX/u9zDW6nvmDQ0=', - encrypted: 'AtYYko32Vmzn3ZtrsDQH9Mw/cSQk9pePdwQZJ6my7gYXWYpBdhbEN/fH7LMmvjtHnKLLTDazfF1HT0tTG6E+TY002cy+fMUvdRn0rfmFkNeHeqVOABP2EmI4eXFCBbbIlpshLxbA3vDTzPPZZqwMN+KPG4O11wmS9DcyHYtpsIOU' - }, { - title: 'RSAES-OAEP Encryption Example 4.4', - message: '+y7xEvXnZuuUAZKXk0eU974vb8HFjg==', - seed: 'E2RU31cw9zyAen5A2MGjEqxbndMTZFTfVzD3PIB6fkA=', - encrypted: 'AZX8z/njjTP/ApNNF+BNGUjlczSK/7iKULnZhiAKo4LJ0XaTzTtvL9jacr+OkRxSPUCpQeK36wXdi9qjsl3SO9D7APyzN1nNE5Nu5YstiAfEMVNpdRYGdgpUasEZ4jshBRGXYW28uTMcFWRtzrlol9Lc7IhIkldTXZsR9zg11KFn' - }, { - title: 'RSAES-OAEP Encryption Example 4.5', - message: 'KMzUR7uehRZtq7nlt9GtrcS5058gTpbV5EDOmtkovBwihA==', - seed: 'vKgFf4JLLqJX8oYUB+72PTMghoG8qAV/gksuolfyhhQ=', - encrypted: 'A8GIo5X2qOS6MdKjYJg+h3hi2endxxeb3F5A8v+MbC7/8WbBJnzOvKLb6YMukOfAqutJiGGzdPQM9fopdhbRwS/Ovw4ksvmNBVM+Q26CFPqvdhV8P0WxmeYTxGFGrLgma+fwxpe7L6mj300Jq6Y/5kfTEJSXNdKuLRn0JsIg8LSD' - }, { - title: 'RSAES-OAEP Encryption Example 4.6', - message: '8iJCdR7GsQ==', - seed: 'Ln4eF/ZHtd3QM+FUcvkPaBLzrE4ufh4X9ke13dAz4VQ=', - encrypted: 'AM9cnO14EVBadGQYTnkkbm/vYwqmnYvnAutrc4bZR3XC0DNhhuUlzFosUSmaC1LrjKcFfcqZOwzlev5uZycR7tUlLihC6lf4o0khAjUb03Dj+ubNsDKNCOA6vP63N3p6jSVIak7EPu0KtBLuNpIyW5mdkMuwssV7CNLOQ6qG7zxZ' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 5: A 1028-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'Cq3z+cEl5diR8xrESOmT3v5YD4ArRfnX8iulAh6cR1drWh5oAxup205tq+TZah1vPSZyaM/0CABfEY78rbmYiNHCNEZxZrKiuEmgWoicBgrA2gxfrotV8wm6YucDdC+gMm8tELARAhSJ/0l3cBkNiV/Tn1IpPDnv1zppi9q58Q7Z'; - exponent = 'AQAB'; - d = 'AlbrTLpwZ/LSvlQNzf9FgqNrfTHRyQmbshS3mEhGaiaPgPWKSawEwONkiTSgIGwEU3wZsjZkOmCCcyFE33X6IXWI95RoK+iRaCdtxybFwMvbhNMbvybQpDr0lXF/fVKKz+40FWH2/zyuBcV4+EcNloL5wNBy+fYGi1bViA9oK+LF'; - p = 'A7DTli9tF1Scv8oRKUNI3PDn45+MK8aCTyFktgbWh4YNrh5jI5PP7fUTIoIpBp4vYOSs1+YzpDYGP4I4X0iZNwc='; - q = 'AuTDLi9Rcmm3ByMJ8AwOMTZffOKLI2uCkS3yOavzlXLPDtYEsCmC5TVkxS1qBTl95cBSov3cFB73GJg2NGrrMx8='; - dP = 'AehLEZ0lFh+mewAlalvZtkXSsjLssFsBUYACmohiKtw/CbOurN5hYat83iLCrSbneX31TgcsvTsmc4ALPkM429U='; - dQ = '65CqGkATW0zqBxl87ciBm+Hny/8lR2YhFvRlpKn0h6sS87pP7xOCImWmUpfZi3ve2TcuP/6Bo4s+lgD+0FV1Tw=='; - qInv = 'AS9/gTj5QEBi64WkKSRSCzj1u4hqAZb0i7jc6mD9kswCfxjngVijSlxdX4YKD2wEBxp9ATEsBlBi8etIt50cg8s='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 5.1', - message: 'r3GpAeOmHTEy8Pwf20dPnqZXklf/wk0WQXAUWz296A==', - seed: 'RMkuKD93uUmcYD2WNmDIfS+TlGFEyS4oP3e5SZxgPZY=', - encrypted: 'BOGyBDRo+2G7OC79yDEzJwwLMPuhIduDVaaBdb5svHj/ZAkVlyGVnH0j+ECliT42Nhvp4kZts+9cJ0W+ui7Q9KXbjmX033MpxrvSV1Ik//kHhX6xTn51UGpaOTiqofjM3QTTi9DVzRtAarWd/c8oAldrGok1vs+tJEDbcA5KvZz7' - }, { - title: 'RSAES-OAEP Encryption Example 5.2', - message: 'o7hEoII5qKxBYFrxemz9pNNQE2WFkDpBenkmh2BRmktKwzA+xz8Ph8+zI5k=', - seed: 'yyj1hgZZ/O7knD7q/OYlpwgDvTLLKPWGBln87uScPuo=', - encrypted: 'AeleoSbRCOqBTpyWGLCrZ2G3mfjCYzMvupBy+q+sOKAfBzaLCjCehEUmIZFhe+CvtmVvyKGFqOwHUWgvks9vFU7Gfi580aZm7d4FtaGGVHBO6Q32/6IS7a+KSk7L6rPWwBTI+kyxb5SW12HTEowheKkFTda06tU0l4Ji45xP2tyh' - }, { - title: 'RSAES-OAEP Encryption Example 5.3', - message: 'MIsOy9LHbLd/xvcMXt0jP9LyCSnWKfAmlTu2Ko9KOjFL3hld6FtfgW2iqrB00my2rN3zI647nGeKw88S+93n', - seed: 'IoX0DXcEgvmp76LHLLOsVXFtwMoihfQNdwSC+anvosc=', - encrypted: 'Ci3TBMV4P0o59ap6Wztb9LQHfJzYSOAaYaiXjk85Q9FYhAREaeS5YXhegKbbphMIS5i1SYJShmwpYu/t8SGHiX/72v6NnRgafDKzttROuF/HJoFkTBKH6C9NKke+mxoDy/YVZ9qYzFY6PwzB4pTDwku9s5Ha4DmRBlFdA/z713a4' - }, { - title: 'RSAES-OAEP Encryption Example 5.4', - message: 'FcW57hGF', - seed: 'SfpF06eN0Q39V3OZ0esAr37tVRNJ+kXTp43RDf1Xc5k=', - encrypted: 'AcMQiclY0MMdT9K4kPqZ7JYHTaSolc8B3huHcQ4U5mG11/9XjzWjTLha8Liy0w909aaPbaB7+ZQTebg7x3F4yeWFRmnAJMaIFGBW/oA952mEaJ+FR2HO0xfRPzCRCaaU7cyOxy0gnR8d9FMunt9fhbffM9TvOfR6YDE5Duz6Jg0W' - }, { - title: 'RSAES-OAEP Encryption Example 5.5', - message: 'IQJuaADH+nKPyqug0ZauKNeirE/9irznlPCYX2DIpnNydzZdP+oR24kjogKa', - seed: '8Ch0EyNMxQNHJKCUxFhrh6/xM/zwKHQTI0zFA0ckoJQ=', - encrypted: 'A/gvyZ/MNHUG3JGcisvAw/h1bhviZsqIsEM5+gBpLfj7d8iq28yZa6z5cnS4cJWywHxyQMgt9BAd37im/f5WcIcB+TZS9uegFSdgaetpYf4ft/1wMlcdc1ReCrTrCKPFHLLczeifyrnJSVvQD84kQY21b4fW9uLbSiGO0Ly94il1' - }, { - title: 'RSAES-OAEP Encryption Example 5.6', - message: 'VB43totsiHK4TAI=', - seed: '2fukXJbyHm4m0p6yzctlhb6cs0HZ+6RclvIebibSnrI=', - encrypted: 'AWmTYpBHOqRBGy1h5mF88hMmBVNLN++kXAqQr4PKszqorigNQZbvwbOdWYNLsXydyvKi55ds8tTvXf4rRBswyuNmbtT0t2FVCTnTjNzA1cMSahInbdKfL/1wib3CjyQmC0TbbIa3kkAdXkiYytSafDxwNyan1OWtJcMLkJ6l8WRm' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 6: A 1029-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'ErF/ba0uzRn/RtwT94YPCeDgz7Z3s4pSWSMFzq8CLBZtuQ0ErCnjP33RLZ+vZuCBa7Y+rSZ8x9RsF8N74hS8oqItcjpk5EQHQ2tvyWVymu/CVU83bNXc6mgpN4CmK/OdAClIWhYLu55dwJctIaUE9S5e4CiqQWMy9RCy6c/19yKv'; - exponent = 'AQAB'; - d = 'ApXso1YGGDaVWc7NMDqpz9r8HZ8GlZ33X/75KaqJaWG80ZDcaZftp/WWPnJNB7TcEfMGXlrpfZaDURIoC5CEuxTyoh69ToidQbnEEy7BlW/KuLsv7QV1iEk2Uixf99MyYZBIJOfK3uTguzctJFfPeOK9EoYij/g/EHMc5jyQz/P5'; - p = 'BKbOi3NY36ab3PdCYXAFr7U4X186WKJO90oiqMBct8w469TMnZqdeJpizQ9g8MuUHTQjyWku+k/jrf8pDEdJo4s='; - q = 'BATJqAM3H+20xb4588ALAJ5eCKY74eQANc2spQEcxwHPfuvLmfD/4Xz9Ckv3vv0t1TaslG23l/28Sr6PKTSbke0='; - dP = 'A5Ycj3YKor1RVMeq/XciWzus0BOa57WUjqMxH8zYb7lcda+nZyhLmy3lWVcvFdjQRMfrg6G+X63yzDd8DYR1KUs='; - dQ = 'AiGX4GZ0IZaqvAP6L+605wsVy3h9YXrNMbt1x7wjStcG98SNIYLR8P+cIo3PQZZ7bAum0sCtEQobhXgx7CReLLE='; - qInv = 'BAHEwMU9RdvbXp2W0P7PQnXfCXS8Sgc2tKdMMmkFPvtoas4kBuIsngWN20rlQGJ64v2wgmHo5+S8vJlNqvowXEU='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 6.1', - message: 'QEbKi6ozR8on9J4NgfnMHXG+m6UX1A==', - seed: '3Q9s/kFeiOWkaaUfu6bf1ArbQ4TdD2z+QV6I5aRppR8=', - encrypted: 'C3d3hdR81ybq+Wuf6QUfy2KHVuQjrsvVH2HuE2LbJT2o2ZPdrDHIoGphdGj+GWNTrcV/d8iPLJlZ0CR3O2e2b7wLUVPMorv1HidYA8B8eJxkg5FIsPuK836LchnGqQlE7ObiWOjSuIw4lZ/ULCfOYejelr6PJXSxWgQUlV78sbvP' - }, { - title: 'RSAES-OAEP Encryption Example 6.2', - message: 'XMcsYCMd8Ds9QPm1eTG8MRCflyUn8osZ50gMcojLPJKyJRIhTkvmyRR5Ldq99X+qiqc=', - seed: 'jRS9lGoTURSPXK4u2aDGU+hevYWNFL2UahNRFI9cri4=', - encrypted: 'DXAHBh/uWFjxl/kIwrzm0MXeHNH5MSmoPc0mjn00UcCUFmOwTQipPmLmephH+rNOOfCQVvwP5wysU3/w2hjmk/rl6Jb4qNc+KqDiij7fKSKhPGTvY3aiXZ2LflnJ3yv4LdT9KvvWsZrHEWfsEG+fQZW4c1OMEpOMC4N44nc88yRm' - }, { - title: 'RSAES-OAEP Encryption Example 6.3', - message: 'sg5lEwMJL0vMtDBwwPhtIwSTYu2WZC/FYywn20pS49gx8qsGiyOxSYecAC9r8/7ul1kRElYs', - seed: 'bAdbxFUg8WXAv16kxd8ZG8nvDkRsB1vEVSDxZcC/XqQ=', - encrypted: 'AMe1ZPYbk4lABLKDLhwJMM4AfK46Jyilp/vQ9M921AamJzanoNGdlj6ZEFkbIO68hc/Wp4Qr43iWtjcasgpLw2NS0vroRi91VI5k9BZgXtgNG7Z9FBOtPjM61Um2PWSFpAyfaZS7zoJlfRKciEa+XUKa4VGly4fYSXXAbUJV2YHc' - }, { - title: 'RSAES-OAEP Encryption Example 6.4', - message: 'aE4wOMXAQfc=', - seed: 'O7w71mN9/hKEaQECm/WwwHEDQ5w7vDvWY33+EoRpAQI=', - encrypted: 'AJS/vpVJKJuLwnnzENVQChT5MCBa0mLxw/a9nt+6Zj4FL8nucIl7scjXSOkwBDPcyCWr7gqdtjjZ9z6RCQv0HfjmVKI2M6AxI2MYuzwftIQldbhCRqo8AlyK3XKjfcK+Rzvii53W8Xw4Obbsv9OCLnCrrbK8aO3XKgrHPmDthH7x' - }, { - title: 'RSAES-OAEP Encryption Example 6.5', - message: 'MkiMsmLQQdbk3TX5h788ppbbHwasKaRGkw==', - seed: 'tGtBiT6L7zJvZ1k4OoMHHa5/yry0a0GJPovvMm9nWTg=', - encrypted: 'CmNUKnNQco5hWHxCISdwN5M7LbL7YJ0u7bfH82LulE32VdATd3vcJmRiFtcczNNudMlHVhl6/ZsDVY1zymLrK2kLIYWeG9Iag3rQ5xhjLAdpMYBBuwjrJ8Oqc4+2qH57bBveynuE5xRpd9p+CkkiRP7x7g4B/iAwrmFxPtrxV/q/' - }, { - title: 'RSAES-OAEP Encryption Example 6.6', - message: 'ULoUvoRicgJ5wwa6', - seed: 'CiQDMSpB49UvBg+8E6Z95c92CacKJAMxKkHj1S8GD7w=', - encrypted: 'DpQAu4uQ4zbkpP/f698+a5f3MhAXCi3QTcP7vXmQVlkH0CFlCnDESNG36Jk2ybe3VmzE2deBHBKI9a5cHUzM9Lsa/AoxnbD5qd2fJt9k19dSRtDWZUR/Bn/AdVHwstzsX/vRLe6qOk9Kf01OZcvKrmlWh2IBLs8/6sEJhBWXNAKj' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 7: A 1030-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'MRF58Lz8m508oxXQDvMNe906LPrpkRv+3LlIs6R4LQcytqtEqkvwN0GmRNwBvsPmmwGgM+Z12KzXxJJcaxrsMRkFHf2Jdi0hXUVHX/y1n5CBSGI/NxdxVvauht16fF9D3B4fkIJUBYooSl8GwAIXk6h/GsX+/33K7mnF5Ro3ieNz'; - exponent = 'AQAB'; - d = 'Bwz8/y/rgnbidDLEXf7kj0m3kX1lMOHwyjRg8y4CdhdEh8VuIqRdJQDXd1SVIZ19Flqc872Swyr5qY2NycwpaACtyUoKVPtA80KRv4TujqErbxCTWcbTVCpQ+cdn9c//BaaBwuZW+3fKqttL6UaNirzU35j1jobSBT+hNJ90jiGx'; - p = 'B0kmLBEc1HDsJWbms3MvwJMpRpqhkHHTucAZBlFMbx0muqFL6rCXHIt+YRpPeQCdb+p3aSjKJShbDeNkPRo/jHE='; - q = 'BrweUOlsAr9jbp7qi4mbvr92Ud533UdMPpvCO62BgrYZBMfZffvr+x4AEIh4tuZ+QVOR1nlCwrK/m0Q1+IsMsCM='; - dP = 'A7x+p/CqsUOrxs6LlxGGNqMBcuTP4CyPoN2jt7qvkPgJKYKYVSX0iL38tL1ybiJjmsZKMJKrf/y/HVM0z6ULW/E='; - dQ = 'AmKmqinCo8Z9xTRsBjga/Zh6o8yTz7/s9U/dn514fX9ZpSPTmJedoTei9jgf6UgB98lNohUY3DTLQIcMRpeZStk='; - qInv = 'ZJ1MF7buFyHnctA4mlWcPTzflVDUV8RrA3t0ZBsdUhZq+KITyDliBs37pEIvGNb2Hby10hTJcb9IKuuXanNwwg=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 7.1', - message: 'R6rpCQ==', - seed: 'Q90JoH/0ysccqkYy7l4cHa7kzY9D3Qmgf/TKxxyqRjI=', - encrypted: 'CdXefX8LEW8SqnT1ly7/dvScQdke1rrSIBF4NcFO/G+jg0u7yjsqLLfTa8voI44Ue3W6lVuj5SkVYaP9i7VPmCWA4nFfeleuy23gbHylm4gokcCmzcAm2RLfPQYPnxIb3hoQ2C3wXo/aWoLIMFPYzI19g5uY90XMEchAci3FVC/a' - }, { - title: 'RSAES-OAEP Encryption Example 7.2', - message: 'HZsuIiPZvBO/ufFiznNdtIunxo9oIqChp7auFlg05w==', - seed: 'Opw87HuE+b063svGc+yZ1UsivJs6nDzse4T5vTrey8Y=', - encrypted: 'DDar5/aikhAVropPgT3SVzSMRtdS9sEmVBEqg9my/3na0Okz51EcAy436TOZVsM0exezvKYsVbDQhtOM0Mn9r6oyBsqzUR4lx6Gt2rYDYC4X1aMsJSVcQs9pDqeAWfIAmDIIQH/3IN2uJ6u4Xl2+gFCpp8RP0F//Rj2llnEsnRsl' - }, { - title: 'RSAES-OAEP Encryption Example 7.3', - message: '2Xb8', - seed: 'dqdeW2FXpVbPiIS7LkXCk91UXPV2p15bYVelVs+IhLs=', - encrypted: 'GpTkYrRFNyD9Jw1Pc1TSPSfc9Yb8k4Fw1l4kCwqPodlAboKMJe+yuXoGgVeB7Jb7JTQklGpQc1keZUzUUVZO0Q4qYUelFFe5lWM2uhq21VCbvcchrMTP6Wjts05hVgJHklLKF5cOtBGpQC0FlkwCYoXUAk//wejNycM/ZXw+ozkB' - }, { - title: 'RSAES-OAEP Encryption Example 7.4', - message: '1HOGI98iOqQ4Q9+EZ1NMQdAT4MgDxiTiY2ZrI5veQKXymuuN5549qmHdA3D0m9SwE4NLmCEq72scXuNzs8s=', - seed: 'eGYxSmrW8rJQo1lB2yj1hktYWFl4ZjFKatbyslCjWUE=', - encrypted: 'G5GJEPP4ifUCg+3OHEq41DFvaucXwgdSGyuDX6/yQ1+e30d0OIjIFv4JTUXv6Oi8/uADg+EN5Ug+lEyf0RNSS4wfKgRfAaXK6x1U8dh48g/bED27ZCZ+MjhAkUcjMO0h4m3nNfLxAju7nxO2cJzNI9n1TBCMngJBco0zzhOvMZaN' - }, { - title: 'RSAES-OAEP Encryption Example 7.5', - message: 'u0cjHKXqHTrUbJk0XZqKYQ==', - seed: 'shZu1HLVjbEMqyxrAAzM8Qp9xQmyFm7UctWNsQyrLGs=', - encrypted: 'HebBc/6i18c2FbG7ibWuxyQgtiN1uhtxyNsXw1Kuz8zo7RkBkt5JZEwucKyXFSwI6drZlK6QaqCRZwPQsdc2wnZlQzbkilVf1TiACqzDdpKX5i+SbCTUsOyGETV3vtxFe7/SatEKseFSLEWkIfZxAFcisIs5hWmLJdqfWQeYuMrK' - }, { - title: 'RSAES-OAEP Encryption Example 7.6', - message: 'IYSCcJXTXD+G9gDo5ZdUATKW', - seed: 'Umc73iyhZsKqRhMawdyAjWfX07FSZzveLKFmwqpGExo=', - encrypted: 'DX+W3vsdnJfe63BVUFYgCAG1VmTqG/DbQ4nZgWTUGHhuijUshLtz07dHar21GJ9Ory8QQPX67PgKGnBMp0fJBnqKO3boMOEcc52HEnQxOWIW2h2rgmDtnaYtvK85pddXzhbuXkXg4DDnoMy+4XzgbLfArK12deGB0wruBbQyv3Ar' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 8: A 1031-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'W98OMNMh3aUUf4gkCPppGVSA34+A0/bov1gYUE82QnypsfVUC5xlqPaXTPhEeiRNkoAgG7Sfy75jeNGUTNIn4jD5bj0Q+Bnc7ydsZKALKktnAefQHeX6veOx6aDfgvRjE1nNImaWR/uxcXJGE07XtJfP/73EK1nHOpbtkBZiEt/3'; - exponent = 'AQAB'; - d = 'D30enlqqJf0T5KBmOuFE4NFfXNGLzbCd8sx+ZOPF6RWtYmRTBBYdCYxxW7eri9AdB+rz/tfH7QivKopi70SrFrMg4Ur3Kkj5av4mKgrkz2XmNekQeQzU7lzqdopLJjn35vZ3s/C7a+MrdXR9iQkDbwJk9Y1AHNuhMXFhV6dez2Mx'; - p = 'CgLvhEjZ+ti70NAEyMKql1HvlyHBsNAyNqVLDflHy67VolXuno4g1JHqFyP+CUcEqXYuiK/RbrtZlEEsqWbcT58='; - q = 'CS02Ln7ToL/Z6f0ObAMBtt8pFZz1DMg7mwz01u6nGmHgArRuCuny3mLSW110UtSYuByaxvxYWT1MP7T11y37sKk='; - dP = 'B8cUEK8QOWLbNnQE43roULqk6cKd2SFFgVKUpnx9HG3tJjqgMKm2M65QMD4UA10a8BQSPrpoeCAwjY68hbaVfX0='; - dQ = 'rix1OAwCwBatBYkbMwHeiB8orhFxGCtrLIO+p8UV7KnKKYx7HKtYF6WXBo/IUGDeTaigFjeKrkPH+We8w3kEuQ=='; - qInv = 'BZjRBZ462k9jIHUsCdgF/30fGuDQF67u6c76DX3X/3deRLV4Mi9kBdYhHaGVGWZqqH/cTNjIj2tuPWfpYdy7o9A='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 8.1', - message: 'BQt1Xl5ogPe56daSp0w3quRJsxv+pt7/g3R6iX9sLIJbsa2/hQo8lplLXeWzPLx9SheROnln', - seed: 'dwb/yh7PsevuKlXlxuJM0nl6QSV3Bv/KHs+x6+4qVeU=', - encrypted: 'DZZvGJ61GU6OOkaPl2t8iLNAB1VwLjl3RKd/tcu19Vz9j68fjCFBQvASq9FK6Sul/N6sXIVsi4ypx/1m77bErYJqiGwkE8sQz/g4ViwQmeCvpfbCoq00B5LxklezvhnM5OeSxFtO/8AtYimLrJ3sUmDYk7xkDI20/Lb8/pyOFsjH' - }, { - title: 'RSAES-OAEP Encryption Example 8.2', - message: 'TraNzZPKmxnfERvUNgj1VwJv5KodXPrCJ6PrWrlUjBigbd7SP4GCWYay/NcRCezvfv+Ihz8HXCqgxGn2nJK8', - seed: 'o3F9oUO03P+8dCZlqPqVBYVUg0OjcX2hQ7Tc/7x0JmU=', - encrypted: 'DwsnkHG2jNLgSU4LEvbkOuSaQ9+br9t3dwen8KDGmLkKVJgWGu+TNxyyo2gsBCw7S4eqEFrl49ENEhMehdjrHCBLrEBrhbHxgncKrwIXmcjX1DOCrQXEfbT4keig8TaXkasow5qby9Ded6MWcLu1dZnXPfiuiXaOYajMGJ1D3/y7' - }, { - title: 'RSAES-OAEP Encryption Example 8.3', - message: 'hgSsVjKMGrWtkXhh', - seed: '7gYgkHPMoCa7Jk5Rhb+MaLdzn4buBiCQc8ygJrsmTlE=', - encrypted: 'PAKF3K/lSKcZKWQDr56LmmVqSltcaKEfS7G6+rwG239qszt8eKG6fMYJsP4h7ZfXyV1zuIZXTVhXgiRQbA9os0AhkWiMJJouhsAn60R20BOLQOtQxlXxVOvUMPGuG5EP2O+nTI0VCXky5kHNJdfJolSW+pJLVdSu4mX9Ooga1CSx' - }, { - title: 'RSAES-OAEP Encryption Example 8.4', - message: '/dpfv27DYanZpKxoryFqBob0OLHg5cNrlV904QfznA3dzA==', - seed: 'mQrVc9xIqXMjW22CVDYY8ulVEF2ZCtVz3EipcyNbbYI=', - encrypted: 'LcCLDDj2S5ZOKwpvobOk6rfBWMBbxs3eWR+Edk3lKaoEAFFD5sQv0AaIs3r7yI8sOir9HvS6GKf+jc9t31zIDCIJc3sKVyrNZfEeUFSvihjbPZDo6IaZ8Jau8woE2p1z7n9rG+cbMwKuILRPSEN4hE0QSA/qz0wcye6bjb6NbK20' - }, { - title: 'RSAES-OAEP Encryption Example 8.5', - message: 'Sl9JFL7iXePGk0HeBw==', - seed: '7MY7KPB1byL1Ksjm7BJRpuwwRxjsxjso8HVvIvUqyOY=', - encrypted: 'U+PBTMw6peNHnFQ3pwix/KvVeWu1nSKQGcr9QPpYNgHhuFZK6ARR7XhKxFtDoUMP+iVTXprcow4lr1Uaw4PnEx+cPe0Khl15R8GLiuh5Vm9p3lTPW1u58iP2Oa81pQZTB5AuFiD0fnFZsl+BYfjDVah3cMIu83KOBRPOdLY0j8iq' - }, { - title: 'RSAES-OAEP Encryption Example 8.6', - message: 'jgfWb3uICnJWOrzT81CSvDNAn7f4jyRyvg==', - seed: 'OSXHGzYtQKCm3kIUVXm6Hn3UWfw5JccbNi1AoKbeQhQ=', - encrypted: 'WK9hbyje7E0PLeXtWaJxqD4cFkdL5x4vawlKJSOO1OKyZ6uaY8vMYBhBO47xRIqtab5Ul5UGCwdvwPR69PpARsiiSfJHVavkihXixHGgZViGTMU/7J7ftSiNT9hAwrj4JL4f1+8RhTp6WKRzsXAEKpvLK0TrzQL3ioF3QtTsiu/a' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 9: A 1536-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'zyzUHjTKOnKOpcuK/2TDbSe971Nk4zb9aNMSPFoZaowocBPoU9UVbVjRUZVFIPtPbXsXq7aBd2WQnFdhGWWdkCsZBu2KKxDBVcJNEkUo2rnurjeb6sZuSkEXhty4/QBi68Aw3hIZoEwqjBt90xMeTWtsruLjGl7UGsFQmy7x7iqxg2S+VoypQcJezIT/nWQ7XsGqrhAqINc/R5t4D9bakQdSEtnqwDoGdNiZ66LkMfTES2Fba6IjK9SzO67XPWJd'; - exponent = 'AQAB'; - d = 'GYwUHiNxWpK8z2oRmlvBE4lGjSgR9UjXJ+F7SrDrmG1vIR77U7cffMvqh+5px17mFQCMUzLetSvzkKvfv+N9cgU2gVmyY4wd4ybiHSIlHw+1hIs78VAF0qdDMPCv6RbuYszBNE0dg6cJ5gZ2JzhA9/N3QkpeCk2nXwGzH/doGc+cv90hUkPDkXwD7zgZkxLlZ7O/eu06tFfzce+KFCP0W2jG4oLsERu6KDO5h/1p+tg7wbjGE8Xh6hbBHtEl6n7B'; - p = '/I1sBL7E65qBksp5AMvlNuLotRnezzOyRZeYxpCd9PF2230jGQ/HK4hlpxiviV8bzZFFKYAnQjtgXnCkfPWDkKjD6I/IxI6LMuPaIQ374+iB6lZ0tqNIwh6T+eVepl79'; - q = '0gDUXniKrOpgakAdBGD4fdXBAn4S3BoNdYbok52c94m0D1GsBEKWHefSHMIeBcgxVcHyqpGTOHz9+VbLSNFTuicEBvm7ulN9SYfZ4vmULXoUy//+p0/s3ako0j4ln17h'; - dP = '2xaAL3mi8NRfNY1p/TPkS4H66ChiLpOlQlPpl9AbB0N1naDoErSqTmyL6rIyjVQxlVpBimf/JqjFyAel2jVOBe8xzIz3WPRjcylQsD4mVyb7lOOdalcqJiRKsI23V1Kt'; - dQ = 'oKMXz+ffFCP4em3uhFH04rSmflSX8ptPHk6DC5+t2UARZwJvVZblo5yXgX4PXxbifhnsmQLgHX6m+5qjx2Cv7h44G2neasnAdYWgatnEugC/dcitL6iYpHnoCuKU/tKh'; - qInv = 'CyHzNcNTNC60TDqiREV4DC1lW5QBdMrjjHyKTmSTwLqf0wN0gmewg7mnpsth5C2zYrjJiW23Bk4CrVrmFYfaFbRknJBZSQn+s328tlS+tyaOyAHlqLSqORG+vYhULwW+'; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 9.1', - message: '9zX9VbqSWSw7Urj5xPaaqhy++P6IrdCVWVQSRn+c9OwLiWxZ7aFiEOdUnIq7EM28IaEuyba1uP0vEDmetg==', - seed: 'jsll8TSj7Jkx6SocoNyBadXqcFyOyWXxNKPsmTHpKhw=', - encrypted: 'kuBqApUSIPP0yfNvL0I57K2hReD8CcPhiYZFlPPmdM0cVFQHvdPMjQ2GcEekoBMk2+JR2H3IY6QF0JcANECuoepAuEvks/XolStfJNyUVUO3vLbWGlA1JOOSPiWElIdM0hmLN5In0DizqQit7R0mzH3Y1vUGPBhzOnNgNVQgrWVvqJugjG1SPY7LaZxIjhnz3O/8EkCpxLWcyWkFLX+ujnxIKxAqjmvEztiwLLlcWbJKILOy7KE1lctyh58wYP6e' - }, { - title: 'RSAES-OAEP Encryption Example 9.2', - message: 'gbkGYFAVpjqr5C3fEeGXiRL1QEx0dLJtzj7Ugr+WHsyBi/QgxUZZ', - seed: '7LG4sl+lDNqwjlYEKGf0r1gm0WzssbiyX6UM2rCOVgQ=', - encrypted: 'iNEGT/cssEWuXX1C+SWyMK1hhUjRdNz9l8FeCBhftw8I5JUY1EDXPi2hUpESGxbJOjbyricua+QVvfP/UeoPfOxCcpRSoA3DlviB0ExCJTpCb2NSv9qXtw6Z7qEqk2YyQD7mAsGb2/Y3ug3KkKrF68MAxsWFV3tmL2NV2h+yfW6qz1dVAbAIUZeRuLIbaLdY9F7O4yPC68zkaX9NcTg0tOtnAJth9fMAOFX8sVbvKBgeOuVHV1A8HcAbmqkLMIyp' - }, { - title: 'RSAES-OAEP Encryption Example 9.3', - message: '/TJkKd+biQ4JtUsYuPNPHiQ=', - seed: '6JuwMsbOYiy9tTvJRmAU6nf3d8Dom7Ayxs5iLL21O8k=', - encrypted: 'JiwfWprF58xVjVRR9B9r0mhomwU5IzkxXCZDgYJwYUcacmrz+KRLKMmtCMN7DLA2lOsfK+72mU+RLmhwfAAhBYmLGR8dLLstazb5xzU9wIM9u3jAl5iyyMLSo6wk/3SH0f7vC2bnFtMkhoHsd3VSTpzl5Q+SqX/4Q1JAMGWMMiHdyjCH+WaXNdTrboPEnPVtTcBGthkkYu8r/G0IkBR6OMPCZFgl/J4uiRTGCRbZx7UC02g6+qNMQY+ksygV6R8w' - }, { - title: 'RSAES-OAEP Encryption Example 9.4', - message: '8UWbXwyS8BoPcjouVmJITY+MCiD8KdrWrNQ7tfPv/fThtj4H/f5mKNDXTKGb8taeSgq/htKTklp5Z3L4CI4=', - seed: 'YG87mcC5zNdx6qKeoOTIhPMYnMxgbzuZwLnM13Hqop4=', - encrypted: 'YXo+2y1QMWzjHkLtCW6DjdJ6fS5qdm+VHALYLFhG/dI1GmOwGOiOrFqesc5KPtWE73N5nJ680e6iYQYdFIsny6a4VH9mq/2Lr6qasMgM27znPzK8l6uQ1pTcDu1fJ4gCJABshzVEXzeTWx6OyKZsOFL8eXiNCwQpyfP9eH0tRjc+F75H3dnzX6AEVff4t0yKjDqp7aRMxFZGidcMJ6KetiNXUg1dhs/lHzItdQ7oMSUAgMnHYAvJDGqy5L4F8XXM' - }, { - title: 'RSAES-OAEP Encryption Example 9.5', - message: 'U+boxynW+cMZ3TF+dLDbjkzMol88gwV0bhN6xjpj7zc557WVq7lujVXlT3vUGrQzN4/7kR0=', - seed: '/LxCFALp7KvGCCr6QLpfJlIshA78vEIUAunsq8YIKvo=', - encrypted: 'fwY+yhF2kyhotPKPlHEXcTOqVRG8Kg9bDJE/cSPUOoyVoiV0j57o9xpEYtZBuM5RanPUsTDcYNvorKqP5mbN81JV3SmEkIRTL7JoHGpJAMDHFjXBfpAwgUCPhfJ2+CUCIyOoPZqlt4w+K9l+WeFZYDatr0HC1NO+stbvWq358HRdX27TexTocG5OEB4l9gqhnUYD2JHNlGidsm0vzFQJoIMaH26x9Kgosg6tZQ0t3jdoeLbTCSxOMM9dDQjjK447' - }, { - title: 'RSAES-OAEP Encryption Example 9.6', - message: 'trKOohmNDBAIvGQ=', - seed: 'I6reDh4Iu5uaeNIwKlL5whsuG6Ijqt4OHgi7m5p40jA=', - encrypted: 'PISd/61VECapJ7gfG4J2OroSl69kvIZD2uuqmiro3E4pmXfpdOW/q+1WCr574Pjsj/xrIUdgmNMAl8QjciO/nArYi0IFco1tCRLNZqMDGjzZifHIcDNCsvnKg/VRmkPrjXbndebLqMtw7taeVztYq1HKVAoGsdIvLkuhmsK0Iaesp+/8xka40c9hWwcXHsG+I7pevwFarxQQbuUjXSkZ2ObWgzgGSiGCw9QNUGpO0usATLSd0AFkeE+IM/KAwJCy' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - - // Example 10: A 2048-bit RSA Key Pair - // Components of the RSA Key Pair - modulus = 'rkXtVgHOxrjMBfgDk1xnTdvg11xMCf15UfxrDK7DE6jfOZcMUYv/ul7Wjz8NfyKkAp1BPxrgfk6+nkF3ziPn9UBLVp5O4b3PPB+wPvETgC1PhV65tRNLWnyAha3K5vovoUF+w3Y74XGwxit2Dt4jwSrZK5gIhMZB9aj6wmva1KAzgaIv4bdUiFCUyCUG1AGaU1ooav6ycbubpZLeGNz2AMKu6uVuAvfPefwUzzvcfNhP67v5UMqQMEsiGaeqBjrvosPBmA5WDNZK/neVhbYQdle5V4V+/eYBCYirfeQX/IjY84TE5ucsP5Q+DDHAxKXMNvh52KOsnX1Zhg6q2muDuw=='; - exponent = 'AQAB'; - d = 'BWsEIW/l81SsdyUKS2sMhSWoXFmwvYDFZFCiLV9DjllqMzqodeKR3UP0jLiLnV/A1Jn5/NHDl/mvwHDNnjmMjRnmHbfHQQprJnXfv100W4BNIBrdUC1c4t/LCRzpmXu+vlcwbzg+TViBA/A29+hdGTTRUqMj5KjbRR1vSlsbDxAswVDgL+7iuI3qStTBusyyTYQHLRTh0kpncfdAjuMFZPuG1Dk6NLzwt4hQHRkzA/E6IoSwAfD2Ser3kyjUrFxDCrRBSSCpRg7Rt7xA7GU+h20Jq8UJrkW1JRkBFqDCYQGEgphQnBw786SD5ydAVOFelwdQNumJ9gkygHtSV3UeeQ=='; - p = '7PWuzR5VFf/6y9daKBbG6/SQGM37RjjhhdZqc5a2+AkPgBjH/ZXMNLhX3BfwzGUWuxNGq01YLK2te0EDNSOHtwM40IQEfJ2VObZJYgSz3W6kQkmSB77AH5ZCh/9jNsOYRlgzaEb1bkaGGIHBAjPSF2vxWl6W3ceAvIaKp30852k='; - q = 'vEbEZPxqxMp4Ow6wijyEG3cvfpsvKLq9WIroheGgxh5IWKD7JawpmZDzW+hRZMJZuhF1zdcZJwcTUYSZK2wpt0bdDSyr4UKDX30UjMFhUktKCZRtSLgoRz8c52tstohsNFwD4F9B1RtcOpCj8kBzx9dKT+JdnPIcdZYPP8OGMYM='; - dP = 'xzVkVx0A+xXQij3plXpQkV1xJulELaz0K8guhi5Wc/9qAI7U0uN0YX34nxehYLQ7f9qctra3QhhgmBX31FyiY8FZqjLSctEn+vS8jKLXc3jorrGbCtfaPLPeCucxSYD2K21LCoddHfA8G645zNgz72zX4tlSi/CE0flp55Tp9sE='; - dQ = 'Jlizf235wQML4dtoEX+p2H456itpO35tOi9wlHQT7sYULhj7jfy2rFRdfIagrUj4RXFw8O+ya8SBJsU+/R0WkgGY3CoRB9woLbaoDNMGI2C6P6E/cOQxL/GmzWuPxM2cXD2xfG1qVyEvc64p9hkye61ZsVOFhYW6Tii2CmKkXkk='; - qInv = 'bzhSazklCFU07z5BWoNu3ouGFYosfL/sywvYNDBP7Gg7qNT0ecQz1DQW5jJpYjzqEAd22Fr/QB0//2EO5lQRzjsTY9Y6lwnu3kJkfOpWFJPVRXCoecGGgs2XcQuWIF7DERfXO182Ij+t1ui6kN18DuYdROFjJR4gx/ZuswURfLg='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - examples = [{ - title: 'RSAES-OAEP Encryption Example 10.1', - message: 'i7pr+CpsD4bV8XVul5VocLCJU7BrTrIFvBaU7g==', - seed: 'R+GrcRn+5WyV7l6q2G9A0KpjvTNH4atxGf7lbJXuXqo=', - encrypted: 'iXCnHvFRO1zd7U4HnjDMCLRvnKZj6OVRMZv8VZCAyxdA1T4AUORzxWzAtAAA541iVjEs1n5MIrDkymBDk3cM1oha9XCGsXeazZpW2z2+4aeaM3mv/oz3QYfEGiet415sHNnikAQ9ZmYg2uzBNUOS90h0qRAWFdUV5Tyxo1HZ0slg37Ikvyu2d6tgWRAAjgiAGK7IzlU4muAfQ4GiLpvElfm+0vch7lhlrk7t5TErhEF7RWQe16lVBva7azIxlGyyrqOhYrmQ+6JQpmPnsmEKYpSxTUP2tLzoSH5e+Y0CSaD7ZB20PWILB+7PKRueJ23hlMYmnAgQBePWSUdsljXAgA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.2', - message: '5q0YHwU7WKkE8kV1EDc+Vw==', - seed: 'bRf1tMH/rDUdGVv3sJ0J8JpAec9tF/W0wf+sNR0ZW/c=', - encrypted: 'I3uBbIiYuvEYFA5OtRycm8zxMuuEoZMNRsPspeKZIGhcnQkqH8XEM8iJMeL6ZKA0hJm3jj4z1Xz7ra3tqMyTiw3vGKocjsYdXchK+ar3Atj/jXkdJLeIiqfTBA+orCKoPbrBXLllt4dqkhc3lbq0Z5lTBeh6caklDnmJGIMnxkiG3vON/uVpIR6LMBg+IudMCMOv2f++RpBhhrI8iJOsPbnebdMIrxviVaVxT22GUNehadT8WrHI/qKv+p1rCpD3AAyXAhJy7KKp1l+nPCy1IY1prey+YgBxCAnlHuHv2V7q1FZTRXMJe3iKubLeiX6SfAKU1sivpoqk5ntMSMgAfw==' - }, { - title: 'RSAES-OAEP Encryption Example 10.3', - message: 'UQos9g6Gb6I0BVPJTqOfvCVjEeg+lEVLQSQ=', - seed: 'OFOHUU3szHx0DdjN+druSaHL/VQ4U4dRTezMfHQN2M0=', - encrypted: 'n3scq/IYyBWbaN4Xd+mKJ0bZQR10yiSYzdjV1D1K3xiH11Tvhbj59PdRQXflSxE1QMhxN0jp9/tsErIlXqSnBH2XsTX6glPwJmdgXj7gZ1Aj+wsl15PctCcZv0I/4imvBBOSEd5TRmag3oU7gmbpKQCSHi6Hp2z5H/xEHekrRZemX7Dwl6A8tzVhCBpPweKNpe34OLMrHcdyb0k/uyabEHtzoZLpiOgHRjqi7SHr2ene9PPOswH7hc87xkiKtiFOpCeCScF6asFeiUTn5sf5tuPHVGqjKskwxcm/ToW3hm7ChnQdYcPRlnHrMeLBJt6o6xdrg6+SvsnNzctLxes0gA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.4', - message: 'vN0ZDaO30wDfmgbiLKrip18QyR/2Z7fBa96LUwZKJkmpQEXJ', - seed: 'XKymoPdkFhqWhPhdkrbg7zfKi2VcrKag92QWGpaE+F0=', - encrypted: 'KWbozLkoxbGfY0Dixr8GE/JD+MDAXIUFzm7K5AYscTvyAh9EDkLfDc/i8Y9Cjz/GXWsrRAlzO9PmLj4rECjbaNdkyzgYUiXSVV0SWmEF62nhZcScf+5QWHgsv6syu2VXdkz9nW4O3LWir2M/HqJ6kmpKVm5o7TqeYZ7GrY25FUnFDM8DpXOZqOImHVAoh8Tim9d2V9lk2D2Av6Tdsa4SIyBDj5VcX3OVoTbqdkKj5It9ANHjXaqGwqEyj7j1cQrRzrbGVbib3qzvoFvGWoo5yzr3D8J8z/UXJ4sBkumcjrphFTDe9qQcJ5FI82ZZsChJssRcZl4ApFosoljixk0WkA==' - }, { - title: 'RSAES-OAEP Encryption Example 10.5', - message: 'p91sfcJLRvndXx6RraTDs9+UfodyMqk=', - seed: 'lbyp44WYlLPdhp+n7NW7xkAb8+SVvKnjhZiUs92Gn6c=', - encrypted: 'D7UPhV1nPwixcgg47HSlk/8yDLEDSXxoyo6H7MMopUTYwCmAjtnpWp4oWGg0sACoUlzKpR3PN21a4xru1txalcOkceylsQI9AIFvLhZyS20HbvQeExT9zQGyJaDhygC/6gPifgELk7x5QUqsd+TL/MQdgBZqbLO0skLOqNG3KrTMmN0oeWgxgjMmWnyBH0qkUpV5SlRN2P3nIHd/DZrkDn/qJG0MpXh6AeNHhvSgv8gyDG2Vzdf04OgvZLJTJaTdqHuXz93t7+PQ+QfKOG0wCEf5gOaYpkFarorv9XPLhzuOauN+Dd2IPzgKH5+wjbTZlZzEn+xRyDXK7s6GL/XOZw==' - }, { - title: 'RSAES-OAEP Encryption Example 10.6', - message: '6vGnOhsMRglTfeac2SKLvPuajKjGw++vBW/kp/RjTtALfDnsaSLXuOosBOus', - seed: 'n0fd9C6X7qhWqb28cU6zrCL26zKfR930LpfuqFapvbw=', - encrypted: 'FO6Mv81w3SW/oVGIgdfAbIOW1eK8/UFdwryWg3ek0URFK09jNQtAaxT+66Yn5EJrTWh8fgRn1spnAOUsY5eq7iGpRsPGE86MLNonOvrBIht4Z+IDum55EgmwCrlfyiGe2fX4Xv1ifCQMSHd3OJTujAosVI3vPJaSsbTW6FqOFkM5m9uPqrdd+yhQ942wN4m4d4TG/YPx5gf62fbCRHOfvA5qSpO0XGQ45u+sWBAtOfzxmaYtf7WRAlu+JvIjTp8I2lAfVEuuW9+TJattx9RXN8jaWOBsceLIOfE6bkgad50UX5PyEtapnJOG1j0bh5PZ//oKtIASarB3PwdWM1EQTQ==' - }]; - checkOAEPEncryptExamples(pubkey, privateKey, 'sha256', examples); - } - - function _bytesToBigInteger(bytes) { - var buffer = UTIL.createBuffer(bytes); - var hex = buffer.toHex(); - return new BigInteger(hex, 16); - } - - function _base64ToBn(s) { - var decoded = UTIL.decode64(s); - return _bytesToBigInteger(decoded); - } - - function checkOAEPEncryptExamples(publicKey, privateKey, md, examples) { - if(md === 'sha1') { - md = MD.sha1.create(); - } else if(md === 'sha256') { - md = MD.sha256.create(); - } - - for(var i = 0; i < examples.length; ++i) { - var ex = examples[i]; - it('should test ' + ex.title, function() { - checkOAEPEncrypt( - publicKey, privateKey, md, ex.message, ex.seed, ex.encrypted); - }); - } - } - - function checkOAEPEncrypt( - publicKey, privateKey, md, message, seed, expected) { - var message = UTIL.decode64(message); - var seed = UTIL.decode64(seed); - var encoded = PKCS1.encode_rsa_oaep( - publicKey, message, {seed: seed, md: md}); - var ciphertext = publicKey.encrypt(encoded, null); - ASSERT.equal(expected, UTIL.encode64(ciphertext)); - - var decrypted = privateKey.decrypt(ciphertext, null); - var decoded = PKCS1.decode_rsa_oaep(privateKey, decrypted, {md: md}); - ASSERT.equal(message, decoded); - - // test with higher-level API, default label, and generating a seed - ciphertext = publicKey.encrypt(message, 'RSA-OAEP', {md: md}); - decoded = privateKey.decrypt(ciphertext, 'RSA-OAEP', {md: md}); - ASSERT.equal(message, decoded); - } - - function decodeBase64PublicKey(modulus, exponent) { - modulus = _base64ToBn(modulus); - exponent = _base64ToBn(exponent); - return PKI.setRsaPublicKey(modulus, exponent); - } - - function decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv) { - modulus = _base64ToBn(modulus); - exponent = _base64ToBn(exponent); - d = _base64ToBn(d); - p = _base64ToBn(p); - q = _base64ToBn(q); - dP = _base64ToBn(dP); - dQ = _base64ToBn(dQ); - qInv = _base64ToBn(qInv); - return PKI.setRsaPrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - } - - function makeKey() { - var modulus, exponent, d, p, q, dP, dQ, qInv, pubkey, privateKey; - - // Example 1: A 1024-bit RSA Key Pair - modulus = 'qLOyhK+OtQs4cDSoYPFGxJGfMYdjzWxVmMiuSBGh4KvEx+CwgtaTpef87Wdc9GaFEncsDLxkp0LGxjD1M8jMcvYq6DPEC/JYQumEu3i9v5fAEH1VvbZi9cTg+rmEXLUUjvc5LdOq/5OuHmtme7PUJHYW1PW6ENTP0ibeiNOfFvs='; - exponent = 'AQAB'; - d = 'UzOc/befyEZqZVxzFqyoXFX9j23YmP2vEZUX709S6P2OJY35P+4YD6DkqylpPNg7FSpVPUrE0YEri5+lrw5/Vf5zBN9BVwkm8zEfFcTWWnMsSDEW7j09LQrzVJrZv3y/t4rYhPhNW+sEck3HNpsx3vN9DPU56c/N095lNynq1dE='; - p = '0yc35yZ//hNBstXA0VCoG1hvsxMr7S+NUmKGSpy58wrzi+RIWY1BOhcu+4AsIazxwRxSDC8mpHHcrSEurHyjnQ=='; - q = 'zIhT0dVNpjD6wAT0cfKBx7iYLYIkpJDtvrM9Pj1cyTxHZXA9HdeRZC8fEWoN2FK+JBmyr3K/6aAw6GCwKItddw=='; - dP = 'DhK/FxjpzvVZm6HDiC/oBGqQh07vzo8szCDk8nQfsKM6OEiuyckwX77L0tdoGZZ9RnGsxkMeQDeWjbN4eOaVwQ=='; - dQ = 'lSl7D5Wi+mfQBwfWCd/U/AXIna/C721upVvsdx6jM3NNklHnkILs2oZu/vE8RZ4aYxOGt+NUyJn18RLKhdcVgw=='; - qInv = 'T0VsUCSTvcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mNXb79cyY+NygUJ0OBgWbtfdY2h90qjKHS9PvY4Q=='; - pubkey = decodeBase64PublicKey(modulus, exponent); - privateKey = decodeBase64PrivateKey(modulus, exponent, d, p, q, dP, dQ, qInv); - - return {publicKey: pubkey, privateKey: privateKey}; - } - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pki', - 'forge/pkcs1', - 'forge/md', - 'forge/jsbn', - 'forge/util' - ], function(PKI, PKCS1, MD, JSBN, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - PKI(), - PKCS1(), - MD(), - JSBN(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pki')(), - require('../../js/pkcs1')(), - require('../../js/md')(), - require('../../js/jsbn')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs12.js b/includes/external/school/node_modules/node-forge/nodejs/test/pkcs12.js deleted file mode 100644 index 70f482c..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs12.js +++ /dev/null @@ -1,687 +0,0 @@ -(function() { - -function Tests(ASSERT, FORGE) { - var forge = FORGE(); - var PKCS12 = forge.pkcs12; - var ASN1 = forge.asn1; - var PEM = forge.pem; - var PKI = forge.pki; - var UTIL = forge.util; - - var _data; - describe('pkcs12', function() { - it('should create certificate-only p12', function() { - var p12Asn = PKCS12.toPkcs12Asn1(null, _data.certificate, null, { - useMac: false, - generateLocalKeyId: false - }); - var p12Der = ASN1.toDer(p12Asn).getBytes(); - - /* The generated PKCS#12 file lacks a MAC, therefore pass -nomacver to - OpenSSL: openssl pkcs12 -nomacver -nodes -in pkcs12_certonly.p12 */ - ASSERT.equal(p12Der, UTIL.decode64(_data.p12certonly)); - }); - - it('should create key-only p12', function() { - var privateKey = PKI.privateKeyFromPem(_data.privateKey); - var p12Asn = PKCS12.toPkcs12Asn1(privateKey, null, null, { - useMac: false, - generateLocalKeyId: false - }); - var p12Der = ASN1.toDer(p12Asn).getBytes(); - - /* The generated PKCS#12 file lacks a MAC, therefore pass -nomacver to - OpenSSL: openssl pkcs12 -nomacver -nodes -in pkcs12_keyonly.p12 */ - ASSERT.equal(p12Der, UTIL.decode64(_data.p12keyonly)); - }); - - it('should create encrypted-key-only p12', function() { - /* Note we need to mock the PRNG, since the PKCS#12 file uses encryption - which otherwise would differ each time due to the randomized IV. */ - var oldRandomGenerate = forge.random.generate; - forge.random.generate = function(num) { - return UTIL.createBuffer().fillWithByte(0, num).getBytes(); - }; - - var privateKey = PKI.privateKeyFromPem(_data.privateKey); - var p12Asn = PKCS12.toPkcs12Asn1(privateKey, null, 'nopass', { - useMac: false, - generateLocalKeyId: false - }); - var p12Der = ASN1.toDer(p12Asn).getBytes(); - - // restore old random function - forge.random.generate = oldRandomGenerate; - - /* The generated PKCS#12 file lacks a MAC, therefore pass -nomacver to - OpenSSL: openssl pkcs12 -nomacver -in pkcs12_enckeyonly.p12 */ - ASSERT.equal(p12Der, UTIL.decode64(_data.p12enckeyonly)); - }); - - it('should import certificate-only p12', function() { - var p12Der = UTIL.decode64(_data.p12certonly); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1); - ASSERT.equal(p12.version, 3); - - // PKCS#12 PFX has exactly one SafeContents; it is not encrypted - ASSERT.equal(p12.safeContents.length, 1); - ASSERT.equal(p12.safeContents[0].encrypted, false); - - // SafeContents has one SafeBag which has one CertBag with the cert - ASSERT.equal(p12.safeContents[0].safeBags.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[0].type, PKI.oids.certBag); - - // check cert's serial number - ASSERT.equal( - p12.safeContents[0].safeBags[0].cert.serialNumber, - '00d4541c40d835e2f3'); - }); - - it('should import key-only p12', function() { - var p12Der = UTIL.decode64(_data.p12keyonly); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1); - ASSERT.equal(p12.version, 3); - - // PKCS#12 PFX has exactly one SafeContents; it is not encrypted - ASSERT.equal(p12.safeContents.length, 1); - ASSERT.equal(p12.safeContents[0].encrypted, false); - - // SafeContents has one SafeBag which has one KeyBag with the key - ASSERT.equal(p12.safeContents[0].safeBags.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[0].type, PKI.oids.keyBag); - - // compare the key from the PFX by comparing both primes - var expected = PKI.privateKeyFromPem(_data.privateKey); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.p, expected.p); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.q, expected.q); - }); - - it('should import encrypted-key-only p12', function() { - var p12Der = UTIL.decode64(_data.p12enckeyonly); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, 'nopass'); - ASSERT.equal(p12.version, 3); - - // PKCS#12 PFX has exactly one SafeContents; it is *not* encrypted, - // only the key itself is encrypted (shrouded) - ASSERT.equal(p12.safeContents.length, 1); - ASSERT.equal(p12.safeContents[0].encrypted, false); - - // SafeContents has one SafeBag which has one shrouded KeyBag with the key - ASSERT.equal(p12.safeContents[0].safeBags.length, 1); - ASSERT.equal( - p12.safeContents[0].safeBags[0].type, PKI.oids.pkcs8ShroudedKeyBag); - - // compare the key from the PFX by comparing both primes - var expected = PKI.privateKeyFromPem(_data.privateKey); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.p, expected.p); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.q, expected.q); - }); - - it('should import an encrypted-key-only p12', function() { - var p12Der = UTIL.decode64(_data.p12enckeyonly); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, 'nopass'); - ASSERT.equal(p12.version, 3); - - // PKCS#12 PFX has exactly one SafeContents; it is *not* encrypted, - // only the key itself is encrypted (shrouded) - ASSERT.equal(p12.safeContents.length, 1); - ASSERT.equal(p12.safeContents[0].encrypted, false); - - // SafeContents has one SafeBag which has one shrouded KeyBag with the key - ASSERT.equal(p12.safeContents[0].safeBags.length, 1); - ASSERT.equal( - p12.safeContents[0].safeBags[0].type, PKI.oids.pkcs8ShroudedKeyBag); - - // compare the key from the PFX by comparing both primes - var expected = PKI.privateKeyFromPem(_data.privateKey); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.p, expected.p); - ASSERT.deepEqual(p12.safeContents[0].safeBags[0].key.q, expected.q); - }); - - it('should import an encrypted p12 with keys and certificates', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - ASSERT.equal(p12.version, 3); - - // PKCS#12 PFX has two SafeContents; first is *not* encrypted but - // contains two shrouded keys, second is encrypted and has six - // certificates - ASSERT.equal(p12.safeContents.length, 2); - - ASSERT.equal(p12.safeContents[0].encrypted, false); - ASSERT.equal(p12.safeContents[0].safeBags.length, 2); - ASSERT.equal(p12.safeContents[0].safeBags[0].type, PKI.oids.pkcs8ShroudedKeyBag); - ASSERT.equal(p12.safeContents[0].safeBags[0].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[0].attributes.friendlyName[0], 'encryptionkey'); - ASSERT.equal(p12.safeContents[0].safeBags[0].attributes.localKeyId.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[0].attributes.localKeyId[0], 'Time 1311855238964'); - - ASSERT.equal(p12.safeContents[0].safeBags[1].type, PKI.oids.pkcs8ShroudedKeyBag); - ASSERT.equal(p12.safeContents[0].safeBags[1].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[1].attributes.friendlyName[0], 'signaturekey'); - ASSERT.equal(p12.safeContents[0].safeBags[1].attributes.localKeyId.length, 1); - ASSERT.equal(p12.safeContents[0].safeBags[1].attributes.localKeyId[0], 'Time 1311855238863'); - - ASSERT.equal(p12.safeContents[1].encrypted, true); - ASSERT.equal(p12.safeContents[1].safeBags.length, 6); - - ASSERT.equal(p12.safeContents[1].safeBags[0].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[0].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[0].attributes.friendlyName[0], 'CN=1002753325,2.5.4.5=#130b3130303237353333323543'); - ASSERT.equal(p12.safeContents[1].safeBags[0].attributes.localKeyId.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[0].attributes.localKeyId[0], 'Time 1311855238964'); - - ASSERT.equal(p12.safeContents[1].safeBags[1].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[1].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[1].attributes.friendlyName[0], 'CN=ElsterSoftTestCA,OU=CA,O=Elster,C=DE'); - - ASSERT.equal(p12.safeContents[1].safeBags[2].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[2].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[2].attributes.friendlyName[0], 'CN=ElsterRootCA,OU=RootCA,O=Elster,C=DE'); - - ASSERT.equal(p12.safeContents[1].safeBags[3].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[3].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[3].attributes.friendlyName[0], 'CN=1002753325,2.5.4.5=#130b3130303237353333323541'); - ASSERT.equal(p12.safeContents[1].safeBags[3].attributes.localKeyId.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[3].attributes.localKeyId[0], 'Time 1311855238863'); - - ASSERT.equal(p12.safeContents[1].safeBags[4].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[4].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[4].attributes.friendlyName[0], 'CN=ElsterSoftTestCA,OU=CA,O=Elster,C=DE'); - - ASSERT.equal(p12.safeContents[1].safeBags[5].type, PKI.oids.certBag); - ASSERT.equal(p12.safeContents[1].safeBags[5].attributes.friendlyName.length, 1); - ASSERT.equal(p12.safeContents[1].safeBags[5].attributes.friendlyName[0], 'CN=ElsterRootCA,OU=RootCA,O=Elster,C=DE'); - }); - - it('should get bags by friendly name', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - var bags = p12.getBags({friendlyName: 'signaturekey'}); - - ASSERT.equal(bags.friendlyName.length, 1); - ASSERT.equal(bags.friendlyName[0].attributes.friendlyName[0], 'signaturekey'); - }); - - it('should get cert bags by friendly name', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - var bags = p12.getBags({ - friendlyName: 'CN=1002753325,2.5.4.5=#130b3130303237353333323543', - bagType: PKI.oids.certBag - }); - - ASSERT.equal(bags.friendlyName.length, 1); - ASSERT.equal(bags.friendlyName[0].attributes.friendlyName[0], 'CN=1002753325,2.5.4.5=#130b3130303237353333323543'); - }); - - it('should get all cert bags', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - var bags = p12.getBags({ - bagType: PKI.oids.certBag - }); - - ASSERT.equal(bags[PKI.oids.certBag].length, 6); - for(var i = 0; i < bags[PKI.oids.certBag].length; ++i) { - ASSERT.equal(bags[PKI.oids.certBag][i].type, PKI.oids.certBag); - } - }); - - it('should get bags by local key ID', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - var bags = p12.getBags({localKeyId: 'Time 1311855238863'}); - - ASSERT.equal(bags.localKeyId.length, 2); - ASSERT.equal(bags.localKeyId[0].attributes.localKeyId[0], 'Time 1311855238863'); - ASSERT.equal(bags.localKeyId[1].attributes.localKeyId[0], 'Time 1311855238863'); - }); - - it('should get cert bags by local key ID', function() { - var p12Der = UTIL.decode64(_data.p12encmixed); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123456'); - var bags = p12.getBags({ - localKeyId: 'Time 1311855238863', - bagType: PKI.oids.certBag - }); - - ASSERT.equal(bags.localKeyId.length, 1); - ASSERT.equal(bags.localKeyId[0].attributes.localKeyId[0], 'Time 1311855238863'); - ASSERT.equal(bags.localKeyId[0].type, PKI.oids.certBag); - }); - - it('should generate a PKCS#12 mac key', function() { - var salt = 'A15D6AA8F8DAFC352F9EE1C192F09966EB85D17B'; - salt = UTIL.createBuffer(UTIL.hexToBytes(salt)); - var expected = '03e46727268575c6ebd6bff828d0d09b0c914201263ca543'; - var key = PKCS12.generateKey('123456', salt, 1, 1024, 24); - ASSERT.equal(key.toHex(), expected); - }); - - it('should load a PKCS#12 with an ECDSA key in a certificate (unsupported key format)', function() { - var p12Der = UTIL.decode64(_data.p12ecdsa); - var p12Asn1 = ASN1.fromDer(p12Der); - var p12 = PKCS12.pkcs12FromAsn1(p12Asn1, '123321'); - var bags = p12.getBags({bagType: PKI.oids.certBag}); - - ASSERT.equal(bags[PKI.oids.certBag].length, 1); - var bag = bags[PKI.oids.certBag][0]; - ASSERT.equal(bag.cert, null); - ASSERT.equal('asn1' in bag, true); - - // convert to ASN.1, then DER, then PEM-encode - var msg = { - type: 'CERTIFICATE', - body: ASN1.toDer(bag.asn1).getBytes() - }; - var pem = PEM.encode(msg); - ASSERT.equal(pem, _data.p12ecdsaCert); - }); - }); - - _data = { - certificate: '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIDtDCCApwCCQDUVBxA2DXi8zANBgkqhkiG9w0BAQUFADCBmzELMAkGA1UEBhMC\r\n' + - 'REUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEVMBMGA1UE\r\n' + - 'CgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNVBAMMDUdl\r\n' + - 'aWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5waXBlLmRl\r\n' + - 'MB4XDTEyMDMxODIyNTc0M1oXDTEzMDMxODIyNTc0M1owgZsxCzAJBgNVBAYTAkRF\r\n' + - 'MRIwEAYDVQQIDAlGcmFuY29uaWExEDAOBgNVBAcMB0Fuc2JhY2gxFTATBgNVBAoM\r\n' + - 'DFN0ZWZhbiBTaWVnbDESMBAGA1UECwwJR2VpZXJsZWluMRYwFAYDVQQDDA1HZWll\r\n' + - 'cmxlaW4gREVWMSMwIQYJKoZIhvcNAQkBFhRzdGVzaWVAYnJva2VucGlwZS5kZTCC\r\n' + - 'ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMsAbQ4fWevHqP1K1y/ewpMS\r\n' + - '3vYovBto7IsKBq0v3NmC2kPf3NhyaSKfjOOS5uAPONLffLck+iGdOLLFia6OSpM6\r\n' + - '0tyQIV9lHoRh7fOEYORab0Z+aBUZcEGT9yotBOraX1YbKc5f9XO+80eG4XYvb5ua\r\n' + - '1NHrxWqe4w2p3zGJCKO+wHpvGkbKz0nfu36jwWz5aihfHi9hp/xs8mfH86mIKiD7\r\n' + - 'f2X2KeZ1PK9RvppA0X3lLb2VLOqMt+FHWicyZ/wjhQZ4oW55ln2yYJUQ+adlgaYn\r\n' + - 'PrtnsxmbTxM+99oF0F2/HmGrNs8nLZSva1Vy+hmjmWz6/O8ZxhiIj7oBRqYcAocC\r\n' + - 'AwEAATANBgkqhkiG9w0BAQUFAAOCAQEAvfvtu31GFBO5+mFjPAoR4BlzKq/H3EPO\r\n' + - 'qS8cm/TjHgDRALwSnwKYCFs/bXqE4iOTD6otV4TusX3EPbqL2vzZQEcZn6paU/oZ\r\n' + - 'ZVXwQqMqY5tf2teQiNxqxNmSIEPRHOr2QVBVIx2YF4Po89KGUqJ9u/3/10lDqRwp\r\n' + - 'sReijr5UKv5aygEcnwcW8+Ne4rTx934UDsutKG20dr5trZfWQRVS9fS9CFwJehEX\r\n' + - 'HAMUc/0++80NhfQthmWZWlWM1R3dr4TrIPtWdn5z0MtGeDvqBk7HjGrhcVS6kAsy\r\n' + - 'Z9y/lfLPjBuxlQAHztEJCWgI4TW3/RLhgfg2gI1noM2n84Cdmisfkg==\r\n' + - '-----END CERTIFICATE-----\r\n', - privateKey: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIIEowIBAAKCAQEAywBtDh9Z68eo/UrXL97CkxLe9ii8G2jsiwoGrS/c2YLaQ9/c\r\n' + - '2HJpIp+M45Lm4A840t98tyT6IZ04ssWJro5KkzrS3JAhX2UehGHt84Rg5FpvRn5o\r\n' + - 'FRlwQZP3Ki0E6tpfVhspzl/1c77zR4bhdi9vm5rU0evFap7jDanfMYkIo77Aem8a\r\n' + - 'RsrPSd+7fqPBbPlqKF8eL2Gn/GzyZ8fzqYgqIPt/ZfYp5nU8r1G+mkDRfeUtvZUs\r\n' + - '6oy34UdaJzJn/COFBnihbnmWfbJglRD5p2WBpic+u2ezGZtPEz732gXQXb8eYas2\r\n' + - 'zyctlK9rVXL6GaOZbPr87xnGGIiPugFGphwChwIDAQABAoIBAAjMA+3QvfzRsikH\r\n' + - 'zTtt09C7yJ2yNjSZ32ZHEPMAV/m1CfBXCyL2EkhF0b0q6IZdIoFA3g6xs4UxYvuc\r\n' + - 'Q9Mkp2ap7elQ9aFEqIXkGIOtAOXkZV4QrEH90DeHSfax7LygqfD5TF59Gg3iAHjh\r\n' + - 'B3Qvqg58LyzJosx0BjLZYaqr3Yv67GkqyflpF/roPGdClHpahAi5PBkHiNhNTAUU\r\n' + - 'LJRGvMegXGZkUKgGMAiGCk0N96OZwrinMKO6YKGdtgwVWC2wbJY0trElaiwXozSt\r\n' + - 'NmP6KTQp94C7rcVO6v1lZiOfhBe5Kc8QHUU+GYydgdjqm6Rdow/yLHOALAVtXSeb\r\n' + - 'U+tPfcECgYEA6Qi+qF+gtPincEDBxRtoKwAlRkALt8kly8bYiGcUmd116k/5bmPw\r\n' + - 'd0tBUOQbqRa1obYC88goOVzp9LInAcBSSrexhVaPAF4nrkwYXMOq+76MiH17WUfQ\r\n' + - 'MgVM2IB48PBjNk1s3Crj6j1cxxkctqmCnVaI9HlU2PPZ3xjaklfv/NsCgYEA3wH8\r\n' + - 'mehUhiAp7vuhd+hfomFw74cqgHC9v0saiYGckpMafh9MJGc4U5GrN1kYeb/CFkSx\r\n' + - '1hOytD3YBKoaKKoYagaMQcjxf6HnEF0f/5OiQkUQpWmgC9lNnE4XTWjnwqaTS5L9\r\n' + - 'D+H50SiI3VjHymGXTRJeKpAIwV74AxxrnVofqsUCgYAwmL1B2adm9g/c7fQ6yatg\r\n' + - 'hEhBrSuEaTMzmsUfNPfr2m4zrffjWH4WMqBtYRSPn4fDMHTPJ+eThtfXSqutxtCi\r\n' + - 'ekpP9ywdNIVr6LyP49Ita6Bc+mYVyU8Wj1pmL+yIumjGM0FHbL5Y4/EMKCV/xjvR\r\n' + - '2fD3orHaCIhf6QvzxtjqTwKBgFm6UemXKlMhI94tTsWRMNGEBU3LA9XUBvSuAkpr\r\n' + - 'ZRUwrQssCpXnFinBxbMqXQe3mR8emrM5D8En1P/jdU0BS3t1kP9zG4AwI2lZHuPV\r\n' + - 'ggbKBS2Y9zVtRKXsYcHawM13+nIA/WNjmAGJHrB45UJPy/HNvye+9lbfoEiYKdCR\r\n' + - 'D4bFAoGBAIm9jcZkIwLa9kLAWH995YYYSGRY4KC29XZr2io2mog+BAjhFt1sqebt\r\n' + - 'R8sRHNiIP2mcUECMOcaS+tcayi+8KTHWxIEed9qDmFu6XBbePfe/L6yxPSagcixH\r\n' + - 'BK0KuK/fgTPvZCmIs8hUIC+AxhXKnqn4fIWoO54xLsALc0gEjs2d\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - p12certonly: - 'MIIEHgIBAzCCBBcGCSqGSIb3DQEHAaCCBAgEggQEMIIEADCCA/wGCSqGSIb3DQEH\r\n' + - 'AaCCA+0EggPpMIID5TCCA+EGCyqGSIb3DQEMCgEDoIID0DCCA8wGCiqGSIb3DQEJ\r\n' + - 'FgGgggO8BIIDuDCCA7QwggKcAgkA1FQcQNg14vMwDQYJKoZIhvcNAQEFBQAwgZsx\r\n' + - 'CzAJBgNVBAYTAkRFMRIwEAYDVQQIDAlGcmFuY29uaWExEDAOBgNVBAcMB0Fuc2Jh\r\n' + - 'Y2gxFTATBgNVBAoMDFN0ZWZhbiBTaWVnbDESMBAGA1UECwwJR2VpZXJsZWluMRYw\r\n' + - 'FAYDVQQDDA1HZWllcmxlaW4gREVWMSMwIQYJKoZIhvcNAQkBFhRzdGVzaWVAYnJv\r\n' + - 'a2VucGlwZS5kZTAeFw0xMjAzMTgyMjU3NDNaFw0xMzAzMTgyMjU3NDNaMIGbMQsw\r\n' + - 'CQYDVQQGEwJERTESMBAGA1UECAwJRnJhbmNvbmlhMRAwDgYDVQQHDAdBbnNiYWNo\r\n' + - 'MRUwEwYDVQQKDAxTdGVmYW4gU2llZ2wxEjAQBgNVBAsMCUdlaWVybGVpbjEWMBQG\r\n' + - 'A1UEAwwNR2VpZXJsZWluIERFVjEjMCEGCSqGSIb3DQEJARYUc3Rlc2llQGJyb2tl\r\n' + - 'bnBpcGUuZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLAG0OH1nr\r\n' + - 'x6j9Stcv3sKTEt72KLwbaOyLCgatL9zZgtpD39zYcmkin4zjkubgDzjS33y3JPoh\r\n' + - 'nTiyxYmujkqTOtLckCFfZR6EYe3zhGDkWm9GfmgVGXBBk/cqLQTq2l9WGynOX/Vz\r\n' + - 'vvNHhuF2L2+bmtTR68VqnuMNqd8xiQijvsB6bxpGys9J37t+o8Fs+WooXx4vYaf8\r\n' + - 'bPJnx/OpiCog+39l9inmdTyvUb6aQNF95S29lSzqjLfhR1onMmf8I4UGeKFueZZ9\r\n' + - 'smCVEPmnZYGmJz67Z7MZm08TPvfaBdBdvx5hqzbPJy2Ur2tVcvoZo5ls+vzvGcYY\r\n' + - 'iI+6AUamHAKHAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAL377bt9RhQTufphYzwK\r\n' + - 'EeAZcyqvx9xDzqkvHJv04x4A0QC8Ep8CmAhbP216hOIjkw+qLVeE7rF9xD26i9r8\r\n' + - '2UBHGZ+qWlP6GWVV8EKjKmObX9rXkIjcasTZkiBD0Rzq9kFQVSMdmBeD6PPShlKi\r\n' + - 'fbv9/9dJQ6kcKbEXoo6+VCr+WsoBHJ8HFvPjXuK08fd+FA7LrShttHa+ba2X1kEV\r\n' + - 'UvX0vQhcCXoRFxwDFHP9PvvNDYX0LYZlmVpVjNUd3a+E6yD7VnZ+c9DLRng76gZO\r\n' + - 'x4xq4XFUupALMmfcv5Xyz4wbsZUAB87RCQloCOE1t/0S4YH4NoCNZ6DNp/OAnZor\r\n' + - 'H5I=', - p12enckeyonly: - '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\r\n' + - 'H4/s3xo=', - p12keyonly: - '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\r\n' + - 'BI7NnQ==', - p12encmixed: - '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', - p12ecdsa: 'MIIEwQIBAzCCBIcGCSqGSIb3DQEHAaCCBHgEggR0MIIEcDCCAy8GCSqGSIb3DQEHBqCCAyAwggMcAgEAMIIDFQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIxn3OksiScggCAggAgIIC6OB2GSW2p7zaoD4FS5+8kVRF8yTPFpNfV49YCQk49DzPEJoa2tKUE8dMh48jKEh3NRm4kemaN+CKZczTPB5xk21P/+PtLWzfFYFS8/wt/UJ+5NEbRHlVkI2GDj4HYwP+7E0ad0qi54UsuyxIeph7046Jag3keqfoKYinAoiEe3mvbWlICKTWj0PpuDQ2gxb7axwOnqsGfNC3J4HivnbcDPNL+/JReC5SgK/xEQpyBc4Fz49YA9qIGC6gQxNiIC9mQvq7M8hKDumYgkFWH25HXWzj6/pBT+4C8kQxkuLi+KWh9KWj8UXc2YaeqMR6MeJUJ7YMNELVGxU+a3ZY8NFkJf4jLAPy76u4JMEbX6meHtfmOAzqaGG6pnfuqZUWRHrTxYGWIWuTkSFfqCsB08McB6HYqEYm7juHqO7lqnIvRwh++TV7F/DJupOcS8sm4Q0+pI/Ug9lex27d/TVfFL2ICRfCVOvOtv65K+6fqNkPDrctQVl/kqS8tkWZoH+yfS/qDzICk9/fnAnO7bl4yiFGYp6ISbjAnki2NnRVdyGPQIO4B51VqqMeVzN3689ppJQZCajgw7afyq1rDt1dCqiD0OdnKXkARZEp2UeIqmMCMhVPRCeY1N+Z8yF8yWUv77SkGlwtMtyvhGYlrM3Wq/rweW6P20DfeSoLu9pU/ZxXe0X9a4ko/lXjKp/+ksJRZJcxWcRDxFRLtrHIWqrzIEdWilN/ld59HP6JU2+fhBkg+waWXd+lxEmIaVw6YY7WVmQT4riC17GGKjzyrNKQp0q4BDRZKJiJm1LSDBkGYUhWTkiHaZnihuwkidnXGaM6RshPu8c7nA29EoyoZjs4Vtj9dxQzwu6RvA+UvO3v+PMxxa0O/UKjU1XPLdhaxnc5KIUQGechjsgCooHQFOQ8hxEZPUQaBnebTRjq0W7Q+DhKv1EyGFWWRNG2cJRx1EDUO+A02nBvLck5DKOdIcJlsKiHWB0/ntCRqtQ7XzCCATkGCSqGSIb3DQEHAaCCASoEggEmMIIBIjCCAR4GCyqGSIb3DQEMCgECoIG0MIGxMBwGCiqGSIb3DQEMAQMwDgQI3Q+0WbOjf/0CAggABIGQhW8EaZfJhr+MTd4xjkUcubSPjzspoLeLtGLxmKxTBnbwBrKJBJ3bzXvU7we7qvvJGhWQfsRSHXEE841WS8I14veJJLWBJfN5V0AYz2aYkoApDQ61/o7mvgaAIn5rQQh20jp0EFXZM1TRqAT17pjBcBTaZ/s0wpUi2dbYqzhIgEYsQFQfHbW576eht5NlND3tMVgwIwYJKoZIhvcNAQkVMRYEFJ6dpRl6qwj5OZg36y8v5EVowEENMDEGCSqGSIb3DQEJFDEkHiIARQBDAEQAUwBBACAAYwBlAHIAdABpAGYAaQBjAGEAdABlMDEwITAJBgUrDgMCGgUABBSMcup2jX5JqMU5lqH8d/A0/kOu+wQI5FJlbGEnxF4CAggA', - p12ecdsaCert: '-----BEGIN CERTIFICATE-----\r\n' + - 'MIICVzCCAf6gAwIBAgIJAO8k1Go1w/58MAkGByqGSM49BAEwgYgxCzAJBgNVBAYT\r\n' + - 'AkZSMQ4wDAYDVQQIDAVwYXJpczEMMAoGA1UEBwwDSWxlMQ0wCwYDVQQKDARlcmRm\r\n' + - 'MSIwIAYDVQQDDBluaXphci5hYmRlbm5lYmlAZ21haWwuY29tMSgwJgYJKoZIhvcN\r\n' + - 'AQkBFhluaXphci5hYmRlbm5lYmlAZ21haWwuY29tMB4XDTE0MDczMDE2MTYyMloX\r\n' + - 'DTE1MDczMDE2MTYyMlowgYgxCzAJBgNVBAYTAkZSMQ4wDAYDVQQIDAVwYXJpczEM\r\n' + - 'MAoGA1UEBwwDSWxlMQ0wCwYDVQQKDARlcmRmMSIwIAYDVQQDDBluaXphci5hYmRl\r\n' + - 'bm5lYmlAZ21haWwuY29tMSgwJgYJKoZIhvcNAQkBFhluaXphci5hYmRlbm5lYmlA\r\n' + - 'Z21haWwuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELqy3xekJMWlXzq5g\r\n' + - '5ao7Z8PH3iL0I2Tj28SGrDIdZ07f5x/rAbwjbcfp2YsJecEJOoaE3/jgbI8/mc1p\r\n' + - 'wWJtm6NQME4wHQYDVR0OBBYEFINzYXPWdpiaoDaLBiObKSezqjYSMB8GA1UdIwQY\r\n' + - 'MBaAFINzYXPWdpiaoDaLBiObKSezqjYSMAwGA1UdEwQFMAMBAf8wCQYHKoZIzj0E\r\n' + - 'AQNIADBFAiEA9Q+TJyUHEn7lhjEkF1OUb0hEwejAWny+mvqQ0XNHup4CIAeOLjEs\r\n' + - 'mthwYiI/c1op4Y+H0xLUp2v8iLWHIDqAZA89\r\n' + - '-----END CERTIFICATE-----\r\n' - }; -} - -// 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')); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs7.js b/includes/external/school/node_modules/node-forge/nodejs/test/pkcs7.js deleted file mode 100644 index 2c4e793..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/pkcs7.js +++ /dev/null @@ -1,350 +0,0 @@ -(function() { - -function Tests(ASSERT, PKCS7, PKI, AES, DES, UTIL) { - var _pem = { - p7: '-----BEGIN PKCS7-----\r\n' + - 'MIICTgYJKoZIhvcNAQcDoIICPzCCAjsCAQAxggHGMIIBwgIBADCBqTCBmzELMAkG\r\n' + - 'A1UEBhMCREUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEV\r\n' + - 'MBMGA1UECgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNV\r\n' + - 'BAMMDUdlaWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5w\r\n' + - 'aXBlLmRlAgkA1FQcQNg14vMwDQYJKoZIhvcNAQEBBQAEggEAJhWQz5SniCd1w3A8\r\n' + - 'uKVZEfc8Tp21I7FMfFqou+UOVsZCq7kcEa9uv2DIj3o7zD8wbLK1fuyFi4SJxTwx\r\n' + - 'kR0a6V4bbonIpXPPJ1f615dc4LydAi2tv5w14LJ1Js5XCgGVnkAmQHDaW3EHXB7X\r\n' + - 'T4w9PR3+tcS/5YAnWaM6Es38zCKHd7TnHpuakplIkwSK9rBFAyA1g/IyTPI+ktrE\r\n' + - 'EHcVuJcz/7eTlF6wJEa2HL8F1TVWuL0p/0GsJP/8y0MYGdCdtr+TIVo//3YGhoBl\r\n' + - 'N4tnheFT/jRAzfCZtflDdgAukW24CekrJ1sG2M42p5cKQ5rGFQtzNy/n8EjtUutO\r\n' + - 'HD5YITBsBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBmlpfy3WrYj3uWW7+xNEiH\r\n' + - 'gEAm2mfSF5xFPLEqqFkvKTM4w8PfhnF0ehmfQNApvoWQRQanNWLCT+Q9GHx6DCFj\r\n' + - 'TUHl+53x88BrCl1E7FhYPs92\r\n' + - '-----END PKCS7-----\r\n', - certificate: '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIDtDCCApwCCQDUVBxA2DXi8zANBgkqhkiG9w0BAQUFADCBmzELMAkGA1UEBhMC\r\n' + - 'REUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEVMBMGA1UE\r\n' + - 'CgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNVBAMMDUdl\r\n' + - 'aWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5waXBlLmRl\r\n' + - 'MB4XDTEyMDMxODIyNTc0M1oXDTEzMDMxODIyNTc0M1owgZsxCzAJBgNVBAYTAkRF\r\n' + - 'MRIwEAYDVQQIDAlGcmFuY29uaWExEDAOBgNVBAcMB0Fuc2JhY2gxFTATBgNVBAoM\r\n' + - 'DFN0ZWZhbiBTaWVnbDESMBAGA1UECwwJR2VpZXJsZWluMRYwFAYDVQQDDA1HZWll\r\n' + - 'cmxlaW4gREVWMSMwIQYJKoZIhvcNAQkBFhRzdGVzaWVAYnJva2VucGlwZS5kZTCC\r\n' + - 'ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMsAbQ4fWevHqP1K1y/ewpMS\r\n' + - '3vYovBto7IsKBq0v3NmC2kPf3NhyaSKfjOOS5uAPONLffLck+iGdOLLFia6OSpM6\r\n' + - '0tyQIV9lHoRh7fOEYORab0Z+aBUZcEGT9yotBOraX1YbKc5f9XO+80eG4XYvb5ua\r\n' + - '1NHrxWqe4w2p3zGJCKO+wHpvGkbKz0nfu36jwWz5aihfHi9hp/xs8mfH86mIKiD7\r\n' + - 'f2X2KeZ1PK9RvppA0X3lLb2VLOqMt+FHWicyZ/wjhQZ4oW55ln2yYJUQ+adlgaYn\r\n' + - 'PrtnsxmbTxM+99oF0F2/HmGrNs8nLZSva1Vy+hmjmWz6/O8ZxhiIj7oBRqYcAocC\r\n' + - 'AwEAATANBgkqhkiG9w0BAQUFAAOCAQEAvfvtu31GFBO5+mFjPAoR4BlzKq/H3EPO\r\n' + - 'qS8cm/TjHgDRALwSnwKYCFs/bXqE4iOTD6otV4TusX3EPbqL2vzZQEcZn6paU/oZ\r\n' + - 'ZVXwQqMqY5tf2teQiNxqxNmSIEPRHOr2QVBVIx2YF4Po89KGUqJ9u/3/10lDqRwp\r\n' + - 'sReijr5UKv5aygEcnwcW8+Ne4rTx934UDsutKG20dr5trZfWQRVS9fS9CFwJehEX\r\n' + - 'HAMUc/0++80NhfQthmWZWlWM1R3dr4TrIPtWdn5z0MtGeDvqBk7HjGrhcVS6kAsy\r\n' + - 'Z9y/lfLPjBuxlQAHztEJCWgI4TW3/RLhgfg2gI1noM2n84Cdmisfkg==\r\n' + - '-----END CERTIFICATE-----\r\n', - privateKey: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIIEowIBAAKCAQEAywBtDh9Z68eo/UrXL97CkxLe9ii8G2jsiwoGrS/c2YLaQ9/c\r\n' + - '2HJpIp+M45Lm4A840t98tyT6IZ04ssWJro5KkzrS3JAhX2UehGHt84Rg5FpvRn5o\r\n' + - 'FRlwQZP3Ki0E6tpfVhspzl/1c77zR4bhdi9vm5rU0evFap7jDanfMYkIo77Aem8a\r\n' + - 'RsrPSd+7fqPBbPlqKF8eL2Gn/GzyZ8fzqYgqIPt/ZfYp5nU8r1G+mkDRfeUtvZUs\r\n' + - '6oy34UdaJzJn/COFBnihbnmWfbJglRD5p2WBpic+u2ezGZtPEz732gXQXb8eYas2\r\n' + - 'zyctlK9rVXL6GaOZbPr87xnGGIiPugFGphwChwIDAQABAoIBAAjMA+3QvfzRsikH\r\n' + - 'zTtt09C7yJ2yNjSZ32ZHEPMAV/m1CfBXCyL2EkhF0b0q6IZdIoFA3g6xs4UxYvuc\r\n' + - 'Q9Mkp2ap7elQ9aFEqIXkGIOtAOXkZV4QrEH90DeHSfax7LygqfD5TF59Gg3iAHjh\r\n' + - 'B3Qvqg58LyzJosx0BjLZYaqr3Yv67GkqyflpF/roPGdClHpahAi5PBkHiNhNTAUU\r\n' + - 'LJRGvMegXGZkUKgGMAiGCk0N96OZwrinMKO6YKGdtgwVWC2wbJY0trElaiwXozSt\r\n' + - 'NmP6KTQp94C7rcVO6v1lZiOfhBe5Kc8QHUU+GYydgdjqm6Rdow/yLHOALAVtXSeb\r\n' + - 'U+tPfcECgYEA6Qi+qF+gtPincEDBxRtoKwAlRkALt8kly8bYiGcUmd116k/5bmPw\r\n' + - 'd0tBUOQbqRa1obYC88goOVzp9LInAcBSSrexhVaPAF4nrkwYXMOq+76MiH17WUfQ\r\n' + - 'MgVM2IB48PBjNk1s3Crj6j1cxxkctqmCnVaI9HlU2PPZ3xjaklfv/NsCgYEA3wH8\r\n' + - 'mehUhiAp7vuhd+hfomFw74cqgHC9v0saiYGckpMafh9MJGc4U5GrN1kYeb/CFkSx\r\n' + - '1hOytD3YBKoaKKoYagaMQcjxf6HnEF0f/5OiQkUQpWmgC9lNnE4XTWjnwqaTS5L9\r\n' + - 'D+H50SiI3VjHymGXTRJeKpAIwV74AxxrnVofqsUCgYAwmL1B2adm9g/c7fQ6yatg\r\n' + - 'hEhBrSuEaTMzmsUfNPfr2m4zrffjWH4WMqBtYRSPn4fDMHTPJ+eThtfXSqutxtCi\r\n' + - 'ekpP9ywdNIVr6LyP49Ita6Bc+mYVyU8Wj1pmL+yIumjGM0FHbL5Y4/EMKCV/xjvR\r\n' + - '2fD3orHaCIhf6QvzxtjqTwKBgFm6UemXKlMhI94tTsWRMNGEBU3LA9XUBvSuAkpr\r\n' + - 'ZRUwrQssCpXnFinBxbMqXQe3mR8emrM5D8En1P/jdU0BS3t1kP9zG4AwI2lZHuPV\r\n' + - 'ggbKBS2Y9zVtRKXsYcHawM13+nIA/WNjmAGJHrB45UJPy/HNvye+9lbfoEiYKdCR\r\n' + - 'D4bFAoGBAIm9jcZkIwLa9kLAWH995YYYSGRY4KC29XZr2io2mog+BAjhFt1sqebt\r\n' + - 'R8sRHNiIP2mcUECMOcaS+tcayi+8KTHWxIEed9qDmFu6XBbePfe/L6yxPSagcixH\r\n' + - 'BK0KuK/fgTPvZCmIs8hUIC+AxhXKnqn4fIWoO54xLsALc0gEjs2d\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - encryptedData: '-----BEGIN PKCS7-----\r\n' + - 'MIGHBgkqhkiG9w0BBwagejB4AgEAMHMGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQI\r\n' + - 'upMFou5X3DWAUAqObuHSlewM0ZtHzWk9MAmtYb7MSb//OBMKVfLCdbmrS5BpKm9J\r\n' + - 'gzwiDR5Od7xgfkqasLS2lOdKAvJ5jZjjTpAyrjBKpShqK9gtXDuO0zH+\r\n' + - '-----END PKCS7-----\r\n', - p7IndefiniteLength: '-----BEGIN PKCS7-----\r\n' + - 'MIAGCSqGSIb3DQEHA6CAMIACAQAxggHGMIIBwgIBADCBqTCBmzELMAkGA1UEBhMC\r\n' + - 'REUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEVMBMGA1UE\r\n' + - 'CgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNVBAMMDUdl\r\n' + - 'aWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5waXBlLmRl\r\n' + - 'AgkA1FQcQNg14vMwDQYJKoZIhvcNAQEBBQAEggEAlWCH+E25c4jfff+m0eAxxMmE\r\n' + - 'WWaftdsk4ZpAVAr7HsvxJ35bj1mhwTh7rBTg929JBKt6ZaQ4I800jCNxD2O40V6z\r\n' + - 'lB7JNRqzgBwfeuU2nV6FB7v1984NBi1jQx6EfxOcusE6RL/63HqJdFbmq3Tl55gF\r\n' + - 'dm3JdjmHbCXqwPhuwOXU4yhkpV1RJcrYhPLe3OrLAH7ZfoE0nPJPOX9HPTZ6ReES\r\n' + - 'NToS7I9D9k7rCa8fAP7pgjO96GJGBtCHG1VXB9NX4w+xRDbgVPOeHXqqxwZhqpW2\r\n' + - 'usBU4+B+MnFLjquOPoySXFfdJFwTP61TPClUdyIne5FFP6EYf98mdtnkjxHo1TCA\r\n' + - 'BgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECFNtpqBmU3M9oIAESM+yyQLkreETS0Kc\r\n' + - 'o01yl6dqqNBczH5FNTK88ypz38/jzjo47+DURlvGzjHJibiDsCz9KyiVmgbRrtvH\r\n' + - '08rfnMbrU+grCkkx9wQI1GnLrYhr87oAAAAAAAAAAAAA\r\n' + - '-----END PKCS7-----\r\n', - p73des: '-----BEGIN PKCS7-----\r\n' + - 'MIICTQYJKoZIhvcNAQcDoIICPjCCAjoCAQAxggHGMIIBwgIBADCBqTCBmzELMAkG\r\n' + - 'A1UEBhMCREUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEV\r\n' + - 'MBMGA1UECgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNV\r\n' + - 'BAMMDUdlaWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5w\r\n' + - 'aXBlLmRlAgkA1FQcQNg14vMwDQYJKoZIhvcNAQEBBQAEggEAS6K+sQvdKcK6YafJ\r\n' + - 'maDPjBzyjf5jtBgVrFgBXTCRIp/Z2zAXa70skfxhbwTgmilYTacA7jPGRrnLmvBc\r\n' + - 'BjhyCKM3dRUyYgh1K1ka0w1prvLmRk6Onf5df1ZQn3AJMIujJZcCOhbV1ByLInve\r\n' + - 'xn02KNHstGmdHM/JGyPCp+iYGprhUozVSpNCKS+R33EbsT0sAxamfqdAblT9+5Qj\r\n' + - '4CABvW11a1clPV7STwBbAKbZaLs8mDeoWP0yHvBtJ7qzZdSgJJA2oU7SDv4icwEe\r\n' + - 'Ahccbe2HWkLRw8G5YG9XcWx5PnQQhhnXMxkLoSMIYxItyL/cRORbpDohd+otAo66\r\n' + - 'WLH1ODBrBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECD5EWJMv1fd7gEj1w3WM1KsM\r\n' + - 'L8GDk9JoqA8t9v3oXCT0nAMXoNpHZMnv+0UHHVljlSXBTQxwUP5VMY/ddquJ5O3N\r\n' + - 'rDEqqJuHB+KPIsW1kxrdplU=\r\n' + - '-----END PKCS7-----\r\n' - }; - - describe('pkcs7', function() { - it('should import message from PEM', function() { - var p7 = PKCS7.messageFromPem(_pem.p7); - - ASSERT.equal(p7.type, PKI.oids.envelopedData); - ASSERT.equal(p7.version, 0); - - ASSERT.equal(p7.recipients.length, 1); - ASSERT.equal(p7.recipients[0].version, 0); - ASSERT.equal(p7.recipients[0].serialNumber, '00d4541c40d835e2f3'); - - // Test converted RDN, which is constructed of seven parts. - ASSERT.equal(p7.recipients[0].issuer.length, 7); - ASSERT.equal(p7.recipients[0].issuer[0].type, '2.5.4.6'); - ASSERT.equal(p7.recipients[0].issuer[0].value, 'DE'); - ASSERT.equal(p7.recipients[0].issuer[1].type, '2.5.4.8'); - ASSERT.equal(p7.recipients[0].issuer[1].value, 'Franconia'); - ASSERT.equal(p7.recipients[0].issuer[2].type, '2.5.4.7'); - ASSERT.equal(p7.recipients[0].issuer[2].value, 'Ansbach'); - ASSERT.equal(p7.recipients[0].issuer[3].type, '2.5.4.10'); - ASSERT.equal(p7.recipients[0].issuer[3].value, 'Stefan Siegl'); - ASSERT.equal(p7.recipients[0].issuer[4].type, '2.5.4.11'); - ASSERT.equal(p7.recipients[0].issuer[4].value, 'Geierlein'); - ASSERT.equal(p7.recipients[0].issuer[5].type, '2.5.4.3'); - ASSERT.equal(p7.recipients[0].issuer[5].value, 'Geierlein DEV'); - ASSERT.equal(p7.recipients[0].issuer[6].type, '1.2.840.113549.1.9.1'); - ASSERT.equal(p7.recipients[0].issuer[6].value, 'stesie@brokenpipe.de'); - - ASSERT.equal(p7.recipients[0].encryptedContent.algorithm, PKI.oids.rsaEncryption); - ASSERT.equal(p7.recipients[0].encryptedContent.content.length, 256); - - ASSERT.equal(p7.encryptedContent.algorithm, PKI.oids['aes256-CBC']); - ASSERT.equal(p7.encryptedContent.parameter.data.length, 16); // IV - }); - - it('should import indefinite length message from PEM', function() { - ASSERT.doesNotThrow(function() { - var p7 = PKCS7.messageFromPem(_pem.p7IndefiniteLength); - ASSERT.equal(p7.type, PKI.oids.envelopedData); - ASSERT.equal(p7.encryptedContent.parameter.toHex(), '536da6a06653733d'); - ASSERT.equal(p7.encryptedContent.content.length(), 80); - }); - }); - - it('should find recipient by serial number', function() { - var p7 = PKCS7.messageFromPem(_pem.p7); - var cert = PKI.certificateFromPem(_pem.certificate); - - var ri = p7.findRecipient(cert); - ASSERT.equal(ri.serialNumber, '00d4541c40d835e2f3'); - - // modify certificate so it doesn't match recipient any more - cert.serialNumber = '1234567890abcdef42'; - ri = p7.findRecipient(cert); - ASSERT.equal(ri, null); - }); - - it('should aes-decrypt message', function() { - var p7 = PKCS7.messageFromPem(_pem.p7); - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - p7.decrypt(p7.recipients[0], privateKey); - - // symmetric key must be 32 bytes long (AES 256 key) - ASSERT.equal(p7.encryptedContent.key.data.length, 32); - ASSERT.equal( - p7.content, - 'Today is Boomtime, the 9th day of Discord in the YOLD 3178\r\n'); - }); - - it('should 3des-decrypt message', function() { - var p7 = PKCS7.messageFromPem(_pem.p73des); - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - p7.decrypt(p7.recipients[0], privateKey); - - // symmetric key must be 24 bytes long (DES3 key) - ASSERT.equal(p7.encryptedContent.key.data.length, 24); - ASSERT.equal( - p7.content, - 'Today is Prickle-Prickle, ' + - 'the 16th day of Discord in the YOLD 3178\r\n'); - }); - - it('should add a recipient', function() { - var p7 = PKCS7.createEnvelopedData(); - - // initially there should be no recipients - ASSERT.equal(p7.recipients.length, 0); - - var cert = PKI.certificateFromPem(_pem.certificate); - p7.addRecipient(cert); - - ASSERT.equal(p7.recipients.length, 1); - ASSERT.deepEqual(p7.recipients[0].serialNumber, cert.serialNumber); - ASSERT.deepEqual(p7.recipients[0].issuer, cert.subject.attributes); - ASSERT.deepEqual(p7.recipients[0].encryptedContent.key, cert.publicKey); - }); - - it('should aes-encrypt a message', function() { - var p7 = PKCS7.createEnvelopedData(); - var cert = PKI.certificateFromPem(_pem.certificate); - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - - p7.addRecipient(cert); - p7.content = UTIL.createBuffer('Just a little test'); - - // pre-condition, PKCS#7 module should default to AES-256-CBC - ASSERT.equal(p7.encryptedContent.algorithm, PKI.oids['aes256-CBC']); - p7.encrypt(); - - // since we did not provide a key, a random key should have been created - // automatically, AES256 requires 32 bytes of key material - ASSERT.equal(p7.encryptedContent.key.data.length, 32); - - // furthermore an IV must be generated, AES256 has 16 byte IV - ASSERT.equal(p7.encryptedContent.parameter.data.length, 16); - - // content is 18 bytes long, AES has 16 byte blocksize, - // with padding that makes 32 bytes - ASSERT.equal(p7.encryptedContent.content.data.length, 32); - - // RSA encryption should yield 256 bytes - ASSERT.equal(p7.recipients[0].encryptedContent.content.length, 256); - - // rewind Key & IV - p7.encryptedContent.key.read = 0; - p7.encryptedContent.parameter.read = 0; - - // decryption of the asym. encrypted data should reveal the symmetric key - var decryptedKey = privateKey.decrypt( - p7.recipients[0].encryptedContent.content); - ASSERT.equal(decryptedKey, p7.encryptedContent.key.data); - - // decryption of sym. encrypted data should reveal the content - var ciph = AES.createDecryptionCipher(decryptedKey); - ciph.start(p7.encryptedContent.parameter); - ciph.update(p7.encryptedContent.content); - ciph.finish(); - ASSERT.equal(ciph.output, 'Just a little test'); - }); - - it('should 3des-ede-encrypt a message', function() { - var p7 = PKCS7.createEnvelopedData(); - var cert = PKI.certificateFromPem(_pem.certificate); - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - - p7.addRecipient(cert); - p7.content = UTIL.createBuffer('Just a little test'); - p7.encryptedContent.algorithm = PKI.oids['des-EDE3-CBC']; - p7.encrypt(); - - // since we did not provide a key, a random key should have been created - // automatically, 3DES-EDE requires 24 bytes of key material - ASSERT.equal(p7.encryptedContent.key.data.length, 24); - - // furthermore an IV must be generated, DES3 has 8 byte IV - ASSERT.equal(p7.encryptedContent.parameter.data.length, 8); - - // content is 18 bytes long, DES has 8 byte blocksize, - // with padding that makes 24 bytes - ASSERT.equal(p7.encryptedContent.content.data.length, 24); - - // RSA encryption should yield 256 bytes - ASSERT.equal(p7.recipients[0].encryptedContent.content.length, 256); - - // rewind Key & IV - p7.encryptedContent.key.read = 0; - p7.encryptedContent.parameter.read = 0; - - // decryption of the asym. encrypted data should reveal the symmetric key - var decryptedKey = privateKey.decrypt( - p7.recipients[0].encryptedContent.content); - ASSERT.equal(decryptedKey, p7.encryptedContent.key.data); - - // decryption of sym. encrypted data should reveal the content - var ciph = DES.createDecryptionCipher(decryptedKey); - ciph.start(p7.encryptedContent.parameter); - ciph.update(p7.encryptedContent.content); - ciph.finish(); - ASSERT.equal(ciph.output, 'Just a little test'); - }); - - it('should export message to PEM', function() { - var p7 = PKCS7.createEnvelopedData(); - p7.addRecipient(PKI.certificateFromPem(_pem.certificate)); - p7.content = UTIL.createBuffer('Just a little test'); - p7.encrypt(); - - var pem = PKCS7.messageToPem(p7); - - // convert back from PEM to new PKCS#7 object, decrypt, and test - p7 = PKCS7.messageFromPem(pem); - p7.decrypt(p7.recipients[0], PKI.privateKeyFromPem(_pem.privateKey)); - ASSERT.equal(p7.content, 'Just a little test'); - }); - - it('should decrypt encrypted data from PEM', function() { - var result = '1f8b08000000000000000b2e494d4bcc5308ce4c4dcfd15130b0b430d4b7343732b03437d05170cc2b4e4a4cced051b034343532d25170492d2d294ecec849cc4b0100bf52f02437000000'; - var key = 'b96e4a4c0a3555d31e1b295647cc5cfe74081918cb7f797b'; - key = UTIL.createBuffer(UTIL.hexToBytes(key)); - - ASSERT.doesNotThrow(function() { - var p7 = PKCS7.messageFromPem(_pem.encryptedData); - ASSERT.equal(p7.type, PKI.oids.encryptedData); - ASSERT.equal(p7.encryptedContent.algorithm, PKI.oids['des-EDE3-CBC']); - ASSERT.equal(p7.encryptedContent.parameter.toHex(), 'ba9305a2ee57dc35'); - ASSERT.equal(p7.encryptedContent.content.length(), 80); - - p7.decrypt(key); - ASSERT.equal(p7.content.toHex(), result); - }); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pkcs7', - 'forge/pki', - 'forge/aes', - 'forge/des', - 'forge/util' - ], function(PKCS7, PKI, AES, DES, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - PKCS7(), - PKI(), - AES(), - DES(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pkcs7')(), - require('../../js/pki')(), - require('../../js/aes')(), - require('../../js/des')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/random.js b/includes/external/school/node_modules/node-forge/nodejs/test/random.js deleted file mode 100644 index efeec2b..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/random.js +++ /dev/null @@ -1,70 +0,0 @@ -(function() { - -function Tests(ASSERT, RANDOM, UTIL) { - var random = RANDOM(); - - describe('random', function() { - it('should generate 10 random bytes', function() { - random.getBytes(16); - random.getBytes(24); - random.getBytes(32); - - var b = random.getBytes(10); - ASSERT.equal(b.length, 10); - }); - - it('should use a synchronous seed file', function() { - var rand = RANDOM(); - rand.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - var b = rand.getBytes(10); - ASSERT.equal(UTIL.bytesToHex(b), '80a7901a239c3e606319'); - }); - - it('should use an asynchronous seed file', function(done) { - var rand = RANDOM(); - rand.seedFile = function(needed, callback) { - callback(null, UTIL.fillString('a', needed)); - }; - rand.getBytes(10, function(err, b) { - ASSERT.equal(err, null); - ASSERT.equal(UTIL.bytesToHex(b), '80a7901a239c3e606319'); - done(); - }); - }); - - it('should collect some random bytes', function() { - var rand = RANDOM(); - rand.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - rand.collect('bbb'); - var b = rand.getBytes(10); - ASSERT.equal(UTIL.bytesToHex(b), 'ff8d213516047c94ca46'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/random', - 'forge/util' - ], function(RANDOM, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - RANDOM, - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/random'), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/rc2.js b/includes/external/school/node_modules/node-forge/nodejs/test/rc2.js deleted file mode 100644 index 2acbe7b..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/rc2.js +++ /dev/null @@ -1,109 +0,0 @@ -(function() { - -function Tests(ASSERT, RC2, UTIL) { - describe('rc2', function() { - it('should expand a 128-bit key', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var expect = '71ab26462f0b9333609d4476e48ab72438c2194b70a47085d84b6af1dc72119023b94fe80aee2b6b45f27f923d9be1570da3ce8b16ad7f78db166ffbc28a836a4392cf0b748085dae4b69bdc2a4679cdfc09d84317016987e0c5b765c91dc612b1f44d7921b3e2c46447508bd2ac02e119e0f42a89c719675da320cf3e8958cd'; - ASSERT.equal(RC2.expandKey(key).toHex(), expect); - }); - - it('should expand a 40-bit key', function() { - var key = UTIL.hexToBytes('88bca90e90'); - var expect = 'af136d2243b94a0878d7a604f8d6d9fd64a698fd6ebc613e641f0d1612055ef6cb55966db8f32bfd9246dae99880be8a91433adf54ea546d9daad62db7a55f6c7790aa87ba67de0e9ea9128dfc7ccdddd7c47c33d2bb7f823729977f083b5dc1f5bb09000b98e12cdaaf22f80dcc88c37d2c2fd80402f8a30a9e41d356669471'; - ASSERT.equal(RC2.expandKey(key, 40).toHex(), expect); - }); - - it('should rc2-ecb encrypt zeros', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var input = new UTIL.createBuffer().fillWithByte(0, 8); - var cipher = RC2.startEncrypting(key, null, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '2269552ab0f85ca6e35b3b2ce4e02191'); - }); - - it('should rc2-ecb encrypt: vegan', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var input = new UTIL.createBuffer('vegan'); - var cipher = RC2.startEncrypting(key, null, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '2194adaf4d517e3a'); - }); - - it('should rc2-ecb decrypt: 2194adaf4d517e3a', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var input = new UTIL.createBuffer(UTIL.hexToBytes('2194adaf4d517e3a')); - var cipher = RC2.startDecrypting(key, null, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output.getBytes(), 'vegan'); - }); - - it('should rc2-cbc encrypt: revolution', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var iv = new UTIL.createBuffer(UTIL.hexToBytes('0123456789abcdef')); - var input = new UTIL.createBuffer('revolution'); - var cipher = RC2.startEncrypting(key, iv, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '50cfd16e0fd7f20b17a622eb2a469b7e'); - }); - - it('should rc2-cbc decrypt: 50cfd16e0fd7f20b17a622eb2a469b7e', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var iv = new UTIL.createBuffer(UTIL.hexToBytes('0123456789abcdef')); - var input = new UTIL.createBuffer( - UTIL.hexToBytes('50cfd16e0fd7f20b17a622eb2a469b7e')); - var cipher = RC2.startDecrypting(key, iv, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output, 'revolution'); - }); - - it('should rc2-cbc encrypt w/binary string iv: revolution', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var iv = UTIL.hexToBytes('0123456789abcdef'); - var input = new UTIL.createBuffer('revolution'); - var cipher = RC2.startEncrypting(key, iv, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output.toHex(), '50cfd16e0fd7f20b17a622eb2a469b7e'); - }); - - it('should rc2-cbc decrypt w/binary string iv: 50cfd16e0fd7f20b17a622eb2a469b7e', function() { - var key = UTIL.hexToBytes('88bca90e90875a7f0f79c384627bafb2'); - var iv = UTIL.hexToBytes('0123456789abcdef'); - var input = new UTIL.createBuffer( - UTIL.hexToBytes('50cfd16e0fd7f20b17a622eb2a469b7e')); - var cipher = RC2.startDecrypting(key, iv, null); - cipher.update(input); - cipher.finish(); - ASSERT.equal(cipher.output, 'revolution'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/rc2', - 'forge/util' - ], function(RC2, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - RC2(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/rc2')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/rsa.js b/includes/external/school/node_modules/node-forge/nodejs/test/rsa.js deleted file mode 100644 index 434d7a3..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/rsa.js +++ /dev/null @@ -1,602 +0,0 @@ -(function() { - -function Tests(ASSERT, PKI, RSA, MD, MGF, PSS, RANDOM, UTIL) { - var _pem = { - privateKey: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICXQIBAAKBgQDL0EugUiNGMWscLAVM0VoMdhDZEJOqdsUMpx9U0YZI7szokJqQ\r\n' + - 'NIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMGTkP3VF29vXBo+dLq5e+8VyAy\r\n' + - 'Q3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGtvnM+z0MYDdKo80efzwIDAQAB\r\n' + - 'AoGAIzkGONi5G+JifmXlLJdplom486p3upf4Ce2/7mqfaG9MnkyPSairKD/JXvfh\r\n' + - 'NNWkkN8DKKDKBcVVElPgORYT0qwrWc7ueLBMUCbRXb1ZyfEulimG0R3kjUh7NYau\r\n' + - 'DaIkVgfykXGSQMZx8FoaT6L080zd+0emKDDYRrb+/kgJNJECQQDoUZoiC2K/DWNY\r\n' + - 'h3/ppZ0ane2y4SBmJUHJVMPQ2CEgxsrJTxet668ckNCKaOP/3VFPoWC41f17DvKq\r\n' + - 'noYINNntAkEA4JbZBZBVUrQFhHlrpXT4jzqtO2RlKZzEq8qmFZfEErxOT1WMyyCi\r\n' + - 'lAQ5gUKardo1Kf0omC8Xq/uO9ZYdED55KwJBALs6cJ65UFaq4oLJiQPzLd7yokuE\r\n' + - 'dcj8g71PLBTW6jPxIiMFNA89nz3FU9wIVp+xbMNhSoMMKqIPVPC+m0Rn260CQQDA\r\n' + - 'I83fWK/mZWUjBM33a68KumRiH238v8XyQxj7+C8i6D8G2GXvkigFAehAkb7LZZd+\r\n' + - 'KLuGFyPlWv3fVWHf99KpAkBQFKk3MRMl6IGJZUEFQe4l5whm8LkGU4acSqv9B3xt\r\n' + - 'qROkCrsFrMPqjuuzEmyHoQZ64r2PLJg7FOuyhBnQUOt4\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - privateKeyInfo: '-----BEGIN PRIVATE KEY-----\r\n' + - 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMvQS6BSI0Yxaxws\r\n' + - 'BUzRWgx2ENkQk6p2xQynH1TRhkjuzOiQmpA0jCiSJDoSic2dZIyUi/LjoCGeVFif\r\n' + - '57N5N5Tt4wZOQ/dUXb29cGj50url77xXIDJDcXMzXAji2ziFEAIXzDqarKBdDuL9\r\n' + - 'IO7z+tepEa2+cz7PQxgN0qjzR5/PAgMBAAECgYAjOQY42Lkb4mJ+ZeUsl2mWibjz\r\n' + - 'qne6l/gJ7b/uap9ob0yeTI9JqKsoP8le9+E01aSQ3wMooMoFxVUSU+A5FhPSrCtZ\r\n' + - 'zu54sExQJtFdvVnJ8S6WKYbRHeSNSHs1hq4NoiRWB/KRcZJAxnHwWhpPovTzTN37\r\n' + - 'R6YoMNhGtv7+SAk0kQJBAOhRmiILYr8NY1iHf+mlnRqd7bLhIGYlQclUw9DYISDG\r\n' + - 'yslPF63rrxyQ0Ipo4//dUU+hYLjV/XsO8qqehgg02e0CQQDgltkFkFVStAWEeWul\r\n' + - 'dPiPOq07ZGUpnMSryqYVl8QSvE5PVYzLIKKUBDmBQpqt2jUp/SiYLxer+471lh0Q\r\n' + - 'PnkrAkEAuzpwnrlQVqrigsmJA/Mt3vKiS4R1yPyDvU8sFNbqM/EiIwU0Dz2fPcVT\r\n' + - '3AhWn7Fsw2FKgwwqog9U8L6bRGfbrQJBAMAjzd9Yr+ZlZSMEzfdrrwq6ZGIfbfy/\r\n' + - 'xfJDGPv4LyLoPwbYZe+SKAUB6ECRvstll34ou4YXI+Va/d9VYd/30qkCQFAUqTcx\r\n' + - 'EyXogYllQQVB7iXnCGbwuQZThpxKq/0HfG2pE6QKuwWsw+qO67MSbIehBnrivY8s\r\n' + - 'mDsU67KEGdBQ63g=\r\n' + - '-----END PRIVATE KEY-----\r\n', - publicKey: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDL0EugUiNGMWscLAVM0VoMdhDZ\r\n' + - 'EJOqdsUMpx9U0YZI7szokJqQNIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMG\r\n' + - 'TkP3VF29vXBo+dLq5e+8VyAyQ3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGt\r\n' + - 'vnM+z0MYDdKo80efzwIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n' - }; - var _signature = - '9200ece65cdaed36bcc20b94c65af852e4f88f0b4fe5b249d54665f815992ac4' + - '3a1399e65d938c6a7f16dd39d971a53ca66523209dbbfbcb67afa579dbb0c220' + - '672813d9e6f4818f29b9becbb29da2032c5e422da97e0c39bfb7a2e7d568615a' + - '5073af0337ff215a8e1b2332d668691f4fb731440055420c24ac451dd3c913f4'; - - describe('rsa', function() { - it('should generate 512 bit key pair', function() { - var pair = RSA.generateKeyPair(512); - ASSERT.equal(PKI.privateKeyToPem(pair.privateKey).indexOf('-----BEGIN RSA PRIVATE KEY-----'), 0); - ASSERT.equal(PKI.publicKeyToPem(pair.publicKey).indexOf('-----BEGIN PUBLIC KEY-----'), 0); - - // sign and verify - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = pair.privateKey.sign(md); - ASSERT.ok(pair.publicKey.verify(md.digest().getBytes(), signature)); - }); - - it('should generate the same 512 bit key pair', function() { - var prng = RANDOM.createInstance(); - prng.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - var pair = RSA.generateKeyPair(512, {prng: prng}); - var pem = { - privateKey: PKI.privateKeyToPem(pair.privateKey), - publicKey: PKI.publicKeyToPem(pair.publicKey) - }; - ASSERT.equal(pem.privateKey.indexOf('-----BEGIN RSA PRIVATE KEY-----'), 0); - ASSERT.equal(pem.publicKey.indexOf('-----BEGIN PUBLIC KEY-----'), 0); - - // sign and verify - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = pair.privateKey.sign(md); - ASSERT.ok(pair.publicKey.verify(md.digest().getBytes(), signature)); - - // create same key pair by using same PRNG - prng = RANDOM.createInstance(); - prng.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - var pair2 = RSA.generateKeyPair(512, {prng: prng}); - var pem2 = { - privateKey: PKI.privateKeyToPem(pair2.privateKey), - publicKey: PKI.publicKeyToPem(pair2.publicKey) - }; - ASSERT.equal(pem.privateKey, pem2.privateKey); - ASSERT.equal(pem.publicKey, pem2.publicKey); - }); - - it('should convert private key to/from PEM', function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - ASSERT.equal(PKI.privateKeyToPem(privateKey), _pem.privateKey); - }); - - it('should convert public key to/from PEM', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - ASSERT.equal(PKI.publicKeyToPem(publicKey), _pem.publicKey); - }); - - it('should convert a PKCS#8 PrivateKeyInfo to/from PEM', function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKeyInfo); - var rsaPrivateKey = PKI.privateKeyToAsn1(privateKey); - var pki = PKI.wrapRsaPrivateKey(rsaPrivateKey); - ASSERT.equal(PKI.privateKeyInfoToPem(pki), _pem.privateKeyInfo); - }); - - (function() { - var algorithms = ['aes128', 'aes192', 'aes256', '3des', 'des']; - for(var i = 0; i < algorithms.length; ++i) { - var algorithm = algorithms[i]; - it('should PKCS#8 encrypt and decrypt private key with ' + algorithm, function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - var encryptedPem = PKI.encryptRsaPrivateKey( - privateKey, 'password', {algorithm: algorithm}); - privateKey = PKI.decryptRsaPrivateKey(encryptedPem, 'password'); - ASSERT.equal(PKI.privateKeyToPem(privateKey), _pem.privateKey); - }); - } - })(); - - (function() { - var algorithms = ['aes128', 'aes192', 'aes256', '3des', 'des']; - for(var i = 0; i < algorithms.length; ++i) { - var algorithm = algorithms[i]; - it('should legacy (OpenSSL style) encrypt and decrypt private key with ' + algorithm, function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - var encryptedPem = PKI.encryptRsaPrivateKey( - privateKey, 'password', {algorithm: algorithm, legacy: true}); - privateKey = PKI.decryptRsaPrivateKey(encryptedPem, 'password'); - ASSERT.equal(PKI.privateKeyToPem(privateKey), _pem.privateKey); - }); - } - })(); - - it('should verify signature', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = UTIL.hexToBytes(_signature); - ASSERT.ok(publicKey.verify(md.digest().getBytes(), signature)); - }); - - it('should sign and verify', function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = privateKey.sign(md); - ASSERT.ok(publicKey.verify(md.digest().getBytes(), signature)); - }); - - it('should generate missing CRT parameters, sign, and verify', function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - - // remove dQ, dP, and qInv - privateKey = RSA.setPrivateKey( - privateKey.n, privateKey.e, privateKey.d, - privateKey.p, privateKey.q); - - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = privateKey.sign(md); - ASSERT.ok(publicKey.verify(md.digest().getBytes(), signature)); - }); - - it('should sign and verify with a private key containing only e, n, and d parameters', function() { - var privateKey = PKI.privateKeyFromPem(_pem.privateKey); - - // remove all CRT parameters from private key, so that it consists - // only of e, n and d (which make a perfectly valid private key, but its - // operations are slower) - privateKey = RSA.setPrivateKey( - privateKey.n, privateKey.e, privateKey.d); - - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var md = MD.sha1.create(); - md.update('0123456789abcdef'); - var signature = privateKey.sign(md); - ASSERT.ok(publicKey.verify(md.digest().getBytes(), signature)); - }); - - (function() { - var tests = [{ - keySize: 1024, - privateKeyPem: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICWwIBAAKBgQDCjvkkLWNTeYXqEsqGiVCW/pDt3/qAodNMHcU9gOU2rxeWwiRu\r\n' + - 'OhhLqmMxXHLi0oP5Xmg0m7zdOiLMEyzzyRzdp21aqp3k5qtuSDkZcf1prsp1jpYm\r\n' + - '6z9EGpaSHb64BCuUsQGmUPKutd5RERKHGZXtiRuvvIyue7ETq6VjXrOUHQIDAQAB\r\n' + - 'AoGAOKeBjTNaVRhyEnNeXkbmHNIMSfiK7aIx8VxJ71r1ZDMgX1oxWZe5M29uaxVM\r\n' + - 'rxg2Lgt7tLYVDSa8s0hyMptBuBdy3TJUWruDx85uwCrWnMerCt/iKVBS22fv5vm0\r\n' + - 'LEq/4gjgIVTZwgqbVxGsBlKcY2VzxAfYqYzU8EOZBeNhZdECQQDy+PJAPcUN2xOs\r\n' + - '6qy66S91x6y3vMjs900OeX4+bgT4VSVKmLpqRTPizzcL07tT4+Y+pAAOX6VstZvZ\r\n' + - '6iFDL5rPAkEAzP1+gaRczboKoJWKJt0uEMUmztcY9NXJFDmjVLqzKwKjcAoGgIal\r\n' + - 'h+uBFT9VJ16QajC7KxTRLlarzmMvspItUwJAeUMNhEpPwm6ID1DADDi82wdgiALM\r\n' + - 'NJfn+UVhYD8Ac//qsKQwxUDseFH6owh1AZVIIBMxg/rwUKUCt2tGVoW3uQJAIt6M\r\n' + - 'Aml/D8+xtxc45NuC1n9y1oRoTl1/Ut1rFyKbD5nnS0upR3uf9LruvjqDtaq0Thvz\r\n' + - '+qQT4RoFJ5pfprSO2QJAdMkfNWRqECfAhZyQuUrapeWU3eQ0wjvktIynCIwiBDd2\r\n' + - 'MfjmVXzBJhMk6dtINt+vBEITVQEOdtyTgDt0y3n2Lw==\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKeyPem: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCjvkkLWNTeYXqEsqGiVCW/pDt\r\n' + - '3/qAodNMHcU9gOU2rxeWwiRuOhhLqmMxXHLi0oP5Xmg0m7zdOiLMEyzzyRzdp21a\r\n' + - 'qp3k5qtuSDkZcf1prsp1jpYm6z9EGpaSHb64BCuUsQGmUPKutd5RERKHGZXtiRuv\r\n' + - 'vIyue7ETq6VjXrOUHQIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n', - encrypted: 'jsej3OoacmJ1VjWrlw68F+drnQORAuKAqVu6RMbz1xSXjzA355vctrJZXolRU0mvzuu/6VuNynkKGGyRJ6DHt85CvwTMChw4tOMV4Dy6bgnUt3j+DZA2sWTwFhOlpzvNQMK70QpuqrXtOZmAO59EwoDeJkW/iH6t4YzNOVYo9Jg=', - signature: 'GT0/3EV2zrXxPd1ydijJq3R7lkI4c0GtcprgpG04dSECv/xyXtikuzivxv7XzUdHpu6QiYmM0xE4D4i7LK3Mzy+f7aB4o/dg8XXO3htLiBzVI+ZJCRh06RdYctPtclAWmyZikZ8Etw3NnA/ldKuG4jApbwRb21UFm5gYLrJ4SP4=', - signaturePss: 'F4xffaANDBjhFxeSJx8ANuBbdhaWZjUHRQh4ueYQMPPCaR2mpwdqxE04sbgNgIiZzBuLIAI4HpTMMoDk3Rruhjefx3+9UhzTxgB0hRI+KzRChRs+ToltWWDZdYzt9T8hfTlELeqT4V8HgjDuteO/IAvIVlRIBwMNv53Iebu1FY4=', - signatureWithAbcSalt: 'GYA/Zp8G+jqG2Fu7Um+XP7Cr/yaVdzJN8lyt57Lw6gFflia2CPbOVMLyqLzD7fKoE8UD0Rc6DF8k04xhEu60sudw2nxGHeDvpL4M9du0uYra/WSr9kv7xNjAW62NyNerDngHD2J7O8gQ07TZiTXkrfS724vQab5xZL/+FhvisMY=', - signatureWithCustomPrng: 'LzWcUpUYK+URDp72hJbz1GVEp0rG0LHjd+Pdh2w5rfQFbUThbmXDl3X6DUT5UZr5RjUSHtc2usvH+w49XskyIJJO929sUk9EkMJMK/6QAnYYEp5BA+48pdGNNMZyjIbhyl9Y4lInzFPX8XYMM8o+tdSK+hj+dW5OPdnwWbDtR7U=' - }, { - keySize: 1025, - privateKeyPem: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICXgIBAAKBgQGIkej4PDlAigUh5fbbHp1WXuTHhOdQfAke+LoH0TM4uzn0QmgK\r\n' + - 'SJqxzB1COJ5o0DwZw/NR+CNy7NUrly+vmh2YPwsaqN+AsYBF9qsF93oN8/TBtaL/\r\n' + - 'GRoRGpDcCglkj1kZnDaWR79NsG8mC0TrvQCkcCLOP0c2Ux1hRbntOetGXwIDAQAB\r\n' + - 'AoGBAIaJWsoX+ZcAthmT8jHOICXFh6pJBe0zVPzkSPz82Q0MPSRUzcsYbsuYJD7Z\r\n' + - 'oJBTLQW3feANpjhwqe2ydok7y//ONm3Th53Bcu8jLfoatg4KYxNFIwXEO10mPOld\r\n' + - 'VuDIGrBkTABe6q2P5PeUKGCKLT6i/u/2OTXTrQiJbQ0gU8thAkEBjqcFivWMXo34\r\n' + - 'Cb9/EgfWCCtv9edRMexgvcFMysRsbHJHDK9JjRLobZltwtAv3cY7F3a/Cu1afg+g\r\n' + - 'jAzm5E3gowJBAPwYFHTLzaZToxFKNQztWrPsXF6YfqHpPUUIpT4UzL6DhGG0M00U\r\n' + - 'qMyhkYRRqmGOSrSovjg2hjM2643MUUWxUxUCQDPkk/khu5L3YglKzyy2rmrD1MAq\r\n' + - 'y0v3XCR3TBq89Ows+AizrJxbkLvrk/kfBowU6M5GG9o9SWFNgXWZnFittocCQQDT\r\n' + - 'e1P1419DUFi1UX6NuLTlybx3sxBQvf0jY6xUF1jn3ib5XBXJbTJqcIRF78iyjI9J\r\n' + - 'XWIugDc20bTsQOJRSAA9AkEBU8kpueHBaiXTikqqlK9wvc2Lp476hgyKVmVyBGye\r\n' + - '9TLTWkTCzDPtManLy47YtXkXnmyazS+DlKFU61XAGEnZfg==\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKeyPem: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQGIkej4PDlAigUh5fbbHp1WXuTH\r\n' + - 'hOdQfAke+LoH0TM4uzn0QmgKSJqxzB1COJ5o0DwZw/NR+CNy7NUrly+vmh2YPwsa\r\n' + - 'qN+AsYBF9qsF93oN8/TBtaL/GRoRGpDcCglkj1kZnDaWR79NsG8mC0TrvQCkcCLO\r\n' + - 'P0c2Ux1hRbntOetGXwIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n', - encrypted: 'AOVeCUN8BOVkZvt4mxyNn/yCYE1MZ40A3e/osh6EvCBcJ09hyYbx7bzKSrdkhRnDyW0pGtgP352CollasllQZ9HlfI2Wy9zKM0aYZZn8OHBA+60Tc3xHHDGznLZqggUKuhoNpj+faVZ1uzb285eTpQQa+4mLUue2svJD4ViM8+ng', - signature: 'AFSx0axDYXlF2rO3ofgUhYSI8ZlIWtJUUZ62PhgdBp9O5zFqMX3DXoiov1e7NenSOz1khvTSMctFWzKP3GU3F0yewe+Yd3UAZE0dM8vAxigSSfAchUkBDmp9OFuszUie63zwWwpG+gXtvyfueZs1RniBvW1ZmXJvS+HFgX4ouzwd', - signaturePss: 'AQvBdhAXDpu+7RpcybMgwuTUk6w+qa08Lcq3G1xHY4kC7ZUzauZd/Jn9e0ePKApDqs7eDNAOV+dQkU2wiH/uBg6VGelzb0hFwcpSLyBW92Vw0q3GlzY7myWn8qnNzasrt110zFflWQa1GiuzH/C8f+Z82/MzlWDxloJIYbq2PRC8', - signatureWithAbcSalt: 'AW4bKnG/0TGvAZgqX5Dk+fXpUNgX7INFelE46d3m+spaMTG5XalY0xP1sxWfaE/+Zl3FmZcfTNtfOCo0eNRO1h1+GZZfp32ZQZmZvkdUG+dUQp318LNzgygrVf/5iIX+QKV5/soSDuAHBzS7yDfMgzJfnXNpFE/zPLOgZIoOIuLq', - signatureWithCustomPrng: 'AVxfCyGC/7Y3kz//eYFEuWQijjR7eR05AM36CwDlLsVkDRtXoeVzz2yTFBdP+i+QgQ73C/I3lLtvXTwfleorvIX9YncVBeGDQXssmULxzqsM3izaLfJXCRAGx9ErL1Az10+fAqPZpq954OVSDqrR/61Q7CsMY7CiQO3nfIIaxgVL' - }, { - keySize: 1031, - privateKeyPem: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICXwIBAAKBgWyeKqA2oA4klYrKT9hjjutYQksJNN0cxwaQwIm9AYiLxOsYtT/C\r\n' + - 'ovJx5Oy1EvkbYQbfvYsGISUx9bW8yasZkTHR55IbW3+UptvQjTDtdxBQTgQOpsAh\r\n' + - 'BJtZYY3OmyH9Sj3F3oB//oyriNoj0QYyfsvlO8UsMmLzpnf6qfZBDHA/9QIDAQAB\r\n' + - 'AoGBBj/3ne5muUmbnTfU7lOUNrCGaADonMx6G0ObAJHyk6PPOePbEgcmDyNEk+Y7\r\n' + - 'aEAODjIzmttIbvZ39/Qb+o9nDmCSZC9VxiYPP+rjOzPglCDT5ks2Xcjwzd3If6Ya\r\n' + - 'Uw6P31Y760OCYeTb4Ib+8zz5q51CkjkdX5Hq/Yu+lZn0Vx7BAkENo83VfL+bwxTm\r\n' + - 'V7vR6gXqTD5IuuIGHL3uTmMNNURAP6FQDHu//duipys83iMChcOeXtboE16qYrO0\r\n' + - '9KC0cqL4JQJBB/aYo/auVUGZA6f50YBp0b2slGMk9TBQG0iQefuuSyH4kzKnt2e3\r\n' + - 'Q40SBmprcM+DfttWJ11bouec++goXjz+95ECQQyiTWYRxulgKVuyqCYnvpLnTEnR\r\n' + - '0MoYlVTHBriVPkLErYaYCYgse+SNM1+N4p/Thv6KmkUcq/Lmuc5DSRfbl1iBAkEE\r\n' + - '7GKtJQvd7EO1bfpXnARQx+tWhwHHkgpFBBVHReMZ0rQEFhJ5o2c8HZEiZFNvGO2c\r\n' + - '1fErP14zlu2JFZ03vpCI8QJBCQz9HL28VNjafSAF2mon/SNjKablRjoGGKSoSdyA\r\n' + - 'DHDZ/LeRsTp2dg8+bSiG1R+vPqw0f/BT+ux295Sy9ocGEM8=\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKeyPem: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgWyeKqA2oA4klYrKT9hjjutYQksJ\r\n' + - 'NN0cxwaQwIm9AYiLxOsYtT/CovJx5Oy1EvkbYQbfvYsGISUx9bW8yasZkTHR55Ib\r\n' + - 'W3+UptvQjTDtdxBQTgQOpsAhBJtZYY3OmyH9Sj3F3oB//oyriNoj0QYyfsvlO8Us\r\n' + - 'MmLzpnf6qfZBDHA/9QIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n', - encrypted: 'ShSS4/fEAkuS6XiQakhOpWp82IXaaCaDNtsndU4uokvriqgCGZyqc+IkIk3eVmZ8bn4vVIRR43ydFuvGgsptVjizOdLGZudph3TJ1clcYEMcCXk4z5HaEu0bx5SW9jmzHhE/z+WV8PB48q7y7C2qtmPmfttG2NMsNLBvkiaDopRO', - signature: 'Z3vYgRdezrWmdA3NC1Uz2CcHRTcE+/C2idGZA1FjUGqFztAHQ31k0QW/F5zuJdKvg8LQU45S3KxW+OQpbGPL98QbzJLhml88mFGe6OinLXJbi7UQWrtXwamc2jMdiXwovSLbXaXy6PX2QW089iC8XuAZftVi3T/IKV0458FQQprg', - signaturePss: 'R6QsK6b3QinIPZPamm/dP0Zndqti1TzAkFTRSZJaRSa1u2zuvZC5QHF4flDjEtHosWeDyxrBE7PHGQZ0b1bHv9qgHGsJCMwaQPj3AWj9fjYmx7b86KM2vHr8q/vqDaa9pTvVRSSwvD6fwoZPc9twQEfdjdDBAiy23yLDzk/zZiwM', - signatureWithAbcSalt: 'Ep9qx4/FPNcWTixWhvL2IAyJR69o5I4MIJi3cMAhDmpuTvAaL/ThQwFWkBPPOPT4Jbumnu6ELjPNjo72wa00e5k64qnZgy1pauBPMlXRlKehRc9UJZ6+xot642z8Qs+rt89OgbYTsvlyr8lzXooUHz/lPpfawYCqd7maRMs8YlYM', - signatureWithCustomPrng: 'NHAwyn2MdM5ez/WbDNbu2A2JNS+cRiWk/zBoh0lg3aq/RsBS0nrYr4AGiC5jt6KWVcN4AIVOomYtX2k+MhLoemN2t2rDj/+LXOeU7kgCAz0q0ED2NFQz7919JU+PuYXMy03qTMfl5jbvStdi/00eQHjJKGEH+xAgrDcED2lrhtCu' - }, { - keySize: 1032, - privateKeyPem: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICYQIBAAKBggDPhzn5I3GecxWt5DKbP+VhM2AFNSOL0+VbYEOR1hnlZdLbxGK4\r\n' + - 'cPQzMr2qT6dyttJcsgWr3xKobPkz7vsTZzQATSiekm5Js5dGpaj5lrq/x2+WTZvn\r\n' + - '55x9M5Y5dlpusDMKcC3KaIX/axc+MbvPFzo6Eli7JLCWdBg01eKo30knil0CAwEA\r\n' + - 'AQKBggCNl/sjFF7SOD1jbt5kdL0hi7cI9o+xOLs1lEGmAEmc7dNnZN/ibhb/06/6\r\n' + - 'wuxB5aEz47bg5IvLZMbG+1hNjc26D0J6Y3Ltwrg8f4ZMdDrh4v0DZ8hy/HbEpMrJ\r\n' + - 'Td5dk3mtw9FLow10MB5udPLTDKhfDpTcWiObKm2STtFeBk3xeEECQQ6Cx6bZxQJ1\r\n' + - 'zCxflV5Xi8BgAQaUKMqygugte+HpOLflL0j1fuZ0rPosUyDOEFkTzOsPxBYYOU8i\r\n' + - 'Gzan1GvW3WwRAkEOTTRt849wpgC9xx2pF0IrYEVmv5gEMy3IiRfCNgEoBwpTWVf4\r\n' + - 'QFpN3V/9GFz0WQEEYo6OTmkNcC3Of5zbHhu1jQJBBGxXAYQ2KnbP4uLL/DMBdYWO\r\n' + - 'Knw1JvxdLPrYXVejI2MoE7xJj2QXajbirAhEMXL4rtpicj22EmoaE4H7HVgkrJEC\r\n' + - 'QQq2V5w4AGwvW4TLHXNnYX/eB33z6ujScOuxjGNDUlBqHZja5iKkCUAjnl+UnSPF\r\n' + - 'exaOwBrlrpiLOzRer94MylKNAkEBmI58bqfkI5OCGDArAsJ0Ih58V0l1UW35C1SX\r\n' + - '4yDoXSM5A/xQu2BJbXO4jPe3PnDvCVCEyKpbCK6bWbe26Y7zuw==\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKeyPem: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGgMA0GCSqGSIb3DQEBAQUAA4GOADCBigKBggDPhzn5I3GecxWt5DKbP+VhM2AF\r\n' + - 'NSOL0+VbYEOR1hnlZdLbxGK4cPQzMr2qT6dyttJcsgWr3xKobPkz7vsTZzQATSie\r\n' + - 'km5Js5dGpaj5lrq/x2+WTZvn55x9M5Y5dlpusDMKcC3KaIX/axc+MbvPFzo6Eli7\r\n' + - 'JLCWdBg01eKo30knil0CAwEAAQ==\r\n' + - '-----END PUBLIC KEY-----\r\n', - encrypted: 'pKTbv+xgXPDc+wbjsANFu1/WTcmy4aZFKXKnxddHbU5S0Dpdj2OqCACiBwu1oENPMgPAJ27XRbFtKG+eS8tX47mKP2Fo0Bi+BPFtzuQ1bj3zUzTwzjemT+PU+a4Tho/eKjPhm6xrwGAoQH2VEDEpvcYf+SRmGFJpJ/zPUrSxgffj', - signature: 'R9WBFprCfcIC4zY9SmBpEM0E+cr5j4gMn3Ido5mktoR9VBoJqC6eR6lubIPvZZUz9e4yUSYX0squ56Q9Y0yZFQjTHgsrlmhB2YW8kpv4h8P32Oz2TLcMJK9R2tIh9vvyxwBkd/Ml1qG60GnOFUFzxUad9VIlzaF1PFR6EfnkgBUW', - signaturePss: 'v9UBd4XzBxSRz8yhWKjUkFpBX4Fr2G+ImjqbePL4sAZvYw1tWL+aUQpzG8eOyMxxE703VDh9nIZULYI/uIb9HYHQoGYQ3WoUaWqtZg1x8pZP+Ad7ilUWk5ImRl57fTznNQiVdwlkS5Wgheh1yJCES570a4eujiK9OyB0ba4rKIcM', - signatureWithAbcSalt: 'HCm0FI1jE6wQgwwi0ZwPTkGjssxAPtRh6tWXhNd2J2IoJYj9oQMMjCEElnvQFBa/l00sIsw2YV1tKyoTABaSTGV4vlJcDF+K0g/wiAf30TRUZo72DZKDNdyffDlH0wBDkNVW+F6uqdciJqBC6zz+unNh7x+FRwYaY8xhudIPXdyP', - signatureWithCustomPrng: 'AGyN8xu+0yfCR1tyB9mCXcTGb2vdLnsX9ro2Qy5KV6Hw5YMVNltAt65dKR4Y8pfu6D4WUyyJRUtJ8td2ZHYzIVtWY6bG1xFt5rkjTVg4v1tzQgUQq8AHvRE2qLzwDXhazJ1e6Id2Nuxb1uInFyRC6/gLmiPga1WRDEVvFenuIA48' - }]; - for(var i = 0; i < tests.length; ++i) { - createTests(tests[i]); - } - - it('should ensure maximum message length for a 1024-bit key is exceeded', function() { - /* For PKCS#1 v1.5, the message must be padded with at least eight bytes, - two zero bytes and one byte telling what the block type is. This is 11 - extra bytes are added to the message. The test uses a message of 118 - bytes.Together with the 11 extra bytes the encryption block needs to be - at least 129 bytes long. This requires a key of 1025-bits. */ - var key = PKI.publicKeyFromPem(tests[0].publicKeyPem); - var message = UTIL.createBuffer().fillWithByte(0, 118); - ASSERT.throws(function() { - key.encrypt(message.getBytes()); - }); - }); - - it('should ensure maximum message length for a 1025-bit key is not exceeded', function() { - var key = PKI.publicKeyFromPem(tests[1].publicKeyPem); - var message = UTIL.createBuffer().fillWithByte(0, 118); - ASSERT.doesNotThrow(function() { - key.encrypt(message.getBytes()); - }); - }); - - /** - * Creates RSA encryption & decryption tests. - * - * Uses different key sizes (1024, 1025, 1031, 1032). The test functions are - * generated from "templates" below, one for each key size to provide sensible - * output. - * - * Key material in was created with OpenSSL using these commands: - * - * openssl genrsa -out rsa_1024_private.pem 1024 - * openssl rsa -in rsa_1024_private.pem -out rsa_1024_public.pem \ - * -outform PEM -pubout - * echo 'too many secrets' | openssl rsautl -encrypt \ - * -inkey rsa_1024_public.pem -pubin -out rsa_1024_encrypted.bin - * - * echo -n 'just testing' | openssl dgst -sha1 -binary > tosign.sha1 - * openssl pkeyutl -sign -in tosign.sha1 -inkey rsa_1024_private.pem \ - * -out rsa_1024_sig.bin -pkeyopt digest:sha1 - * openssl pkeyutl -sign -in tosign.sha1 -inkey rsa_1024_private.pem \ - * -out rsa_1024_sigpss.bin -pkeyopt digest:sha1 \ - * -pkeyopt rsa_padding_mode:pss -pkeyopt rsa_pss_saltlen:20 - * - * OpenSSL commands for signature verification: - * - * openssl pkeyutl -verify -in tosign.sha1 -sigfile rsa_1024_sig.bin \ - * -pubin -inkey rsa_1024_public.pem -pkeyopt digest:sha1 - * openssl pkeyutl -verify -in tosign.sha1 -sigfile rsa_1025_sigpss.bin \ - * -pubin -inkey rsa_1025_public.pem -pkeyopt digest:sha1 \ - * -pkeyopt rsa_padding_mode:pss -pkeyopt rsa_pss_saltlen:20 - */ - function createTests(params) { - var keySize = params.keySize; - - it('should rsa encrypt using a ' + keySize + '-bit key', function() { - var message = "it need's to be about 20% cooler"; // it need's better grammar too - - /* First step, do public key encryption */ - var key = PKI.publicKeyFromPem(params.publicKeyPem); - var data = key.encrypt(message); - - /* Second step, use private key decryption to verify successful - encryption. The encrypted message differs every time, since it is - padded with random data. Therefore just rely on the decryption - routine to work, which is tested seperately against an externally - provided encrypted message. */ - key = PKI.privateKeyFromPem(params.privateKeyPem); - ASSERT.equal(key.decrypt(data), message); - }); - - it('should rsa decrypt using a ' + keySize + '-bit key', function() { - var data = UTIL.decode64(params.encrypted); - var key = PKI.privateKeyFromPem(params.privateKeyPem); - ASSERT.equal(key.decrypt(data), 'too many secrets\n'); - }); - - it('should rsa sign using a ' + keySize + '-bit key and PKCS#1 v1.5 padding', function() { - var key = PKI.privateKeyFromPem(params.privateKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - var signature = UTIL.decode64(params.signature); - ASSERT.equal(key.sign(md), signature); - }); - - it('should verify an rsa signature using a ' + keySize + '-bit key and PKCS#1 v1.5 padding', function() { - var signature = UTIL.decode64(params.signature); - var key = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - ASSERT.equal(key.verify(md.digest().getBytes(), signature), true); - }); - - /* Note: signatures are *not* deterministic (the point of RSASSA-PSS), - so they can't be compared easily -- instead they are just verified - using the verify() function which is tested against OpenSSL-generated - signatures. */ - it('should rsa sign using a ' + keySize + '-bit key and PSS padding', function() { - var privateKey = PKI.privateKeyFromPem(params.privateKeyPem); - var publicKey = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - // create signature - var pss = PSS.create( - MD.sha1.create(), MGF.mgf1.create(MD.sha1.create()), 20); - var signature = privateKey.sign(md, pss); - - // verify signature - md.start(); - md.update('just testing'); - ASSERT.equal( - publicKey.verify(md.digest().getBytes(), signature, pss), true); - }); - - it('should verify an rsa signature using a ' + keySize + '-bit key and PSS padding', function() { - var signature = UTIL.decode64(params.signaturePss); - var key = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - var pss = PSS.create( - MD.sha1.create(), MGF.mgf1.create(MD.sha1.create()), 20); - ASSERT.equal( - key.verify(md.digest().getBytes(), signature, pss), true); - }); - - it('should rsa sign using a ' + keySize + '-bit key and PSS padding using pss named-param API', function() { - var privateKey = PKI.privateKeyFromPem(params.privateKeyPem); - var publicKey = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - // create signature - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - saltLength: 20 - }); - var signature = privateKey.sign(md, pss); - - // verify signature - md.start(); - md.update('just testing'); - ASSERT.equal( - publicKey.verify(md.digest().getBytes(), signature, pss), true); - }); - - it('should verify an rsa signature using a ' + keySize + '-bit key and PSS padding using pss named-param API', function() { - var signature = UTIL.decode64(params.signaturePss); - var key = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - saltLength: 20 - }); - ASSERT.equal( - key.verify(md.digest().getBytes(), signature, pss), true); - }); - - it('should rsa sign using a ' + keySize + '-bit key and PSS padding using salt "abc"', function() { - var privateKey = PKI.privateKeyFromPem(params.privateKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - // create signature - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - salt: UTIL.createBuffer('abc') - }); - var signature = privateKey.sign(md, pss); - var b64 = UTIL.encode64(signature); - ASSERT.equal(b64, params.signatureWithAbcSalt); - }); - - it('should verify an rsa signature using a ' + keySize + '-bit key and PSS padding using salt "abc"', function() { - var signature = UTIL.decode64(params.signatureWithAbcSalt); - var key = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - saltLength: 3 - }); - ASSERT.equal( - key.verify(md.digest().getBytes(), signature, pss), true); - }); - - it('should rsa sign using a ' + keySize + '-bit key and PSS padding using custom PRNG', function() { - var prng = RANDOM.createInstance(); - prng.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - var privateKey = PKI.privateKeyFromPem(params.privateKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - // create signature - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - saltLength: 20, - prng: prng - }); - var signature = privateKey.sign(md, pss); - var b64 = UTIL.encode64(signature); - ASSERT.equal(b64, params.signatureWithCustomPrng); - }); - - it('should verify an rsa signature using a ' + keySize + '-bit key and PSS padding using custom PRNG', function() { - var prng = RANDOM.createInstance(); - prng.seedFileSync = function(needed) { - return UTIL.fillString('a', needed); - }; - var signature = UTIL.decode64(params.signatureWithCustomPrng); - var key = PKI.publicKeyFromPem(params.publicKeyPem); - - var md = MD.sha1.create(); - md.start(); - md.update('just testing'); - - var pss = PSS.create({ - md: MD.sha1.create(), - mgf: MGF.mgf1.create(MD.sha1.create()), - saltLength: 20, - prng: prng - }); - ASSERT.equal( - key.verify(md.digest().getBytes(), signature, pss), true); - }); - } - })(); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pki', - 'forge/rsa', - 'forge/md', - 'forge/mgf', - 'forge/pss', - 'forge/random', - 'forge/util' - ], function(PKI, RSA, MD, MGF, PSS, RANDOM, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - PKI(), - RSA(), - MD(), - MGF(), - PSS(), - RANDOM(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pki')(), - require('../../js/rsa')(), - require('../../js/md')(), - require('../../js/mgf')(), - require('../../js/pss')(), - require('../../js/random')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/sha1.js b/includes/external/school/node_modules/node-forge/nodejs/test/sha1.js deleted file mode 100644 index 3ffd985..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/sha1.js +++ /dev/null @@ -1,75 +0,0 @@ -(function() { - -function Tests(ASSERT, SHA1, UTIL) { - describe('sha1', function() { - it('should digest the empty string', function() { - var md = SHA1.create(); - ASSERT.equal( - md.digest().toHex(), 'da39a3ee5e6b4b0d3255bfef95601890afd80709'); - }); - - it('should digest "abc"', function() { - var md = SHA1.create(); - md.update('abc'); - ASSERT.equal( - md.digest().toHex(), 'a9993e364706816aba3e25717850c26c9cd0d89d'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA1.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12'); - }); - - it('should digest "c\'\u00e8"', function() { - var md = SHA1.create(); - md.update("c\'\u00e8", 'utf8'); - ASSERT.equal( - md.digest().toHex(), '98c9a3f804daa73b68a5660d032499a447350c0d'); - }); - - it('should digest "THIS IS A MESSAGE"', function() { - var md = SHA1.create(); - md.start(); - md.update('THIS IS '); - md.update('A MESSAGE'); - // do twice to check continuing digest - ASSERT.equal( - md.digest().toHex(), '5f24f4d6499fd2d44df6c6e94be8b14a796c071d'); - ASSERT.equal( - md.digest().toHex(), '5f24f4d6499fd2d44df6c6e94be8b14a796c071d'); - }); - - it('should digest a long message', function() { - // Note: might be too slow on old browsers - var md = SHA1.create(); - md.update(UTIL.fillString('a', 1000000)); - ASSERT.equal( - md.digest().toHex(), '34aa973cd4c4daa4f61eeb2bdbad27316534016f'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/sha1', - 'forge/util' - ], function(SHA1, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - SHA1(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/sha1')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/sha256.js b/includes/external/school/node_modules/node-forge/nodejs/test/sha256.js deleted file mode 100644 index 2d5eb8a..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/sha256.js +++ /dev/null @@ -1,81 +0,0 @@ -(function() { - -function Tests(ASSERT, SHA256, UTIL) { - describe('sha256', function() { - it('should digest the empty string', function() { - var md = SHA256.create(); - ASSERT.equal( - md.digest().toHex(), - 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'); - }); - - it('should digest "abc"', function() { - var md = SHA256.create(); - md.update('abc'); - ASSERT.equal( - md.digest().toHex(), - 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA256.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), - 'd7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592'); - }); - - it('should digest "c\'\u00e8"', function() { - var md = SHA256.create(); - md.update("c\'\u00e8", 'utf8'); - ASSERT.equal( - md.digest().toHex(), - '1aa15c717afffd312acce2217ce1c2e5dabca53c92165999132ec9ca5decdaca'); - }); - - it('should digest "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"', function() { - var md = SHA256.create(); - md.start(); - md.update('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); - // do twice to check continuing digest - ASSERT.equal( - md.digest().toHex(), - '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'); - ASSERT.equal( - md.digest().toHex(), - '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'); - }); - - it('should digest a long message', function() { - // Note: might be too slow on old browsers - var md = SHA256.create(); - md.update(UTIL.fillString('a', 1000000)); - ASSERT.equal( - md.digest().toHex(), - 'cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/sha256', - 'forge/util' - ], function(SHA256, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - SHA256(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/sha256')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/sha512.js b/includes/external/school/node_modules/node-forge/nodejs/test/sha512.js deleted file mode 100644 index 3cbc4dc..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/sha512.js +++ /dev/null @@ -1,174 +0,0 @@ -(function() { - -function Tests(ASSERT, SHA512, UTIL) { - describe('sha512', function() { - it('should digest the empty string', function() { - var md = SHA512.create(); - ASSERT.equal( - md.digest().toHex(), - 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e'); - }); - - it('should digest "abc"', function() { - var md = SHA512.create(); - md.update('abc'); - ASSERT.equal( - md.digest().toHex(), - 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'); - }); - - it('should digest "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"', function() { - var md = SHA512.create(); - md.update('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); - ASSERT.equal( - md.digest().toHex(), - '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA512.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), - '07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6'); - }); - - it('should digest "c\'\u00e8"', function() { - var md = SHA512.create(); - md.update("c\'\u00e8", 'utf8'); - ASSERT.equal( - md.digest().toHex(), - '9afdc0390dd91e81c63f858d1c6fcd9f949f3fc89dbdaed9e4211505bad63d8e8787797e2e9ea651285eb6954e51c4f0299837c3108cb40f1420bca1d237355c'); - }); - - it('should digest "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"', function() { - var md = SHA512.create(); - md.start(); - md.update('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); - // do twice to check continuing digest - ASSERT.equal( - md.digest().toHex(), - '204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445'); - ASSERT.equal( - md.digest().toHex(), - '204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445'); - }); - }); - - SHA384 = SHA512.sha384; - - describe('sha384', function() { - it('should digest the empty string', function() { - var md = SHA384.create(); - ASSERT.equal( - md.digest().toHex(), - '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b'); - }); - - it('should digest "abc"', function() { - var md = SHA384.create(); - md.update('abc'); - ASSERT.equal( - md.digest().toHex(), - 'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7'); - }); - - it('should digest "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"', function() { - var md = SHA384.create(); - md.update('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); - ASSERT.equal( - md.digest().toHex(), - '09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA384.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), - 'ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1'); - }); - - it('should digest "c\'\u00e8"', function() { - var md = SHA384.create(); - md.update("c\'\u00e8", 'utf8'); - ASSERT.equal( - md.digest().toHex(), - '382ec8a92d50abf57f7d0f934ff3969d6d354d30c96f1616678a920677867aba49521d2d535c0f285a3c2961c2034ea3'); - }); - - it('should digest "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"', function() { - var md = SHA384.create(); - md.start(); - md.update('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); - // do twice to check continuing digest - ASSERT.equal( - md.digest().toHex(), - '3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b'); - ASSERT.equal( - md.digest().toHex(), - '3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b'); - }); - }); - - SHA256 = SHA512.sha256; - - describe('sha512/256', function() { - it('should digest the empty string', function() { - var md = SHA256.create(); - ASSERT.equal( - md.digest().toHex(), - 'c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA256.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), - 'dd9d67b371519c339ed8dbd25af90e976a1eeefd4ad3d889005e532fc5bef04d'); - }); - }); - - SHA224 = SHA512.sha224; - - describe('sha512/224', function() { - it('should digest the empty string', function() { - var md = SHA224.create(); - ASSERT.equal( - md.digest().toHex(), - '6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4'); - }); - - it('should digest "The quick brown fox jumps over the lazy dog"', function() { - var md = SHA224.create(); - md.update('The quick brown fox jumps over the lazy dog'); - ASSERT.equal( - md.digest().toHex(), - '944cd2847fb54558d4775db0485a50003111c8e5daa63fe722c6aa37'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/sha512', - 'forge/util' - ], function(SHA512, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - SHA512(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/sha512')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/ssh.js b/includes/external/school/node_modules/node-forge/nodejs/test/ssh.js deleted file mode 100644 index c90eb26..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/ssh.js +++ /dev/null @@ -1,193 +0,0 @@ -(function() { - -function Tests(ASSERT, forge) { - - // Original RSA key generated by openssh - var keystr = - '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIIEogIBAAKCAQEA301O+LBnd6ngw9i0Pb5iTwlQ1s37ay3DNpisjh+jPDDvaIZq\r\n' + - 'PC+44YV7RaR1ib2wEoQfg4DwqVw5wlA2x97Txngb+sJe0yUfmM9vMTxhXWuURVR6\r\n' + - '6DGd8t2eOBN8qDoYlpvdVf8Go5Btrb6NCexUbZtFS1AmumK2zQKxIizgVLK8dx4G\r\n' + - 'NYbqxibUxgYHbwRpu8ROrogVrZbMW1cOb4JE+DzG1FvfHSdzkxb9e5ARcsuLxCdP\r\n' + - 'ItUMVY8jjgER6b5lK+Nzr57hFdr08RjWGBldNGrCFqDdm+1WkGAHTRrg/i/MD8BU\r\n' + - '8NCFUBpQTSrhALkGqBdGZPN/PrXonXjhcd11awIDAQABAoIBAHGMESUaJnLN2jIc\r\n' + - 'RoLDBaBk/0tLEJaOfZ6Mgen/InUf+Q0wlGKobZ2Xz3g5SV9SKm8v6gpnjXjBIcmy\r\n' + - 'GjkGEK/yMWAQaEF7thZxHHxv1J65bnrWm2zolgWCNcsT9aZhbFFhTmpFNO4FKhBY\r\n' + - 'PcWW+9OESfci+Z57RbL3tHTJVwUZrthtagpFEgVceq18GLSS9N4TWJ8HX1CDxf9R\r\n' + - '4gzEy3+8oC0QONx+bgsWUmzNk9QNNW6yPV5NYZ3SwNLVgw3+6m8WDaqo5FWK7y2f\r\n' + - 'pa63DUzXlg5uSYnk4OFVxI6TLpmNQcjigpXnsd1PwcynW0AM83jzIYu0F31ppU61\r\n' + - '8flrqfECgYEA8j/joUve1F4lTt2U34RF+59giZ1r0ME4LafNEgN/ZLMB8ghToSqr\r\n' + - 'qzNnJnSppkAKTa2NVZGgJkvqn+qysM1HNm/3ksdUcE5yijgc3E17PNdBJwwNLZfP\r\n' + - 'p9jB/ZPaNMduGqltYamOVkbg/qS7O4rcUHstrGGGtJ9fveH+cu87emMCgYEA6/oX\r\n' + - '6A2fW88hw4hZwV2pCk6gumi89vXbKbhnD6j907TW583xIqXYsQBb7x/KGyPf65+k\r\n' + - 'Sou9MRyLhRu7qcc8INpSnFsra8ZQosP+ao8tUTq7p7N0H27qG5liTeAAksvk/xnq\r\n' + - '2VdL1YDRpo4tmRD7TAj8uc1sgXqdsBCPrqq4Q1kCgYAHcNjwEmGEymOA+aNh/jEc\r\n' + - 'Gngfofs2zUiJdncBD6RxFmJ/6auP7ryZJJoNf1XaqmrmmecWcsOliX1qbg4RCi0e\r\n' + - 'ye+jzYWVcYNpJXIVfjfD1aTFq0QYW2pgcHL88/am2l1SalPWxRt/IOw2Rh8OJCTC\r\n' + - 'QBZWDiTSFXceYPus0hZUmwKBgCc2FYbfzJ0q3Adrvs5cy9wEmLyg7tVyoQpbs/Rs\r\n' + - 'NlFZeWRnWixRtqIi1yPy+lhsK6cxjdE9SyDAB4cExrg9fQZQgO2uUJbGC1wgiUQX\r\n' + - 'qoYW5lvFfARFH+2aHTWnhTDfZJvnKJkY4mcF0tCES5tlsPw/eg89zUvunglFlzqE\r\n' + - '771xAoGAdYRG1PIkAzjuh785rc35885dsaXChZx1+7rfZ+AclyisRsmES9UfqL6M\r\n' + - '+SuluaBSWJQUBS7iaHazUeXmy5t+HBjSSLuAOHoZUckwDWD3EM7GHjFlWJOCArI3\r\n' + - 'hOYlsXSyl07rApzg/t+HxXcNpLZGJTgRwrRGF2OipUL0VPlTdRc=\r\n' + - '-----END RSA PRIVATE KEY-----\r\n'; - - var key = forge.pki.privateKeyFromPem(keystr); - - describe('ssh', function() { - it('should convert keys to openssh public keys', function() { - var expect = - 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfTU74sGd3qeDD2LQ9vmJPCVD' + - 'WzftrLcM2mKyOH6M8MO9ohmo8L7jhhXtFpHWJvbAShB+DgPCpXDnCUDbH3tPGeB' + - 'v6wl7TJR+Yz28xPGFda5RFVHroMZ3y3Z44E3yoOhiWm91V/wajkG2tvo0J7FRtm' + - '0VLUCa6YrbNArEiLOBUsrx3HgY1hurGJtTGBgdvBGm7xE6uiBWtlsxbVw5vgkT4' + - 'PMbUW98dJ3OTFv17kBFyy4vEJ08i1QxVjyOOARHpvmUr43OvnuEV2vTxGNYYGV0' + - '0asIWoN2b7VaQYAdNGuD+L8wPwFTw0IVQGlBNKuEAuQaoF0Zk838+teideOFx3X' + - 'Vr A comment'; - - ASSERT.equal(forge.ssh.publicKeyToOpenSSH(key, 'A comment'), expect); - }); - - it('should convert keys to putty unencrypted keys', function() { - var expect = - 'PuTTY-User-Key-File-2: ssh-rsa\r\n' + - 'Encryption: none\r\n' + - 'Comment: imported-openssh-key\r\n' + - 'Public-Lines: 6\r\n' + - 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDfTU74sGd3qeDD2LQ9vmJPCVDWzftrLcM2\r\n' + - 'mKyOH6M8MO9ohmo8L7jhhXtFpHWJvbAShB+DgPCpXDnCUDbH3tPGeBv6wl7TJR+Y\r\n' + - 'z28xPGFda5RFVHroMZ3y3Z44E3yoOhiWm91V/wajkG2tvo0J7FRtm0VLUCa6YrbN\r\n' + - 'ArEiLOBUsrx3HgY1hurGJtTGBgdvBGm7xE6uiBWtlsxbVw5vgkT4PMbUW98dJ3OT\r\n' + - 'Fv17kBFyy4vEJ08i1QxVjyOOARHpvmUr43OvnuEV2vTxGNYYGV00asIWoN2b7VaQ\r\n' + - 'YAdNGuD+L8wPwFTw0IVQGlBNKuEAuQaoF0Zk838+teideOFx3XVr\r\n' + - 'Private-Lines: 14\r\n' + - 'AAABAHGMESUaJnLN2jIcRoLDBaBk/0tLEJaOfZ6Mgen/InUf+Q0wlGKobZ2Xz3g5\r\n' + - 'SV9SKm8v6gpnjXjBIcmyGjkGEK/yMWAQaEF7thZxHHxv1J65bnrWm2zolgWCNcsT\r\n' + - '9aZhbFFhTmpFNO4FKhBYPcWW+9OESfci+Z57RbL3tHTJVwUZrthtagpFEgVceq18\r\n' + - 'GLSS9N4TWJ8HX1CDxf9R4gzEy3+8oC0QONx+bgsWUmzNk9QNNW6yPV5NYZ3SwNLV\r\n' + - 'gw3+6m8WDaqo5FWK7y2fpa63DUzXlg5uSYnk4OFVxI6TLpmNQcjigpXnsd1Pwcyn\r\n' + - 'W0AM83jzIYu0F31ppU618flrqfEAAACBAPI/46FL3tReJU7dlN+ERfufYImda9DB\r\n' + - 'OC2nzRIDf2SzAfIIU6Eqq6szZyZ0qaZACk2tjVWRoCZL6p/qsrDNRzZv95LHVHBO\r\n' + - 'coo4HNxNezzXQScMDS2Xz6fYwf2T2jTHbhqpbWGpjlZG4P6kuzuK3FB7LaxhhrSf\r\n' + - 'X73h/nLvO3pjAAAAgQDr+hfoDZ9bzyHDiFnBXakKTqC6aLz29dspuGcPqP3TtNbn\r\n' + - 'zfEipdixAFvvH8obI9/rn6RKi70xHIuFG7upxzwg2lKcWytrxlCiw/5qjy1ROrun\r\n' + - 's3QfbuobmWJN4ACSy+T/GerZV0vVgNGmji2ZEPtMCPy5zWyBep2wEI+uqrhDWQAA\r\n' + - 'AIB1hEbU8iQDOO6Hvzmtzfnzzl2xpcKFnHX7ut9n4ByXKKxGyYRL1R+ovoz5K6W5\r\n' + - 'oFJYlBQFLuJodrNR5ebLm34cGNJIu4A4ehlRyTANYPcQzsYeMWVYk4ICsjeE5iWx\r\n' + - 'dLKXTusCnOD+34fFdw2ktkYlOBHCtEYXY6KlQvRU+VN1Fw==\r\n' + - 'Private-MAC: 87fa1011848453317d8e41b00c927e9d17dc334e\r\n'; - - ASSERT.equal(forge.ssh.privateKeyToPutty(key, '', 'imported-openssh-key'), expect); - }); - - it('should convert keys to putty encrypted keys', function() { - var expect = - 'PuTTY-User-Key-File-2: ssh-rsa\r\n' + - 'Encryption: aes256-cbc\r\n' + - 'Comment: imported-openssh-key\r\n' + - 'Public-Lines: 6\r\n' + - 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDfTU74sGd3qeDD2LQ9vmJPCVDWzftrLcM2\r\n' + - 'mKyOH6M8MO9ohmo8L7jhhXtFpHWJvbAShB+DgPCpXDnCUDbH3tPGeBv6wl7TJR+Y\r\n' + - 'z28xPGFda5RFVHroMZ3y3Z44E3yoOhiWm91V/wajkG2tvo0J7FRtm0VLUCa6YrbN\r\n' + - 'ArEiLOBUsrx3HgY1hurGJtTGBgdvBGm7xE6uiBWtlsxbVw5vgkT4PMbUW98dJ3OT\r\n' + - 'Fv17kBFyy4vEJ08i1QxVjyOOARHpvmUr43OvnuEV2vTxGNYYGV00asIWoN2b7VaQ\r\n' + - 'YAdNGuD+L8wPwFTw0IVQGlBNKuEAuQaoF0Zk838+teideOFx3XVr\r\n' + - 'Private-Lines: 14\r\n' + - 'EiVwpacmA7mhmGBTPXeIZZPkeRDtb4LOWzI+68cA5oM7UJTpBxh9zsnpAdWg2knP\r\n' + - 'snA5gpTSq0CJV9HWb8yAY3R5izflQ493fCbJzuPFTW6RJ2y/D5dUmDWccfMczPNT\r\n' + - 'GEDOfslCPe+Yz1h0y0y5NI5WwJowxv3nL9FTlQ9KDVrdoSizkVbTh4CJTrvqIc7c\r\n' + - 'sI/HU25OHS8kcIZPiPL8m40ot254rkbPCWrskm9H4n+EC+BwJNtEic9ZQfGPWOVl\r\n' + - 't8JxY35mHqGIlfhyVkdts/Rx7kwOHY+GPXDVRnHQZQOkFtVqCFGx8mL83CspIEq0\r\n' + - 'V8LaHuvxiadA4OEeR0azuDhfVJXvrUpHd4CPjAzJu4doHm98GJAyrz3mtCyxIguH\r\n' + - 'k8zKVJzbNawy5T43l5x9cR6VKzcl6d4V14vphiovxc8DG/J7RHBd4d1y6wxo5ZMY\r\n' + - 'qqQ0E6VHtq6auBZjnGzx0P/1lGjpZdxUf4OVTaZ+stCxX5wAH9exF+gdZAlk20Gp\r\n' + - 'Atg60boQuolHBiH66dQynyHp+6yuLPLKXy74EO+AEB3HvNK7aIQV8rCD7I7HEa12\r\n' + - 'xxqIH4l0FWQKHXNIrK45uo6Hdg1siYp9zU4FFgDcNGOZJsT6+etPp1sgAeBuBR4F\r\n' + - 'pnuX1KZzRTbG1kcRrTOjsMh0bKfZAn0+uwyuPBtwEnLziGoCXU+9+XO85zcPF2j1\r\n' + - 'Ip5AWAOBI82SKMLu51Dpdz1rwSZOPFWnHxRxfnUiQa9Kc7qBGrMxy1UNECAwMGzp\r\n' + - 'ljKesqZvoANo0voiodALXGs7kSpmXjcbHnUUt0SI/QHyajXabIiLHGf6lfvStYLP\r\n' + - 'L5bLfswsMqG/2lonYWrPl9YC0WzvfRpbHgpI9G1eLjFFRlaqJ3EpZf5Dy26Z0eh0\r\n' + - 'Private-MAC: 23aa5b6e2a411107c59e1e6c3bca06247e3c9627\r\n'; - - ASSERT.equal(forge.ssh.privateKeyToPutty(key, 'passphrase', 'imported-openssh-key'), expect); - }); - - it('should convert keys to openssh encrypted private keys', function() { - var expect = - '-----BEGIN RSA PRIVATE KEY-----\n' + - 'Proc-Type: 4,ENCRYPTED\n' + - 'DEK-Info: AES-128-CBC,2616162F269429AA628E42C3BD5A0027\n' + - '\n' + - 'p8+mGWeQxZrRg6OeeFqgEX8sXGGUqWJuK4XhtgRpxAQaSg8bK6m/ahArEonjzgrO\n' + - 'XMLow7N0aXqGJzL+n4c4EzL7e4SquzeYZLq0UCs8vbWE5GdTT6BxisWIJqzOaQW3\n' + - 'd3OqS2lM5o47cuADMIMp015b0dJn5nwJall20GSI1XnpTUHIJ1oFv7fW/s5g39VD\n' + - 'DSVmPzJEMhcTa8BskHrKITV6l+TuivGqrHH0LCYCfQ3IBLiRZrPINQLLkaHR6kis\n' + - '4qvFEMhQGAz0GrifwEob9+FPzDAHHnYTS0kG1jhZ3p92vaUi8sPxyv5ndRXOSZZg\n' + - 'vh6Cdrk62myG/rHbsBRrrpa+Ka+BX4ofedwP3SBHPwqBpksYhEF7MxsWKhmHY+d0\n' + - 'YINHrj0w+yfw4H3n1+0w4wajlHVUncp7RP8KKMtG3vvvfF1loWpLbyF0s6fgq7p4\n' + - '7kt1LcnRKB3U2IZYfMHuv94+5q0BKfGF6NmRpmgdJojyS2IXZyFaJRqrCa0mKcP9\n' + - 'PtDZFPTEy0VeNTL8KqjweEmjK3/JtZPVgXXkPWlFMw3Hc/dtP/l6VssGLk8P/DHD\n' + - 'yknagPsfa70iydTvDO+nrtS57DkoUqhMsU3BhCjMzZg+/bo1JgmxQUWT//PoQLSB\n' + - 'Z7/F59AfHzZIkWgqfvGRzX3y+G1M1l11dX658iWmN0kZ5MyHU0qwU9hVI6P/fcfk\n' + - '6MQKc/MzPnkjw/knREtYMtHrVsKrDVDizfguGFKFC8FVhhrDOFZUnza0nh6nt1HZ\n' + - 'Xk156MhATenWdHBW4Rn3ec1aMOD16k2SRIHd+nyJzx51H3PUdTtXBWqFNGggzoJG\n' + - '99ax3jD6pTLQY3BG146QKQ0csItMTIdwZPAidkzv8VVXC7HaqXk1K1pgfJT6mD4P\n' + - 'LaNbuA9r7mNiNoPzwzk0h3BomBTMXZpAyL9Jlre9jTu6lpyN/TkOzHhs/I1/lvKQ\n' + - 'Uki7BXv65Jq6RqkTbNc5plxBYggdzLGurr0ZIBDsoN6uXkzaM+fCMlJU8+MgAcBb\n' + - 'x88bj8h3t4akPd/WaSsWKeOzB3Uaw3ztYCpwSVv1F+N0u6C6zGo+9VFAQZh1uKvC\n' + - 'G9U5hvAG7WEoQ801/fvKj93lqLDhOarPJC8CcfMLwoIqj7zah7TtBYq8VsuF7Fsx\n' + - 'dEWNFiXhtFqUhgBMt1tcOXGiXA79NucSVzUBNzrRZKlLDYm2TKKyOqEbG9vF/YxL\n' + - 'ZG3TwmcFj0sko2K61ya7FGpKmfPQCJJoi0tIfnW4eIVcyeRpXYi5B2xqvSXcTdUx\n' + - '5y5Vpuu1CzrMZr50b3sSOFjcOXE5211RS8SHpOMWY+JDDB4vF4Dv94fqEIgnFtrR\n' + - 'oQgk3DueWb1x09NcJtEZsW6lT3Jw19ursb++XSejFZ9Xu5ED8fbewgGo2w/N5j1H\n' + - 'vQEnFkGcL1jLlLqp9PlvPIE4a///wy1y0XbnKMJs+dKxiesKVx1zZ1WDcK2Qgv4r\n' + - 'G+RsZzHZuCjUyty1+SMVOYM6+3zW6bjXN58xI3XeSxgE/JaJKjLWBZWx5+eU7b6a\n' + - '04mJDMhnpdLHG97m9p90L1yuudiJfq6ngha41xxv9xLmNatfrtStCrq/DR0KHm0K\n' + - '-----END RSA PRIVATE KEY-----\n'; - - // Unable to test -- uses a random IV that I can't control - //ASSERT.equal(forge.ssh.rsaPrivateKeyAsOpenSSH(key, 'passphrase'), expect); - }); - - it('should convert keys to openssh unencrypted private keys', function() { - var expect = keystr; - ASSERT.equal(forge.ssh.privateKeyToOpenSSH(key, ''), expect); - }); - - it('should get an MD5 SSH fingerprint', function() { - var fp = forge.ssh.getPublicKeyFingerprint(key); - ASSERT.equal(fp.toHex(), '46549abeb89422a0955d4041ae7322ec'); - }); - - it('should get a hex MD5 SSH fingerprint', function() { - var fp = forge.ssh.getPublicKeyFingerprint(key, {encoding: 'hex'}); - ASSERT.equal(fp, '46549abeb89422a0955d4041ae7322ec'); - }); - - it('should get a hex, colon-delimited MD5 SSH fingerprint', function() { - var fp = forge.ssh.getPublicKeyFingerprint( - key, {encoding: 'hex', delimiter: ':'}); - ASSERT.equal(fp, '46:54:9a:be:b8:94:22:a0:95:5d:40:41:ae:73:22:ec'); - }); - }); -} - -// 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')); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/tls.js b/includes/external/school/node_modules/node-forge/nodejs/test/tls.js deleted file mode 100644 index d9ce944..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/tls.js +++ /dev/null @@ -1,191 +0,0 @@ -(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')); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/util.js b/includes/external/school/node_modules/node-forge/nodejs/test/util.js deleted file mode 100644 index 57104a1..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/util.js +++ /dev/null @@ -1,406 +0,0 @@ -(function() { - -function Tests(ASSERT, UTIL) { - // custom assertion to test array-like objects - function assertArrayEqual(actual, expected) { - ASSERT.equal(actual.length, expected.length); - for (var idx = 0; idx < expected.length; idx++) { - ASSERT.equal(actual[idx], expected[idx]); - } - } - - describe('util', function() { - it('should put bytes into a buffer', function() { - var b = UTIL.createBuffer(); - b.putByte(1); - b.putByte(2); - b.putByte(3); - b.putByte(4); - b.putInt32(4); - b.putByte(1); - b.putByte(2); - b.putByte(3); - b.putInt32(4294967295); - var hex = b.toHex(); - ASSERT.equal(hex, '0102030400000004010203ffffffff'); - - var bytes = []; - while(b.length() > 0) { - bytes.push(b.getByte()); - } - ASSERT.deepEqual( - bytes, [1, 2, 3, 4, 0, 0, 0, 4, 1, 2, 3, 255, 255, 255, 255]); - }); - - it('should put bytes from an Uint8Array into a buffer', function() { - if(typeof Uint8Array === 'undefined') { - return; - } - var data = [1, 2, 3, 4, 0, 0, 0, 4, 1, 2, 3, 255, 255, 255, 255]; - var ab = new Uint8Array(data); - var b = UTIL.createBuffer(ab); - var hex = b.toHex(); - ASSERT.equal(hex, '0102030400000004010203ffffffff'); - - var bytes = []; - while(b.length() > 0) { - bytes.push(b.getByte()); - } - ASSERT.deepEqual(bytes, data); - }); - - it('should convert bytes from hex', function() { - var hex = '0102030400000004010203ffffffff'; - var b = UTIL.createBuffer(); - b.putBytes(UTIL.hexToBytes(hex)); - ASSERT.equal(b.toHex(), hex); - }); - - it('should put 0 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(0, 8); - ASSERT.equal(b.toHex(), '00'); - }); - - it('should put 0 into a buffer using two\'s complement w/2 bytes', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(0, 16); - ASSERT.equal(b.toHex(), '0000'); - }); - - it('should put 127 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(127, 8); - ASSERT.equal(b.toHex(), '7f'); - }); - - it('should put 127 into a buffer using two\'s complement w/2 bytes', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(127, 16); - ASSERT.equal(b.toHex(), '007f'); - }); - - it('should put 128 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(128, 16); - ASSERT.equal(b.toHex(), '0080'); - }); - - it('should put 256 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(256, 16); - ASSERT.equal(b.toHex(), '0100'); - }); - - it('should put -128 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(-128, 8); - ASSERT.equal(b.toHex(), '80'); - }); - - it('should put -129 into a buffer using two\'s complement', function() { - var b = UTIL.createBuffer(); - b.putSignedInt(-129, 16); - ASSERT.equal(b.toHex(), 'ff7f'); - }); - - it('should get 0 from a buffer using two\'s complement', function() { - var x = 0; - var n = 8; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(x, n), x); - }); - - it('should get 127 from a buffer using two\'s complement', function() { - var x = 127; - var n = 8; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(n), x); - }); - - it('should get 128 from a buffer using two\'s complement', function() { - var x = 128; - var n = 16; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(n), x); - }); - - it('should get 256 from a buffer using two\'s complement', function() { - var x = 256; - var n = 16; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(n), x); - }); - - it('should get -128 from a buffer using two\'s complement', function() { - var x = -128; - var n = 8; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(n), x); - }); - - it('should get -129 from a buffer using two\'s complement', function() { - var x = -129; - var n = 16; - var b = UTIL.createBuffer(); - b.putSignedInt(x, n); - ASSERT.equal(b.getSignedInt(n), x); - }); - - it('should base64 encode some bytes', function() { - var s1 = '00010203050607080A0B0C0D0F1011121415161719'; - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5'; - ASSERT.equal(UTIL.encode64(s1), s2); - }); - - it('should base64 decode some bytes', function() { - var s1 = '00010203050607080A0B0C0D0F1011121415161719'; - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5'; - ASSERT.equal(UTIL.decode64(s2), s1); - }); - - it('should base64 encode some bytes using util.binary.base64', function() { - var s1 = new Uint8Array([ - 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, - 0x35, 0x30, 0x36, 0x30, 0x37, 0x30, 0x38, 0x30, 0x41, - 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x46, 0x31, - 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x34, 0x31, 0x35, - 0x31, 0x36, 0x31, 0x37, 0x31, 0x39]); - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5'; - ASSERT.equal(UTIL.binary.base64.encode(s1), s2); - }); - - it('should base64 encode some odd-length bytes using util.binary.base64', function() { - var s1 = new Uint8Array([ - 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, - 0x35, 0x30, 0x36, 0x30, 0x37, 0x30, 0x38, 0x30, 0x41, - 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x46, 0x31, - 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x34, 0x31, 0x35, - 0x31, 0x36, 0x31, 0x37, 0x31, 0x39, 0x31, 0x41, 0x31, - 0x42]); - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5MUExQg=='; - ASSERT.equal(UTIL.binary.base64.encode(s1), s2); - }); - - it('should base64 decode some bytes using util.binary.base64', function() { - var s1 = new Uint8Array([ - 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, - 0x35, 0x30, 0x36, 0x30, 0x37, 0x30, 0x38, 0x30, 0x41, - 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x46, 0x31, - 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x34, 0x31, 0x35, - 0x31, 0x36, 0x31, 0x37, 0x31, 0x39]); - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5'; - ASSERT.deepEqual(UTIL.binary.base64.decode(s2), s1); - }); - - it('should base64 decode some odd-length bytes using util.binary.base64', function() { - var s1 = new Uint8Array([ - 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, - 0x35, 0x30, 0x36, 0x30, 0x37, 0x30, 0x38, 0x30, 0x41, - 0x30, 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x46, 0x31, - 0x30, 0x31, 0x31, 0x31, 0x32, 0x31, 0x34, 0x31, 0x35, - 0x31, 0x36, 0x31, 0x37, 0x31, 0x39, 0x31, 0x41, 0x31, - 0x42]); - var s2 = 'MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5MUExQg=='; - assertArrayEqual(UTIL.binary.base64.decode(s2), s1); - }); - - it('should convert IPv4 0.0.0.0 textual address to 4-byte address', function() { - var bytes = UTIL.bytesFromIP('0.0.0.0'); - var b = UTIL.createBuffer().fillWithByte(0, 4); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv4 127.0.0.1 textual address to 4-byte address', function() { - var bytes = UTIL.bytesFromIP('127.0.0.1'); - var b = UTIL.createBuffer(); - b.putByte(127); - b.putByte(0); - b.putByte(0); - b.putByte(1); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 :: textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('::'); - var b = UTIL.createBuffer().fillWithByte(0, 16); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 ::0 textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('::0'); - var b = UTIL.createBuffer().fillWithByte(0, 16); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 0:: textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('0::'); - var b = UTIL.createBuffer().fillWithByte(0, 16); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 ::1 textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('::1'); - var b = UTIL.createBuffer().fillWithByte(0, 14); - b.putBytes(UTIL.hexToBytes('0001')); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 1:: textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('1::'); - var b = UTIL.createBuffer(); - b.putBytes(UTIL.hexToBytes('0001')); - b.fillWithByte(0, 14); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 1::1 textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('1::1'); - var b = UTIL.createBuffer(); - b.putBytes(UTIL.hexToBytes('0001')); - b.fillWithByte(0, 12); - b.putBytes(UTIL.hexToBytes('0001')); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 1::1:0 textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('1::1:0'); - var b = UTIL.createBuffer(); - b.putBytes(UTIL.hexToBytes('0001')); - b.fillWithByte(0, 10); - b.putBytes(UTIL.hexToBytes('0001')); - b.putBytes(UTIL.hexToBytes('0000')); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv6 2001:db8:0:1:1:1:1:1 textual address to 16-byte address', function() { - var bytes = UTIL.bytesFromIP('2001:db8:0:1:1:1:1:1'); - var b = UTIL.createBuffer(); - b.putBytes(UTIL.hexToBytes('2001')); - b.putBytes(UTIL.hexToBytes('0db8')); - b.putBytes(UTIL.hexToBytes('0000')); - b.putBytes(UTIL.hexToBytes('0001')); - b.putBytes(UTIL.hexToBytes('0001')); - b.putBytes(UTIL.hexToBytes('0001')); - b.putBytes(UTIL.hexToBytes('0001')); - b.putBytes(UTIL.hexToBytes('0001')); - ASSERT.equal(bytes, b.getBytes()); - }); - - it('should convert IPv4 0.0.0.0 byte address to textual representation', function() { - var addr = '0.0.0.0'; - var bytes = UTIL.createBuffer().fillWithByte(0, 4).getBytes(); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '0.0.0.0'); - }); - - it('should convert IPv4 0.0.0.0 byte address to textual representation', function() { - var addr = '127.0.0.1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '127.0.0.1'); - }); - - it('should convert IPv6 :: byte address to canonical textual representation (RFC 5952)', function() { - var addr = '::'; - var bytes = UTIL.createBuffer().fillWithByte(0, 16).getBytes(); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '::'); - }); - - it('should convert IPv6 ::1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '::1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '::1'); - }); - - it('should convert IPv6 1:: byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1::'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::'); - }); - - it('should convert IPv6 0:0:0:0:0:0:0:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '0:0:0:0:0:0:0:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '::1'); - }); - - it('should convert IPv6 1:0:0:0:0:0:0:0 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1:0:0:0:0:0:0:0'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::'); - }); - - it('should convert IPv6 1::1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1::1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::1'); - }); - - it('should convert IPv6 1:0:0:0:0:0:0:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1:0:0:0:0:0:0:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::1'); - }); - - it('should convert IPv6 1:0000:0000:0000:0000:0000:0000:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1:0000:0000:0000:0000:0000:0000:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::1'); - }); - - it('should convert IPv6 1:0:0:1:1:1:0:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1:0:0:1:1:1:0:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1::1:1:1:0:1'); - }); - - it('should convert IPv6 1:0:1:1:1:0:0:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '1:0:1:1:1:0:0:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '1:0:1:1:1::1'); - }); - - it('should convert IPv6 2001:db8:0:1:1:1:1:1 byte address to canonical textual representation (RFC 5952)', function() { - var addr = '2001:db8:0:1:1:1:1:1'; - var bytes = UTIL.bytesFromIP(addr); - var addr = UTIL.bytesToIP(bytes); - ASSERT.equal(addr, '2001:db8:0:1:1:1:1:1'); - }); - }); -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/util' - ], function(UTIL) { - Tests( - // Global provided by test harness - ASSERT, - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/test/x509.js b/includes/external/school/node_modules/node-forge/nodejs/test/x509.js deleted file mode 100644 index 47a9e7f..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/test/x509.js +++ /dev/null @@ -1,734 +0,0 @@ -(function() { - -function Tests(ASSERT, PKI, MD, UTIL) { - var _pem = { - privateKey: '-----BEGIN RSA PRIVATE KEY-----\r\n' + - 'MIICXQIBAAKBgQDL0EugUiNGMWscLAVM0VoMdhDZEJOqdsUMpx9U0YZI7szokJqQ\r\n' + - 'NIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMGTkP3VF29vXBo+dLq5e+8VyAy\r\n' + - 'Q3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGtvnM+z0MYDdKo80efzwIDAQAB\r\n' + - 'AoGAIzkGONi5G+JifmXlLJdplom486p3upf4Ce2/7mqfaG9MnkyPSairKD/JXvfh\r\n' + - 'NNWkkN8DKKDKBcVVElPgORYT0qwrWc7ueLBMUCbRXb1ZyfEulimG0R3kjUh7NYau\r\n' + - 'DaIkVgfykXGSQMZx8FoaT6L080zd+0emKDDYRrb+/kgJNJECQQDoUZoiC2K/DWNY\r\n' + - 'h3/ppZ0ane2y4SBmJUHJVMPQ2CEgxsrJTxet668ckNCKaOP/3VFPoWC41f17DvKq\r\n' + - 'noYINNntAkEA4JbZBZBVUrQFhHlrpXT4jzqtO2RlKZzEq8qmFZfEErxOT1WMyyCi\r\n' + - 'lAQ5gUKardo1Kf0omC8Xq/uO9ZYdED55KwJBALs6cJ65UFaq4oLJiQPzLd7yokuE\r\n' + - 'dcj8g71PLBTW6jPxIiMFNA89nz3FU9wIVp+xbMNhSoMMKqIPVPC+m0Rn260CQQDA\r\n' + - 'I83fWK/mZWUjBM33a68KumRiH238v8XyQxj7+C8i6D8G2GXvkigFAehAkb7LZZd+\r\n' + - 'KLuGFyPlWv3fVWHf99KpAkBQFKk3MRMl6IGJZUEFQe4l5whm8LkGU4acSqv9B3xt\r\n' + - 'qROkCrsFrMPqjuuzEmyHoQZ64r2PLJg7FOuyhBnQUOt4\r\n' + - '-----END RSA PRIVATE KEY-----\r\n', - publicKey: '-----BEGIN PUBLIC KEY-----\r\n' + - 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDL0EugUiNGMWscLAVM0VoMdhDZ\r\n' + - 'EJOqdsUMpx9U0YZI7szokJqQNIwokiQ6EonNnWSMlIvy46AhnlRYn+ezeTeU7eMG\r\n' + - 'TkP3VF29vXBo+dLq5e+8VyAyQ3FzM1wI4ts4hRACF8w6mqygXQ7i/SDu8/rXqRGt\r\n' + - 'vnM+z0MYDdKo80efzwIDAQAB\r\n' + - '-----END PUBLIC KEY-----\r\n', - certificate: '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIDIjCCAougAwIBAgIJANE2aHSbwpaRMA0GCSqGSIb3DQEBBQUAMGoxCzAJBgNV\r\n' + - 'BAYTAlVTMREwDwYDVQQIEwhWaXJnaW5pYTETMBEGA1UEBxMKQmxhY2tzYnVyZzEN\r\n' + - 'MAsGA1UEChMEVGVzdDENMAsGA1UECxMEVGVzdDEVMBMGA1UEAxMMbXlzZXJ2ZXIu\r\n' + - 'Y29tMB4XDTEwMDYxOTE3MzYyOFoXDTExMDYxOTE3MzYyOFowajELMAkGA1UEBhMC\r\n' + - 'VVMxETAPBgNVBAgTCFZpcmdpbmlhMRMwEQYDVQQHEwpCbGFja3NidXJnMQ0wCwYD\r\n' + - 'VQQKEwRUZXN0MQ0wCwYDVQQLEwRUZXN0MRUwEwYDVQQDEwxteXNlcnZlci5jb20w\r\n' + - 'gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMvQS6BSI0YxaxwsBUzRWgx2ENkQ\r\n' + - 'k6p2xQynH1TRhkjuzOiQmpA0jCiSJDoSic2dZIyUi/LjoCGeVFif57N5N5Tt4wZO\r\n' + - 'Q/dUXb29cGj50url77xXIDJDcXMzXAji2ziFEAIXzDqarKBdDuL9IO7z+tepEa2+\r\n' + - 'cz7PQxgN0qjzR5/PAgMBAAGjgc8wgcwwHQYDVR0OBBYEFPV1Y+DHXW6bA/r9sv1y\r\n' + - 'NJ8jAwMAMIGcBgNVHSMEgZQwgZGAFPV1Y+DHXW6bA/r9sv1yNJ8jAwMAoW6kbDBq\r\n' + - 'MQswCQYDVQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExEzARBgNVBAcTCkJsYWNr\r\n' + - 'c2J1cmcxDTALBgNVBAoTBFRlc3QxDTALBgNVBAsTBFRlc3QxFTATBgNVBAMTDG15\r\n' + - 'c2VydmVyLmNvbYIJANE2aHSbwpaRMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\r\n' + - 'BQADgYEARdH2KOlJWTC1CS2y/PAvg4uiM31PXMC1hqSdJlnLM1MY4hRfuf9VyTeX\r\n' + - 'Y6FdybcyDLSxKn9id+g9229ci9/s9PI+QmD5vXd8yZyScLc2JkYB4GC6+9D1+/+x\r\n' + - 's2hzMxuK6kzZlP+0l9LGcraMQPGRydjCARZZm4Uegln9rh85XFQ=\r\n' + - '-----END CERTIFICATE-----\r\n' - }; - - describe('x509', function() { - it('should convert certificate to/from PEM', function() { - var certificate = PKI.certificateFromPem(_pem.certificate); - ASSERT.equal(PKI.certificateToPem(certificate), _pem.certificate); - }); - - it('should verify self-signed certificate', function() { - var certificate = PKI.certificateFromPem(_pem.certificate); - ASSERT.ok(certificate.verify(certificate)); - }); - - it('should generate and verify a self-signed certificate', function() { - var keys = { - privateKey: PKI.privateKeyFromPem(_pem.privateKey), - publicKey: PKI.publicKeyFromPem(_pem.publicKey) - }; - var attrs = [{ - name: 'commonName', - value: 'example.org' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var cert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: attrs, - issuer: attrs, - isCA: true - }); - - var pem = PKI.certificateToPem(cert); - cert = PKI.certificateFromPem(pem); - - // verify certificate chain - var caStore = PKI.createCaStore(); - caStore.addCertificate(cert); - PKI.verifyCertificateChain(caStore, [cert], function(vfd, depth, chain) { - ASSERT.equal(vfd, true); - ASSERT.ok(cert.verifySubjectKeyIdentifier()); - return true; - }); - }); - - it('should generate and fail to verify a self-signed certificate that is not in the CA store', function() { - var keys = { - privateKey: PKI.privateKeyFromPem(_pem.privateKey), - publicKey: PKI.publicKeyFromPem(_pem.publicKey) - }; - var attrs = [{ - name: 'commonName', - value: 'example.org' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var cert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: attrs, - issuer: attrs, - isCA: true - }); - - var pem = PKI.certificateToPem(cert); - cert = PKI.certificateFromPem(pem); - - // verify certificate chain - var caStore = PKI.createCaStore(); - PKI.verifyCertificateChain(caStore, [cert], function(vfd, depth, chain) { - ASSERT.equal(vfd, PKI.certificateError.unknown_ca); - return true; - }); - }); - - it('should verify certificate chain ending with intermediate certificate from CA store', function() { - var keys = { - privateKey: PKI.privateKeyFromPem(_pem.privateKey), - publicKey: PKI.publicKeyFromPem(_pem.publicKey) - }; - var entity = [{ - name: 'commonName', - value: 'example.org' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var intermediate = [{ - name: 'commonName', - value: 'intermediate' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var root = [{ - name: 'commonName', - value: 'root' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - - var intermediateCert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: intermediate, - issuer: root, - isCA: true - }); - - var entityCert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: entity, - issuer: intermediate, - isCA: false - }); - - // verify certificate chain - var caStore = PKI.createCaStore(); - caStore.addCertificate(intermediateCert); - var chain = [entityCert, intermediateCert]; - PKI.verifyCertificateChain(caStore, chain, function(vfd, depth, chain) { - ASSERT.equal(vfd, true); - return true; - }); - }); - - it('should fail to verify certificate chain ending with non-CA intermediate certificate from CA store', function() { - var keys = { - privateKey: PKI.privateKeyFromPem(_pem.privateKey), - publicKey: PKI.publicKeyFromPem(_pem.publicKey) - }; - var entity = [{ - name: 'commonName', - value: 'example.org' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var intermediate = [{ - name: 'commonName', - value: 'intermediate' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - var root = [{ - name: 'commonName', - value: 'root' - }, { - name: 'countryName', - value: 'US' - }, { - shortName: 'ST', - value: 'Virginia' - }, { - name: 'localityName', - value: 'Blacksburg' - }, { - name: 'organizationName', - value: 'Test' - }, { - shortName: 'OU', - value: 'Test' - }]; - - var intermediateCert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: intermediate, - issuer: root, - isCA: false - }); - - var entityCert = createCertificate({ - publicKey: keys.publicKey, - signingKey: keys.privateKey, - serialNumber: '01', - subject: entity, - issuer: intermediate, - isCA: false - }); - - // verify certificate chain - var caStore = PKI.createCaStore(); - caStore.addCertificate(intermediateCert); - var chain = [entityCert, intermediateCert]; - PKI.verifyCertificateChain(caStore, chain, function(vfd, depth, chain) { - if(depth === 0) { - ASSERT.equal(vfd, true); - } else { - ASSERT.equal(vfd, PKI.certificateError.bad_certificate); - } - return true; - }); - }); - - it('should verify certificate with sha1WithRSAEncryption signature', function() { - var certPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIDZDCCAs2gAwIBAgIKQ8fjjgAAAABh3jANBgkqhkiG9w0BAQUFADBGMQswCQYD\r\n' + - 'VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu\r\n' + - 'dGVybmV0IEF1dGhvcml0eTAeFw0xMjA2MjcxMzU5MTZaFw0xMzA2MDcxOTQzMjda\r\n' + - 'MGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N\r\n' + - 'b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRYwFAYDVQQDEw13d3cu\r\n' + - 'Z29vZ2xlLmRlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw2Hw3vNy5QMSd\r\n' + - '0/iMCS8lwZk9lnEk2NmrJt6vGJfRGlBprtHp5lpMFMoi+x8m8EwGVxXHGp7hLyN/\r\n' + - 'gXuUjL7/DY9fxxx9l77D+sDZz7jfUfWmhS03Ra1FbT6myF8miVZFChJ8XgWzioJY\r\n' + - 'gyNdRUC9149yrXdPWrSmSVaT0+tUCwIDAQABo4IBNjCCATIwHQYDVR0lBBYwFAYI\r\n' + - 'KwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBTiQGhrO3785rMPIKZ/zQEl5RyS\r\n' + - '0TAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra42sSJDBbBgNVHR8EVDBSMFCg\r\n' + - 'TqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dvb2dsZUludGVybmV0QXV0aG9y\r\n' + - 'aXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNybDBmBggrBgEFBQcBAQRaMFgw\r\n' + - 'VgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRpYy5jb20vR29vZ2xlSW50ZXJu\r\n' + - 'ZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkuY3J0MAwGA1UdEwEB\r\n' + - '/wQCMAAwDQYJKoZIhvcNAQEFBQADgYEAVJ0qt/MBvHEPuWHeH51756qy+lBNygLA\r\n' + - 'Xp5Gq+xHUTOzRty61BR05zv142hYAGWvpvnEOJ/DI7V3QlXK8a6dQ+du97obQJJx\r\n' + - '7ekqtfxVzmlSb23halYSoXmWgP8Tq0VUDsgsSLE7fS8JuO1soXUVKj1/6w189HL6\r\n' + - 'LsngXwZSuL0=\r\n' + - '-----END CERTIFICATE-----\r\n'; - var issuerPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIICsDCCAhmgAwIBAgIDC2dxMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT\r\n' + - 'MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0\r\n' + - 'aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDkwNjA4MjA0MzI3WhcNMTMwNjA3MTk0MzI3\r\n' + - 'WjBGMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZ\r\n' + - 'R29vZ2xlIEludGVybmV0IEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw\r\n' + - 'gYkCgYEAye23pIucV+eEPkB9hPSP0XFjU5nneXQUr0SZMyCSjXvlKAy6rWxJfoNf\r\n' + - 'NFlOCnowzdDXxFdF7dWq1nMmzq0yE7jXDx07393cCDaob1FEm8rWIFJztyaHNWrb\r\n' + - 'qeXUWaUr/GcZOfqTGBhs3t0lig4zFEfC7wFQeeT9adGnwKziV28CAwEAAaOBozCB\r\n' + - 'oDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFL/AMOv1QxE+Z7qekfv8atrjaxIk\r\n' + - 'MB8GA1UdIwQYMBaAFEjmaPkr0rKV10fYIyAQTzOYkJ/UMBIGA1UdEwEB/wQIMAYB\r\n' + - 'Af8CAQAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v\r\n' + - 'Y3Jscy9zZWN1cmVjYS5jcmwwDQYJKoZIhvcNAQEFBQADgYEAuIojxkiWsRF8YHde\r\n' + - 'BZqrocb6ghwYB8TrgbCoZutJqOkM0ymt9e8kTP3kS8p/XmOrmSfLnzYhLLkQYGfN\r\n' + - '0rTw8Ktx5YtaiScRhKqOv5nwnQkhClIZmloJ0pC3+gz4fniisIWvXEyZ2VxVKfml\r\n' + - 'UUIuOss4jHg7y/j7lYe8vJD5UDI=\r\n' + - '-----END CERTIFICATE-----\r\n'; - var cert = PKI.certificateFromPem(certPem, true); - var issuer = PKI.certificateFromPem(issuerPem); - ASSERT.ok(issuer.verify(cert)); - }); - - it('should verify certificate with sha256WithRSAEncryption signature', function() { - var certPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIDuzCCAqOgAwIBAgIEO5vZjDANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQGEwJE\r\n' + - 'RTEPMA0GA1UEChMGRWxzdGVyMQswCQYDVQQLEwJDQTEZMBcGA1UEAxMQRWxzdGVy\r\n' + - 'U29mdFRlc3RDQTAeFw0xMDA5MTUwNTM4MjRaFw0xMzA5MTUwNTM4MjRaMCsxFDAS\r\n' + - 'BgNVBAUTCzEwMDIzMTQ5OTRDMRMwEQYDVQQDEwoxMDAyMzE0OTk0MIGfMA0GCSqG\r\n' + - 'SIb3DQEBAQUAA4GNADCBiQKBgQCLPqjbwjsugzw6+qwwm/pdzDwk7ASIsBYJ17GT\r\n' + - 'qyT0zCnYmdDDGWsYc+xxFVVIi8xBt6Mlq8Rwj+02UJhY9qm6zRA9MqFZC3ih+HoW\r\n' + - 'xq7H8N2d10N0rX6h5PSjkF5fU5ugncZmppsRGJ9DNXgwjpf/CsH2rqThUzK4xfrq\r\n' + - 'jpDS/wIDAQABo4IBTjCCAUowDgYDVR0PAQH/BAQDAgUgMAwGA1UdEwEB/wQCMAAw\r\n' + - 'HQYDVR0OBBYEFF1h7H37OQivS57GD8+nK6VsgMPTMIGXBgNVHR8EgY8wgYwwgYmg\r\n' + - 'gYaggYOGgYBsZGFwOi8vMTkyLjE2OC42LjI0OjM4OS9sJTNkQ0ElMjBaZXJ0aWZp\r\n' + - 'a2F0ZSxvdSUzZENBLGNuJTNkRWxzdGVyU29mdFRlc3RDQSxkYyUzZHdpZXNlbCxk\r\n' + - 'YyUzZGVsc3RlcixkYyUzZGRlPz9iYXNlPyhvYmplY3RDbGFzcz0qKTBxBgNVHSME\r\n' + - 'ajBogBRBILMYmlZu//pj3wjDe2UPkq7jk6FKpEgwRjELMAkGA1UEBhMCREUxDzAN\r\n' + - 'BgNVBAoTBkVsc3RlcjEPMA0GA1UECxMGUm9vdENBMRUwEwYDVQQDEwxFbHN0ZXJS\r\n' + - 'b290Q0GCBDuayikwDQYJKoZIhvcNAQELBQADggEBAK8Z1+/VNyU5w/EiyhFH5aRE\r\n' + - 'Mzxo0DahqKEm4pW5haBgKubJwZGs+CrBZR70TPbZGgJd36eyMgeXb/06lBnxewii\r\n' + - 'I/aY6wMTviQTpqFnz5m0Le8UhH+hY1bqNG/vf6J+1gbOSrZyhAUV+MDJbL/OkzX4\r\n' + - 'voVAfUBqSODod0f5wCW2RhvBmB9E62baP6qizdxyPA4iV16H4C0etd/7coLX6NZC\r\n' + - 'oz3Yu0IRTQCH+YrpfIbxGb0grNhtCTfFpa287fuzu8mIEvLNr8GibhBXmQg7iJ+y\r\n' + - 'q0VIyZLY8k6jEPrUB5Iv5ouSR19Dda/2+xJPlT/bosuNcErEuk/yKAHWAzwm1wQ=\r\n' + - '-----END CERTIFICATE-----\r\n'; - var issuerPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIESjCCAzKgAwIBAgIEO5rKKTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQGEwJE\r\n' + - 'RTEPMA0GA1UEChMGRWxzdGVyMQ8wDQYDVQQLEwZSb290Q0ExFTATBgNVBAMTDEVs\r\n' + - 'c3RlclJvb3RDQTAeFw0wOTA3MjgwODE5MTFaFw0xNDA3MjgwODE5MTFaMEYxCzAJ\r\n' + - 'BgNVBAYTAkRFMQ8wDQYDVQQKEwZFbHN0ZXIxCzAJBgNVBAsTAkNBMRkwFwYDVQQD\r\n' + - 'ExBFbHN0ZXJTb2Z0VGVzdENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\r\n' + - 'AQEAv5uoKLnxXQe75iqwqgyt3H6MDAx/wvUVs26+2+yHpEUb/2gA3L8E+NChSb9E\r\n' + - 'aNgxxoac3Yhvxzq2mPpih3vkY7Xw512Tm8l/OPbT8kbmBJmYZneFALXHytAIZiEf\r\n' + - 'e0ZYNKAlClFIgNP5bE9UjTqVEEoSiUhpTubM6c5xEYVznnwPBoYQ0ari7RTDYnME\r\n' + - 'HK4vMfoeBeWHYPiEygNHnGUG8d3merRC/lQASUtL6ikmLWKCKHfyit5ACzPNKAtw\r\n' + - 'IzHAzD5ek0BpcUTci8hUsKz2ZvmoZcjPyj63veQuMYS5cTMgr3bfz9uz1xuoEDsb\r\n' + - 'Sv9rQX9Iw3N7yMpxTDJTqGKhYwIDAQABo4IBPjCCATowDgYDVR0PAQH/BAQDAgEG\r\n' + - 'MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEEgsxiaVm7/+mPfCMN7ZQ+S\r\n' + - 'ruOTMIGXBgNVHR8EgY8wgYwwgYmggYaggYOGgYBsZGFwOi8vMTkyLjE2OC42LjI0\r\n' + - 'OjM4OS9sJTNkQ0ElMjBaZXJ0aWZpa2F0ZSxvdSUzZFJvb3RDQSxjbiUzZEVsc3Rl\r\n' + - 'clJvb3RDQSxkYyUzZHdpZXNlbCxkYyUzZGVsc3RlcixkYyUzZGRlPz9iYXNlPyhv\r\n' + - 'YmplY3RDbGFzcz0qKTBbBgNVHSMEVDBSoUqkSDBGMQswCQYDVQQGEwJERTEPMA0G\r\n' + - 'A1UEChMGRWxzdGVyMQ8wDQYDVQQLEwZSb290Q0ExFTATBgNVBAMTDEVsc3RlclJv\r\n' + - 'b3RDQYIEO5rKADANBgkqhkiG9w0BAQsFAAOCAQEAFauDnfHSbgRmbFkpQUXM5wKi\r\n' + - 'K5STAaVps201iAjacX5EsOs5L37VUMoT9G2DAE8Z6B1pIiR3zcd3UpiHnFlUTC0f\r\n' + - 'ZdOCXzDkOfziKY/RzuUsLNFUhBizCIA0+XcKgm3dSA5ex8fChLJddSYheSLuPua7\r\n' + - 'iNMuzaU2YnevbMwpdEsl55Qr/uzcc0YM/mCuM4vsNFyFml91SQyPPmdR3VvGOoGl\r\n' + - 'qS1R0HSoPJUvr0N0kARwD7kO3ikcJ6FxBCsgVLZHGJC+q8PQNZmVMbfgjH4nAyP8\r\n' + - 'u7Qe03v2WLW0UgKu2g0UcQXWXbovktpZoK0fUOwv3bqsZ0K1IjVvMKG8OysUvA==\r\n' + - '-----END CERTIFICATE-----\r\n'; - var cert = PKI.certificateFromPem(certPem, true); - var issuer = PKI.certificateFromPem(issuerPem); - ASSERT.ok(issuer.verify(cert)); - }); - - it('should import certificate with sha256 RSASSA-PSS signature', function() { - var certPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIERzCCAvugAwIBAgIEO50CcjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQC\r\n' + - 'AQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAQUAogMCASAwRjELMAkGA1UE\r\n' + - 'BhMCREUxDzANBgNVBAoTBkVsc3RlcjELMAkGA1UECxMCQ0ExGTAXBgNVBAMTEEVs\r\n' + - 'c3RlclNvZnRUZXN0Q0EwHhcNMTEwNzI4MTIxMzU3WhcNMTQwNzI4MTIxMzU3WjAr\r\n' + - 'MRQwEgYDVQQFEwsxMDAyNzUzMzI1QzETMBEGA1UEAxMKMTAwMjc1MzMyNTCCASIw\r\n' + - 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHCogo7LVUkxWsMIc/0jgH2PCLt\r\n' + - 'ukbATPehxWBG1XUPrz53lWgFJzlZaKLlLVVnXrfULaifuOKlZP6SM1JQlL1JuYgY\r\n' + - 'AdgZyHjderNIk5NsSTmefwonSn/ukri5IRTH420oHtSjxk6+/DXlWnQy5OzTN6Bq\r\n' + - 'jVJo8L+TTmf2jWuEam5cWa+YVP2k3tIqX5yMUDFjKO4znHdtIkHnBE0Kx03rWQRB\r\n' + - 'TSYWDgDm2gttdOs9JVeuW0nnwQj27uo9gOR0iyaUjVrKLZ95p6zpXhM4uMSVRNeo\r\n' + - 'LqkdqP2n+4pDXZVqLNgjkHQUS/xq9Q/kYgT2J7wkGfYxP9to7TG7vra1eOECAwEA\r\n' + - 'AaOB7zCB7DAOBgNVHQ8BAf8EBAMCBSAwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU\r\n' + - 'NDJ2BZIk6ukLqkdmttH12bu2leswOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny\r\n' + - 'bC5lbHN0ZXIuZGUvRWxzdGVyU29mdFRlc3RDQS5jcmwwcQYDVR0jBGowaIAU1R9A\r\n' + - 'HmpdzaxK3v+ihQsEpAFgzOKhSqRIMEYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQKEwZF\r\n' + - 'bHN0ZXIxDzANBgNVBAsTBlJvb3RDQTEVMBMGA1UEAxMMRWxzdGVyUm9vdENBggQ7\r\n' + - 'msqPMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0B\r\n' + - 'AQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOCAQEAJBYNRZpe+z3yPPLV539Yci6OfjVg\r\n' + - 'vs1e3rvSvcpFaqRJ8vZ8WNx3uuRQZ6B4Z3YEc00UJAOl3wU6KhamyryK2YvCrPg+\r\n' + - 'TS5QDXNaO2z/rAnY1wWSlwBPlhqpMRrNv9cRXBcgK5YxprjytCVYN0UHdintgYxG\r\n' + - 'fg7QYiFb00UXxAza1AFrpG+RqySFfO1scmu4kgpeb6A3USnQ0r6rZz6dt6NqgZZ6\r\n' + - 'oUpDOCvnS9XSOWuvJirV8hIU0KAagguTbwfTqt9nt0wDlwZpemsJZ4Vvnvy8d9Jf\r\n' + - 'zA68EWHbZLr2QP9hb3sHCWJgplMsTJnUwRfi2hf5KNtP8Xg5DSLMfTEbhw==\r\n' + - '-----END CERTIFICATE-----\r\n'; - var cert = PKI.certificateFromPem(certPem, true); - - ASSERT.equal(cert.signatureOid, PKI.oids['RSASSA-PSS']); - ASSERT.equal(cert.signatureParameters.hash.algorithmOid, PKI.oids['sha256']); - ASSERT.equal(cert.signatureParameters.mgf.algorithmOid, PKI.oids['mgf1']); - ASSERT.equal(cert.signatureParameters.mgf.hash.algorithmOid, PKI.oids['sha256']); - ASSERT.equal(cert.siginfo.algorithmOid, PKI.oids['RSASSA-PSS']); - ASSERT.equal(cert.siginfo.parameters.hash.algorithmOid, PKI.oids['sha256']); - ASSERT.equal(cert.siginfo.parameters.mgf.algorithmOid, PKI.oids['mgf1']); - ASSERT.equal(cert.siginfo.parameters.mgf.hash.algorithmOid, PKI.oids['sha256']); - }); - - it('should export certificate with sha256 RSASSA-PSS signature', function() { - var certPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIERzCCAvugAwIBAgIEO50CcjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQC\r\n' + - 'AQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAQUAogMCASAwRjELMAkGA1UE\r\n' + - 'BhMCREUxDzANBgNVBAoTBkVsc3RlcjELMAkGA1UECxMCQ0ExGTAXBgNVBAMTEEVs\r\n' + - 'c3RlclNvZnRUZXN0Q0EwHhcNMTEwNzI4MTIxMzU3WhcNMTQwNzI4MTIxMzU3WjAr\r\n' + - 'MRQwEgYDVQQFEwsxMDAyNzUzMzI1QzETMBEGA1UEAxMKMTAwMjc1MzMyNTCCASIw\r\n' + - 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHCogo7LVUkxWsMIc/0jgH2PCLt\r\n' + - 'ukbATPehxWBG1XUPrz53lWgFJzlZaKLlLVVnXrfULaifuOKlZP6SM1JQlL1JuYgY\r\n' + - 'AdgZyHjderNIk5NsSTmefwonSn/ukri5IRTH420oHtSjxk6+/DXlWnQy5OzTN6Bq\r\n' + - 'jVJo8L+TTmf2jWuEam5cWa+YVP2k3tIqX5yMUDFjKO4znHdtIkHnBE0Kx03rWQRB\r\n' + - 'TSYWDgDm2gttdOs9JVeuW0nnwQj27uo9gOR0iyaUjVrKLZ95p6zpXhM4uMSVRNeo\r\n' + - 'LqkdqP2n+4pDXZVqLNgjkHQUS/xq9Q/kYgT2J7wkGfYxP9to7TG7vra1eOECAwEA\r\n' + - 'AaOB7zCB7DAOBgNVHQ8BAf8EBAMCBSAwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU\r\n' + - 'NDJ2BZIk6ukLqkdmttH12bu2leswOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny\r\n' + - 'bC5lbHN0ZXIuZGUvRWxzdGVyU29mdFRlc3RDQS5jcmwwcQYDVR0jBGowaIAU1R9A\r\n' + - 'HmpdzaxK3v+ihQsEpAFgzOKhSqRIMEYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQKEwZF\r\n' + - 'bHN0ZXIxDzANBgNVBAsTBlJvb3RDQTEVMBMGA1UEAxMMRWxzdGVyUm9vdENBggQ7\r\n' + - 'msqPMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0B\r\n' + - 'AQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOCAQEAJBYNRZpe+z3yPPLV539Yci6OfjVg\r\n' + - 'vs1e3rvSvcpFaqRJ8vZ8WNx3uuRQZ6B4Z3YEc00UJAOl3wU6KhamyryK2YvCrPg+\r\n' + - 'TS5QDXNaO2z/rAnY1wWSlwBPlhqpMRrNv9cRXBcgK5YxprjytCVYN0UHdintgYxG\r\n' + - 'fg7QYiFb00UXxAza1AFrpG+RqySFfO1scmu4kgpeb6A3USnQ0r6rZz6dt6NqgZZ6\r\n' + - 'oUpDOCvnS9XSOWuvJirV8hIU0KAagguTbwfTqt9nt0wDlwZpemsJZ4Vvnvy8d9Jf\r\n' + - 'zA68EWHbZLr2QP9hb3sHCWJgplMsTJnUwRfi2hf5KNtP8Xg5DSLMfTEbhw==\r\n' + - '-----END CERTIFICATE-----\r\n'; - var cert = PKI.certificateFromPem(certPem, true); - ASSERT.equal(PKI.certificateToPem(cert), certPem); - }); - - it('should verify certificate with sha256 RSASSA-PSS signature', function() { - var certPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIERzCCAvugAwIBAgIEO50CcjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQC\r\n' + - 'AQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAQUAogMCASAwRjELMAkGA1UE\r\n' + - 'BhMCREUxDzANBgNVBAoTBkVsc3RlcjELMAkGA1UECxMCQ0ExGTAXBgNVBAMTEEVs\r\n' + - 'c3RlclNvZnRUZXN0Q0EwHhcNMTEwNzI4MTIxMzU3WhcNMTQwNzI4MTIxMzU3WjAr\r\n' + - 'MRQwEgYDVQQFEwsxMDAyNzUzMzI1QzETMBEGA1UEAxMKMTAwMjc1MzMyNTCCASIw\r\n' + - 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALHCogo7LVUkxWsMIc/0jgH2PCLt\r\n' + - 'ukbATPehxWBG1XUPrz53lWgFJzlZaKLlLVVnXrfULaifuOKlZP6SM1JQlL1JuYgY\r\n' + - 'AdgZyHjderNIk5NsSTmefwonSn/ukri5IRTH420oHtSjxk6+/DXlWnQy5OzTN6Bq\r\n' + - 'jVJo8L+TTmf2jWuEam5cWa+YVP2k3tIqX5yMUDFjKO4znHdtIkHnBE0Kx03rWQRB\r\n' + - 'TSYWDgDm2gttdOs9JVeuW0nnwQj27uo9gOR0iyaUjVrKLZ95p6zpXhM4uMSVRNeo\r\n' + - 'LqkdqP2n+4pDXZVqLNgjkHQUS/xq9Q/kYgT2J7wkGfYxP9to7TG7vra1eOECAwEA\r\n' + - 'AaOB7zCB7DAOBgNVHQ8BAf8EBAMCBSAwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU\r\n' + - 'NDJ2BZIk6ukLqkdmttH12bu2leswOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2Ny\r\n' + - 'bC5lbHN0ZXIuZGUvRWxzdGVyU29mdFRlc3RDQS5jcmwwcQYDVR0jBGowaIAU1R9A\r\n' + - 'HmpdzaxK3v+ihQsEpAFgzOKhSqRIMEYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQKEwZF\r\n' + - 'bHN0ZXIxDzANBgNVBAsTBlJvb3RDQTEVMBMGA1UEAxMMRWxzdGVyUm9vdENBggQ7\r\n' + - 'msqPMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkqhkiG9w0B\r\n' + - 'AQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOCAQEAJBYNRZpe+z3yPPLV539Yci6OfjVg\r\n' + - 'vs1e3rvSvcpFaqRJ8vZ8WNx3uuRQZ6B4Z3YEc00UJAOl3wU6KhamyryK2YvCrPg+\r\n' + - 'TS5QDXNaO2z/rAnY1wWSlwBPlhqpMRrNv9cRXBcgK5YxprjytCVYN0UHdintgYxG\r\n' + - 'fg7QYiFb00UXxAza1AFrpG+RqySFfO1scmu4kgpeb6A3USnQ0r6rZz6dt6NqgZZ6\r\n' + - 'oUpDOCvnS9XSOWuvJirV8hIU0KAagguTbwfTqt9nt0wDlwZpemsJZ4Vvnvy8d9Jf\r\n' + - 'zA68EWHbZLr2QP9hb3sHCWJgplMsTJnUwRfi2hf5KNtP8Xg5DSLMfTEbhw==\r\n' + - '-----END CERTIFICATE-----\r\n'; - var issuerPem = '-----BEGIN CERTIFICATE-----\r\n' + - 'MIIEZDCCAxigAwIBAgIEO5rKjzBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQC\r\n' + - 'AQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAQUAogMCASAwRjELMAkGA1UE\r\n' + - 'BhMCREUxDzANBgNVBAoTBkVsc3RlcjEPMA0GA1UECxMGUm9vdENBMRUwEwYDVQQD\r\n' + - 'EwxFbHN0ZXJSb290Q0EwHhcNMTEwNzI4MTExNzI4WhcNMTYwNzI4MTExNzI4WjBG\r\n' + - 'MQswCQYDVQQGEwJERTEPMA0GA1UEChMGRWxzdGVyMQswCQYDVQQLEwJDQTEZMBcG\r\n' + - 'A1UEAxMQRWxzdGVyU29mdFRlc3RDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\r\n' + - 'AQoCggEBAMFpz3sXnXq4ZUBdYdpG5DJVfITLXYwXPfEJzr1pLRfJ2eMPn7k3B/2g\r\n' + - 'bvuH30zKmDRjlfV51sFw4l1l+cQugzy5FEOrfE6g7IvhpBUf9SQujVWtE3BoSRR5\r\n' + - 'pSGbIWC7sm2SG0drpoCRpL0xmWZlAUS5mz7hBecJC/kKkKeOxUg5h492XQgWd0ow\r\n' + - '6GlyQBxJCmxgQBMnLS0stecs234hR5gvTHic50Ey+gRMPsTyco2Fm0FqvXtBuOsj\r\n' + - 'zAW7Nk2hnM6awFHVMDBLm+ClE1ww0dLW0ujkdoGsTEbvmM/w8MBI6WAiWaanjK/x\r\n' + - 'lStmQeUVXKd+AfuzT/FIPrwANcC1qGUCAwEAAaOB8TCB7jAOBgNVHQ8BAf8EBAMC\r\n' + - 'AQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU1R9AHmpdzaxK3v+ihQsE\r\n' + - 'pAFgzOIwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5lbHN0ZXIuZGUvRWxz\r\n' + - 'dGVyUm9vdENBLmNybDBxBgNVHSMEajBogBS3zfTokckL2H/fTojW02K+metEcaFK\r\n' + - 'pEgwRjELMAkGA1UEBhMCREUxDzANBgNVBAoTBkVsc3RlcjEPMA0GA1UECxMGUm9v\r\n' + - 'dENBMRUwEwYDVQQDEwxFbHN0ZXJSb290Q0GCBDuaylowQQYJKoZIhvcNAQEKMDSg\r\n' + - 'DzANBglghkgBZQMEAgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEFAKID\r\n' + - 'AgEgA4IBAQBjT107fBmSfQNUYCpXIlaS/pogPoCahuC1g8QDtq6IEVXoEgXCzfVN\r\n' + - 'JYHyYOQOraP4O2LEcXpo/oc0MMpVF06QLKG/KieUE0mrZnsCJ3GLSJkM8tI8bRHj\r\n' + - '8tAhlViMacUqnKKufCs/rIN25JB57+sCyFqjtRbSt88e+xqFJ5I79Btp/bNtoj2G\r\n' + - 'OJGl997EPua9/yJuvdA9W67WO/KwEh+FqylB1pAapccOHqttwu4QJIc/XJfG5rrf\r\n' + - '8QZz8HIuOcroA4zIrprQ1nJRCuMII04ueDtBVz1eIEmqNEUkr09JdK8M0LKH0lMK\r\n' + - 'Ysgjai/P2mPVVwhVw6dHzUVRLXh3xIQr\r\n' + - '-----END CERTIFICATE-----\r\n'; - var cert = PKI.certificateFromPem(certPem, true); - var issuer = PKI.certificateFromPem(issuerPem); - ASSERT.ok(issuer.verify(cert)); - }); - }); - - describe('public key fingerprints', function() { - it('should get a SHA-1 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint(publicKey, {type: 'RSAPublicKey'}); - ASSERT.equal(fp.toHex(), 'f57563e0c75d6e9b03fafdb2fd72349f23030300'); - }); - - it('should get a SHA-1 SubjectPublicKeyInfo fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, {type: 'SubjectPublicKeyInfo'}); - ASSERT.equal(fp.toHex(), '984724bc548bbc2c8acbac044bd8d518abd26dd8'); - }); - - it('should get a hex SHA-1 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, {type: 'RSAPublicKey', encoding: 'hex'}); - ASSERT.equal(fp, 'f57563e0c75d6e9b03fafdb2fd72349f23030300'); - }); - - it('should get a hex, colon-delimited SHA-1 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, {type: 'RSAPublicKey', encoding: 'hex', delimiter: ':'}); - ASSERT.equal( - fp, 'f5:75:63:e0:c7:5d:6e:9b:03:fa:fd:b2:fd:72:34:9f:23:03:03:00'); - }); - - it('should get a hex, colon-delimited SHA-1 SubjectPublicKeyInfo fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, { - type: 'SubjectPublicKeyInfo', - encoding: 'hex', - delimiter: ':' - }); - ASSERT.equal( - fp, '98:47:24:bc:54:8b:bc:2c:8a:cb:ac:04:4b:d8:d5:18:ab:d2:6d:d8'); - }); - - it('should get an MD5 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, {md: MD.md5.create(), type: 'RSAPublicKey'}); - ASSERT.equal(fp.toHex(), 'c7da180cc48d31a071d31a78bc43d9d7'); - }); - - it('should get an MD5 SubjectPublicKeyInfo fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, {md: MD.md5.create(), type: 'SubjectPublicKeyInfo'}); - ASSERT.equal(fp.toHex(), 'e5c5ba577fe24fb8a678d8d58f539cd7'); - }); - - it('should get a hex MD5 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, - {md: MD.md5.create(), type: 'RSAPublicKey', encoding: 'hex'}); - ASSERT.equal(fp, 'c7da180cc48d31a071d31a78bc43d9d7'); - }); - - it('should get a hex, colon-delimited MD5 RSAPublicKey fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, { - md: MD.md5.create(), - type: 'RSAPublicKey', - encoding: 'hex', - delimiter: ':' - }); - ASSERT.equal(fp, 'c7:da:18:0c:c4:8d:31:a0:71:d3:1a:78:bc:43:d9:d7'); - }); - - it('should get a hex, colon-delimited MD5 SubjectPublicKeyInfo fingerprint', function() { - var publicKey = PKI.publicKeyFromPem(_pem.publicKey); - var fp = PKI.getPublicKeyFingerprint( - publicKey, { - md: MD.md5.create(), - type: 'SubjectPublicKeyInfo', - encoding: 'hex', - delimiter: ':' - }); - ASSERT.equal(fp, 'e5:c5:ba:57:7f:e2:4f:b8:a6:78:d8:d5:8f:53:9c:d7'); - }); - }); - - function createCertificate(options) { - var publicKey = options.publicKey; - var signingKey = options.signingKey; - var subject = options.subject; - var issuer = options.issuer; - var isCA = options.isCA; - var serialNumber = options.serialNumber || '01'; - - var cert = PKI.createCertificate(); - cert.publicKey = publicKey; - cert.serialNumber = serialNumber; - cert.validity.notBefore = new Date(); - cert.validity.notAfter = new Date(); - cert.validity.notAfter.setFullYear( - cert.validity.notBefore.getFullYear() + 1); - cert.setSubject(subject); - cert.setIssuer(issuer); - var extensions = []; - if(isCA) { - extensions.push({ - name: 'basicConstraints', - cA: true - }); - } - extensions.push({ - name: 'keyUsage', - keyCertSign: true, - digitalSignature: true, - nonRepudiation: true, - keyEncipherment: true, - dataEncipherment: true - }, { - name: 'extKeyUsage', - serverAuth: true, - clientAuth: true, - codeSigning: true, - emailProtection: true, - timeStamping: true - }, { - name: 'nsCertType', - client: true, - server: true, - email: true, - objsign: true, - sslCA: true, - emailCA: true, - objCA: true - }, { - name: 'subjectAltName', - altNames: [{ - type: 6, // URI - value: 'http://example.org/webid#me' - }] - }, { - name: 'subjectKeyIdentifier' - }); - // FIXME: add authorityKeyIdentifier extension - cert.setExtensions(extensions); - - cert.sign(signingKey); - - return cert; - } -} - -// check for AMD -if(typeof define === 'function') { - define([ - 'forge/pki', - 'forge/md', - 'forge/util' - ], function(PKI, MD, UTIL) { - Tests( - // Global provided by test harness - ASSERT, - PKI(), - MD(), - UTIL() - ); - }); -} else if(typeof module === 'object' && module.exports) { - // assume NodeJS - Tests( - require('assert'), - require('../../js/pki')(), - require('../../js/md')(), - require('../../js/util')()); -} - -})(); diff --git a/includes/external/school/node_modules/node-forge/nodejs/ui/index.html b/includes/external/school/node_modules/node-forge/nodejs/ui/index.html deleted file mode 100644 index 25e81b4..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/ui/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - -
- - diff --git a/includes/external/school/node_modules/node-forge/nodejs/ui/require.js b/includes/external/school/node_modules/node-forge/nodejs/ui/require.js deleted file mode 100644 index 7df5d90..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/ui/require.js +++ /dev/null @@ -1,35 +0,0 @@ -/* - RequireJS 2.1.5 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. - Available via the MIT or new BSD license. - see: http://github.com/jrburke/requirejs for details -*/ -var requirejs,require,define; -(function(aa){function I(b){return"[object Function]"===L.call(b)}function J(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(I(n)){if(this.events.error)try{e=i.execCb(c,n,b,e)}catch(d){a=d}else e=i.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",v(this.error= -a)}else e=n;this.exports=e;if(this.map.isDefine&&!this.ignore&&(q[c]=e,l.onResourceLoad))l.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=j(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var n,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h= -i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=j(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else n=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=u(this, -function(a){this.inited=!0;this.error=a;a.requireModules=[b];G(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),n.fromText=u(this,function(e,c){var d=a.name,g=j(d),C=O;c&&(e=c);C&&(O=!1);r(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{l.exec(e)}catch(ca){return v(B("fromtexteval","fromText eval for "+b+" failed: "+ca,ca,[b]))}C&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],n)}),e.load(a.name,h,n,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]= -this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=j(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&t(a,"error",this.errback)}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));G(this.pluginMaps,u(this,function(a){var b=m(p,a.id);b&&!b.enabled&&i.enable(a, -this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:q,urlFetched:U,defQueue:H,Module:Z,makeModuleMap:j,nextTick:l.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};G(a,function(a,b){e[b]? -"map"===b?(k.map||(k.map={}),R(k[b],a,!0,!0)):R(k[b],a,!0):k[b]=a});a.shim&&(G(a.shim,function(a,b){J(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);G(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=j(b))});if(a.deps||a.callback)i.require(a.deps||[], -a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(aa,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&I(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(I(c))return v(B("requireargs","Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(l.get)return l.get(i,e,a,d);g=j(e,a,!1,!0);g=g.id;return!s(q,g)?v(B("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+ -b+(a?"":". Use require([])"))):q[g]}L();i.nextTick(function(){L();k=r(j(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});D()});return d}f=f||{};R(d,{isBrowser:A,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1h.attachEvent.toString().indexOf("[native code"))&&!Y?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error",b.onScriptError,!1)),h.src=d,K=h,D?x.insertBefore(h,D):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(B("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};A&&M(document.getElementsByTagName("script"),function(b){x||(x= -b.parentNode);if(t=b.getAttribute("data-main"))return r.baseUrl||(E=t.split("/"),Q=E.pop(),fa=E.length?E.join("/")+"/":"./",r.baseUrl=fa,t=Q),t=t.replace(ea,""),r.deps=r.deps?r.deps.concat(t):[t],!0});define=function(b,c,d){var l,h;"string"!==typeof b&&(d=c,c=b,b=null);J(c)||(d=c,c=[]);!c.length&&I(d)&&d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c));if(O){if(!(l=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"), -function(b){if("interactive"===b.readyState)return P=b}),l=P;l&&(b||(b=l.getAttribute("data-requiremodule")),h=F[l.getAttribute("data-requirecontext")])}(h?h.defQueue:T).push([b,c,d])};define.amd={jQuery:!0};l.exec=function(b){return eval(b)};l(r)}})(this); \ No newline at end of file diff --git a/includes/external/school/node_modules/node-forge/nodejs/ui/test.js b/includes/external/school/node_modules/node-forge/nodejs/ui/test.js deleted file mode 100644 index fa51fe2..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/ui/test.js +++ /dev/null @@ -1,36 +0,0 @@ -var ASSERT = chai.assert; -mocha.setup({ - ui: 'bdd', - timeout: 30000 -}); -requirejs.config({ - paths: { - forge: 'forge', - test: 'test' - } -}); -requirejs([ - 'test/util', - 'test/md5', - 'test/sha1', - 'test/sha256', - 'test/hmac', - 'test/pbkdf2', - 'test/mgf1', - 'test/random', - 'test/asn1', - 'test/pem', - 'test/rsa', - 'test/kem', - 'test/pkcs1', - 'test/x509', - 'test/csr', - 'test/aes', - 'test/rc2', - 'test/des', - 'test/pkcs7', - 'test/pkcs12', - 'test/tls' -], function() { - mocha.run(); -}); diff --git a/includes/external/school/node_modules/node-forge/nodejs/ui/test.min.js b/includes/external/school/node_modules/node-forge/nodejs/ui/test.min.js deleted file mode 100644 index e94e9e0..0000000 --- a/includes/external/school/node_modules/node-forge/nodejs/ui/test.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function e(e){var t=e.util=e.util||{};typeof process=="undefined"||!process.nextTick?typeof setImmediate=="function"?(t.setImmediate=setImmediate,t.nextTick=function(e){return setImmediate(e)}):(t.setImmediate=function(e){setTimeout(e,0)},t.nextTick=t.setImmediate):(t.nextTick=process.nextTick,typeof setImmediate=="function"?t.setImmediate=setImmediate:t.setImmediate=t.nextTick),t.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"},t.ByteBuffer=function(e){this.data=e||"",this.read=0},t.ByteBuffer.prototype.length=function(){return this.data.length-this.read},t.ByteBuffer.prototype.isEmpty=function(){return this.length()<=0},t.ByteBuffer.prototype.putByte=function(e){return this.data+=String.fromCharCode(e),this},t.ByteBuffer.prototype.fillWithByte=function(e,t){e=String.fromCharCode(e);var n=this.data;while(t>0)t&1&&(n+=e),t>>>=1,t>0&&(e+=e);return this.data=n,this},t.ByteBuffer.prototype.putBytes=function(e){return this.data+=e,this},t.ByteBuffer.prototype.putString=function(e){return this.data+=t.encodeUtf8(e),this},t.ByteBuffer.prototype.putInt16=function(e){return this.data+=String.fromCharCode(e>>8&255)+String.fromCharCode(e&255),this},t.ByteBuffer.prototype.putInt24=function(e){return this.data+=String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255),this},t.ByteBuffer.prototype.putInt32=function(e){return this.data+=String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255),this},t.ByteBuffer.prototype.putInt16Le=function(e){return this.data+=String.fromCharCode(e&255)+String.fromCharCode(e>>8&255),this},t.ByteBuffer.prototype.putInt24Le=function(e){return this.data+=String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255),this},t.ByteBuffer.prototype.putInt32Le=function(e){return this.data+=String.fromCharCode(e&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>24&255),this},t.ByteBuffer.prototype.putInt=function(e,t){do t-=8,this.data+=String.fromCharCode(e>>t&255);while(t>0);return this},t.ByteBuffer.prototype.putBuffer=function(e){return this.data+=e.getBytes(),this},t.ByteBuffer.prototype.getByte=function(){return this.data.charCodeAt(this.read++)},t.ByteBuffer.prototype.getInt16=function(){var e=this.data.charCodeAt(this.read)<<8^this.data.charCodeAt(this.read+1);return this.read+=2,e},t.ByteBuffer.prototype.getInt24=function(){var e=this.data.charCodeAt(this.read)<<16^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2);return this.read+=3,e},t.ByteBuffer.prototype.getInt32=function(){var e=this.data.charCodeAt(this.read)<<24^this.data.charCodeAt(this.read+1)<<16^this.data.charCodeAt(this.read+2)<<8^this.data.charCodeAt(this.read+3);return this.read+=4,e},t.ByteBuffer.prototype.getInt16Le=function(){var e=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8;return this.read+=2,e},t.ByteBuffer.prototype.getInt24Le=function(){var e=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16;return this.read+=3,e},t.ByteBuffer.prototype.getInt32Le=function(){var e=this.data.charCodeAt(this.read)^this.data.charCodeAt(this.read+1)<<8^this.data.charCodeAt(this.read+2)<<16^this.data.charCodeAt(this.read+3)<<24;return this.read+=4,e},t.ByteBuffer.prototype.getInt=function(e){var t=0;do t=(t<<8)+this.data.charCodeAt(this.read++),e-=8;while(e>0);return t},t.ByteBuffer.prototype.getBytes=function(e){var t;return e?(e=Math.min(this.length(),e),t=this.data.slice(this.read,this.read+e),this.read+=e):e===0?t="":(t=this.read===0?this.data:this.data.slice(this.read),this.clear()),t},t.ByteBuffer.prototype.bytes=function(e){return typeof e=="undefined"?this.data.slice(this.read):this.data.slice(this.read,this.read+e)},t.ByteBuffer.prototype.at=function(e){return this.data.charCodeAt(this.read+e)},t.ByteBuffer.prototype.setAt=function(e,t){return this.data=this.data.substr(0,this.read+e)+String.fromCharCode(t)+this.data.substr(this.read+e+1),this},t.ByteBuffer.prototype.last=function(){return this.data.charCodeAt(this.data.length-1)},t.ByteBuffer.prototype.copy=function(){var e=t.createBuffer(this.data);return e.read=this.read,e},t.ByteBuffer.prototype.compact=function(){return this.read>0&&(this.data=this.data.slice(this.read),this.read=0),this},t.ByteBuffer.prototype.clear=function(){return this.data="",this.read=0,this},t.ByteBuffer.prototype.truncate=function(e){var t=Math.max(0,this.length()-e);return this.data=this.data.substr(this.read,t),this.read=0,this},t.ByteBuffer.prototype.toHex=function(){var e="";for(var t=this.read;t0)t&1&&(n+=e),t>>>=1,t>0&&(e+=e);return n},t.xorBytes=function(e,t,n){var r="",i="",s="",o=0,u=0;for(;n>0;--n,++o)i=e.charCodeAt(o)^t.charCodeAt(o),u>=10&&(r+=s,s="",u=0),s+=String.fromCharCode(i),++u;return r+=s,r},t.hexToBytes=function(e){var t="",n=0;e.length&!0&&(n=1,t+=String.fromCharCode(parseInt(e[0],16)));for(;n>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(e&255)};var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r=[62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,64,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];t.encode64=function(e,t){var r="",i="",s,o,u,a=0;while(a>2),r+=n.charAt((s&3)<<4|o>>4),isNaN(o)?r+="==":(r+=n.charAt((o&15)<<2|u>>6),r+=isNaN(u)?"=":n.charAt(u&63)),t&&r.length>t&&(i+=r.substr(0,t)+"\r\n",r=r.substr(t));return i+=r,i},t.decode64=function(e){e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");var t="",n,i,s,o,u=0;while(u>4),s!==64&&(t+=String.fromCharCode((i&15)<<4|s>>2),o!==64&&(t+=String.fromCharCode((s&3)<<6|o)));return t},t.encodeUtf8=function(e){return unescape(encodeURIComponent(e))},t.decodeUtf8=function(e){return decodeURIComponent(escape(e))},t.deflate=function(e,n,r){n=t.decode64(e.deflate(t.encode64(n)).rval);if(r){var i=2,s=n.charCodeAt(1);s&32&&(i=6),n=n.substring(i,n.length-4)}return n},t.inflate=function(e,n,r){var i=e.inflate(t.encode64(n)).rval;return i===null?null:t.decode64(i)};var i=function(e,n,r){if(!e)throw{message:"WebStorage not available."};var i;r===null?i=e.removeItem(n):(r=t.encode64(JSON.stringify(r)),i=e.setItem(n,r));if(typeof i!="undefined"&&i.rval!==!0)throw i.error},s=function(e,n){if(!e)throw{message:"WebStorage not available."};var r=e.getItem(n);if(e.init)if(r.rval===null){if(r.error)throw r.error;r=null}else r=r.rval;return r!==null&&(r=JSON.parse(t.decode64(r))),r},o=function(e,t,n,r){var o=s(e,t);o===null&&(o={}),o[n]=r,i(e,t,o)},u=function(e,t,n){var r=s(e,t);return r!==null&&(r=n in r?r[n]:null),r},a=function(e,t,n){var r=s(e,t);if(r!==null&&n in r){delete r[n];var o=!0;for(var u in r){o=!1;break}o&&(r=null),i(e,t,r)}},f=function(e,t){i(e,t,null)},l=function(e,t,n){var r=null;typeof n=="undefined"&&(n=["web","flash"]);var i,s=!1,o=null;for(var u in n){i=n[u];try{if(i==="flash"||i==="both"){if(t[0]===null)throw{message:"Flash local storage not available."};r=e.apply(this,t),s=i==="flash"}if(i==="web"||i==="both")t[0]=localStorage,r=e.apply(this,t),s=!0}catch(a){o=a}if(s)break}if(!s)throw o;return r};t.setItem=function(e,t,n,r,i){l(o,arguments,i)},t.getItem=function(e,t,n,r){return l(u,arguments,r)},t.removeItem=function(e,t,n,r){l(a,arguments,r)},t.clearItems=function(e,t,n){l(f,arguments,n)},t.parseUrl=function(e){var t=/^(https?):\/\/([^:&^\/]*):?(\d*)(.*)$/g;t.lastIndex=0;var n=t.exec(e),r=n===null?null:{full:e,scheme:n[1],host:n[2],port:n[3],path:n[4]};return r&&(r.fullHost=r.host,r.port?r.port!==80&&r.scheme==="http"?r.fullHost+=":"+r.port:r.port!==443&&r.scheme==="https"&&(r.fullHost+=":"+r.port):r.scheme==="http"?r.port=80:r.scheme==="https"&&(r.port=443),r.full=r.scheme+"://"+r.fullHost),r};var c=null;t.getQueryVariables=function(e){var t=function(e){var t={},n=e.split("&");for(var r=0;r0?(s=n[r].substring(0,i),o=n[r].substring(i+1)):(s=n[r],o=null),s in t||(t[s]=[]),!(s in Object.prototype)&&o!==null&&t[s].push(unescape(o))}return t},n;return typeof e=="undefined"?(c===null&&(typeof window=="undefined"?c={}:c=t(window.location.search.substring(1))),n=c):n=t(e),n},t.parseFragment=function(e){var n=e,r="",i=e.indexOf("?");i>0&&(n=e.substring(0,i),r=e.substring(i+1));var s=n.split("/");s.length>0&&s[0]===""&&s.shift();var o=r===""?{}:t.getQueryVariables(r);return{pathString:n,queryString:r,path:s,query:o}},t.makeRequest=function(e){var n=t.parseFragment(e),r={path:n.pathString,query:n.queryString,getPath:function(e){return typeof e=="undefined"?n.path:n.path[e]},getQuery:function(e,t){var r;return typeof e=="undefined"?r=n.query:(r=n.query[e],r&&typeof t!="undefined"&&(r=r[t])),r},getQueryLast:function(e,t){var n,i=r.getQuery(e);return i?n=i[i.length-1]:n=t,n}};return r},t.makeLink=function(e,t,n){e=jQuery.isArray(e)?e.join("/"):e;var r=jQuery.param(t||{});return n=n||"",e+(r.length>0?"?"+r:"")+(n.length>0?"#"+n:"")},t.setPath=function(e,t,n){if(typeof e=="object"&&e!==null){var r=0,i=t.length;while(r0&&s.push(r),o=t.lastIndex;var u=n[0][1];switch(u){case"s":case"o":i");break;case"%":s.push("%");break;default:s.push("<%"+u+"?>")}}return s.push(e.substring(o)),s.join("")},t.formatNumber=function(e,t,n,r){var i=e,s=isNaN(t=Math.abs(t))?2:t,o=n===undefined?",":n,u=r===undefined?".":r,a=i<0?"-":"",f=parseInt(i=Math.abs(+i||0).toFixed(s),10)+"",l=f.length>3?f.length%3:0;return a+(l?f.substr(0,l)+u:"")+f.substr(l).replace(/(\d{3})(?=\d)/g,"$1"+u)+(s?o+Math.abs(i-f).toFixed(s).slice(2):"")},t.formatSize=function(e){return e>=1073741824?e=t.formatNumber(e/1073741824,2,".","")+" GiB":e>=1048576?e=t.formatNumber(e/1048576,2,".","")+" MiB":e>=1024?e=t.formatNumber(e/1024,0)+" KiB":e=t.formatNumber(e,0)+" bytes",e}}var t="util";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o0)i.push(n.getByte());e.deepEqual(i,[1,2,3,4,0,0,0,4,1,2,3,255,255,255,255])}),it("should convert bytes from hex",function(){var n="0102030400000004010203ffffffff",r=t.createBuffer();r.putBytes(t.hexToBytes(n)),e.equal(r.toHex(),n)}),it("should base64 encode some bytes",function(){var n="00010203050607080A0B0C0D0F1011121415161719",r="MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5";e.equal(t.encode64(n),r)}),it("should base64 decode some bytes",function(){var n="00010203050607080A0B0C0D0F1011121415161719",r="MDAwMTAyMDMwNTA2MDcwODBBMEIwQzBEMEYxMDExMTIxNDE1MTYxNzE5";e.equal(t.decode64(r),n)})})}typeof define=="function"?define("test/util",["forge/util"],function(t){e(ASSERT,t())}):typeof module=="object"&&module.exports&&e(require("assert"),require("../../js/util")())}(),function(){function e(e){var t=e.md5=e.md5||{};e.md=e.md||{},e.md.algorithms=e.md.algorithms||{},e.md.md5=e.md.algorithms.md5=t;var n=null,r=null,i=null,s=null,o=!1,u=function(){n=String.fromCharCode(128),n+=e.util.fillString(String.fromCharCode(0),64),r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9],i=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],s=new Array(64);for(var t=0;t<64;++t)s[t]=Math.floor(Math.abs(Math.sin(t+1))*4294967296);o=!0},a=function(e,t,n){var o,u,a,f,l,c,h,p,d=n.length();while(d>=64){u=e.h0,a=e.h1,f=e.h2,l=e.h3;for(p=0;p<16;++p)t[p]=n.getInt32Le(),c=l^a&(f^l),o=u+c+s[p]+t[p],h=i[p],u=l,l=f,f=a,a+=o<>>32-h;for(;p<32;++p)c=f^l&(a^f),o=u+c+s[p]+t[r[p]],h=i[p],u=l,l=f,f=a,a+=o<>>32-h;for(;p<48;++p)c=a^f^l,o=u+c+s[p]+t[r[p]],h=i[p],u=l,l=f,f=a,a+=o<>>32-h;for(;p<64;++p)c=f^(a|~l),o=u+c+s[p]+t[r[p]],h=i[p],u=l,l=f,f=a,a+=o<>>32-h;e.h0=e.h0+u&4294967295,e.h1=e.h1+a&4294967295,e.h2=e.h2+f&4294967295,e.h3=e.h3+l&4294967295,d-=64}};t.create=function(){o||u();var t=null,r=e.util.createBuffer(),i=new Array(16),s={algorithm:"md5",blockLength:64,digestLength:16,messageLength:0};return s.start=function(){return s.messageLength=0,r=e.util.createBuffer(),t={h0:1732584193,h1:4023233417,h2:2562383102,h3:271733878},s},s.start(),s.update=function(n,o){return o==="utf8"&&(n=e.util.encodeUtf8(n)),s.messageLength+=n.length,r.putBytes(n),a(t,i,r),(r.read>2048||r.length()===0)&&r.compact(),s},s.digest=function(){var o=s.messageLength,u=e.util.createBuffer();u.putBytes(r.bytes()),u.putBytes(n.substr(0,64-(o+8)%64)),u.putInt32Le(o<<3&4294967295),u.putInt32Le(o>>>29&255);var f={h0:t.h0,h1:t.h1,h2:t.h2,h3:t.h3};a(f,i,u);var l=e.util.createBuffer();return l.putInt32Le(f.h0),l.putInt32Le(f.h1),l.putInt32Le(f.h2),l.putInt32Le(f.h3),l},s}}var t="md5";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o=64){i=e.h0,s=e.h1,o=e.h2,u=e.h3,a=e.h4;for(l=0;l<16;++l)r=n.getInt32(),t[l]=r,f=u^s&(o^u),r=(i<<5|i>>>27)+f+a+1518500249+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;for(;l<20;++l)r=t[l-3]^t[l-8]^t[l-14]^t[l-16],r=r<<1|r>>>31,t[l]=r,f=u^s&(o^u),r=(i<<5|i>>>27)+f+a+1518500249+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;for(;l<32;++l)r=t[l-3]^t[l-8]^t[l-14]^t[l-16],r=r<<1|r>>>31,t[l]=r,f=s^o^u,r=(i<<5|i>>>27)+f+a+1859775393+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;for(;l<40;++l)r=t[l-6]^t[l-16]^t[l-28]^t[l-32],r=r<<2|r>>>30,t[l]=r,f=s^o^u,r=(i<<5|i>>>27)+f+a+1859775393+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;for(;l<60;++l)r=t[l-6]^t[l-16]^t[l-28]^t[l-32],r=r<<2|r>>>30,t[l]=r,f=s&o|u&(s^o),r=(i<<5|i>>>27)+f+a+2400959708+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;for(;l<80;++l)r=t[l-6]^t[l-16]^t[l-28]^t[l-32],r=r<<2|r>>>30,t[l]=r,f=s^o^u,r=(i<<5|i>>>27)+f+a+3395469782+r,a=u,u=o,o=s<<30|s>>>2,s=i,i=r;e.h0+=i,e.h1+=s,e.h2+=o,e.h3+=u,e.h4+=a,c-=64}};t.create=function(){r||i();var t=null,o=e.util.createBuffer(),u=new Array(80),a={algorithm:"sha1",blockLength:64,digestLength:20,messageLength:0};return a.start=function(){return a.messageLength=0,o=e.util.createBuffer(),t={h0:1732584193,h1:4023233417,h2:2562383102,h3:271733878,h4:3285377520},a},a.start(),a.update=function(n,r){return r==="utf8"&&(n=e.util.encodeUtf8(n)),a.messageLength+=n.length,o.putBytes(n),s(t,u,o),(o.read>2048||o.length()===0)&&o.compact(),a},a.digest=function(){var r=a.messageLength,i=e.util.createBuffer();i.putBytes(o.bytes()),i.putBytes(n.substr(0,64-(r+8)%64)),i.putInt32(r>>>29&255),i.putInt32(r<<3&4294967295);var f={h0:t.h0,h1:t.h1,h2:t.h2,h3:t.h3,h4:t.h4};s(f,u,i);var l=e.util.createBuffer();return l.putInt32(f.h0),l.putInt32(f.h1),l.putInt32(f.h2),l.putInt32(f.h3),l.putInt32(f.h4),l},a}}var t="sha1";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o=64){for(l=0;l<16;++l)t[l]=n.getInt32();for(;l<64;++l)r=t[l-2],r=(r>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,s=t[l-15],s=(s>>>7|s<<25)^(s>>>18|s<<14)^s>>>3,t[l]=r+t[l-7]+s+t[l-16]&4294967295;c=e.h0,h=e.h1,p=e.h2,d=e.h3,v=e.h4,m=e.h5,g=e.h6,y=e.h7;for(l=0;l<64;++l)u=(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7),a=g^v&(m^g),o=(c>>>2|c<<30)^(c>>>13|c<<19)^(c>>>22|c<<10),f=c&h|p&(c^h),r=y+u+a+i[l]+t[l],s=o+f,y=g,g=m,m=v,v=d+r&4294967295,d=p,p=h,h=c,c=r+s&4294967295;e.h0=e.h0+c&4294967295,e.h1=e.h1+h&4294967295,e.h2=e.h2+p&4294967295,e.h3=e.h3+d&4294967295,e.h4=e.h4+v&4294967295,e.h5=e.h5+m&4294967295,e.h6=e.h6+g&4294967295,e.h7=e.h7+y&4294967295,b-=64}};t.create=function(){r||s();var t=null,i=e.util.createBuffer(),u=new Array(64),a={algorithm:"sha256",blockLength:64,digestLength:32,messageLength:0};return a.start=function(){return a.messageLength=0,i=e.util.createBuffer(),t={h0:1779033703,h1:3144134277,h2:1013904242,h3:2773480762,h4:1359893119,h5:2600822924,h6:528734635,h7:1541459225},a},a.start(),a.update=function(n,r){return r==="utf8"&&(n=e.util.encodeUtf8(n)),a.messageLength+=n.length,i.putBytes(n),o(t,u,i),(i.read>2048||i.length()===0)&&i.compact(),a},a.digest=function(){var r=a.messageLength,s=e.util.createBuffer();s.putBytes(i.bytes()),s.putBytes(n.substr(0,64-(r+8)%64)),s.putInt32(r>>>29&255),s.putInt32(r<<3&4294967295);var f={h0:t.h0,h1:t.h1,h2:t.h2,h3:t.h3,h4:t.h4,h5:t.h5,h6:t.h6,h7:t.h7};o(f,u,s);var l=e.util.createBuffer();return l.putInt32(f.h0),l.putInt32(f.h1),l.putInt32(f.h2),l.putInt32(f.h3),l.putInt32(f.h4),l.putInt32(f.h5),l.putInt32(f.h6),l.putInt32(f.h7),l},a}}var t="sha256";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;on.blockLength&&(n.start(),n.update(o.bytes()),o=n.digest()),r=e.util.createBuffer(),i=e.util.createBuffer(),f=o.length();for(var a=0;a4294967295*o)throw{message:"Derived key is too long."};var u=Math.ceil(i/o),a=i-(u-1)*o,f=e.hmac.create();f.start(s,t);var l="",c,h,p;for(var d=1;d<=u;++d){f.update(n),f.update(e.util.int32ToBytes(d)),c=p=f.digest().getBytes();for(var v=2;v<=r;++v)f.start(null,null),f.update(p),h=f.digest().getBytes(),c=e.util.xorBytes(c,h,o),p=h;l+=d>8^p&255^99,r[a]=p,i[p]=a,d=e[p],l=e[a],c=e[l],h=e[c],v=d<<24^p<<16^p<<8^(p^d),m=(l^c^h)<<24^(a^h)<<16^(a^c^h)<<8^(a^l^h);for(var g=0;g<4;++g)o[g][a]=v,u[g][p]=m,v=v<<24|v>>>8,m=m<<24|m>>>8;a===0?a=f=1:(a=l^e[e[e[l^h]]],f^=e[e[f]])}},f=function(e,t){var i=e.slice(0),o,a=1,f=i.length,l=f+6+1,c=n*l;for(var h=f;h>>16&255]<<24^r[o>>>8&255]<<16^r[o&255]<<8^r[o>>>24]^s[a]<<24,a++):f>6&&h%f===4&&(o=r[o>>>24]<<24^r[o>>>16&255]<<16^r[o>>>8&255]<<8^r[o&255]),i[h]=i[h-f]^o;if(t){var p,d=u[0],v=u[1],m=u[2],g=u[3],y=i.slice(0),c=i.length;for(var h=0,b=c-n;h>>24]]^v[r[p>>>16&255]]^m[r[p>>>8&255]]^g[r[p&255]];i=y}return i},l=function(e,t,n,s){var a=e.length/4-1,f,l,c,h,p;s?(f=u[0],l=u[1],c=u[2],h=u[3],p=i):(f=o[0],l=o[1],c=o[2],h=o[3],p=r);var d,v,m,g,y,b,w;d=t[0]^e[0],v=t[s?3:1]^e[1],m=t[2]^e[2],g=t[s?1:3]^e[3];var E=3;for(var S=1;S>>24]^l[v>>>16&255]^c[m>>>8&255]^h[g&255]^e[++E],b=f[v>>>24]^l[m>>>16&255]^c[g>>>8&255]^h[d&255]^e[++E],w=f[m>>>24]^l[g>>>16&255]^c[d>>>8&255]^h[v&255]^e[++E],g=f[g>>>24]^l[d>>>16&255]^c[v>>>8&255]^h[m&255]^e[++E],d=y,v=b,m=w;n[0]=p[d>>>24]<<24^p[v>>>16&255]<<16^p[m>>>8&255]<<8^p[g&255]^e[++E],n[s?3:1]=p[v>>>24]<<24^p[m>>>16&255]<<16^p[g>>>8&255]<<8^p[d&255]^e[++E],n[2]=p[m>>>24]<<24^p[g>>>16&255]<<16^p[d>>>8&255]<<8^p[v&255]^e[++E],n[s?1:3]=p[g>>>24]<<24^p[d>>>16&255]<<16^p[v>>>8&255]<<8^p[m&255]^e[++E]},c=function(r,i,s,o,u){function C(){if(o)for(var e=0;e=0;--e){if(E[e]!==4294967295){++E[e];break}E[e]=0}for(var e=0;e>>=2;for(var p=0;p=y||b.length()>0&&T)N()},c.finish=function(e){var t=!0,r=b.length()%y;if(!o)if(e)t=e(y,b,o);else if(m){var i=b.length()===y?y:y-b.length();b.fillWithByte(i,i)}t&&(T=!0,c.update());if(o){m&&(t=r===0);if(t)if(e)t=e(y,w,o);else if(m){var s=w.length(),u=w.at(s-1);u>n<<2?t=!1:w.truncate(u)}}return!m&&!e&&r>0&&w.truncate(y-r),t},c.start=function(t,r){t===null&&(t=x.slice(0));if(typeof t=="string"&&t.length===16)t=e.util.createBuffer(t);else if(e.util.isArray(t)&&t.length===16){var i=t,t=e.util.createBuffer();for(var s=0;s<16;++s)t.putByte(i[s])}if(!e.util.isArray(t)){var i=t;t=new Array(4),t[0]=i.getInt32(),t[1]=i.getInt32(),t[2]=i.getInt32(),t[3]=i.getInt32()}b=e.util.createBuffer(),w=r||e.util.createBuffer(),x=t.slice(0),E=new Array(n),S=new Array(n),T=!1,c.output=w;if(["CFB","OFB","CTR"].indexOf(u)!==-1){for(var s=0;s=32)return f(),e();var t=32-r.pools[0].messageLength<<5;r.seedFile(t,function(t,n){if(t)return e(t);r.collect(n),f(),e()})}function a(){if(r.pools[0].messageLength>=32)return f();var e=32-r.pools[0].messageLength<<5;r.collect(r.seedFileSync(e)),f()}function f(){var t=e.md.sha1.create();t.update(r.pools[0].digest().getBytes()),r.pools[0].start();var n=1;for(var i=1;i<32;++i)n=n===31?2147483648:n<<2,n%r.reseeds===0&&(t.update(r.pools[i].digest().getBytes()),r.pools[i].start());var s=t.digest().getBytes();t.start(),t.update(s);var o=t.digest().getBytes();r.key=r.plugin.formatKey(s),r.seed=r.plugin.formatSeed(o),++r.reseeds,r.generated=0,r.time=+(new Date)}function l(t){var n=e.util.createBuffer();if(typeof window!="undefined"&&window.crypto&&window.crypto.getRandomValues){var r=new Uint32Array(t/4);try{window.crypto.getRandomValues(r);for(var i=0;i>16),u+=(o&32767)<<16,u+=o>>15,u=(u&2147483647)+(u>>31),f=u&4294967295;for(var i=0;i<3;++i)a=f>>>(i<<3),a^=Math.floor(Math.random()*255),n.putByte(String.fromCharCode(a&255))}}return n.getBytes()}var r={plugin:t,key:null,seed:null,time:null,reseeds:0,generated:0},i=t.md,s=new Array(32);for(var o=0;o<32;++o)s[o]=i.create();return r.pools=s,r.pool=0,r.generate=function(t,n){function l(c){if(c)return n(c);if(f.length()>=t)return n(null,f.getBytes(t));if(r.generated>=1048576){var h=+(new Date);if(r.time===null||h-r.time>100)r.key=null}if(r.key===null)return u(l);var p=i(r.key,r.seed);r.generated+=p.length,f.putBytes(p),r.key=o(i(r.key,s(r.seed))),r.seed=a(i(r.key,r.seed)),e.util.setImmediate(l)}if(!n)return r.generateSync(t);var i=r.plugin.cipher,s=r.plugin.increment,o=r.plugin.formatKey,a=r.plugin.formatSeed,f=e.util.createBuffer();l()},r.generateSync=function(t){var n=r.plugin.cipher,i=r.plugin.increment,s=r.plugin.formatKey,o=r.plugin.formatSeed,u=e.util.createBuffer();while(u.length()=1048576){var f=+(new Date);if(r.time===null||f-r.time>100)r.key=null}r.key===null&&a();var l=n(r.key,r.seed);r.generated+=l.length,u.putBytes(l),r.key=s(n(r.key,i(r.seed))),r.seed=o(n(r.key,r.seed))}return u.getBytes(t)},n?(r.seedFile=function(e,t){n.randomBytes(e,function(e,n){if(e)return t(e);t(null,n.toString())})},r.seedFileSync=function(e){return n.randomBytes(e).toString()}):(r.seedFile=function(e,t){try{t(null,l(e))}catch(n){t(n)}},r.seedFileSync=l),r.collect=function(e){var t=e.length;for(var n=0;n>i&255);r.collect(n)},r.registerWorker=function(e){if(e===self)r.seedFile=function(e,t){function n(e){var r=e.data;r.forge&&r.forge.prng&&(self.removeEventListener("message",n),t(r.forge.prng.err,r.forge.prng.bytes))}self.addEventListener("message",n),self.postMessage({forge:{prng:{needed:e}}})};else{function t(t){var n=t.data;n.forge&&n.forge.prng&&r.seedFile(n.forge.prng.needed,function(t,n){e.postMessage({forge:{prng:{err:t,bytes:n}}})})}e.addEventListener("message",t)}},r}}var t="prng";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o1){var h=r.read,p=r.getByte();if(p===0){s=r.getByte();var d=s&192;if(d===t.Class.UNIVERSAL||d===t.Class.CONTEXT_SPECIFIC)try{var v=n(r);c=v===a-(r.read-h),c&&(++h,--a)}catch(m){}}r.read=h}if(c){f=[];if(a===undefined)for(;;){if(r.bytes(2)===String.fromCharCode(0,0)){r.getBytes(2);break}f.push(t.fromDer(r,i))}else{var g=r.length();while(a>0)f.push(t.fromDer(r,i)),a-=g-r.length(),g=r.length()}}else{if(a===undefined)throw{message:"Non-constructed ASN.1 object of indefinite length."};if(u===t.Type.BMPSTRING){f="";for(var y=0;y>>=8;while(u>0);r.putByte(a.length|128);for(var o=a.length-1;o>=0;--o)r.putByte(a.charCodeAt(o))}return r.putBuffer(s),r},t.oidToDer=function(t){var n=t.split("."),r=e.util.createBuffer();r.putByte(40*parseInt(n[0],10)+parseInt(n[1],10));var i,s,o,u;for(var a=2;a>>=7,i||(u|=128),s.push(u),i=!1;while(o>0);for(var f=s.length-1;f>=0;--f)r.putByte(s[f])}return r},t.derToOid=function(t){var n;typeof t=="string"&&(t=e.util.createBuffer(t));var r=t.getByte();n=Math.floor(r/40)+"."+r%40;var i=0;while(t.length()>0)r=t.getByte(),i<<=7,r&128?i+=r&127:(n+="."+(i+r),i=0);return n},t.utcTimeToDate=function(e){var t=new Date,n=parseInt(e.substr(0,2),10);n=n>=50?1900+n:2e3+n;var r=parseInt(e.substr(2,2),10)-1,i=parseInt(e.substr(4,2),10),s=parseInt(e.substr(6,2),10),o=parseInt(e.substr(8,2),10),u=0;if(e.length>11){var a=e.charAt(10),f=10;a!=="+"&&a!=="-"&&(u=parseInt(e.substr(10,2),10),f+=2)}t.setUTCFullYear(n,r,i),t.setUTCHours(s,o,u,0);if(f){a=e.charAt(f);if(a==="+"||a==="-"){var l=parseInt(e.substr(f+1,2),10),c=parseInt(e.substr(f+4,2),10),h=l*60+c;h*=6e4,a==="+"?t.setTime(+t-h):t.setTime(+t+h)}}return t},t.generalizedTimeToDate=function(e){var t=new Date,n=parseInt(e.substr(0,4),10),r=parseInt(e.substr(4,2),10)-1,i=parseInt(e.substr(6,2),10),s=parseInt(e.substr(8,2),10),o=parseInt(e.substr(10,2),10),u=parseInt(e.substr(12,2),10),a=0,f=0,l=!1;e.charAt(e.length-1)==="Z"&&(l=!0);var c=e.length-5,h=e.charAt(c);if(h==="+"||h==="-"){var p=parseInt(e.substr(c+1,2),10),d=parseInt(e.substr(c+4,2),10);f=p*60+d,f*=6e4,h==="+"&&(f*=-1),l=!0}return e.charAt(14)==="."&&(a=parseFloat(e.substr(14),10)*1e3),l?(t.setUTCFullYear(n,r,i),t.setUTCHours(s,o,u,a),t.setTime(+t+f)):(t.setFullYear(n,r,i),t.setHours(s,o,u,a)),t},t.dateToUtcTime=function(e){var t="",n=[];n.push((""+e.getUTCFullYear()).substr(2)),n.push(""+(e.getUTCMonth()+1)),n.push(""+e.getUTCDate()),n.push(""+e.getUTCHours()),n.push(""+e.getUTCMinutes()),n.push(""+e.getUTCSeconds());for(var r=0;r0&&(o+="\n");var u="";for(var a=0;a65&&s!==-1){var o=t[s];o===","?(++s,t=t.substr(0,s)+"\r\n "+t.substr(s)):t=t.substr(0,s)+"\r\n"+o+t.substr(s+1),i=r-s-1,s=-1,++r}else if(t[r]===" "||t[r]===" "||t[r]===",")s=r;return t}function r(e){return e.replace(/^\s+/,"")}var t=e.pem=e.pem||{};t.encode=function(t,r){r=r||{};var i="-----BEGIN "+t.type+"-----\r\n",s;t.procType&&(s={name:"Proc-Type",values:[String(t.procType.version),t.procType.type]},i+=n(s)),t.contentDomain&&(s={name:"Content-Domain",values:[t.contentDomain]},i+=n(s)),t.dekInfo&&(s={name:"DEK-Info",values:[t.dekInfo.algorithm]},t.dekInfo.parameters&&s.values.push(t.dekInfo.parameters),i+=n(s));if(t.headers)for(var o=0;o8?3:1,m=[],g=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],y=0,b;for(var w=0;w>>4^S)&252645135,S^=b,E^=b<<4,b=(S>>>-16^E)&65535,E^=b,S^=b<<-16,b=(E>>>2^S)&858993459,S^=b,E^=b<<2,b=(S>>>-16^E)&65535,E^=b,S^=b<<-16,b=(E>>>1^S)&1431655765,S^=b,E^=b<<1,b=(S>>>8^E)&16711935,E^=b,S^=b<<8,b=(E>>>1^S)&1431655765,S^=b,E^=b<<1,b=E<<8|S>>>20&240,E=S<<24|S<<8&16711680|S>>>8&65280|S>>>24&240,S=b;for(var x=0;x>>26,S=S<<2|S>>>26):(E=E<<1|E>>>27,S=S<<1|S>>>27),E&=-15,S&=-15;var T=t[E>>>28]|n[E>>>24&15]|r[E>>>20&15]|i[E>>>16&15]|s[E>>>12&15]|o[E>>>8&15]|u[E>>>4&15],N=a[S>>>28]|f[S>>>24&15]|l[S>>>20&15]|c[S>>>16&15]|h[S>>>12&15]|p[S>>>8&15]|d[S>>>4&15];b=(N>>>16^T)&65535,m[y++]=T^b,m[y++]=N^b<<16}}return m}var t=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],n=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],r=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],i=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],s=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],o=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],u=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],a=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696],l=function(l,c){typeof l=="string"&&(l.length===8||l.length===24)&&(l=e.util.createBuffer(l));var h=f(l),p=1,d=0,v=0,m=0,g=0,y=!1,b=null,w=null,E=h.length===32?3:9,S;E===3?S=c?[0,32,2]:[30,-2,-2]:S=c?[0,32,2,62,30,-2,64,96,2]:[94,62,-2,32,64,2,30,-2,-2];var x=null;return x={start:function(t,n){t?(typeof t=="string"&&t.length===8&&(t=e.util.createBuffer(t)),p=1,d=t.getInt32(),m=t.getInt32()):p=0,y=!1,b=e.util.createBuffer(),w=n||e.util.createBuffer(),x.output=w},update:function(e){y||b.putBuffer(e);while(b.length()>=8){var f,l=b.getInt32(),x=b.getInt32();p===1&&(c?(l^=d,x^=m):(v=d,g=m,d=l,m=x)),f=(l>>>4^x)&252645135,x^=f,l^=f<<4,f=(l>>>16^x)&65535,x^=f,l^=f<<16,f=(x>>>2^l)&858993459,l^=f,x^=f<<2,f=(x>>>8^l)&16711935,l^=f,x^=f<<8,f=(l>>>1^x)&1431655765,x^=f,l^=f<<1,l=l<<1|l>>>31,x=x<<1|x>>>31;for(var T=0;T>>4|x<<28)^h[k+1];f=l,l=x,x=f^(n[L>>>24&63]|i[L>>>16&63]|o[L>>>8&63]|a[L&63]|t[A>>>24&63]|r[A>>>16&63]|s[A>>>8&63]|u[A&63])}f=l,l=x,x=f}l=l>>>1|l<<31,x=x>>>1|x<<31,f=(l>>>1^x)&1431655765,x^=f,l^=f<<1,f=(x>>>8^l)&16711935,l^=f,x^=f<<8,f=(x>>>2^l)&858993459,l^=f,x^=f<<2,f=(l>>>16^x)&65535,x^=f,l^=f<<16,f=(l>>>4^x)&252645135,x^=f,l^=f<<4,p===1&&(c?(d=l,m=x):(l^=v,x^=g)),w.putInt32(l),w.putInt32(x)}},finish:function(e){var t=!0;if(c)if(e)t=e(8,b,!c);else{var n=b.length()===8?8:8-b.length();b.fillWithByte(n,n)}t&&(y=!0,x.update());if(!c){t=b.length()===0;if(t)if(e)t=e(8,w,!c);else{var r=w.length(),i=w.at(r-1);i>r?t=!1:w.truncate(i)}}return t}},x};e.des=e.des||{},e.des.startEncrypting=function(e,t,n){var r=l(e,!0);return r.start(t,n),r},e.des.createEncryptionCipher=function(e){return l(e,!0)},e.des.startDecrypting=function(e,t,n){var r=l(e,!1);return r.start(t,n),r},e.des.createDecryptionCipher=function(e){return l(e,!1)}}var t="des";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o=0){var o=t*this.data[e++]+n.data[r]+i;i=Math.floor(o/67108864),n.data[r++]=o&67108863}return i}function u(e,t,n,r,i,s){var o=t&32767,u=t>>15;while(--s>=0){var a=this.data[e]&32767,f=this.data[e++]>>15,l=u*a+f*o;a=o*a+((l&32767)<<15)+n.data[r]+(i&1073741823),i=(a>>>30)+(l>>>15)+u*f+(i>>>30),n.data[r++]=a&1073741823}return i}function a(e,t,n,r,i,s){var o=t&16383,u=t>>14;while(--s>=0){var a=this.data[e]&16383,f=this.data[e++]>>14,l=u*a+f*o;a=o*a+((l&16383)<<14)+n.data[r]+i,i=(a>>28)+(l>>14)+u*f,n.data[r++]=a&268435455}return i}function d(e){return l.charAt(e)}function v(e,t){var n=c[e.charCodeAt(t)];return n==null?-1:n}function m(e){for(var t=this.t-1;t>=0;--t)e.data[t]=this.data[t];e.t=this.t,e.s=this.s}function g(e){this.t=1,this.s=e<0?-1:0,e>0?this.data[0]=e:e<-1?this.data[0]=e+DV:this.t=0}function y(e){var t=s();return t.fromInt(e),t}function b(e,t){var n;if(t==16)n=4;else if(t==8)n=3;else if(t==256)n=8;else if(t==2)n=1;else if(t==32)n=5;else{if(t!=4){this.fromRadix(e,t);return}n=2}this.t=0,this.s=0;var r=e.length,s=!1,o=0;while(--r>=0){var u=n==8?e[r]&255:v(e,r);if(u<0){e.charAt(r)=="-"&&(s=!0);continue}s=!1,o==0?this.data[this.t++]=u:o+n>this.DB?(this.data[this.t-1]|=(u&(1<>this.DB-o):this.data[this.t-1]|=u<=this.DB&&(o-=this.DB)}n==8&&(e[0]&128)!=0&&(this.s=-1,o>0&&(this.data[this.t-1]|=(1<0&&this.data[this.t-1]==e)--this.t}function E(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(e==16)t=4;else if(e==8)t=3;else if(e==2)t=1;else if(e==32)t=5;else{if(e!=4)return this.toRadix(e);t=2}var n=(1<0){u>u)>0&&(i=!0,s=d(r));while(o>=0)u>(u+=this.DB-t)):(r=this.data[o]>>(u-=t)&n,u<=0&&(u+=this.DB,--o)),r>0&&(i=!0),i&&(s+=d(r))}return i?s:"0"}function S(){var e=s();return i.ZERO.subTo(this,e),e}function x(){return this.s<0?this.negate():this}function T(e){var t=this.s-e.s;if(t!=0)return t;var n=this.t;t=n-e.t;if(t!=0)return this.s<0?-t:t;while(--n>=0)if((t=this.data[n]-e.data[n])!=0)return t;return 0}function N(e){var t=1,n;return(n=e>>>16)!=0&&(e=n,t+=16),(n=e>>8)!=0&&(e=n,t+=8),(n=e>>4)!=0&&(e=n,t+=4),(n=e>>2)!=0&&(e=n,t+=2),(n=e>>1)!=0&&(e=n,t+=1),t}function C(){return this.t<=0?0:this.DB*(this.t-1)+N(this.data[this.t-1]^this.s&this.DM)}function k(e,t){var n;for(n=this.t-1;n>=0;--n)t.data[n+e]=this.data[n];for(n=e-1;n>=0;--n)t.data[n]=0;t.t=this.t+e,t.s=this.s}function L(e,t){for(var n=e;n=0;--u)t.data[u+s+1]=this.data[u]>>r|o,o=(this.data[u]&i)<=0;--u)t.data[u]=0;t.data[s]=o,t.t=this.t+s+1,t.s=this.s,t.clamp()}function O(e,t){t.s=this.s;var n=Math.floor(e/this.DB);if(n>=this.t){t.t=0;return}var r=e%this.DB,i=this.DB-r,s=(1<>r;for(var o=n+1;o>r;r>0&&(t.data[this.t-n-1]|=(this.s&s)<>=this.DB;if(e.t>=this.DB;r+=this.s}else{r+=this.s;while(n>=this.DB;r-=e.s}t.s=r<0?-1:0,r<-1?t.data[n++]=this.DV+r:r>0&&(t.data[n++]=r),t.t=n,t.clamp()}function _(e,t){var n=this.abs(),r=e.abs(),s=n.t;t.t=s+r.t;while(--s>=0)t.data[s]=0;for(s=0;s=0)e.data[n]=0;for(n=0;n=t.DV&&(e.data[n+t.t]-=t.DV,e.data[n+t.t+1]=1)}e.t>0&&(e.data[e.t-1]+=t.am(n,t.data[n],e,2*n,0,1)),e.s=0,e.clamp()}function P(e,t,n){var r=e.abs();if(r.t<=0)return;var o=this.abs();if(o.t0?(r.lShiftTo(l,u),o.lShiftTo(l,n)):(r.copyTo(u),o.copyTo(n));var c=u.t,h=u.data[c-1];if(h==0)return;var p=h*(1<1?u.data[c-2]>>this.F2:0),d=this.FV/p,v=(1<=0&&(n.data[n.t++]=1,n.subTo(b,n)),i.ONE.dlShiftTo(c,b),b.subTo(u,u);while(u.t=0){var w=n.data[--g]==h?this.DM:Math.floor(n.data[g]*d+(n.data[g-1]+m)*v);if((n.data[g]+=u.am(0,w,n,y,0,c))0&&n.rShiftTo(l,n),a<0&&i.ZERO.subTo(n,n)}function H(e){var t=s();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(i.ZERO)>0&&e.subTo(t,t),t}function B(e){this.m=e}function j(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function F(e){return e}function I(e){e.divRemTo(this.m,null,e)}function q(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function R(e,t){e.squareTo(t),this.reduce(t)}function U(){if(this.t<1)return 0;var e=this.data[0];if((e&1)==0)return 0;var t=e&3;return t=t*(2-(e&15)*t)&15,t=t*(2-(e&255)*t)&255,t=t*(2-((e&65535)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function z(e){this.m=e,this.mp=e.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(t,t),t}function X(e){var t=s();return e.copyTo(t),this.reduce(t),t}function V(e){while(e.t<=this.mt2)e.data[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;n=t+this.m.t,e.data[n]+=this.m.am(0,r,e,t,0,this.m.t);while(e.data[n]>=e.DV)e.data[n]-=e.DV,e.data[++n]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function $(e,t){e.squareTo(t),this.reduce(t)}function J(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function K(){return(this.t>0?this.data[0]&1:this.s)==0}function Q(e,t){if(e>4294967295||e<1)return i.ONE;var n=s(),r=s(),o=t.convert(this),u=N(e)-1;o.copyTo(n);while(--u>=0){t.sqrTo(n,r);if((e&1<0)t.mulTo(r,o,n);else{var a=n;n=r,r=a}}return t.revert(n)}function G(e,t){var n;return e<256||t.isEven()?n=new B(t):n=new z(t),this.exp(e,n)}function Y(){var e=s();return this.copyTo(e),e}function Z(){if(this.s<0){if(this.t==1)return this.data[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this.data[0];if(this.t==0)return 0}return(this.data[1]&(1<<32-this.DB)-1)<>24}function tt(){return this.t==0?this.s:this.data[0]<<16>>16}function nt(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function rt(){return this.s<0?-1:this.t<=0||this.t==1&&this.data[0]<=0?0:1}function it(e){e==null&&(e=10);if(this.signum()==0||e<2||e>36)return"0";var t=this.chunkSize(e),n=Math.pow(e,t),r=y(n),i=s(),o=s(),u="";this.divRemTo(r,i,o);while(i.signum()>0)u=(n+o.intValue()).toString(e).substr(1)+u,i.divRemTo(r,i,o);return o.intValue().toString(e)+u}function st(e,t){this.fromInt(0),t==null&&(t=10);var n=this.chunkSize(t),r=Math.pow(t,n),s=!1,o=0,u=0;for(var a=0;a=n&&(this.dMultiply(r),this.dAddOffset(u,0),o=0,u=0)}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(u,0)),s&&i.ZERO.subTo(this,this)}function ot(e,t,n){if("number"==typeof t)if(e<2)this.fromInt(1);else{this.fromNumber(e,n),this.testBit(e-1)||this.bitwiseTo(i.ONE.shiftLeft(e-1),dt,this),this.isEven()&&this.dAddOffset(1,0);while(!this.isProbablePrime(t))this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(i.ONE.shiftLeft(e-1),this)}else{var r=new Array,s=e&7;r.length=(e>>3)+1,t.nextBytes(r),s>0?r[0]&=(1<0){n>n)!=(this.s&this.DM)>>n&&(t[i++]=r|this.s<=0){n<8?(r=(this.data[e]&(1<>(n+=this.DB-8)):(r=this.data[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),(r&128)!=0&&(r|=-256),i==0&&(this.s&128)!=(r&128)&&++i;if(i>0||r!=this.s)t[i++]=r}}return t}function at(e){return this.compareTo(e)==0}function ft(e){return this.compareTo(e)<0?this:e}function lt(e){return this.compareTo(e)>0?this:e}function ct(e,t,n){var r,i,s=Math.min(e.t,this.t);for(r=0;r>=16,t+=16),(e&255)==0&&(e>>=8,t+=8),(e&15)==0&&(e>>=4,t+=4),(e&3)==0&&(e>>=2,t+=2),(e&1)==0&&++t,t}function Tt(){for(var e=0;e=this.t?this.s!=0:(this.data[t]&1<>=this.DB;if(e.t>=this.DB;r+=this.s}else{r+=this.s;while(n>=this.DB;r+=e.s}t.s=r<0?-1:0,r>0?t.data[n++]=r:r<-1&&(t.data[n++]=this.DV+r),t.t=n,t.clamp()}function Dt(e){var t=s();return this.addTo(e,t),t}function Pt(e){var t=s();return this.subTo(e,t),t}function Ht(e){var t=s();return this.multiplyTo(e,t),t}function Bt(e){var t=s();return this.divRemTo(e,t,null),t}function jt(e){var t=s();return this.divRemTo(e,null,t),t}function Ft(e){var t=s(),n=s();return this.divRemTo(e,t,n),new Array(t,n)}function It(e){this.data[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()}function qt(e,t){if(e==0)return;while(this.t<=t)this.data[this.t++]=0;this.data[t]+=e;while(this.data[t]>=this.DV)this.data[t]-=this.DV,++t>=this.t&&(this.data[this.t++]=0),++this.data[t]}function Rt(){}function Ut(e){return e}function zt(e,t,n){e.multiplyTo(t,n)}function Wt(e,t){e.squareTo(t)}function Xt(e){return this.exp(e,new Rt)}function Vt(e,t,n){var r=Math.min(this.t+e.t,t);n.s=0,n.t=r;while(r>0)n.data[--r]=0;var i;for(i=n.t-this.t;r=0)n.data[r]=0;for(r=Math.max(t-this.t,0);r2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=s();return e.copyTo(t),this.reduce(t),t}function Qt(e){return e}function Gt(e){e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);while(e.compareTo(this.r2)<0)e.dAddOffset(1,this.m.t+1);e.subTo(this.r2,e);while(e.compareTo(this.m)>=0)e.subTo(this.m,e)}function Yt(e,t){e.squareTo(t),this.reduce(t)}function Zt(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function en(e,t){var n=e.bitLength(),r,i=y(1),o;if(n<=0)return i;n<18?r=1:n<48?r=3:n<144?r=4:n<768?r=5:r=6,n<8?o=new B(t):t.isEven()?o=new Jt(t):o=new z(t);var u=new Array,a=3,f=r-1,l=(1<1){var c=s();o.sqrTo(u[1],c);while(a<=l)u[a]=s(),o.mulTo(c,u[a-2],u[a]),a+=2}var h=e.t-1,p,d=!0,v=s(),m;n=N(e.data[h])-1;while(h>=0){n>=f?p=e.data[h]>>n-f&l:(p=(e.data[h]&(1<0&&(p|=e.data[h-1]>>this.DB+n-f)),a=r;while((p&1)==0)p>>=1,--a;(n-=a)<0&&(n+=this.DB,--h);if(d)u[p].copyTo(i),d=!1;else{while(a>1)o.sqrTo(i,v),o.sqrTo(v,i),a-=2;a>0?o.sqrTo(i,v):(m=i,i=v,v=m),o.mulTo(v,u[p],i)}while(h>=0&&(e.data[h]&1<0&&(t.rShiftTo(s,t),n.rShiftTo(s,n));while(t.signum()>0)(i=t.getLowestSetBit())>0&&t.rShiftTo(i,t),(i=n.getLowestSetBit())>0&&n.rShiftTo(i,n),t.compareTo(n)>=0?(t.subTo(n,t),t.rShiftTo(1,t)):(n.subTo(t,n),n.rShiftTo(1,n));return s>0&&n.lShiftTo(s,n),n}function nn(e){if(e<=0)return 0;var t=this.DV%e,n=this.s<0?e-1:0;if(this.t>0)if(t==0)n=this.data[0]%e;else for(var r=this.t-1;r>=0;--r)n=(t*n+this.data[r])%e;return n}function rn(e){var t=e.isEven();if(this.isEven()&&t||e.signum()==0)return i.ZERO;var n=e.clone(),r=this.clone(),s=y(1),o=y(0),u=y(0),a=y(1);while(n.signum()!=0){while(n.isEven()){n.rShiftTo(1,n);if(t){if(!s.isEven()||!o.isEven())s.addTo(this,s),o.subTo(e,o);s.rShiftTo(1,s)}else o.isEven()||o.subTo(e,o);o.rShiftTo(1,o)}while(r.isEven()){r.rShiftTo(1,r);if(t){if(!u.isEven()||!a.isEven())u.addTo(this,u),a.subTo(e,a);u.rShiftTo(1,u)}else a.isEven()||a.subTo(e,a);a.rShiftTo(1,a)}n.compareTo(r)>=0?(n.subTo(r,n),t&&s.subTo(u,s),o.subTo(a,o)):(r.subTo(n,r),t&&u.subTo(s,u),a.subTo(o,a))}return r.compareTo(i.ONE)!=0?i.ZERO:a.compareTo(e)>=0?a.subtract(e):a.signum()<0?(a.addTo(e,a),a.signum()<0?a.add(e):a):a}function un(e){var t,n=this.abs();if(n.t==1&&n.data[0]<=sn[sn.length-1]){for(t=0;t>1,e>sn.length&&(e=sn.length);var o=s();for(var u=0;u=0&&i.push(u)}return i}function l(e,r,s,o){r=t.fromDer(r,s);if(r.tagClass!==t.Class.UNIVERSAL||r.type!==t.Type.SEQUENCE||r.constructed!==!0)throw{message:"PKCS#12 AuthenticatedSafe expected to be a SEQUENCE OF ContentInfo"};for(var u=0;u0&&(f=t.create(t.Class.UNIVERSAL,t.Type.SET,!0,h));var p=[],d=[];s!==null&&(e.util.isArray(s)?d=s:d=[s]);var v=[];for(var m=0;m0){var w=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,v),E=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.data).getBytes()),t.create(t.Class.CONTEXT_SPECIFIC,0,!0,[t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,t.toDer(w).getBytes())])]);p.push(E)}var S=null;if(i!==null){var x=n.wrapRsaPrivateKey(n.privateKeyToAsn1(i));o===null?S=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.keyBag).getBytes()),t.create(t.Class.CONTEXT_SPECIFIC,0,!0,[x]),f]):S=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.pkcs8ShroudedKeyBag).getBytes()),t.create(t.Class.CONTEXT_SPECIFIC,0,!0,[n.encryptPrivateKeyInfo(x,o,u)]),f]);var T=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[S]),N=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.data).getBytes()),t.create(t.Class.CONTEXT_SPECIFIC,0,!0,[t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,t.toDer(T).getBytes())])]);p.push(N)}var C=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,p),k=undefined;if(u.useMac){var c=e.md.sha1.create(),L=new e.util.ByteBuffer(e.random.getBytes(u.saltSize)),A=u.count,i=r.generateKey(o||"",L,3,A,20),O=e.hmac.create();O.start(c,i),O.update(t.toDer(C).getBytes());var M=O.getMac();k=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.sha1).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.NULL,!1,"")]),t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,M.getBytes())]),t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,L.getBytes()),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,e.util.hexToBytes(A.toString(16)))])}return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,String.fromCharCode(3)),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.data).getBytes()),t.create(t.Class.CONTEXT_SPECIFIC,0,!0,[t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,t.toDer(C).getBytes())])]),k])},r.generateKey=function(t,n,r,i,s,o){var u,a;if(typeof o=="undefined"||o===null)o=e.md.sha1.create();var f=o.digestLength,l=o.blockLength,c=new e.util.ByteBuffer,h=new e.util.ByteBuffer;for(a=0;a=0;a--)A>>=8,A+=N.at(a)+L.at(a),L.setAt(a,A&255);k.putBuffer(L)}w=k,c.putBuffer(x)}return c.truncate(c.length()-s),c}}var t="pkcs12";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o>8*l-f&255;if((h.charCodeAt(0)&d)!==0)throw{message:"Bits beyond keysize not zero as expected."};var v=n.generate(p,c),m="";for(a=0;a>8*f-a&255;return y=String.fromCharCode(y.charCodeAt(0)&~b)+y.substr(1),y+p+String.fromCharCode(188)},s}}var t="pss";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o>16-t},i=function(e,t){return(e&65535)>>t|e<<16-t&65535};e.rc2=e.rc2||{},e.rc2.expandKey=function(n,r){typeof n=="string"&&(n=e.util.createBuffer(n)),r=r||128;var i=n,s=n.length(),o=r,u=Math.ceil(o/8),a=255>>(o&7),f;for(f=s;f<128;f++)i.putByte(t[i.at(f-1)+i.at(f-s)&255]);i.setAt(128-u,t[i.at(128-u)&a]);for(f=127-u;f>=0;f--)i.setAt(f,t[i.at(f+1)^i.at(f+u)]);return i};var s=function(t,s,o){var u=!1,a=null,f=null,l=null,c,h,p,d,v=[];t=e.rc2.expandKey(t,s);for(p=0;p<64;p++)v.push(t.getInt16Le());o?(c=function(e){for(p=0;p<4;p++)e[p]+=v[d]+(e[(p+3)%4]&e[(p+2)%4])+(~e[(p+3)%4]&e[(p+1)%4]),e[p]=r(e[p],n[p]),d++},h=function(e){for(p=0;p<4;p++)e[p]+=v[e[(p+3)%4]&63]}):(c=function(e){for(p=3;p>=0;p--)e[p]=i(e[p],n[p]),e[p]-=v[d]+(e[(p+3)%4]&e[(p+2)%4])+(~e[(p+3)%4]&e[(p+1)%4]),d--},h=function(e){for(p=3;p>=0;p--)e[p]-=v[e[(p+3)%4]&63]});var m=function(e){var t=[];for(p=0;p<4;p++){var n=a.getInt16Le();l!==null&&(o?n^=l.getInt16Le():l.putInt16Le(n)),t.push(n&65535)}d=o?0:63;for(var r=0;r=8)m([[5,c],[1,h],[6,c],[1,h],[5,c]])},finish:function(e){var t=!0;if(o)if(e)t=e(8,a,!o);else{var n=a.length()===8?8:8-a.length();a.fillWithByte(n,n)}t&&(u=!0,g.update());if(!o){t=a.length()===0;if(t)if(e)t=e(8,f,!o);else{var r=f.length(),i=f.at(r-1);i>r?t=!1:f.truncate(i)}}return t}},g};e.rc2.startEncrypting=function(t,n,r){var i=e.rc2.createEncryptionCipher(t,128);return i.start(n,r),i},e.rc2.createEncryptionCipher=function(e,t){return s(e,t,!0)},e.rc2.startDecrypting=function(t,n,r){var i=e.rc2.createDecryptionCipher(t,128);return i.start(n,r),i},e.rc2.createDecryptionCipher=function(e,t){return s(e,t,!1)}}var t="rc2";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o>24&255,s>>16&255,s>>8&255,s&255);n.start(),n.update(e+o),r+=n.digest().getBytes()}return r.substring(0,t)}var t=e.pkcs1=e.pkcs1||{};t.encode_rsa_oaep=function(t,r,i){var s=undefined,o=undefined,u=undefined;typeof i=="string"?(s=i,o=arguments[3]||undefined,u=arguments[4]||undefined):i&&(s=i.label||undefined,o=i.seed||undefined,u=i.md||undefined),u?u.start():u=e.md.sha1.create();var a=Math.ceil(t.n.bitLength()/8),f=a-2*u.digestLength-2;if(r.length>f)throw{message:"RSAES-OAEP input message length is too long.",length:r.length,maxLength:f};s||(s=""),u.update(s,"raw");var l=u.digest(),c="",h=f-r.length;for(var p=0;ps-11)throw{message:"Message is too long for PKCS#1 v1.5 padding.",length:t.length,max:s-11};i.putByte(0),i.putByte(r);var o=s-3-t.length,u;if(r===0||r===1){u=r===0?0:255;for(var a=0;a1){if(o.getByte()!==255){--o.read;break}++f}}else if(a===2){f=0;while(o.length()>1){if(o.getByte()===0){--o.read;break}++f}}var c=o.getByte();if(c!==0||f!==s-3-o.length())throw{message:"Encryption block is invalid."};return o.getBytes()}function a(t,n,r){function c(){h(t.pBits,function(e,n){if(e)return r(e);t.p=n,h(t.qBits,p)})}function h(e,n){function p(){var n=e-1,r=new BigInteger(e,t.rng);return r.testBit(n)||r.bitwiseTo(BigInteger.ONE.shiftLeft(n),l,r),r.dAddOffset(31-r.mod(f).byteValue(),0),r}function v(i){if(d)return;--c;var s=i.data;if(s.found){for(var a=0;ae&&(h=p());var f=h.toString(16);i.target.postMessage({e:t.eInt,hex:f,workLoad:o}),h.dAddOffset(u,0)}var r=[];for(var i=0;i0)h.putByte(0),--p;return h.putBytes(e.util.hexToBytes(c)),h.getBytes()},n.rsa.decrypt=function(t,n,r,i){var o=Math.ceil(n.n.bitLength()/8);if(t.length!==o)throw{message:"Encrypted message length is invalid.",length:t.length,expected:o};var a=new BigInteger(e.util.createBuffer(t).toHex(),16);if(a.compareTo(n.n)>=0)throw{message:"Encrypted message is invalid."};var f=s(a,n,r),l=f.toString(16),c=e.util.createBuffer(),h=o-Math.ceil(l.length/2);while(h>0)c.putByte(0),--h;return c.putBytes(e.util.hexToBytes(l)),i!==!1?u(c.getBytes(),n,r):c.getBytes()},n.rsa.createKeyPairGenerationState=function(t,n){typeof t=="string"&&(t=parseInt(t,10)),t=t||1024;var r={nextBytes:function(t){var n=e.random.getBytes(t.length);for(var r=0;r>1,pBits:t-(t>>1),pqState:0,num:null,keys:null};return i.e.fromInt(i.eInt),i},n.rsa.stepKeyPairGenerationState=function(t,n){var i=new BigInteger(null);i.fromInt(30);var s=0,o=function(e,t){return e|t},u=+(new Date),a,f=0;while(t.keys===null&&(n<=0||fl?t.pqState=0:t.num.isProbablePrime(1)?++t.pqState:t.num.dAddOffset(r[s++%8],0):t.pqState===2?t.pqState=t.num.subtract(BigInteger.ONE).gcd(t.e).compareTo(BigInteger.ONE)===0?3:0:t.pqState===3&&(t.pqState=0,t.num.isProbablePrime(10)&&(t.p===null?t.p=t.num:t.q=t.num,t.p!==null&&t.q!==null&&++t.state),t.num=null)}else if(t.state===1)t.p.compareTo(t.q)<0&&(t.num=t.p,t.p=t.q,t.q=t.num),++t.state;else if(t.state===2)t.p1=t.p.subtract(BigInteger.ONE),t.q1=t.q.subtract(BigInteger.ONE),t.phi=t.p1.multiply(t.q1),++t.state;else if(t.state===3)t.phi.gcd(t.e).compareTo(BigInteger.ONE)===0?++t.state:(t.p=null,t.q=null,t.state=0);else if(t.state===4)t.n=t.p.multiply(t.q),t.n.bitLength()===t.bits?++t.state:(t.q=null,t.state=0);else if(t.state===5){var h=t.e.modInverse(t.phi);t.keys={privateKey:e.pki.rsa.setPrivateKey(t.n,t.e,h,t.p,t.q,h.mod(t.p1),h.mod(t.q1),t.q.modInverse(t.p)),publicKey:e.pki.rsa.setPublicKey(t.n,t.e)}}a=+(new Date),f+=a-u,u=a}return t.keys!==null},n.rsa.generateKeyPair=function(e,t,r,i){arguments.length===1?typeof e=="object"?(r=e,e=undefined):typeof e=="function"&&(i=e,e=undefined):arguments.length===2?(typeof e=="number"?typeof t=="function"?i=t:r=t:(r=e,i=t,e=undefined),t=undefined):arguments.length===3&&(typeof t=="number"?typeof r=="function"&&(i=r,r=undefined):(i=r,r=t,t=undefined)),r=r||{},e===undefined&&(e=r.bits||1024),t===undefined&&(t=r.e||65537);var s=n.rsa.createKeyPairGenerationState(e,t);if(!i)return n.rsa.stepKeyPairGenerationState(s,0),s.keys;a(s,r,i)},n.rsa.setPublicKey=function(r,i){var s={n:r,e:i};return s.encrypt=function(t,r,i){typeof r=="string"?r=r.toUpperCase():r===undefined&&(r="RSAES-PKCS1-V1_5");if(r==="RSAES-PKCS1-V1_5")r={encode:function(e,t,n){return o(e,t,2).getBytes()}};else if(r==="RSA-OAEP"||r==="RSAES-OAEP")r={encode:function(t,n){return e.pkcs1.encode_rsa_oaep(n,t,i)}};else{if(["RAW","NONE","NULL",null].indexOf(r)===-1)throw{message:'Unsupported encryption scheme: "'+r+'".'};r={encode:function(e){return e}}}var u=r.encode(t,s,!0);return n.rsa.encrypt(u,s,!0)},s.verify=function(e,r,i){typeof i=="string"?i=i.toUpperCase():i===undefined&&(i="RSASSA-PKCS1-V1_5");if(i==="RSASSA-PKCS1-V1_5")i={verify:function(e,n){n=u(n,s,!0);var r=t.fromDer(n);return e===r.value[1].value}};else if(i==="NONE"||i==="NULL"||i===null)i={verify:function(e,t){return t=u(t,s,!0),e===t}};var o=n.rsa.decrypt(r,s,!0,!1);return i.verify(e,o,s.n.bitLength())},s},n.rsa.setPrivateKey=function(t,r,s,o,a,f,l,c){var h={n:t,e:r,d:s,p:o,q:a,dP:f,dQ:l,qInv:c};return h.decrypt=function(t,r,i){typeof r=="string"?r=r.toUpperCase():r===undefined&&(r="RSAES-PKCS1-V1_5");var s=n.rsa.decrypt(t,h,!1,!1);if(r==="RSAES-PKCS1-V1_5")r={decode:u};else if(r==="RSA-OAEP"||r==="RSAES-OAEP")r={decode:function(t,n){return e.pkcs1.decode_rsa_oaep(n,t,i)}};else{if(["RAW","NONE","NULL",null].indexOf(r)===-1)throw{message:'Unsupported encryption scheme: "'+r+'".'};r={decode:function(e){return e}}}return r.decode(s,h,!1)},h.sign=function(e,t){var r=!1;typeof t=="string"&&(t=t.toUpperCase());if(t===undefined||t==="RSASSA-PKCS1-V1_5")t={encode:i},r=1;else if(t==="NONE"||t==="NULL"||t===null)t={encode:function(){return e}},r=1;var s=t.encode(e,h.n.bitLength());return n.rsa.encrypt(s,h,r)},h}}var t="rsa";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o1&&(c=l.value.charCodeAt(1),h=l.value.length>2?l.value.charCodeAt(2):0),s.digitalSignature=(c&128)===128,s.nonRepudiation=(c&64)===64,s.keyEncipherment=(c&32)===32,s.dataEncipherment=(c&16)===16,s.keyAgreement=(c&8)===8,s.keyCertSign=(c&4)===4,s.cRLSign=(c&2)===2,s.encipherOnly=(c&1)===1,s.decipherOnly=(h&128)===128}else if(s.name==="basicConstraints"){var l=t.fromDer(s.value);l.value.length>0?s.cA=l.value[0].value.charCodeAt(0)!==0:s.cA=!1;if(l.value.length>1){var p=e.util.createBuffer(l.value[1].value);s.pathLenConstraint=p.getInt(p.length()<<3)}}else if(s.name==="extKeyUsage"){var l=t.fromDer(s.value);for(var d=0;d1&&(c=l.value.charCodeAt(1)),s.client=(c&128)===128,s.server=(c&64)===64,s.email=(c&32)===32,s.objsign=(c&16)===16,s.reserved=(c&8)===8,s.sslCA=(c&4)===4,s.emailCA=(c&2)===2,s.objCA=(c&1)===1}else if(s.name==="subjectAltName"||s.name==="issuerAltName"){s.altNames=[];var m,l=t.fromDer(s.value);for(var g=0;g="8"&&(n="00"+n),e.util.hexToBytes(n)},b=function(e,n,i){var s={};if(e!==r["RSASSA-PSS"])return s;i&&(s={hash:{algorithmOid:r.sha1},mgf:{algorithmOid:r.mgf1,hash:{algorithmOid:r.sha1}},saltLength:20});var o={},u=[];if(!t.validate(n,p,o,u))throw{message:"Cannot read RSASSA-PSS parameter block.",errors:u};return o.hashOid!==undefined&&(s.hash=s.hash||{},s.hash.algorithmOid=t.derToOid(o.hashOid)),o.maskGenOid!==undefined&&(s.mgf=s.mgf||{},s.mgf.algorithmOid=t.derToOid(o.maskGenOid),s.mgf.hash=s.mgf.hash||{},s.mgf.hash.algorithmOid=t.derToOid(o.maskGenHashOid)),o.saltLength!==undefined&&(s.saltLength=o.saltLength.charCodeAt(0)),s};n.certificateFromPem=function(r,i,s){var o=e.pem.decode(r)[0];if(o.type!=="CERTIFICATE"&&o.type!=="X509 CERTIFICATE"&&o.type!=="TRUSTED CERTIFICATE")throw{message:'Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".',headerType:o.type};if(o.procType&&o.procType.type==="ENCRYPTED")throw{message:"Could not convert certificate from PEM; PEM is encrypted."};var u=t.fromDer(o.body,s);return n.certificateFromAsn1(u,i)},n.certificateToPem=function(r,i){var s={type:"CERTIFICATE",body:t.toDer(n.certificateToAsn1(r)).getBytes()};return e.pem.encode(s,{maxline:i})},n.publicKeyFromPem=function(r){var i=e.pem.decode(r)[0];if(i.type!=="PUBLIC KEY"&&i.type!=="RSA PUBLIC KEY")throw{message:'Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".',headerType:i.type};if(i.procType&&i.procType.type==="ENCRYPTED")throw{message:"Could not convert public key from PEM; PEM is encrypted."};var s=t.fromDer(i.body);return n.publicKeyFromAsn1(s)},n.publicKeyToPem=function(r,i){var s={type:"PUBLIC KEY",body:t.toDer(n.publicKeyToAsn1(r)).getBytes()};return e.pem.encode(s,{maxline:i})},n.publicKeyToRSAPublicKeyPem=function(r,i){var s={type:"RSA PUBLIC KEY",body:t.toDer(n.publicKeyToRSAPublicKey(r)).getBytes()};return e.pem.encode(s,{maxline:i})},n.privateKeyFromPem=function(r){var i=e.pem.decode(r)[0];if(i.type!=="PRIVATE KEY"&&i.type!=="RSA PRIVATE KEY")throw{message:'Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".',headerType:i.type};if(i.procType&&i.procType.type==="ENCRYPTED")throw{message:"Could not convert private key from PEM; PEM is encrypted."};var s=t.fromDer(i.body);return n.privateKeyFromAsn1(s)},n.privateKeyToPem=function(r,i){var s={type:"RSA PRIVATE KEY",body:t.toDer(n.privateKeyToAsn1(r)).getBytes()};return e.pem.encode(s,{maxline:i})},n.certificationRequestFromPem=function(r,i,s){var o=e.pem.decode(r)[0];if(o.type!=="CERTIFICATE REQUEST")throw{message:'Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".',headerType:o.type};if(o.procType&&o.procType.type==="ENCRYPTED")throw{message:"Could not convert certification request from PEM; PEM is encrypted."};var u=t.fromDer(o.body,s);return n.certificationRequestFromAsn1(u,i)},n.certificationRequestToPem=function(r,i){var s={type:"CERTIFICATE REQUEST",body:t.toDer(n.certificationRequestToAsn1(r)).getBytes()};return e.pem.encode(s,{maxline:i})},n.createCertificate=function(){var s={};s.version=2,s.serialNumber="00",s.signatureOid=null,s.signature=null,s.siginfo={},s.siginfo.algorithmOid=null,s.validity={},s.validity.notBefore=new Date,s.validity.notAfter=new Date,s.issuer={},s.issuer.getField=function(e){return m(s.issuer,e)},s.issuer.addField=function(e){o([e]),s.issuer.attributes.push(e)},s.issuer.attributes=[],s.issuer.hash=null,s.subject={},s.subject.getField=function(e){return m(s.subject,e)},s.subject.addField=function(e){o([e]),s.subject.attributes.push(e)},s.subject.attributes=[],s.subject.hash=null,s.extensions=[],s.publicKey=null,s.md=null;var o=function(e){var t;for(var r=0;r2)throw{message:"Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate."};if(v.length<2)throw{message:"Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime."};h.validity.notBefore=v[0],h.validity.notAfter=v[1],h.tbsCertificate=o.tbsCertificate;if(s){h.md=null;if(h.signatureOid in r){var c=r[h.signatureOid];switch(c){case"sha1WithRSAEncryption":h.md=e.md.sha1.create();break;case"md5WithRSAEncryption":h.md=e.md.md5.create();break;case"sha256WithRSAEncryption":h.md=e.md.sha256.create();break;case"RSASSA-PSS":h.md=e.md.sha256.create()}}if(h.md===null)throw{message:"Could not compute certificate digest. Unknown signature OID.",signatureOid:h.signatureOid};var y=t.toDer(h.tbsCertificate);h.md.update(y.getBytes())}var w=e.md.sha1.create();h.issuer.getField=function(e){return m(h.issuer,e)},h.issuer.addField=function(e){_fillMissingFields([e]),h.issuer.attributes.push(e)},h.issuer.attributes=n.RDNAttributesAsArray(o.certIssuer,w),o.certIssuerUniqueId&&(h.issuer.uniqueId=o.certIssuerUniqueId),h.issuer.hash=w.digest().toHex();var E=e.md.sha1.create();return h.subject.getField=function(e){return m(h.subject,e)},h.subject.addField=function(e){_fillMissingFields([e]),h.subject.attributes.push(e)},h.subject.attributes=n.RDNAttributesAsArray(o.certSubject,E),o.certSubjectUniqueId&&(h.subject.uniqueId=o.certSubjectUniqueId),h.subject.hash=E.digest().toHex(),o.certExtensions?h.extensions=g(o.certExtensions):h.extensions=[],h.publicKey=n.publicKeyFromAsn1(o.subjectPublicKeyInfo),h},n.certificationRequestFromAsn1=function(i,s){var o={},u=[];if(!t.validate(i,v,o,u))throw{message:"Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest.",errors:u};if(typeof o.csrSignature!="string"){var a="\0";for(var f=0;f0&&i.value.push(E(r.extensions)),i},n.getCertificationRequestInfo=function(e){var r=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,String.fromCharCode(e.version)),w(e.subject),n.publicKeyToAsn1(e.publicKey),x(e)]);return r},n.distinguishedNameToAsn1=function(e){return w(e)},n.certificateToAsn1=function(e){var r=e.tbsCertificate||n.getTBSCertificate(e);return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[r,t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(e.signatureOid).getBytes()),S(e.signatureOid,e.signatureParameters)]),t.create(t.Class.UNIVERSAL,t.Type.BITSTRING,!1,String.fromCharCode(0)+e.signature)])},n.certificationRequestToAsn1=function(e){var r=e.certificationRequestInfo||n.getCertificationRequestInfo(e);return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[r,t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(e.signatureOid).getBytes()),S(e.signatureOid,e.signatureParameters)]),t.create(t.Class.UNIVERSAL,t.Type.BITSTRING,!1,String.fromCharCode(0)+e.signature)])},n.createCaStore=function(t){var r={certs:{}};r.getIssuer=function(t){var i=null;if(!t.issuer.hash){var s=e.md.sha1.create();t.issuer.attributes=n.RDNAttributesAsArray(w(t.issuer),s),t.issuer.hash=s.digest().toHex()}if(t.issuer.hash in r.certs){i=r.certs[t.issuer.hash];if(e.util.isArray(i))throw{message:"Resolving multiple issuer matches not implemented yet."}}return i},r.addCertificate=function(t){typeof t=="string"&&(t=e.pki.certificateFromPem(t));if(!t.subject.hash){var i=e.md.sha1.create();t.subject.attributes=n.RDNAttributesAsArray(w(t.subject),i),t.subject.hash=i.digest().toHex()}if(t.subject.hash in r.certs){var s=r.certs[t.subject.hash];e.util.isArray(s)||(s=[s]),s.push(t)}else r.certs[t.subject.hash]=t};if(t)for(var i=0;ic.validity.notAfter)a={message:"Certificate is not valid yet or has expired.",error:n.certificateError.certificate_expired,notBefore:c.validity.notBefore,notAfter:c.validity.notAfter,now:o};else{var h=!1;if(r.length>0){l=r[0];try{h=l.verify(c)}catch(p){}}else{var d=t.getIssuer(c);if(d===null)a={message:"Certificate is not trusted.",error:n.certificateError.unknown_ca};else{e.util.isArray(d)||(d=[d]);while(!h&&d.length>0){l=d.shift();try{h=l.verify(c)}catch(p){}}}}a===null&&!h&&(a={message:"Certificate signature is invalid.",error:n.certificateError.bad_certificate})}a===null&&!c.isIssuer(l)&&(a={message:"Certificate issuer is invalid.",error:n.certificateError.bad_certificate});if(a===null){var v={keyUsage:!0,basicConstraints:!0};for(var m=0;a===null&&m0);return!0},n.publicKeyFromAsn1=function(r){var i={},u=[];if(t.validate(r,s,i,u)){var a=t.derToOid(i.publicKeyOid);if(a!==n.oids.rsaEncryption)throw{message:"Cannot read public key. Unknown OID.",oid:a};r=i.rsaPublicKey}u=[];if(!t.validate(r,o,i,u))throw{message:"Cannot read public key. ASN.1 object does not contain an RSAPublicKey.",errors:u};var f=e.util.createBuffer(i.publicKeyModulus).toHex(),l=e.util.createBuffer(i.publicKeyExponent).toHex();return n.setRsaPublicKey(new BigInteger(f,16),new BigInteger(l,16))},n.publicKeyToAsn1=n.publicKeyToSubjectPublicKeyInfo=function(e){return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(n.oids.rsaEncryption).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.NULL,!1,"")]),t.create(t.Class.UNIVERSAL,t.Type.BITSTRING,!1,[n.publicKeyToRSAPublicKey(e)])])},n.publicKeyToRSAPublicKey=function(e){return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.n)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.e))])},n.privateKeyFromAsn1=function(r){var i={},s=[];t.validate(r,a,i,s)&&(r=t.fromDer(e.util.createBuffer(i.privateKey))),i={},s=[];if(!t.validate(r,f,i,s))throw{message:"Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.",errors:s};var o,u,l,c,h,p,d,v;return o=e.util.createBuffer(i.privateKeyModulus).toHex(),u=e.util.createBuffer(i.privateKeyPublicExponent).toHex(),l=e.util.createBuffer(i.privateKeyPrivateExponent).toHex(),c=e.util.createBuffer(i.privateKeyPrime1).toHex(),h=e.util.createBuffer(i.privateKeyPrime2).toHex(),p=e.util.createBuffer(i.privateKeyExponent1).toHex(),d=e.util.createBuffer(i.privateKeyExponent2).toHex(),v=e.util.createBuffer(i.privateKeyCoefficient).toHex(),n.setRsaPrivateKey(new BigInteger(o,16),new BigInteger(u,16),new BigInteger(l,16),new BigInteger(c,16),new BigInteger(h,16),new BigInteger(p,16),new BigInteger(d,16),new BigInteger(v,16))},n.privateKeyToAsn1=n.privateKeyToRSAPrivateKey=function(e){return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,String.fromCharCode(0)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.n)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.e)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.d)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.p)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.q)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.dP)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.dQ)),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,y(e.qInv))])},n.wrapRsaPrivateKey=function(e){return t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,"\0"),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(r.rsaEncryption).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.NULL,!1,"")]),t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,t.toDer(e).getBytes())])},n.encryptPrivateKeyInfo=function(n,i,s){s=s||{},s.saltSize=s.saltSize||8,s.count=s.count||2048,s.algorithm=s.algorithm||"aes128";var o=e.random.getBytes(s.saltSize),u=s.count,a=e.util.createBuffer();a.putInt16(u);var f,l,c;if(s.algorithm.indexOf("aes")===0){var h;if(s.algorithm==="aes128")f=16,h=r["aes128-CBC"];else if(s.algorithm==="aes192")f=24,h=r["aes192-CBC"];else{if(s.algorithm!=="aes256")throw{message:"Cannot encrypt private key. Unknown encryption algorithm.",algorithm:s.algorithm};f=32,h=r["aes256-CBC"]}var p=e.pkcs5.pbkdf2(i,o,u,f),d=e.random.getBytes(16),v=e.aes.createEncryptionCipher(p);v.start(d),v.update(t.toDer(n)),v.finish(),c=v.output.getBytes(),l=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(r.pkcs5PBES2).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(r.pkcs5PBKDF2).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,o),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,a.getBytes())])]),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(h).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,d)])])])}else{if(s.algorithm!=="3des")throw{message:"Cannot encrypt private key. Unknown encryption algorithm.",algorithm:s.algorithm};f=24;var m=new e.util.ByteBuffer(o),p=e.pkcs12.generateKey(i,m,1,u,f),d=e.pkcs12.generateKey(i,m,2,u,f),v=e.des.createEncryptionCipher(p);v.start(d),v.update(t.toDer(n)),v.finish(),c=v.output.getBytes(),l=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OID,!1,t.oidToDer(r["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()),t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,o),t.create(t.Class.UNIVERSAL,t.Type.INTEGER,!1,a.getBytes())])])}var g=t.create(t.Class.UNIVERSAL,t.Type.SEQUENCE,!0,[l,t.create(t.Class.UNIVERSAL,t.Type.OCTETSTRING,!1,c)]);return g},n.pbe.getCipherForPBES2=function(r,i,s){var o={},u=[];if(!t.validate(i,c,o,u))throw{message:"Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.",errors:u};r=t.derToOid(o.kdfOid);if(r!==n.oids.pkcs5PBKDF2)throw{message:"Cannot read encrypted private key. Unsupported key derivation function OID.",oid:r,supportedOids:["pkcs5PBKDF2"]};r=t.derToOid(o.encOid);if(r!==n.oids["aes128-CBC"]&&r!==n.oids["aes192-CBC"]&&r!==n.oids["aes256-CBC"])throw{message:"Cannot read encrypted private key. Unsupported encryption scheme OID.",oid:r,supportedOids:["aes128-CBC","aes192-CBC","aes256-CBC"]};var a=o.kdfSalt,f=e.util.createBuffer(o.kdfIterationCount);f=f.getInt(f.length()<<3);var l;r===n.oids["aes128-CBC"]?l=16:r===n.oids["aes192-CBC"]?l=24:r===n.oids["aes256-CBC"]&&(l=32);var h=e.pkcs5.pbkdf2(s,a,f,l),p=o.encIv,d=e.aes.createDecryptionCipher(h);return d.start(p),d},n.pbe.getCipherForPKCS12PBE=function(r,i,s){var o={},u=[];if(!t.validate(i,h,o,u))throw{message:"Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.",errors:u};var a=e.util.createBuffer(o.salt),f=e.util.createBuffer(o.iterations);f=f.getInt(f.length()<<3);var l,c,p;switch(r){case n.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:l=24,c=8,p=e.des.startDecrypting;break;case n.oids["pbewithSHAAnd40BitRC2-CBC"]:l=5,c=8,p=function(t,n){var r=e.rc2.createDecryptionCipher(t,40);return r.start(n,null),r};break;default:throw{message:"Cannot read PKCS #12 PBE data block. Unsupported OID.",oid:r}}var d=e.pkcs12.generateKey(s,a,1,f,l),v=e.pkcs12.generateKey(s,a,2,f,c);return p(d,v)},n.pbe.getCipher=function(e,t,r){switch(e){case n.oids.pkcs5PBES2:return n.pbe.getCipherForPBES2(e,t,r);case n.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:case n.oids["pbewithSHAAnd40BitRC2-CBC"]:return n.pbe.getCipherForPKCS12PBE(e,t,r);default:throw{message:"Cannot read encrypted PBE data block. Unsupported OID.",oid:e,supportedOids:["pkcs5PBES2","pbeWithSHAAnd3-KeyTripleDES-CBC","pbewithSHAAnd40BitRC2-CBC"]}}},n.decryptPrivateKeyInfo=function(r,i){var s=null,o={},u=[];if(!t.validate(r,l,o,u))throw{message:"Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.",errors:u};var a=t.derToOid(o.encryptionOid),f=n.pbe.getCipher(a,o.encryptionParams,i),c=e.util.createBuffer(o.encryptedData);return f.update(c),f.finish()&&(s=t.fromDer(f.output)),s},n.encryptedPrivateKeyToPem=function(n,r){var i={type:"ENCRYPTED PRIVATE KEY",body:t.toDer(n).getBytes()};return e.pem.encode(i,{maxline:r})},n.encryptedPrivateKeyFromPem=function(n){var r=e.pem.decode(n)[0];if(r.type!=="ENCRYPTED PRIVATE KEY")throw{message:'Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".',headerType:r.type};if(r.procType&&r.procType.type==="ENCRYPTED")throw{message:"Could not convert encrypted private key from PEM; PEM is encrypted."};return t.fromDer(r.body)},n.encryptRsaPrivateKey=function(r,i,s){s=s||{};if(!s.legacy){var o=n.wrapRsaPrivateKey(n.privateKeyToAsn1(r));return o=n.encryptPrivateKeyInfo(o,i,s),n.encryptedPrivateKeyToPem(o)}var u,a,f,l;switch(s.algorithm){case"aes128":u="AES-128-CBC",f=16,a=e.random.getBytes(16),l=e.aes.createEncryptionCipher;break;case"aes192":u="AES-192-CBC",f=24,a=e.random.getBytes(16),l=e.aes.createEncryptionCipher;break;case"aes256":u="AES-256-CBC",f=32,a=e.random.getBytes(16),l=e.aes.createEncryptionCipher;break;case"3des":u="DES-EDE3-CBC",f=24,a=e.random.getBytes(8),l=e.des.createEncryptionCipher;break;default:throw{message:'Could not encrypt RSA private key; unsupported encryption algorithm "'+s.algorithm+'".',algorithm:s.algorithm}}var c=T(i,a.substr(0,8),f),h=l(c);h.start(a),h.update(t.toDer(n.privateKeyToAsn1(r))),h.finish();var p={type:"RSA PRIVATE KEY",procType:{version:"4",type:"ENCRYPTED"},dekInfo:{algorithm:u,parameters:e.util.bytesToHex(a).toUpperCase()},body:h.output.getBytes()};return e.pem.encode(p)},n.decryptRsaPrivateKey=function(r,i){var s=null,o=e.pem.decode(r)[0];if(o.type!=="ENCRYPTED PRIVATE KEY"&&o.type!=="PRIVATE KEY"&&o.type!=="RSA PRIVATE KEY")throw{message:'Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".',headerType:o.type};if(o.procType&&o.procType.type==="ENCRYPTED"){var u,a;switch(o.dekInfo.algorithm){case"DES-EDE3-CBC":u=24,a=e.des.createDecryptionCipher;break;case"AES-128-CBC":u=16,a=e.aes.createDecryptionCipher;break;case"AES-192-CBC":u=24,a=e.aes.createDecryptionCipher;break;case"AES-256-CBC":u=32,a=e.aes.createDecryptionCipher;break;case"RC2-40-CBC":u=5,a=function(t){return e.rc2.createDecryptionCipher(t,40)};break;case"RC2-64-CBC":u=8,a=function(t){return e.rc2.createDecryptionCipher(t,64)};break;case"RC2-128-CBC":u=16,a=function(t){return e.rc2.createDecryptionCipher(t,128)};break;default:throw{message:'Could not decrypt private key; unsupported encryption algorithm "'+o.dekInfo.algorithm+'".',algorithm:o.dekInfo.algorithm}}var f=e.util.hexToBytes(o.dekInfo.parameters),l=T(i,f.substr(0,8),u),c=a(l);c.start(f),c.update(e.util.createBuffer(o.body));if(!c.finish())return s;s=c.output.getBytes()}else s=o.body;return o.type==="ENCRYPTED PRIVATE KEY"?s=n.decryptPrivateKeyInfo(t.fromDer(s),i):s=t.fromDer(s),s!==null&&(s=n.privateKeyFromAsn1(s)),s},n.setRsaPublicKey=n.rsa.setPublicKey,n.setRsaPrivateKey=n.rsa.setPrivateKey}var t="pki";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o>1,u=o+(t.length&1),a=t.substr(0,u),f=t.substr(o,u),l=e.util.createBuffer(),c=e.hmac.create();r=n+r;var h=Math.ceil(i/16),p=Math.ceil(i/20);c.start("MD5",a);var d=e.util.createBuffer();l.putBytes(r);for(var v=0;v0&&(a.queue(e,a.createAlert({level:a.Alert.Level.warning,description:a.Alert.Description.no_renegotiation})),a.flush(e)),e.process()},a.parseHelloMessage=function(t,n,r){var i=null,s=t.entity===a.ConnectionEnd.client;if(r<38)t.error(t,{message:s?"Invalid ServerHello message. Message too short.":"Invalid ClientHello message. Message too short.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}});else{var u=n.fragment,f=u.length();i={version:{major:u.getByte(),minor:u.getByte()},random:e.util.createBuffer(u.getBytes(32)),session_id:o(u,1),extensions:[]},s?(i.cipher_suite=u.getBytes(2),i.compression_method=u.getByte()):(i.cipher_suites=o(u,2),i.compression_methods=o(u,1)),f=r-(f-u.length());if(f>0){var l=o(u,2);while(l.length()>0)i.extensions.push({type:[l.getByte(),l.getByte()],data:o(l,2)});if(!s)for(var c=0;c0){var d=p.getByte();if(d!==0)break;t.session.serverNameList.push(o(p,2).getBytes())}}}}(i.version.major!==a.Version.major||i.version.minor!==a.Version.minor)&&t.error(t,{message:"Incompatible TLS version.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.protocol_version}});if(s)t.session.cipherSuite=a.getCipherSuite(i.cipher_suite);else{var v=e.util.createBuffer(i.cipher_suites.bytes());while(v.length()>0){t.session.cipherSuite=a.getCipherSuite(v.getBytes(2));if(t.session.cipherSuite!==null)break}}if(t.session.cipherSuite===null)return t.error(t,{message:"No cipher suites in common.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.handshake_failure},cipherSuite:e.util.bytesToHex(i.cipher_suite)});s?t.session.compressionMethod=i.compression_method:t.session.compressionMethod=a.CompressionMethod.none}return i},a.createSecurityParameters=function(e,t){var n=e.entity===a.ConnectionEnd.client,r=t.random.bytes(),i=n?e.session.sp.client_random:r,s=n?r:a.createRandom().getBytes();e.session.sp={entity:e.entity,prf_algorithm:a.PRFAlgorithm.tls_prf_sha256,bulk_cipher_algorithm:null,cipher_type:null,enc_key_length:null,block_length:null,fixed_iv_length:null,record_iv_length:null,mac_algorithm:null,mac_length:null,mac_key_length:null,compression_algorithm:e.session.compressionMethod,pre_master_secret:null,master_secret:null,client_random:i,server_random:s}},a.handleServerHello=function(e,t,n){var r=a.parseHelloMessage(e,t,n);if(!e.fail){var i=r.session_id.bytes();i===e.session.id?(e.expect=d,e.session.resuming=!0,e.session.sp.server_random=r.random.bytes()):(e.expect=l,e.session.resuming=!1,a.createSecurityParameters(e,r)),e.session.id=i,e.process()}},a.handleClientHello=function(t,n,r){var i=a.parseHelloMessage(t,n,r);if(!t.fail){var s=i.session_id.bytes(),o=null;t.sessionCache&&(o=t.sessionCache.getSession(s),o===null&&(s="")),s.length===0&&(s=e.random.getBytes(32)),t.session.id=s,t.session.clientHelloVersion=i.version,t.session.sp=o?o.sp:{},o!==null?(t.expect=S,t.session.resuming=!0,t.session.sp.client_random=i.random.bytes()):(t.expect=t.verifyClient!==!1?b:w,t.session.resuming=!1,a.createSecurityParameters(t,i)),t.open=!0,a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createServerHello(t)})),t.session.resuming?(a.queue(t,a.createRecord({type:a.ContentType.change_cipher_spec,data:a.createChangeCipherSpec()})),t.state.pending=a.createConnectionState(t),t.state.current.write=t.state.pending.write,a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createFinished(t)}))):(a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createCertificate(t)})),t.fail||(a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createServerKeyExchange(t)})),t.verifyClient!==!1&&a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createCertificateRequest(t)})),a.queue(t,a.createRecord({type:a.ContentType.handshake,data:a.createServerHelloDone(t)})))),a.flush(t),t.process()}},a.handleCertificate=function(t,n,r){if(r<3)t.error(t,{message:"Invalid Certificate message. Message too short.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}});else{var i=n.fragment,s={certificate_list:o(i,3)},u,f,l=[];try{while(s.certificate_list.length()>0)u=o(s.certificate_list,3),f=e.asn1.fromDer(u),u=e.pki.certificateFromAsn1(f,!0),l.push(u)}catch(h){t.error(t,{message:"Could not parse certificate list.",cause:h,send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.bad_certificate}})}if(!t.fail){var p=t.entity===a.ConnectionEnd.client;!p&&t.verifyClient!==!0||l.length!==0?l.length===0?t.expect=p?c:w:(p?t.session.serverCertificate=l[0]:t.session.clientCertificate=l[0],a.verifyCertificateChain(t,l)&&(t.expect=p?c:w)):t.error(t,{message:p?"No server certificate provided.":"No client certificate provided.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}}),t.process()}}},a.handleServerKeyExchange=function(e,t,n){n>0?e.error(e,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.unsupported_certificate}}):(e.expect=h,e.process())},a.handleClientKeyExchange=function(t,n,r){if(r<48)t.error(t,{message:"Invalid key parameters. Only RSA is supported.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.unsupported_certificate}});else{var i=n.fragment,s={enc_pre_master_secret:o(i,2).getBytes()},u=null;if(t.getPrivateKey)try{u=t.getPrivateKey(t,t.session.serverCertificate),u=e.pki.privateKeyFromPem(u)}catch(f){t.error(t,{message:"Could not get private key.",cause:f,send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}})}if(u===null)t.error(t,{message:"No private key set.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}});else try{var l=t.session.sp;l.pre_master_secret=u.decrypt(s.enc_pre_master_secret);var c=t.session.clientHelloVersion;if(c.major!==l.pre_master_secret.charCodeAt(0)||c.minor!==l.pre_master_secret.charCodeAt(1))throw{message:"TLS version rollback attack detected."}}catch(f){l.pre_master_secret=e.random.getBytes(48)}}t.fail||(t.expect=S,t.session.clientCertificate!==null&&(t.expect=E),t.process())},a.handleCertificateRequest=function(e,t,n){if(n<3)e.error(e,{message:"Invalid CertificateRequest. Message too short.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}});else{var r=t.fragment,i={certificate_types:o(r,1),certificate_authorities:o(r,2)};e.session.certificateRequest=i,e.expect=p,e.process()}},a.handleCertificateVerify=function(t,n,r){if(r<2)t.error(t,{message:"Invalid CertificateVerify. Message too short.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}});else{var i=n.fragment;i.read-=4;var s=i.bytes();i.read+=4;var u={signature:o(i,2).getBytes()},f=e.util.createBuffer();f.putBuffer(t.session.md5.digest()),f.putBuffer(t.session.sha1.digest()),f=f.getBytes();try{var l=t.session.clientCertificate;if(!l.publicKey.verify(f,u.signature,"NONE"))throw{message:"CertificateVerify signature does not match."};t.session.md5.update(s),t.session.sha1.update(s)}catch(c){t.error(t,{message:"Bad signature in CertificateVerify.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.handshake_failure}})}t.fail||(t.expect=S,t.process())}},a.handleServerHelloDone=function(t,n,r){if(r>0)t.error(t,{message:"Invalid ServerHelloDone message. Invalid length.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.record_overflow}});else if(t.serverCertificate===null){var i={message:"No server certificate provided. Not enough security.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.insufficient_security}},s=t.verify(t,i.alert.description,depth,[]);if(s===!0)i=null;else{if(s||s===0)typeof s=="object"&&!e.util.isArray(s)?(s.message&&(i.message=s.message),s.alert&&(i.alert.description=s.alert)):typeof s=="number"&&(i.alert.description=s);t.error(t,i)}}!t.fail&&t.session.certificateRequest!==null&&(n=a.createRecord({type:a.ContentType.handshake,data:a.createCertificate(t)}),a.queue(t,n));if(!t.fail){n=a.createRecord({type:a.ContentType.handshake,data:a.createClientKeyExchange(t)}),a.queue(t,n),t.expect=g;var o=function(e,t){e.session.certificateRequest!==null&&e.session.clientCertificate!==null&&a.queue(e,a.createRecord({type:a.ContentType.handshake,data:a.createCertificateVerify(e,t)})),a.queue(e,a.createRecord({type:a.ContentType.change_cipher_spec,data:a.createChangeCipherSpec()})),e.state.pending=a.createConnectionState(e),e.state.current.write=e.state.pending.write,a.queue(e,a.createRecord({type:a.ContentType.handshake,data:a.createFinished(e)})),e.expect=d,a.flush(e),e.process()};t.session.certificateRequest===null||t.session.clientCertificate===null?o(t,null):a.getClientSignature(t,o)}},a.handleChangeCipherSpec=function(e,t){if(t.fragment.getByte()!==1)e.error(e,{message:"Invalid ChangeCipherSpec message received.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.illegal_parameter}});else{var n=e.entity===a.ConnectionEnd.client;if(e.session.resuming&&n||!e.session.resuming&&!n)e.state.pending=a.createConnectionState(e);e.state.current.read=e.state.pending.read;if(!e.session.resuming&&n||e.session.resuming&&!n)e.state.pending=null;e.expect=n?v:x,e.process()}},a.handleFinished=function(n,r,i){var s=r.fragment;s.read-=4;var o=s.bytes();s.read+=4;var u=r.fragment.getBytes();s=e.util.createBuffer(),s.putBuffer(n.session.md5.digest()),s.putBuffer(n.session.sha1.digest());var f=n.entity===a.ConnectionEnd.client,l=f?"server finished":"client finished",c=n.session.sp,h=12,p=t;s=p(c.master_secret,l,s.getBytes(),h);if(s.getBytes()!==u)n.error(n,{message:"Invalid verify_data in Finished message.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.decrypt_error}});else{n.session.md5.update(o),n.session.sha1.update(o);if(n.session.resuming&&f||!n.session.resuming&&!f)a.queue(n,a.createRecord({type:a.ContentType.change_cipher_spec,data:a.createChangeCipherSpec()})),n.state.current.write=n.state.pending.write,n.state.pending=null,a.queue(n,a.createRecord({type:a.ContentType.handshake,data:a.createFinished(n)}));n.expect=f?m:T,n.handshaking=!1,++n.handshakes,n.peerCertificate=f?n.session.serverCertificate:n.session.clientCertificate,n.sessionCache?(n.session={id:n.session.id,sp:n.session.sp},n.session.sp.keys=null):n.session=null,a.flush(n),n.isConnected=!0,n.connected(n),n.process()}},a.handleAlert=function(e,t){var n=t.fragment,r={level:n.getByte(),description:n.getByte()},i;switch(r.description){case a.Alert.Description.close_notify:i="Connection closed.";break;case a.Alert.Description.unexpected_message:i="Unexpected message.";break;case a.Alert.Description.bad_record_mac:i="Bad record MAC.";break;case a.Alert.Description.decryption_failed:i="Decryption failed.";break;case a.Alert.Description.record_overflow:i="Record overflow.";break;case a.Alert.Description.decompression_failure:i="Decompression failed.";break;case a.Alert.Description.handshake_failure:i="Handshake failure.";break;case a.Alert.Description.bad_certificate:i="Bad certificate.";break;case a.Alert.Description.unsupported_certificate:i="Unsupported certificate.";break;case a.Alert.Description.certificate_revoked:i="Certificate revoked.";break;case a.Alert.Description.certificate_expired:i="Certificate expired.";break;case a.Alert.Description.certificate_unknown:i="Certificate unknown.";break;case a.Alert.Description.illegal_parameter:i="Illegal parameter.";break;case a.Alert.Description.unknown_ca:i="Unknown certificate authority.";break;case a.Alert.Description.access_denied:i="Access denied.";break;case a.Alert.Description.decode_error:i="Decode error.";break;case a.Alert.Description.decrypt_error:i="Decrypt error.";break;case a.Alert.Description.export_restriction:i="Export restriction.";break;case a.Alert.Description.protocol_version:i="Unsupported protocol version.";break;case a.Alert.Description.insufficient_security:i="Insufficient security.";break;case a.Alert.Description.internal_error:i="Internal error.";break;case a.Alert.Description.user_canceled:i="User canceled.";break;case a.Alert.Description.no_renegotiation:i="Renegotiation not supported.";break;default:i="Unknown error."}r.description===a.Alert.Description.close_notify?e.close():(e.error(e,{message:i,send:!1,origin:e.entity===a.ConnectionEnd.client?"server":"client",alert:r}),e.process())},a.handleHandshake=function(t,n){var r=n.fragment,i=r.getByte(),s=r.getInt24();if(s>r.length())t.fragmented=n,n.fragment=e.util.createBuffer(),r.read-=4,t.process();else{t.fragmented=null,r.read-=4;var o=r.bytes(s+4);r.read+=4,i in I[t.entity][t.expect]?(t.entity===a.ConnectionEnd.server&&!t.open&&!t.fail&&(t.handshaking=!0,t.session={serverNameList:[],cipherSuite:null,compressionMethod:null,serverCertificate:null,clientCertificate:null,md5:e.md.md5.create(),sha1:e.md.sha1.create()}),i!==a.HandshakeType.hello_request&&i!==a.HandshakeType.certificate_verify&&i!==a.HandshakeType.finished&&(t.session.md5.update(o),t.session.sha1.update(o)),I[t.entity][t.expect][i](t,n,s)):a.handleUnexpected(t,n)}},a.handleApplicationData=function(e,t){e.data.putBuffer(t.fragment),e.dataReady(e),e.process()};var f=0,l=1,c=2,h=3,p=4,d=5,v=6,m=7,g=8,y=0,b=1,w=2,E=3,S=4,x=5,T=6,N=7,C=a.handleUnexpected,k=a.handleChangeCipherSpec,L=a.handleAlert,A=a.handleHandshake,O=a.handleApplicationData,M=[];M[a.ConnectionEnd.client]=[[C,L,A,C],[C,L,A,C],[C,L,A,C],[C,L,A,C],[C,L,A,C],[k,L,C,C],[C,L,A,C],[C,L,A,O],[C,L,A,C]],M[a.ConnectionEnd.server]=[[C,L,A,C],[C,L,A,C],[C,L,A,C],[C,L,A,C],[k,L,C,C],[C,L,A,C],[C,L,A,O],[C,L,A,C]];var _=a.handleHelloRequest,D=a.handleServerHello,P=a.handleCertificate,H=a.handleServerKeyExchange,B=a.handleCertificateRequest,j=a.handleServerHelloDone,F=a.handleFinished,I=[];I[a.ConnectionEnd.client]=[[C,C,D,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,P,H,B,j,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,H,B,j,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,C,B,j,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,C,C,j,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,F],[_,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[_,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C]];var q=a.handleClientHello,R=a.handleClientKeyExchange,U=a.handleCertificateVerify;I[a.ConnectionEnd.server]=[[C,q,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,P,C,C,C,C,C,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,R,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,U,C,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,F],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C],[C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C]],a.generateKeys=function(e,n){var r=t,i=n.client_random+n.server_random;e.session.resuming||(n.master_secret=r(n.pre_master_secret,"master secret",i,48).bytes(),n.pre_master_secret=null),i=n.server_random+n.client_random;var s=2*n.mac_key_length+2*n.enc_key_length+2*n.fixed_iv_length,o=r(n.master_secret,"key expansion",i,s);return{client_write_MAC_key:o.getBytes(n.mac_key_length),server_write_MAC_key:o.getBytes(n.mac_key_length),client_write_key:o.getBytes(n.enc_key_length),server_write_key:o.getBytes(n.enc_key_length),client_write_IV:o.getBytes(n.fixed_iv_length),server_write_IV:o.getBytes(n.fixed_iv_length)}},a.createConnectionState=function(e){var t=e.entity===a.ConnectionEnd.client,n=function(){var e={sequenceNumber:[0,0],macKey:null,macLength:0,macFunction:null,cipherState:null,cipherFunction:function(e){return!0},compressionState:null,compressFunction:function(e){return!0},updateSequenceNumber:function(){e.sequenceNumber[1]===4294967295?(e.sequenceNumber[1]=0,++e.sequenceNumber[0]):++e.sequenceNumber[1]}};return e},r={read:n(),write:n()};r.read.update=function(e,t){return r.read.cipherFunction(t,r.read)?r.read.compressFunction(e,t,r.read)||e.error(e,{message:"Could not decompress record.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.decompression_failure}}):e.error(e,{message:"Could not decrypt record or bad MAC.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.bad_record_mac}}),!e.fail},r.write.update=function(e,t){return r.write.compressFunction(e,t,r.write)?r.write.cipherFunction(t,r.write)||e.error(e,{message:"Could not encrypt record.",send:!1,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}}):e.error(e,{message:"Could not compress record.",send:!1,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}}),!e.fail};if(e.session){var o=e.session.sp;e.session.cipherSuite.initSecurityParameters(o),o.keys=a.generateKeys(e,o),r.read.macKey=t?o.keys.server_write_MAC_key:o.keys.client_write_MAC_key,r.write.macKey=t?o.keys.client_write_MAC_key:o.keys.server_write_MAC_key,e.session.cipherSuite.initConnectionState(r,e,o);switch(o.compression_algorithm){case a.CompressionMethod.none:break;case a.CompressionMethod.deflate:r.read.compressFunction=s,r.write.compressFunction=i;break;default:throw{message:"Unsupported compression algorithm."}}}return r},a.createRandom=function(){var t=new Date,n=+t+t.getTimezoneOffset()*6e4,r=e.util.createBuffer();return r.putInt32(n),r.putBytes(e.random.getBytes(28)),r},a.createRecord=function(e){if(!e.data)return null;var t={type:e.type,version:{major:a.Version.major,minor:a.Version.minor},length:e.data.length(),fragment:e.data};return t},a.createAlert=function(t){var n=e.util.createBuffer();return n.putByte(t.level),n.putByte(t.description),a.createRecord({type:a.ContentType.alert,data:n})},a.createClientHello=function(t){var n=e.util.createBuffer();for(var r=0;r0&&(d+=2);var v=t.session.id,m=v.length+1+2+4+28+2+s+1+f+d,g=e.util.createBuffer();return g.putByte(a.HandshakeType.client_hello),g.putInt24(m),g.putByte(a.Version.major),g.putByte(a.Version.minor),g.putBytes(t.session.sp.client_random),u(g,1,e.util.createBuffer(v)),u(g,2,n),u(g,1,o),d>0&&u(g,2,l),g},a.createServerHello=function(t){var n=t.session.id,r=n.length+1+2+4+28+2+1,i=e.util.createBuffer();return i.putByte(a.HandshakeType.server_hello),i.putInt24(r),i.putByte(a.Version.major),i.putByte(a.Version.minor),i.putBytes(t.session.sp.server_random),u(i,1,e.util.createBuffer(n)),i.putByte(t.session.cipherSuite.id[0]),i.putByte(t.session.cipherSuite.id[1]),i.putByte(t.session.compressionMethod),i},a.createCertificate=function(t){var n=t.entity===a.ConnectionEnd.client,r=null;t.getCertificate&&(r=t.getCertificate(t,n?t.session.certificateRequest:t.session.serverNameList));var i=e.util.createBuffer();if(r!==null)try{e.util.isArray(r)||(r=[r]);var s=null;for(var o=0;o0&&(r.putByte(a.HandshakeType.server_key_exchange),r.putInt24(n)),r},a.getClientSignature=function(t,n){var r=e.util.createBuffer();r.putBuffer(t.session.md5.digest()),r.putBuffer(t.session.sha1.digest()),r=r.getBytes(),t.getSignature=t.getSignature||function(t,n,r){var i=null;if(t.getPrivateKey)try{i=t.getPrivateKey(t,t.session.clientCertificate),i=e.pki.privateKeyFromPem(i)}catch(s){t.error(t,{message:"Could not get private key.",cause:s,send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}})}i===null?t.error(t,{message:"No private key set.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.internal_error}}):n=i.sign(n,null),r(t,n)},t.getSignature(t,r,n)},a.createCertificateVerify=function(t,n){var r=n.length+2,i=e.util.createBuffer();return i.putByte(a.HandshakeType.certificate_verify),i.putInt24(r),i.putInt16(n.length),i.putBytes(n),i},a.createCertificateRequest=function(t){var n=e.util.createBuffer();n.putByte(1);var r=e.util.createBuffer();for(var i in t.caStore.certs){var s=t.caStore.certs[i],o=e.pki.distinguishedNameToAsn1(s.subject);r.putBuffer(e.asn1.toDer(o))}var f=1+n.length()+2+r.length(),l=e.util.createBuffer();return l.putByte(a.HandshakeType.certificate_request),l.putInt24(f),u(l,1,n),u(l,2,r),l},a.createServerHelloDone=function(t){var n=e.util.createBuffer();return n.putByte(a.HandshakeType.server_hello_done),n.putInt24(0),n},a.createChangeCipherSpec=function(){var t=e.util.createBuffer();return t.putByte(1),t},a.createFinished=function(n){var r=e.util.createBuffer();r.putBuffer(n.session.md5.digest()),r.putBuffer(n.session.sha1.digest());var i=n.entity===a.ConnectionEnd.client,s=n.session.sp,o=12,u=t,f=i?"client finished":"server finished";r=u(s.master_secret,f,r.getBytes(),o);var l=e.util.createBuffer();return l.putByte(a.HandshakeType.finished),l.putInt24(r.length()),l.putBuffer(r),l},a.queue=function(t,n){if(!n)return;if(n.type===a.ContentType.handshake){var r=n.fragment.bytes();t.session.md5.update(r),t.session.sha1.update(r),r=null}var i;if(n.fragment.length()<=a.MaxFragment)i=[n];else{i=[];var s=n.fragment.bytes();while(s.length>a.MaxFragment)i.push(a.createRecord({type:n.type,data:e.util.createBuffer(s.slice(0,a.MaxFragment))})),s=s.slice(a.MaxFragment);s.length>0&&i.push(a.createRecord({type:n.type,data:e.util.createBuffer(s)}))}for(var o=0;o0&&(i=r.order[0]);if(i!==null&&i in r.cache){n=r.cache[i],delete r.cache[i];for(var s in r.order)if(r.order[s]===i){r.order.splice(s,1);break}}return n},r.setSession=function(t,n){if(r.order.length===r.capacity){var i=r.order.shift();delete r.cache[i]}var i=e.util.bytesToHex(t);r.order.push(i),r.cache[i]=n}}return r},a.createConnection=function(t){var n=null;t.caStore?e.util.isArray(t.caStore)?n=e.pki.createCaStore(t.caStore):n=t.caStore:n=e.pki.createCaStore();var r=t.cipherSuites||null;if(r===null){r=[];for(var i in a.CipherSuites)r.push(a.CipherSuites[i])}var s=t.server||!1?a.ConnectionEnd.server:a.ConnectionEnd.client,o=t.sessionCache?a.createSessionCache(t.sessionCache):null,u={entity:s,sessionId:t.sessionId,caStore:n,sessionCache:o,cipherSuites:r,connected:t.connected,virtualHost:t.virtualHost||null,verifyClient:t.verifyClient||!1,verify:t.verify||function(e,t,n,r){return t},getCertificate:t.getCertificate||null,getPrivateKey:t.getPrivateKey||null,getSignature:t.getSignature||null,input:e.util.createBuffer(),tlsData:e.util.createBuffer(),data:e.util.createBuffer(),tlsDataReady:t.tlsDataReady,dataReady:t.dataReady,closed:t.closed,error:function(e,n){n.origin=n.origin||(e.entity===a.ConnectionEnd.client?"client":"server"),n.send&&(a.queue(e,a.createAlert(n.alert)),a.flush(e));var r=n.fatal!==!1;r&&(e.fail=!0),t.error(e,n),r&&e.close(!1)},deflate:t.deflate||null,inflate:t.inflate||null};u.reset=function(e){u.record=null,u.session=null,u.peerCertificate=null,u.state={pending:null,current:null},u.expect=u.entity===a.ConnectionEnd.client?f:y,u.fragmented=null,u.records=[],u.open=!1,u.handshakes=0,u.handshaking=!1,u.isConnected=!1,u.fail=!e&&typeof e!="undefined",u.input.clear(),u.tlsData.clear(),u.data.clear(),u.state.current=a.createConnectionState(u)},u.reset();var l=function(e,t){var n=t.type-a.ContentType.change_cipher_spec,r=M[e.entity][e.expect];n in r?r[n](e,t):a.handleUnexpected(e,t)},c=function(t){var n=0,r=t.input,i=r.length();return i<5?n=5-i:(t.record={type:r.getByte(),version:{major:r.getByte(),minor:r.getByte()},length:r.getInt16(),fragment:e.util.createBuffer(),ready:!1},(t.record.version.major!==a.Version.major||t.record.version.minor!==a.Version.minor)&&t.error(t,{message:"Incompatible TLS version.",send:!0,alert:{level:a.Alert.Level.fatal,description:a.Alert.Description.protocol_version}})),n},h=function(e){var t=0,n=e.input,r=n.length();if(r0&&(u.sessionCache&&(n=u.sessionCache.getSession(t)),n===null&&(t="")),t.length===0&&u.sessionCache&&(n=u.sessionCache.getSession(),n!==null&&(t=n.id)),u.session={id:t,cipherSuite:null,compressionMethod:null,serverCertificate:null,certificateRequest:null,clientCertificate:null,sp:n?n.sp:{},md5:e.md.md5.create(),sha1:e.md.sha1.create()},u.session.sp.client_random=a.createRandom().getBytes(),u.open=!0,a.queue(u,a.createRecord({type:a.ContentType.handshake,data:a.createClientHello(u)})),a.flush(u)}},u.process=function(e){var t=0;return e&&u.input.putBytes(e),u.fail||(u.record!==null&&u.record.ready&&u.record.fragment.isEmpty()&&(u.record=null),u.record===null&&(t=c(u)),!u.fail&&u.record!==null&&!u.record.ready&&(t=h(u)),!u.fail&&u.record!==null&&u.record.ready&&l(u,u.record)),t},u.prepare=function(t){return a.queue(u,a.createRecord({type:a.ContentType.application_data,data:e.util.createBuffer(t)})),a.flush(u)},u.close=function(e){!u.fail&&u.sessionCache&&u.session&&u.sessionCache.setSession(u.session.id,u.session);if(u.open){u.open=!1,u.input.clear();if(u.isConnected||u.handshaking)u.isConnected=u.handshaking=!1,a.queue(u,a.createAlert({level:a.Alert.Level.warning,description:a.Alert.Description.close_notify})),a.flush(u);u.closed(u)}u.reset(e)},u},e.tls=e.tls||{};for(var X in a)typeof a[X]!="function"&&(e.tls[X]=a[X]);e.tls.prf_tls1=t,e.tls.hmac_sha1=r,e.tls.createSessionCache=a.createSessionCache,e.tls.createConnection=a.createConnection}var t="tls";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o1?o=e.random.getBytes(16):o=n.cipherState.init?null:n.cipherState.iv,n.cipherState.init=!0;var u=n.cipherState.cipher;return u.start(o),t.version.minor>1&&u.output.putBytes(o),u.update(t.fragment),u.finish(i)&&(t.fragment=u.output,t.length=t.fragment.length(),r=!0),r}function i(e,t,n){if(!n){var r=e-t.length()%e;t.fillWithByte(r-1,r)}return!0}function s(e,t,n){var r=!0;if(n){var i=t.length(),s=t.last();for(var o=i-1-s;o=u?(t.fragment=o.output.getBytes(l-u),a=o.output.getBytes(u)):t.fragment=o.output.getBytes(),t.fragment=e.util.createBuffer(t.fragment),t.length=t.fragment.length();var c=n.macFunction(n.macKey,n.sequenceNumber,t);return n.updateSequenceNumber(),r=c===a&&r,r}var t=e.tls;t.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA={id:[0,47],name:"TLS_RSA_WITH_AES_128_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=t.BulkCipherAlgorithm.aes,e.cipher_type=t.CipherType.block,e.enc_key_length=16,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=t.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:n},t.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA={id:[0,53],name:"TLS_RSA_WITH_AES_256_CBC_SHA",initSecurityParameters:function(e){e.bulk_cipher_algorithm=t.BulkCipherAlgorithm.aes,e.cipher_type=t.CipherType.block,e.enc_key_length=32,e.block_length=16,e.fixed_iv_length=16,e.record_iv_length=16,e.mac_algorithm=t.MACAlgorithm.hmac_sha1,e.mac_length=20,e.mac_key_length=20},initConnectionState:n}}var t="aesCipherSuites";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o=1&&e.log.verbose(t,"[%s][%s] init",this.id,this.name,this)};T.prototype.debug=function(n){n=n||"",e.log.debug(t,n,"[%s][%s] task:",this.id,this.name,this,"subtasks:",this.subtasks.length,"queue:",s)},T.prototype.next=function(e,t){typeof e=="function"&&(t=e,e=this.name);var n=new T({run:t,name:e,parent:this});return n.state=l,n.type=this.type,n.successCallback=this.successCallback||null,n.failureCallback=this.failureCallback||null,this.subtasks.push(n),this},T.prototype.parallel=function(t,n){return e.util.isArray(t)&&(n=t,t=this.name),this.next(t,function(r){var i=r;i.block(n.length);var s=function(t,r){e.task.start({type:t,run:function(e){n[r](e)},success:function(e){i.unblock()},failure:function(e){i.unblock()}})};for(var o=0;o0&&(this.state=x[this.state][g])},T.prototype.unblock=function(e){return e=typeof e=="undefined"?1:e,this.blocks-=e,this.blocks===0&&this.state!==p&&(this.state=l,C(this,0)),this.blocks},T.prototype.sleep=function(e){e=typeof e=="undefined"?0:e,this.state=x[this.state][b];var t=this;this.timeoutId=setTimeout(function(){t.timeoutId=null,t.state=l,C(t,0)},e)},T.prototype.wait=function(e){e.wait(this)},T.prototype.wakeup=function(){this.state===h&&(cancelTimeout(this.timeoutId),this.timeoutId=null,this.state=l,C(this,0))},T.prototype.cancel=function(){this.state=x[this.state][E],this.permitsNeeded=0,this.timeoutId!==null&&(cancelTimeout(this.timeoutId),this.timeoutId=null),this.subtasks=[]},T.prototype.fail=function(e){this.error=!0,k(this,!0);if(e)e.error=this.error,e.swapTime=this.swapTime,e.userData=this.userData,C(e,0);else{if(this.parent!==null){var t=this.parent;while(t.parent!==null)t.error=this.error,t.swapTime=this.swapTime,t.userData=this.userData,t=t.parent;k(t,!0)}this.failureCallback&&this.failureCallback(this)}};var N=function(e){e.error=!1,e.state=x[e.state][m],setTimeout(function(){e.state===l&&(e.swapTime=+(new Date),e.run(e),C(e,0))},0)},C=function(e,t){var n=t>u||+(new Date)-e.swapTime>a,r=function(t){t++;if(e.state===l){n&&(e.swapTime=+(new Date));if(e.subtasks.length>0){var r=e.subtasks.shift();r.error=e.error,r.swapTime=e.swapTime,r.userData=e.userData,r.run(r),r.error||C(r,t)}else k(e),e.error||e.parent!==null&&(e.parent.error=e.error,e.parent.swapTime=e.swapTime,e.parent.userData=e.userData,C(e.parent,t))}};n?setTimeout(r,0):r(t)},k=function(i,o){i.state=p,delete r[i.id],n>=1&&e.log.verbose(t,"[%s][%s] finish",i.id,i.name,i),i.parent===null&&(i.type in s?s[i.type].length===0?e.log.error(t,"[%s][%s] task queue empty [%s]",i.id,i.name,i.type):s[i.type][0]!==i?e.log.error(t,"[%s][%s] task not first in queue [%s]",i.id,i.name,i.type):(s[i.type].shift(),s[i.type].length===0?(n>=1&&e.log.verbose(t,"[%s][%s] delete queue [%s]",i.id,i.name,i.type),delete s[i.type]):(n>=1&&e.log.verbose(t,"[%s][%s] queue start next [%s] remain:%s",i.id,i.name,i.type,s[i.type].length),s[i.type][0].start())):e.log.error(t,"[%s][%s] task queue missing [%s]",i.id,i.name,i.type),o||(i.error&&i.failureCallback?i.failureCallback(i):!i.error&&i.successCallback&&i.successCallback(i)))};e.task=e.task||{},e.task.start=function(r){var i=new T({run:r.run,name:r.name||o});i.type=r.type,i.successCallback=r.success||null,i.failureCallback=r.failure||null,i.type in s?s[r.type].push(i):(n>=1&&e.log.verbose(t,"[%s][%s] create queue [%s]",i.id,i.name,i.type),s[i.type]=[i],N(i))},e.task.cancel=function(e){e in s&&(s[e]=[s[e][0]])},e.task.createCondition=function(){var e={tasks:{}};return e.wait=function(t){t.id in e.tasks||(t.block(),e.tasks[t.id]=t)},e.notify=function(){var t=e.tasks;e.tasks={};for(var n in t)t[n].unblock()},e}}var t="task";if(typeof define!="function"){if(typeof module!="object"||!module.exports)return typeof forge=="undefined"&&(forge={}),e(forge);var n=!0;define=function(e,t){t(require,module)}}var r,i=function(n,i){i.exports=function(i){var s=r.map(function(e){return n(e)}).concat(e);i=i||{},i.defined=i.defined||{};if(i.defined[t])return i[t];i.defined[t]=!0;for(var o=0;o