@unabandoned/parse-asn1 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.githooks/commit-msg +2 -0
  2. package/.github/FUNDING.yml +12 -0
  3. package/.github/workflows/ci.yml +13 -0
  4. package/.github/workflows/codeql.yml +14 -0
  5. package/.github/workflows/commitlint.yml +8 -0
  6. package/.github/workflows/publish.yml +16 -0
  7. package/.github/workflows/release-cut.yml +12 -0
  8. package/.github/workflows/release-please.yml +11 -0
  9. package/.github/workflows/release-security.yml +11 -0
  10. package/.github/workflows/renovate-config.yml +10 -0
  11. package/.github/workflows/scorecard.yml +14 -0
  12. package/.release-please-manifest.json +3 -0
  13. package/.unabandoned.yml +30 -0
  14. package/CHANGELOG.md +216 -0
  15. package/LICENSE +13 -0
  16. package/README.md +15 -0
  17. package/aesid.json +13 -0
  18. package/asn1.js +123 -0
  19. package/certificate.js +89 -0
  20. package/commitlint.config.js +1 -0
  21. package/evp-bytes-to-key.js +56 -0
  22. package/fixProc.js +33 -0
  23. package/index.js +111 -0
  24. package/package.json +46 -0
  25. package/release-please-config.json +24 -0
  26. package/renovate.json +7 -0
  27. package/test/1024.priv +16 -0
  28. package/test/1024.pub +6 -0
  29. package/test/cert.priv +27 -0
  30. package/test/cert.pub +20 -0
  31. package/test/dsa.1024.priv +18 -0
  32. package/test/dsa.1024.pub +12 -0
  33. package/test/dsa.2048.priv +20 -0
  34. package/test/dsa.2048.pub +20 -0
  35. package/test/ec.pass.priv +7 -0
  36. package/test/ec.priv +5 -0
  37. package/test/ec.pub +4 -0
  38. package/test/index.js +108 -0
  39. package/test/node.cert +20 -0
  40. package/test/pass.1024.priv +18 -0
  41. package/test/pass.1024.pub +6 -0
  42. package/test/pass.dsa.1024.priv +11 -0
  43. package/test/pass.dsa.1024.pub +12 -0
  44. package/test/pass.rsa.1024.priv +18 -0
  45. package/test/pass.rsa.1024.pub +6 -0
  46. package/test/pass.rsa.2028.priv +30 -0
  47. package/test/pass.rsa.2028.pub +9 -0
  48. package/test/pass2.dsa.1024.priv +15 -0
  49. package/test/pass2.dsa.1024.pub +12 -0
  50. package/test/rsa.1024.priv +15 -0
  51. package/test/rsa.1024.pub +5 -0
  52. package/test/rsa.2028.priv +27 -0
  53. package/test/rsa.2028.pub +8 -0
  54. package/test/tape.js +134 -0
  55. package/test/vector.js +11 -0
  56. package/test/vector.priv +12 -0
  57. package/test/vector2.priv +19 -0
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ // EVP_BytesToKey, vendored from evp_bytestokey@1.0.3 (MIT, Calvin Metcalf),
4
+ // unmaintained since 2017. Forty-five lines whose only real content is MD5,
5
+ // which @unabandoned/hash.js provides with no dependencies of its own;
6
+ // depending on the package meant carrying md5.js (2018) and hash-base too.
7
+
8
+ var Buffer = require('safe-buffer').Buffer;
9
+ var md5 = require('@unabandoned/hash.js').md5;
10
+
11
+ function digest(parts) {
12
+ var hash = md5();
13
+ for (var i = 0; i < parts.length; i++) {
14
+ if (parts[i]) { hash.update(parts[i]); }
15
+ }
16
+ return Buffer.from(hash.digest());
17
+ }
18
+
19
+ /* eslint-disable camelcase */
20
+ function EVP_BytesToKey(password, salt, keyBits, ivLen) {
21
+ if (!Buffer.isBuffer(password)) { password = Buffer.from(password, 'binary'); }
22
+ if (salt) {
23
+ if (!Buffer.isBuffer(salt)) { salt = Buffer.from(salt, 'binary'); }
24
+ if (salt.length !== 8) { throw new RangeError('salt should be Buffer with 8 byte length'); }
25
+ }
26
+
27
+ var keyLen = keyBits / 8;
28
+ var key = Buffer.alloc(keyLen);
29
+ var iv = Buffer.alloc(ivLen || 0);
30
+ var tmp = Buffer.alloc(0);
31
+
32
+ while (keyLen > 0 || ivLen > 0) {
33
+ tmp = digest([tmp, password, salt]);
34
+
35
+ var used = 0;
36
+
37
+ if (keyLen > 0) {
38
+ var keyStart = key.length - keyLen;
39
+ used = Math.min(keyLen, tmp.length);
40
+ tmp.copy(key, keyStart, 0, used);
41
+ keyLen -= used;
42
+ }
43
+
44
+ if (used < tmp.length && ivLen > 0) {
45
+ var ivStart = iv.length - ivLen;
46
+ var length = Math.min(ivLen, tmp.length - used);
47
+ tmp.copy(iv, ivStart, used, used + length);
48
+ ivLen -= length;
49
+ }
50
+ }
51
+
52
+ tmp.fill(0);
53
+ return { key: key, iv: iv };
54
+ }
55
+
56
+ module.exports = EVP_BytesToKey;
package/fixProc.js ADDED
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ // adapted from https://github.com/apatil/pemstrip
4
+ var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m;
5
+ var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;
6
+ var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m;
7
+ var evp = require('./evp-bytes-to-key');
8
+ var ciphers = require('@unabandoned/browserify-aes');
9
+ var Buffer = require('safe-buffer').Buffer;
10
+ module.exports = function (okey, password) {
11
+ var key = okey.toString();
12
+ var match = key.match(findProc);
13
+ var decrypted;
14
+ if (!match) {
15
+ var match2 = key.match(fullRegex);
16
+ decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64');
17
+ } else {
18
+ var suite = 'aes' + match[1];
19
+ var iv = Buffer.from(match[2], 'hex');
20
+ var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64');
21
+ var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;
22
+ var out = [];
23
+ var cipher = ciphers.createDecipheriv(suite, cipherKey, iv);
24
+ out.push(cipher.update(cipherText));
25
+ out.push(cipher['final']());
26
+ decrypted = Buffer.concat(out);
27
+ }
28
+ var tag = key.match(startRegex)[1];
29
+ return {
30
+ tag: tag,
31
+ data: decrypted
32
+ };
33
+ };
package/index.js ADDED
@@ -0,0 +1,111 @@
1
+ 'use strict';
2
+
3
+ var asn1 = require('./asn1');
4
+ var aesid = require('./aesid.json');
5
+ var fixProc = require('./fixProc');
6
+ var ciphers = require('@unabandoned/browserify-aes');
7
+ var pbkdf2Sync = require('pbkdf2').pbkdf2Sync;
8
+ var Buffer = require('safe-buffer').Buffer;
9
+
10
+ function decrypt(data, password) {
11
+ var salt = data.algorithm.decrypt.kde.kdeparams.salt;
12
+ var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);
13
+ var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];
14
+ var iv = data.algorithm.decrypt.cipher.iv;
15
+ var cipherText = data.subjectPrivateKey;
16
+ var keylen = parseInt(algo.split('-')[1], 10) / 8;
17
+ var key = pbkdf2Sync(password, salt, iters, keylen, 'sha1');
18
+ var cipher = ciphers.createDecipheriv(algo, key, iv);
19
+ var out = [];
20
+ out.push(cipher.update(cipherText));
21
+ out.push(cipher['final']());
22
+ return Buffer.concat(out);
23
+ }
24
+
25
+ function parseKeys(buffer) {
26
+ var password;
27
+ if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
28
+ password = buffer.passphrase;
29
+ buffer = buffer.key;
30
+ }
31
+ if (typeof buffer === 'string') {
32
+ buffer = Buffer.from(buffer);
33
+ }
34
+
35
+ var stripped = fixProc(buffer, password);
36
+
37
+ var type = stripped.tag;
38
+ var data = stripped.data;
39
+ var subtype, ndata;
40
+ switch (type) {
41
+ case 'CERTIFICATE':
42
+ ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;
43
+ // falls through
44
+ case 'PUBLIC KEY':
45
+ if (!ndata) {
46
+ ndata = asn1.PublicKey.decode(data, 'der');
47
+ }
48
+ subtype = ndata.algorithm.algorithm.join('.');
49
+ switch (subtype) {
50
+ case '1.2.840.113549.1.1.1':
51
+ return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');
52
+ case '1.2.840.10045.2.1':
53
+ ndata.subjectPrivateKey = ndata.subjectPublicKey;
54
+ return {
55
+ type: 'ec',
56
+ data: ndata
57
+ };
58
+ case '1.2.840.10040.4.1':
59
+ ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');
60
+ return {
61
+ type: 'dsa',
62
+ data: ndata.algorithm.params
63
+ };
64
+ default: throw new Error('unknown key id ' + subtype);
65
+ }
66
+ // throw new Error('unknown key type ' + type)
67
+ case 'ENCRYPTED PRIVATE KEY':
68
+ data = asn1.EncryptedPrivateKey.decode(data, 'der');
69
+ data = decrypt(data, password);
70
+ // falls through
71
+ case 'PRIVATE KEY':
72
+ ndata = asn1.PrivateKey.decode(data, 'der');
73
+ subtype = ndata.algorithm.algorithm.join('.');
74
+ switch (subtype) {
75
+ case '1.2.840.113549.1.1.1':
76
+ return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');
77
+ case '1.2.840.10045.2.1':
78
+ return {
79
+ curve: ndata.algorithm.curve,
80
+ privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
81
+ };
82
+ case '1.2.840.10040.4.1':
83
+ ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');
84
+ return {
85
+ type: 'dsa',
86
+ params: ndata.algorithm.params
87
+ };
88
+ default: throw new Error('unknown key id ' + subtype);
89
+ }
90
+ // throw new Error('unknown key type ' + type)
91
+ case 'RSA PUBLIC KEY':
92
+ return asn1.RSAPublicKey.decode(data, 'der');
93
+ case 'RSA PRIVATE KEY':
94
+ return asn1.RSAPrivateKey.decode(data, 'der');
95
+ case 'DSA PRIVATE KEY':
96
+ return {
97
+ type: 'dsa',
98
+ params: asn1.DSAPrivateKey.decode(data, 'der')
99
+ };
100
+ case 'EC PRIVATE KEY':
101
+ data = asn1.ECPrivateKey.decode(data, 'der');
102
+ return {
103
+ curve: data.parameters.value,
104
+ privateKey: data.privateKey
105
+ };
106
+ default: throw new Error('unknown key type ' + type);
107
+ }
108
+ }
109
+ parseKeys.signature = asn1.signature;
110
+
111
+ module.exports = parseKeys;
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@unabandoned/parse-asn1",
3
+ "version": "5.2.0",
4
+ "description": "utility library for parsing asn1 files for use with browserify-sign.",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "node --test test/*.js",
8
+ "prepare": "git config core.hooksPath .githooks || true"
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/unabandoned/parse-asn1.git"
13
+ },
14
+ "author": "",
15
+ "license": "ISC",
16
+ "dependencies": {
17
+ "@unabandoned/asn1.js": "^5.4.1",
18
+ "@unabandoned/browserify-aes": "^1.4.0",
19
+ "@unabandoned/hash.js": "^1.4.0",
20
+ "pbkdf2": "npm:@unabandoned/pbkdf2@^3.2.1",
21
+ "safe-buffer": "^5.2.1"
22
+ },
23
+ "devDependencies": {
24
+ "@commitlint/cli": "21.2.2",
25
+ "@commitlint/config-conventional": "21.2.2"
26
+ },
27
+ "engines": {
28
+ "node": ">= 0.10"
29
+ },
30
+ "auto-changelog": {
31
+ "output": "CHANGELOG.md",
32
+ "template": "keepachangelog",
33
+ "unreleased": false,
34
+ "commitLimit": false,
35
+ "backfillLimit": false,
36
+ "hideCredit": true
37
+ },
38
+ "publishConfig": {
39
+ "access": "public",
40
+ "provenance": true
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/unabandoned/parse-asn1/issues"
44
+ },
45
+ "homepage": "https://github.com/unabandoned/parse-asn1#readme"
46
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
3
+ "packages": {
4
+ ".": {
5
+ "release-type": "node",
6
+ "bump-minor-pre-major": true,
7
+ "bump-patch-for-minor-pre-major": true,
8
+ "changelog-sections": [
9
+ { "type": "feat", "section": "Features" },
10
+ { "type": "fix", "section": "Bug Fixes" },
11
+ { "type": "perf", "section": "Performance Improvements" },
12
+ { "type": "revert", "section": "Reverts" },
13
+ { "type": "deps", "section": "Dependencies & maintenance" },
14
+ { "type": "build", "section": "Dependencies & maintenance" },
15
+ { "type": "chore", "section": "Dependencies & maintenance" },
16
+ { "type": "ci", "section": "Dependencies & maintenance" },
17
+ { "type": "refactor", "section": "Dependencies & maintenance" },
18
+ { "type": "docs", "section": "Dependencies & maintenance" },
19
+ { "type": "test", "section": "Dependencies & maintenance" },
20
+ { "type": "style", "section": "Dependencies & maintenance" }
21
+ ]
22
+ }
23
+ }
24
+ }
package/renovate.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "github>unabandoned/renovate-config"
5
+ ],
6
+ "forkProcessing": "enabled"
7
+ }
package/test/1024.priv ADDED
@@ -0,0 +1,16 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKulUTZ8B1qccZ8c
3
+ DXRGSY08gW8KvLlcxxxGC4gZHNT3CBUF8n5R4KE30aZyYZ/rtsQZu05juZJxaJ0q
4
+ mbe75dlQ5d+Xc9BMXeQg/MpTZw5TAN7OIdGYYpFBe+1PLZ6wEfjkYrMqMUcfq2Lq
5
+ hTLdAbvBJnuRcYZLqmBeOQ8FTrKrAgMBAAECgYEAnkHRbEPU3/WISSQrP36iyCb2
6
+ S/SBZwKkzmvCrBxDWhPeDswp9c/2JY76rNWfLzy8iXgUG8WUzvHje61Qh3gmBcKe
7
+ bUaTGl4Vy8Ha1YBADo5RfRrdm0FE4tvgvu/TkqFqpBBZweu54285hk5zlG7n/D7Y
8
+ dnNXUpu5MlNb5x3gW0kCQQDUL//cwcXUxY/evaJP4jSe+ZwEQZo+zXRLiPUulBoV
9
+ aw28CVMuxdgwqAo1X1IKefPeUaf7RQu8gCKaRnpGuEuXAkEAzxZTfMmvmCUDIew4
10
+ 5Gk6bK265XQWdhcgiq254lpBGOYmDj9yCE7yA+zmASQwMsXTdQOi1hOCEyrXuSJ5
11
+ c++EDQJAFh3WrnzoEPByuYXMmET8tSFRWMQ5vpgNqh3haHR5b4gUC2hxaiunCBNL
12
+ 1RpVY9AoUiDywGcG/SPh93CnKB3niwJBAKP7AtsifZgVXtiizB4aMThTjVYaSZrz
13
+ D0Kg9DuHylpkDChmFu77TGrNUQgAVuYtfhb/bRblVa/F0hJ4eQHT3JUCQBVT68tb
14
+ OgRUk0aP9tC3021VN82X6+klowSQN8oBPX8+TfDWSUilp/+j24Hky+Z29Do7yR/R
15
+ qutnL92CvBlVLV4=
16
+ -----END PRIVATE KEY-----
package/test/1024.pub ADDED
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrpVE2fAdanHGfHA10RkmNPIFv
3
+ Cry5XMccRguIGRzU9wgVBfJ+UeChN9GmcmGf67bEGbtOY7mScWidKpm3u+XZUOXf
4
+ l3PQTF3kIPzKU2cOUwDeziHRmGKRQXvtTy2esBH45GKzKjFHH6ti6oUy3QG7wSZ7
5
+ kXGGS6pgXjkPBU6yqwIDAQAB
6
+ -----END PUBLIC KEY-----
package/test/cert.priv ADDED
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAt9YImToSbFBMV+/xo6Dlh8+MlZEizQKLE2B3PF9qKeBCg24p
3
+ RYff+rhrfj9fA67Z0duGCDjys+IF2BcqY+vlBt6s0mjfD3zAKwLXCKVTv81znWu7
4
+ ChwKk6QQMfs4EHaxJShrA4vdhhf6+Z3Grt6WnlDD7SwUHXVfOexeTC1VIS+0fXQf
5
+ bfTMQL8A+0GA7u0/c465v5AGMDwts+leNJ9kdgaowJtUu681i0tlJpTceAn1xuKn
6
+ AONbw6LTlQns1+30TDwrUgn72dDcf6s3XqGwMV0RjXC50l/mISNNVLiIDCYf57Fh
7
+ W9NZcxt0uuJDwU4VaWxQaMAmbaI2U8sxF3FtGQIDAQABAoIBAQCwhTtybjmceaok
8
+ 0khTlz5vHxLd1yP0eNm0PG+hr/jPxv/3FcNZeXPPWmAVNKJ2deG/yau0n4IkygZU
9
+ jUHt+mfLJewKihqN03rukeaK7b0yMgQvB2/s8CoTxHislY4q+N12UY4YNKf8h3A9
10
+ WYubBC7aS7EmPqn982MByn5tZSYWGwjqZ83j5XUPVATqvLZ0/uruRxZSykV0lcE6
11
+ 9xXKj5xHFHn21IcFzzBLTdkQjcOo2wnLVfUqf+1izPKHkXkn5LGRFy+EFwzl+99P
12
+ vj6YWinqKaS00CazdxMx61btwQ2euUw9+ifGAr1nQvUaDbv7JzXkTSg4VaXVhO/l
13
+ igiGqayBAoGBANwbDnWrQSmS9BPNmA9dL3NYyISsFzWSFqS7/KGQ0ZzkPJ5yIcdV
14
+ nl1QZYF7+O/JT6mV8fLKDQiIsB0LSET8nRUsty12n3Gr4ysHiRZTAI+IOubbpE/N
15
+ Id+Mk7AElxVJ5Ff/3emJzZrJQH+d+oVkRJFz/7d2AupOVPPWKHtzTkCRAoGBANXQ
16
+ zDfX6lGYR8ZWXVAXGHJQLgz5NL0cppdpSNS7gcKUR6Zr+450fHxMM/l8aJvkXuCN
17
+ arIGEqKDnWNKfFQiWnAU73Rtntv+C0mMOSlBpn8RNG3MtqXY4HL5aAyLygDhziNH
18
+ C8A7QvF4Pl8kqeq1wc+1ULA2Jt6yvfXE2w5jMqgJAoGBAKXyVEWNN5TjsdgYYvP6
19
+ euMJZiz5HoqKOT48aW1apV8XiUigni0OtVZ/XfhxAq+u5LvkTEWT5p2viLBtKDCz
20
+ EK+9ReImFHJ8eMqhZM8LB1owCNCzer+b1lUYROUpoMsxKdLbG3GPLw/rehB9iDr3
21
+ 7OaJQZwNgocrRcuNhHoG5lGxAoGAaI94HuL+2rIef3aioVT6BoUBUCTaTpThPvAk
22
+ xqt/lFkRBOiPlyWN7vcQ/7OAMKQoZaWihLaFjGXSpMi7LiWyllcWlpg49JoyiOAC
23
+ 4BMTydXvDrbqpwX9FRy0blY6Dd5fAU9wBqy0WwOTdNGoKniB9AJWGCYTMhq03KhM
24
+ +6c1EYkCgYAv65p32zCWieFzl/H6EVItNzRoQGOLR8uHcfw0+9Kjs5zPLhtzAJwS
25
+ 8YF/6s608zW9yCdsN3k5+9tR2UAPLEvQoHgZQkGmNSeMufEVyC10MKM5ytMMcIU5
26
+ UrM1pgMwllNyS1sWpJY0or9gEDaHzchN+Q1Ljj23DHDC1uPTkXQqSg==
27
+ -----END RSA PRIVATE KEY-----
package/test/cert.pub ADDED
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDUDCCAjgCCQD1TryolF9FbDANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJV
3
+ UzEOMAwGA1UECAwFVGV4YXMxDzANBgNVBAcMBkRhbGxhczEWMBQGA1UECgwNUHVi
4
+ bGlzaGVyIEluYzErMCkGA1UEAwwiUHVibGlzaGVyIElOVEVSTUVESUFSWSBDRVJU
5
+ SUZJQ0FURTAeFw0xOTAxMTAyMTAzNDVaFw0yOTAxMDcyMTAzNDVaMGExCzAJBgNV
6
+ BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGRGFsbGFzMRYwFAYDVQQK
7
+ DA1QdWJsaXNoZXIgSW5jMRkwFwYDVQQDDBBCb2IgUGhvdG9ncmFwaGVyMIIBIjAN
8
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt9YImToSbFBMV+/xo6Dlh8+MlZEi
9
+ zQKLE2B3PF9qKeBCg24pRYff+rhrfj9fA67Z0duGCDjys+IF2BcqY+vlBt6s0mjf
10
+ D3zAKwLXCKVTv81znWu7ChwKk6QQMfs4EHaxJShrA4vdhhf6+Z3Grt6WnlDD7SwU
11
+ HXVfOexeTC1VIS+0fXQfbfTMQL8A+0GA7u0/c465v5AGMDwts+leNJ9kdgaowJtU
12
+ u681i0tlJpTceAn1xuKnAONbw6LTlQns1+30TDwrUgn72dDcf6s3XqGwMV0RjXC5
13
+ 0l/mISNNVLiIDCYf57FhW9NZcxt0uuJDwU4VaWxQaMAmbaI2U8sxF3FtGQIDAQAB
14
+ MA0GCSqGSIb3DQEBCwUAA4IBAQCLXkxQAHK1uSrtNZL3LbYFmDq1EXpe7wNmRmya
15
+ 9i5ys+TmGYACGDEGogTp0uGY1qL7pKPB4IWfZsiZ0UEcYju4eRQR/SfK2e8GPT26
16
+ IC3nLfoH20E7+TbHZSfUt3g+Oqn4Sg63vYMXNxCPnUq6gUbbzYcv5/O0cT5yqTpL
17
+ 9C1y+IIXSEB0t0M7oYOZDpOSB/VN/7lDZFLjXfeOhhsXbfIc1gyx3BMrNT/nnW1J
18
+ LbSpB0r1d9VPsZA40CH7E0oiGQCa9Jb7h3n/10ABu5C8PQktbxjAlqZ5jiuYZG11
19
+ C5f7bPbe6ao2OGXWKLrVSE+2hYGMcffXy0gutH4ytLS8EiLX
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN DSA PARAMETERS-----
2
+ MIIBHgKBgQDdFg3WQmpOZxObxraIe4rrbUhrBw99fbnz99IvLj60sM/7Uk7eHYvp
3
+ UrPaJBIcjPy68BjV4ekDljuPpFoAorsLzyvVSHuNvN6I/bRGm1TCOjDFVe98Oz6k
4
+ XmI6pRfIF0TiIPXkel/sWIfBYa1lqdoW82h9FIjhbxVHrKGfvMEc9wIVAOzmJHec
5
+ s6yBm+nE3+OmpWFYj0ylAoGAYxO6mFSoIY7PDRyRzKJEnULSzYXd3FoMkPwDCd5I
6
+ ch/piIoAUIIQ542TL54GT9wuiCL+0D48qi9GWKasPZABfPQ008WOzmKzD8ncrUTd
7
+ a7pzvUvdmwldA4Aa5/5xSXwtpK+DDye7KPlu+oi1BF6uj4TgfeGr1uxouxC2WhBE
8
+ qH0=
9
+ -----END DSA PARAMETERS-----
10
+ -----BEGIN PRIVATE KEY-----
11
+ MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1
12
+ CMNp0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2Y
13
+ V5se3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3Og
14
+ ziRcZ1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/Hckvhlh
15
+ HQyKZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+T
16
+ VJQ3VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUc
17
+ rogAqRGESqBVTawjyF/ECX667y/P49MEFgIUSeRVRgAXsLmeWR/V4Rh9Hex+9+s=
18
+ -----END PRIVATE KEY-----
@@ -0,0 +1,12 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBtzCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1CMNp
3
+ 0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2YV5se
4
+ 3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3OgziRc
5
+ Z1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/HckvhlhHQyK
6
+ ZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+TVJQ3
7
+ VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUcrogA
8
+ qRGESqBVTawjyF/ECX667y/P49MDgYQAAoGAXYmxO4+52C1gBzh7GgTwNLJl7bLn
9
+ gOhKTFlKhT36VjMjeFfdXmBVBVbfUottKZby/gVX1IXT38PStB/dswbF45bGDdoS
10
+ zMFjYmHTtLtrU/4hReVtvb5MYmrPDFX58SwcSRRO/cH6WJPvfu4Aq0cJZA9Kb0B9
11
+ 5Wo18JxAqvPtTB8=
12
+ -----END PUBLIC KEY-----
@@ -0,0 +1,20 @@
1
+ -----BEGIN DSA PRIVATE KEY-----
2
+ MIIDVQIBAAKCAQEA0jDs9lLWX//NXYE1kNKw4UiDVMHHEtTF1OzJvBJvUh3/xMlU
3
+ ic8mUpIMU5mt7BTjcijyLLl/TeNBcI/xDvWH3PAfCjP1CmNzOMHwU6wKA4Q20m5v
4
+ zjauVycd7loRm5h+1XyD2JL1KmQTzhIIRAmRTeXMnr8LAHidYfUKmzCOCCrnctlE
5
+ EOh1S6e7BFxQBRrlUxZF0LTjcAz31rrjIH6wKkYR4mnpGuI2vVJ+qHGmEhvq1hAb
6
+ DvP0GN0iofxHlIVqOlfXYCZO388ZabfcBOQG57tTofm8aS4pnXCgbok9wEYPgbU5
7
+ n6fEvDGOOObQyY109hZZaDJmfygr5mmD0TIXrQIhAMVBhV4liqAN2MrT/+ZUH6hY
8
+ +DhTazzSNLIZKQ5gfd+1AoIBADqHGUVQa9pbwyjbzooeWdijUM9W5P7UUj1OjrA0
9
+ HIkcx37qHiYOVFqHpbjDs3tbgRBxBX5zBpwuhywC/6OetDiqzDy7zZCV/YMn06d2
10
+ ncW2Ctjp3KPl7of39+HgXXePgTdKcfkjH9upJQTko88rA4NWwZbHYeA3Lv7DcA11
11
+ XY3+TQHcxMtxf/E6aePjANJBsJsQjYLy3WyUiS87jkgi0Bigjg/cD3Nel4LToCTR
12
+ JvQ4m3w3T4W0xL1+8nPjRZ2q0GgmxZzPfwALrwiSYMgGZC/ov43wqOs6WXs0NnpJ
13
+ moU4oxutC/uDvTZmJvRj77FINjK0ZA20jmNvWmTIeEm1Xn4CggEABeRpOymQS5IS
14
+ X+u9ya7C+P3MPIRGm4dcWPWgPpD1QcclNYLGnhRp7JazNsbbPMjnx1qtF+2qjfy9
15
+ JDeWTAR8qfCNVmQHPAhJsJtV0C/V4PUii71FRNPVC3EAYbcBk8deMGoUg99cxSac
16
+ 6MCxIIOxuUKWpw8XPlMVpuXc8+lIMTYCPeLGinmT4DQ573t0MS6U3Ck/987xjkH9
17
+ sos7zcYn3vnjywDCxXMidC0eUK1rxAAuY7PL4vQiKwXq8kFtWiKAnns/Zm5LTjiZ
18
+ NrwlhNlU2wQVvyIcKaGfSRPheb69IbP+9qp5b7Xe7DNWdo48S0jl2KAFeZ91BnhM
19
+ TH6WPtMpjQIgOaTTn6xYK0kZvvH3lZXrzkjp4aNlNY65R0JAKKNsx3s=
20
+ -----END DSA PRIVATE KEY-----
@@ -0,0 +1,20 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIDRjCCAjkGByqGSM44BAEwggIsAoIBAQDSMOz2UtZf/81dgTWQ0rDhSINUwccS
3
+ 1MXU7Mm8Em9SHf/EyVSJzyZSkgxTma3sFONyKPIsuX9N40Fwj/EO9Yfc8B8KM/UK
4
+ Y3M4wfBTrAoDhDbSbm/ONq5XJx3uWhGbmH7VfIPYkvUqZBPOEghECZFN5cyevwsA
5
+ eJ1h9QqbMI4IKudy2UQQ6HVLp7sEXFAFGuVTFkXQtONwDPfWuuMgfrAqRhHiaeka
6
+ 4ja9Un6ocaYSG+rWEBsO8/QY3SKh/EeUhWo6V9dgJk7fzxlpt9wE5Abnu1Oh+bxp
7
+ LimdcKBuiT3ARg+BtTmfp8S8MY445tDJjXT2FlloMmZ/KCvmaYPRMhetAiEAxUGF
8
+ XiWKoA3YytP/5lQfqFj4OFNrPNI0shkpDmB937UCggEAOocZRVBr2lvDKNvOih5Z
9
+ 2KNQz1bk/tRSPU6OsDQciRzHfuoeJg5UWoeluMOze1uBEHEFfnMGnC6HLAL/o560
10
+ OKrMPLvNkJX9gyfTp3adxbYK2Onco+Xuh/f34eBdd4+BN0px+SMf26klBOSjzysD
11
+ g1bBlsdh4Dcu/sNwDXVdjf5NAdzEy3F/8Tpp4+MA0kGwmxCNgvLdbJSJLzuOSCLQ
12
+ GKCOD9wPc16XgtOgJNEm9DibfDdPhbTEvX7yc+NFnarQaCbFnM9/AAuvCJJgyAZk
13
+ L+i/jfCo6zpZezQ2ekmahTijG60L+4O9NmYm9GPvsUg2MrRkDbSOY29aZMh4SbVe
14
+ fgOCAQUAAoIBAAXkaTspkEuSEl/rvcmuwvj9zDyERpuHXFj1oD6Q9UHHJTWCxp4U
15
+ aeyWszbG2zzI58darRftqo38vSQ3lkwEfKnwjVZkBzwISbCbVdAv1eD1Iou9RUTT
16
+ 1QtxAGG3AZPHXjBqFIPfXMUmnOjAsSCDsblClqcPFz5TFabl3PPpSDE2Aj3ixop5
17
+ k+A0Oe97dDEulNwpP/fO8Y5B/bKLO83GJ97548sAwsVzInQtHlCta8QALmOzy+L0
18
+ IisF6vJBbVoigJ57P2ZuS044mTa8JYTZVNsEFb8iHCmhn0kT4Xm+vSGz/vaqeW+1
19
+ 3uwzVnaOPEtI5digBXmfdQZ4TEx+lj7TKY0=
20
+ -----END PUBLIC KEY-----
@@ -0,0 +1,7 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ MIHeMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAi9LqZQx4JFXAICCAAw
3
+ HQYJYIZIAWUDBAECBBA+js1fG4Rv/yRN7oZvxbgyBIGQ/D4yj86M1x8lMsnAHQ/K
4
+ 7/ryb/baDNHqN9LTZanEGBuyxgrTzt08SiL+h91yFGMoaly029K1VgEI8Lxu5Np/
5
+ A+LK7ewh73ABzsbuxYdcXI+rKnrvLN9Tt6veDs4GlqTTsWwq5wF0C+6gaYRBXA74
6
+ T1b6NykGh2UNL5U5pHZEYdOVLz+lRJL7gYqlweNHP/S3
7
+ -----END ENCRYPTED PRIVATE KEY-----
package/test/ec.priv ADDED
@@ -0,0 +1,5 @@
1
+ -----BEGIN EC PRIVATE KEY-----
2
+ MHQCAQEEIDF6Xv8Sv//wGUWD+c780ppGrU0QdZWCAzxAQPQX8r/uoAcGBSuBBAAK
3
+ oUQDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQRija4e/qEMikOHJai7geeUreU
4
+ r5Xky/Ax7s2dGtegsPNsPgGe5MpQvg==
5
+ -----END EC PRIVATE KEY-----
package/test/ec.pub ADDED
@@ -0,0 +1,4 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQR
3
+ ija4e/qEMikOHJai7geeUreUr5Xky/Ax7s2dGtegsPNsPgGe5MpQvg==
4
+ -----END PUBLIC KEY-----
package/test/index.js ADDED
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ var test = require('./tape');
4
+ var fs = require('fs');
5
+ var path = require('path');
6
+ var parseKey = require('../');
7
+ function loadPath(str) {
8
+ return fs.readFileSync(path.join(__dirname, str));
9
+ }
10
+ var rsa1024 = {
11
+ 'private': loadPath('/rsa.1024.priv'),
12
+ 'public': loadPath('/rsa.1024.pub')
13
+ };
14
+ var rsa2028 = {
15
+ 'private': loadPath('/rsa.2028.priv'),
16
+ 'public': loadPath('/rsa.2028.pub')
17
+ };
18
+ var nonrsa1024 = {
19
+ 'private': loadPath('/1024.priv'),
20
+ 'public': loadPath('/1024.pub')
21
+ };
22
+ var pass1024 = {
23
+ 'private': {
24
+ passphrase: 'fooo',
25
+ key: loadPath('/pass.1024.priv')
26
+ },
27
+ 'public': loadPath('/pass.1024.pub')
28
+ };
29
+ var ec = {
30
+ 'private': loadPath('/ec.priv'),
31
+ 'public': loadPath('/ec.pub')
32
+ };
33
+ var ecpass = {
34
+ 'private': {
35
+ key: loadPath('/ec.pass.priv'),
36
+ passphrase: 'bard'
37
+ },
38
+ 'public': loadPath('/ec.pub')
39
+ };
40
+ var dsa = {
41
+ 'private': loadPath('/dsa.1024.priv'),
42
+ 'public': loadPath('/dsa.1024.pub')
43
+ };
44
+ var dsa2 = {
45
+ 'private': loadPath('/dsa.2048.priv'),
46
+ 'public': loadPath('/dsa.2048.pub')
47
+ };
48
+ var dsapass = {
49
+ 'private': {
50
+ key: loadPath('/pass.dsa.1024.priv'),
51
+ passphrase: 'password'
52
+ },
53
+ 'public': loadPath('/pass.dsa.1024.pub')
54
+ };
55
+ var dsapass2 = {
56
+ 'private': {
57
+ key: loadPath('/pass2.dsa.1024.priv'),
58
+ passphrase: 'password'
59
+ },
60
+ 'public': loadPath('/pass2.dsa.1024.pub')
61
+ };
62
+ var rsapass = {
63
+ 'private': {
64
+ key: loadPath('/pass.rsa.1024.priv'),
65
+ passphrase: 'password'
66
+ },
67
+ 'public': loadPath('/pass.rsa.1024.pub')
68
+ };
69
+ var rsapass2 = {
70
+ 'private': {
71
+ key: loadPath('/pass.rsa.2028.priv'),
72
+ passphrase: 'password'
73
+ },
74
+ 'public': loadPath('/pass.rsa.2028.pub')
75
+ };
76
+ var cert = {
77
+ 'private': loadPath('/rsa.1024.priv'),
78
+ 'public': loadPath('/node.cert')
79
+ };
80
+ var cert2 = {
81
+ 'private': loadPath('/cert.priv'),
82
+ 'public': loadPath('/cert.pub')
83
+ };
84
+ var i = 0;
85
+ function testIt(keys) {
86
+ // eslint-disable-next-line no-plusplus
87
+ test('key ' + ++i, function (t) {
88
+ t.plan(2);
89
+ t.ok(parseKey(keys['public']), 'public key');
90
+ t.ok(parseKey(keys['private']), 'private key');
91
+ });
92
+ }
93
+
94
+ testIt(dsa);
95
+ testIt(dsa2);
96
+ testIt(rsa1024);
97
+ testIt(ec);
98
+ testIt(rsa2028);
99
+ testIt(nonrsa1024);
100
+ testIt(ecpass);
101
+ testIt(dsapass);
102
+ testIt(dsapass2);
103
+ testIt(rsapass);
104
+ testIt(rsapass2);
105
+ testIt(pass1024);
106
+ testIt(pass1024);
107
+ testIt(cert);
108
+ testIt(cert2);
package/test/node.cert ADDED
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDXDCCAsWgAwIBAgIJAKL0UG+mRkSPMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV
3
+ BAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEGA1UEBxMKUmh5cyBKb25l
4
+ czEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVzdCBUTFMgQ2VydGlmaWNh
5
+ dGUxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0wOTExMTEwOTUyMjJaFw0yOTExMDYw
6
+ OTUyMjJaMH0xCzAJBgNVBAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEG
7
+ A1UEBxMKUmh5cyBKb25lczEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVz
8
+ dCBUTFMgQ2VydGlmaWNhdGUxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG
9
+ 9w0BAQEFAAOBjQAwgYkCgYEA8d8Hc6atq78Jt1HLp9agA/wpQfsFvkYUdZ1YsdvO
10
+ kL2janjwHQgMMCy/Njal3FUEW0OLPebKZUJ8L44JBXSlVxU4zyiiSOWld8EkTetR
11
+ AVT3WKQq3ud+cnxv7g8rGRQp1UHZwmdbZ1wEfAYq8QjYx6m1ciMgRo7DaDQhD29k
12
+ d+UCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUL9miTJn+HKNuTmx/oMWlZP9cd4QwgbAG
13
+ A1UdIwSBqDCBpYAUL9miTJn+HKNuTmx/oMWlZP9cd4ShgYGkfzB9MQswCQYDVQQG
14
+ EwJVSzEUMBIGA1UECBMLQWNrbmFjayBMdGQxEzARBgNVBAcTClJoeXMgSm9uZXMx
15
+ EDAOBgNVBAoTB25vZGUuanMxHTAbBgNVBAsTFFRlc3QgVExTIENlcnRpZmljYXRl
16
+ MRIwEAYDVQQDEwlsb2NhbGhvc3SCCQCi9FBvpkZEjzAMBgNVHRMEBTADAQH/MA0G
17
+ CSqGSIb3DQEBBQUAA4GBADRXXA2xSUK5W1i3oLYWW6NEDVWkTQ9RveplyeS9MOkP
18
+ e7yPcpz0+O0ZDDrxR9chAiZ7fmdBBX1Tr+pIuCrG/Ud49SBqeS5aMJGVwiSd7o1n
19
+ dhU2Sz3Q60DwJEL1VenQHiVYlWWtqXBThe9ggqRPnCfsCRTP8qifKkjk45zWPcpN
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ MIICzzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIji3ZZ6JbsA4CAggA
3
+ MB0GCWCGSAFlAwQBFgQQC6MKblq8zyX90/KmgotsMQSCAoDghNf+yxPC/KRh7F3O
4
+ k0lMgtDkV+wCLDv7aBvUqy8Ry2zqFPIlfLb8XtSW943XEu6KUI13IZPEr8p9h1ve
5
+ Iye6L0g6uAgbFxBE2DwBBSI7mYr7lokr4v0k+inMKf4JeRdI9XWgwOILKTGf1vH7
6
+ PhvBnqLhOg6BIOuF426qpiyYlmRda74d0Th4o6ZyhyMSzPI1XbWSg719Ew3N/tLe
7
+ OHdYl0eFrgNjq+xO4Ev+W7eNIh/XBMQtk9wo+mxeNdldRnX822HxTsL8fSSPs+9T
8
+ W5M/2EBTJMSsswSjZyFkq8ehtxovI2u0IBX1IiPulyUZLnSNPDV1eUVClK6rk+q1
9
+ kVsfJhUr2qvIjNlQWlbEXQj4VwGtgl0++l8vdpj59MuN2J3Nx5TNMLjA6BYAa/tr
10
+ Bu928QoT7ET+SGx5XKCwKb5fwXmDlV5zZC4kZWTaF/d/Icvj5F+fDZuYFg1JOXNZ
11
+ +q2oA1qMYaHGX6lF3pbO84ebg1iwQTDM8iIqFeSMGUJTnk/3a7sqfaWQbEQwGb+X
12
+ fXnSTwkF+wO2rriPbFvWyzecWu67zDCP0ZWUgGb86sSJCM7xRGShESwCjOrb88F1
13
+ 5SZjyIqogrkc3IWiLH9gc5U8d86qoFjJnP6BfwYks1UIyXNGKfZTCqICpMphV+IS
14
+ b0N2jprjLTkWR6nxYGSH1bkKMs7x1M0FBLWWLAZqPn9X3pe6JwIBds04O6XjF0un
15
+ oxwDjcJdoxVs7PgRiM5d1Tubqu2zmpCCmXNiqi9B0+rV9/jHg9IA5gUfvYdCcEv+
16
+ oAr90I+2+PuBFa9lgdbDV6DtZk4bSYluqamxVeLPg/vrewYfVfDv6jftfY1D0DEy
17
+ 69H0
18
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSK/7i5BV0x+gmX16Wrm7kRkCZ
3
+ y1QUt6wiM2g+SAZTYR0381VnSMX2cv7CpN3499lZj1rL5S7YTaZZwX3RvU5fz56/
4
+ eDX6ciL/PZsbclN2KdkMWYgmcb9J1zUeoMQ3cjfFUCdQZ/ZvDWa+wY2Zg8os2Bow
5
+ AoufHtYHm3eOly/cWwIDAQAB
6
+ -----END PUBLIC KEY-----
@@ -0,0 +1,11 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ MIIBnzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQI1z4IJORFws4CAggA
3
+ MB0GCWCGSAFlAwQBAgQQq7f0CuKCTITfPS5Xax1H4wSCAVDFyIjYVXfBNe+BARqz
4
+ Tfo09y4vKkErOb7Sz4bQkAjRLjOXiUjM4eTNtivml8NqVrQTKAghN+ggxj416OD4
5
+ oq6Ns7Ncbd4Xm5Ni8wrrWbJxVog6rAa/ioU0sfgRExYy/xE2Q9KkW+VE7SUwanwY
6
+ e81Od9qNM5KhZGM1yUSKa0JA6Xqb8dAqBo9rVt8DceumB9OP83xV3fLEimSZfR6p
7
+ slA1P/dTvKxwhpguQe4Z3OkzTzGCxyboqeRW1woNHKbxjzzSHcaki9SHQm3xpUW8
8
+ hRAJd6OtDnLbkE9MnC+UcI3mjru1xfnR5MU7qG7e9nvOhEDVaDkiK3DbrSf0B0Bi
9
+ p1hyX1XsSXDewSEd/mlfMLdD8WecgUtl9ea7JzxY3/6R78yB951I5TmY45mp/v+N
10
+ tbxEv29B65UKf0ac7gVw4LNy8JF2ef/L/meEmBoIAE71f+8=
11
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -0,0 +1,12 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBtzCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1CMNp
3
+ 0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2YV5se
4
+ 3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3OgziRc
5
+ Z1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/HckvhlhHQyK
6
+ ZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+TVJQ3
7
+ VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUcrogA
8
+ qRGESqBVTawjyF/ECX667y/P49MDgYQAAoGAXYmxO4+52C1gBzh7GgTwNLJl7bLn
9
+ gOhKTFlKhT36VjMjeFfdXmBVBVbfUottKZby/gVX1IXT38PStB/dswbF45bGDdoS
10
+ zMFjYmHTtLtrU/4hReVtvb5MYmrPDFX58SwcSRRO/cH6WJPvfu4Aq0cJZA9Kb0B9
11
+ 5Wo18JxAqvPtTB8=
12
+ -----END PUBLIC KEY-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: AES-192-CBC,04D2D7882E0C474E07E542FE997D2A49
4
+
5
+ vfB5Gtm34n3SeI6JELjWiGw6O+j+tGR6Wbi3SNeAZkfSA8PTjei6PVHr+dGK5zMd
6
+ nTckd0EpxItqxEdtLK6GtBIa9KRd3cEbayHmyyybH2FC4STXJCUFBe2eb7ZKmnCl
7
+ RB5FcmAqExif+QOJwHnZw6DTzq+oGSwi9cSoy2qE62FgXkj8uKAYcBLONmsP1YQA
8
+ 4zIub4bnEbIghL/swEB/HVS86FyMCsMXrHEOnSuUUBf/UfZFNypI6kVUNXlItnN1
9
+ 14eeRsBD37VkL7dAQPMx+Dwm7DbU07QWrVvzgmWlu3KqR0tRNA9e4a5f14XOYxgS
10
+ HZ+XVZK8iAd+76OnprlFtGDowDXGM0wUXPYq5j8WpKxNsVs2RV+S6U0gQLoSqNxt
11
+ We7UPWZufzEdjTUO8q9KhdGqFmJ53XIYClZf0bp148b+Bk3P+dN5TbmKQEfulScn
12
+ rTLTRo34fdTIAJr5BJh0OXGNs9rFlMJ9Nz4FwVTEB1DMerXtt9ICdhud9BktRhvq
13
+ axgoz+XA3LrBrlPPcrSCZyIYjZFydGSkzg439OyDEZ6+uRmc0qhWA4j6AgXx6gGR
14
+ NvvypoFVKvXqEq/2F+SVyyMGrm4xPmsr/HUBeE9SmuTzNzDfVAM/xerqIoR2szR0
15
+ O0hwtOj4fk7//cd1CjFzd0JiF/SqMkHxkdbmIC9qlhshkWlQbvvhbefodYPuGxmj
16
+ L1TaPgX36OcrQSodzyWBN5tSmmX1Nmftcz7iwc4AKrqkdnM3sPS3SczsAjMWrjRr
17
+ 7iYhdPQSZtxVCTjACU3h7scNAg9AU6l4YZrowR//J6U=
18
+ -----END RSA PRIVATE KEY-----