cyberchef 9.38.4 → 9.38.7
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.
- package/package.json +36 -36
- package/src/core/config/OperationConfig.json +9 -3
- package/src/core/config/modules/Default.mjs +2 -0
- package/src/core/config/modules/PublicKey.mjs +0 -2
- package/src/core/lib/Base64.mjs +8 -7
- package/src/core/operations/PEMToHex.mjs +30 -13
- package/tests/operations/index.mjs +1 -0
- package/tests/operations/tests/PEMtoHex.mjs +294 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cyberchef",
|
|
3
|
-
"version": "9.38.
|
|
3
|
+
"version": "9.38.7",
|
|
4
4
|
"description": "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis.",
|
|
5
5
|
"author": "n1474335 <n1474335@gmail.com>",
|
|
6
6
|
"homepage": "https://gchq.github.io/CyberChef",
|
|
@@ -39,26 +39,27 @@
|
|
|
39
39
|
"node >= 16"
|
|
40
40
|
],
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@babel/core": "^7.
|
|
43
|
-
"@babel/eslint-parser": "^7.
|
|
44
|
-
"@babel/plugin-syntax-import-assertions": "^7.
|
|
45
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
46
|
-
"@babel/preset-env": "^7.
|
|
47
|
-
"@babel/runtime": "^7.
|
|
48
|
-
"autoprefixer": "^10.4.
|
|
49
|
-
"babel-loader": "^8.2.
|
|
42
|
+
"@babel/core": "^7.18.2",
|
|
43
|
+
"@babel/eslint-parser": "^7.18.2",
|
|
44
|
+
"@babel/plugin-syntax-import-assertions": "^7.17.12",
|
|
45
|
+
"@babel/plugin-transform-runtime": "^7.18.2",
|
|
46
|
+
"@babel/preset-env": "^7.18.2",
|
|
47
|
+
"@babel/runtime": "^7.18.3",
|
|
48
|
+
"autoprefixer": "^10.4.7",
|
|
49
|
+
"babel-loader": "^8.2.5",
|
|
50
50
|
"babel-plugin-dynamic-import-node": "^2.3.3",
|
|
51
|
+
"babel-plugin-transform-builtin-extend": "1.1.2",
|
|
51
52
|
"chromedriver": "^101.0.0",
|
|
52
|
-
"cli-progress": "^3.
|
|
53
|
+
"cli-progress": "^3.11.1",
|
|
53
54
|
"colors": "^1.4.0",
|
|
54
|
-
"copy-webpack-plugin": "^
|
|
55
|
-
"core-js": "^3.
|
|
55
|
+
"copy-webpack-plugin": "^11.0.0",
|
|
56
|
+
"core-js": "^3.22.8",
|
|
56
57
|
"css-loader": "6.7.1",
|
|
57
|
-
"eslint": "^8.
|
|
58
|
-
"grunt": "^1.
|
|
58
|
+
"eslint": "^8.16.0",
|
|
59
|
+
"grunt": "^1.5.3",
|
|
59
60
|
"grunt-chmod": "~1.1.1",
|
|
60
61
|
"grunt-concurrent": "^3.0.0",
|
|
61
|
-
"grunt-contrib-clean": "~2.0.
|
|
62
|
+
"grunt-contrib-clean": "~2.0.1",
|
|
62
63
|
"grunt-contrib-connect": "^3.0.0",
|
|
63
64
|
"grunt-contrib-copy": "~1.0.0",
|
|
64
65
|
"grunt-contrib-watch": "^1.1.0",
|
|
@@ -67,29 +68,28 @@
|
|
|
67
68
|
"grunt-webpack": "^5.0.0",
|
|
68
69
|
"grunt-zip": "^0.18.2",
|
|
69
70
|
"html-webpack-plugin": "^5.5.0",
|
|
70
|
-
"imports-loader": "^
|
|
71
|
+
"imports-loader": "^4.0.0",
|
|
71
72
|
"mini-css-extract-plugin": "2.6.0",
|
|
72
73
|
"modify-source-webpack-plugin": "^3.0.0",
|
|
73
|
-
"nightwatch": "^2.
|
|
74
|
-
"postcss": "^8.4.
|
|
74
|
+
"nightwatch": "^2.1.7",
|
|
75
|
+
"postcss": "^8.4.14",
|
|
75
76
|
"postcss-css-variables": "^0.18.0",
|
|
76
77
|
"postcss-import": "^14.1.0",
|
|
77
|
-
"postcss-loader": "^
|
|
78
|
-
"prompt": "^1.
|
|
79
|
-
"sass-loader": "^
|
|
78
|
+
"postcss-loader": "^7.0.0",
|
|
79
|
+
"prompt": "^1.3.0",
|
|
80
|
+
"sass-loader": "^13.0.0",
|
|
80
81
|
"sitemap": "^7.1.1",
|
|
81
|
-
"terser": "^5.
|
|
82
|
-
"webpack": "^5.
|
|
82
|
+
"terser": "^5.14.0",
|
|
83
|
+
"webpack": "^5.73.0",
|
|
83
84
|
"webpack-bundle-analyzer": "^4.5.0",
|
|
84
|
-
"webpack-dev-server": "4.
|
|
85
|
+
"webpack-dev-server": "4.9.1",
|
|
85
86
|
"webpack-node-externals": "^3.0.0",
|
|
86
87
|
"worker-loader": "^3.0.8"
|
|
87
88
|
},
|
|
88
89
|
"dependencies": {
|
|
89
90
|
"@babel/polyfill": "^7.12.1",
|
|
90
91
|
"arrive": "^2.4.1",
|
|
91
|
-
"avsc": "^5.7.
|
|
92
|
-
"babel-plugin-transform-builtin-extend": "1.1.2",
|
|
92
|
+
"avsc": "^5.7.4",
|
|
93
93
|
"bcryptjs": "^2.4.3",
|
|
94
94
|
"bignumber.js": "^9.0.2",
|
|
95
95
|
"blakejs": "^1.2.1",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"bootstrap-colorpicker": "^3.4.0",
|
|
98
98
|
"bootstrap-material-design": "^4.1.3",
|
|
99
99
|
"browserify-zlib": "^0.2.0",
|
|
100
|
-
"bson": "^4.6.
|
|
100
|
+
"bson": "^4.6.4",
|
|
101
101
|
"buffer": "^6.0.3",
|
|
102
102
|
"cbor": "8.1.0",
|
|
103
103
|
"chi-squared": "^1.1.0",
|
|
@@ -106,9 +106,9 @@
|
|
|
106
106
|
"crypto-browserify": "^3.12.0",
|
|
107
107
|
"crypto-js": "^4.1.1",
|
|
108
108
|
"ctph.js": "0.0.5",
|
|
109
|
-
"d3": "7.
|
|
109
|
+
"d3": "7.4.4",
|
|
110
110
|
"d3-hexbin": "^0.2.2",
|
|
111
|
-
"diff": "^5.
|
|
111
|
+
"diff": "^5.1.0",
|
|
112
112
|
"es6-promisify": "^7.0.0",
|
|
113
113
|
"escodegen": "^2.0.0",
|
|
114
114
|
"esprima": "^4.0.1",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"file-saver": "^2.0.5",
|
|
117
117
|
"flat": "^5.0.2",
|
|
118
118
|
"geodesy": "1.1.3",
|
|
119
|
-
"highlight.js": "^11.5.
|
|
119
|
+
"highlight.js": "^11.5.1",
|
|
120
120
|
"jimp": "^0.16.1",
|
|
121
121
|
"jquery": "3.6.0",
|
|
122
122
|
"js-crc": "^0.2.0",
|
|
@@ -125,28 +125,28 @@
|
|
|
125
125
|
"jsonpath": "^1.1.1",
|
|
126
126
|
"jsonwebtoken": "^8.5.1",
|
|
127
127
|
"jsqr": "^1.4.0",
|
|
128
|
-
"jsrsasign": "^10.5.
|
|
128
|
+
"jsrsasign": "^10.5.23",
|
|
129
129
|
"kbpgp": "2.1.15",
|
|
130
130
|
"libbzip2-wasm": "0.0.4",
|
|
131
131
|
"libyara-wasm": "^1.1.0",
|
|
132
132
|
"lodash": "^4.17.21",
|
|
133
133
|
"loglevel": "^1.8.0",
|
|
134
134
|
"loglevel-message-prefix": "^3.0.0",
|
|
135
|
-
"markdown-it": "^
|
|
136
|
-
"moment": "^2.29.
|
|
135
|
+
"markdown-it": "^13.0.1",
|
|
136
|
+
"moment": "^2.29.3",
|
|
137
137
|
"moment-timezone": "^0.5.34",
|
|
138
138
|
"ngeohash": "^0.6.3",
|
|
139
|
-
"node-forge": "^1.3.
|
|
139
|
+
"node-forge": "^1.3.1",
|
|
140
140
|
"node-md6": "^0.1.0",
|
|
141
141
|
"node-sass": "^7.0.1",
|
|
142
142
|
"nodom": "^2.4.0",
|
|
143
|
-
"notepack.io": "^
|
|
143
|
+
"notepack.io": "^3.0.1",
|
|
144
144
|
"nwmatcher": "^1.4.4",
|
|
145
145
|
"otp": "0.1.3",
|
|
146
146
|
"path": "^0.12.7",
|
|
147
147
|
"popper.js": "^1.16.1",
|
|
148
148
|
"process": "^0.11.10",
|
|
149
|
-
"protobufjs": "^6.11.
|
|
149
|
+
"protobufjs": "^6.11.3",
|
|
150
150
|
"qr-image": "^3.2.0",
|
|
151
151
|
"scryptsy": "^2.1.0",
|
|
152
152
|
"snackbarjs": "^1.1.0",
|
|
@@ -8578,14 +8578,20 @@
|
|
|
8578
8578
|
]
|
|
8579
8579
|
},
|
|
8580
8580
|
"PEM to Hex": {
|
|
8581
|
-
"module": "
|
|
8581
|
+
"module": "Default",
|
|
8582
8582
|
"description": "Converts PEM (Privacy Enhanced Mail) format to a hexadecimal DER (Distinguished Encoding Rules) string.",
|
|
8583
|
-
"infoURL": "https://wikipedia.org/wiki/
|
|
8583
|
+
"infoURL": "https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail#Format",
|
|
8584
8584
|
"inputType": "string",
|
|
8585
8585
|
"outputType": "string",
|
|
8586
8586
|
"flowControl": false,
|
|
8587
8587
|
"manualBake": false,
|
|
8588
|
-
"args": []
|
|
8588
|
+
"args": [],
|
|
8589
|
+
"checks": [
|
|
8590
|
+
{
|
|
8591
|
+
"pattern": "----BEGIN ([A-Z][A-Z ]+[A-Z])-----",
|
|
8592
|
+
"args": []
|
|
8593
|
+
}
|
|
8594
|
+
]
|
|
8589
8595
|
},
|
|
8590
8596
|
"PGP Decrypt": {
|
|
8591
8597
|
"module": "PGP",
|
|
@@ -89,6 +89,7 @@ import NOT from "../../operations/NOT.mjs";
|
|
|
89
89
|
import Numberwang from "../../operations/Numberwang.mjs";
|
|
90
90
|
import OR from "../../operations/OR.mjs";
|
|
91
91
|
import OffsetChecker from "../../operations/OffsetChecker.mjs";
|
|
92
|
+
import PEMToHex from "../../operations/PEMToHex.mjs";
|
|
92
93
|
import PHPDeserialize from "../../operations/PHPDeserialize.mjs";
|
|
93
94
|
import PadLines from "../../operations/PadLines.mjs";
|
|
94
95
|
import ParseColourCode from "../../operations/ParseColourCode.mjs";
|
|
@@ -256,6 +257,7 @@ OpModules.Default = {
|
|
|
256
257
|
"Numberwang": Numberwang,
|
|
257
258
|
"OR": OR,
|
|
258
259
|
"Offset checker": OffsetChecker,
|
|
260
|
+
"PEM to Hex": PEMToHex,
|
|
259
261
|
"PHP Deserialize": PHPDeserialize,
|
|
260
262
|
"Pad lines": PadLines,
|
|
261
263
|
"Parse colour code": ParseColourCode,
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
import HexToObjectIdentifier from "../../operations/HexToObjectIdentifier.mjs";
|
|
9
9
|
import HexToPEM from "../../operations/HexToPEM.mjs";
|
|
10
10
|
import ObjectIdentifierToHex from "../../operations/ObjectIdentifierToHex.mjs";
|
|
11
|
-
import PEMToHex from "../../operations/PEMToHex.mjs";
|
|
12
11
|
import ParseASN1HexString from "../../operations/ParseASN1HexString.mjs";
|
|
13
12
|
import ParseX509Certificate from "../../operations/ParseX509Certificate.mjs";
|
|
14
13
|
|
|
@@ -18,7 +17,6 @@ OpModules.PublicKey = {
|
|
|
18
17
|
"Hex to Object Identifier": HexToObjectIdentifier,
|
|
19
18
|
"Hex to PEM": HexToPEM,
|
|
20
19
|
"Object Identifier to Hex": ObjectIdentifierToHex,
|
|
21
|
-
"PEM to Hex": PEMToHex,
|
|
22
20
|
"Parse ASN.1 hex string": ParseASN1HexString,
|
|
23
21
|
"Parse X.509 certificate": ParseX509Certificate,
|
|
24
22
|
};
|
package/src/core/lib/Base64.mjs
CHANGED
|
@@ -130,10 +130,11 @@ export function fromBase64(data, alphabet="A-Za-z0-9+/=", returnType="string", r
|
|
|
130
130
|
i = 0;
|
|
131
131
|
|
|
132
132
|
while (i < data.length) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
// Including `|| null` forces empty strings to null so that indexOf returns -1 instead of 0
|
|
134
|
+
enc1 = alphabet.indexOf(data.charAt(i++) || null);
|
|
135
|
+
enc2 = alphabet.indexOf(data.charAt(i++) || null);
|
|
136
|
+
enc3 = alphabet.indexOf(data.charAt(i++) || null);
|
|
137
|
+
enc4 = alphabet.indexOf(data.charAt(i++) || null);
|
|
137
138
|
|
|
138
139
|
if (strictMode && (enc1 < 0 || enc2 < 0 || enc3 < 0 || enc4 < 0)) {
|
|
139
140
|
throw new OperationError("Error: Base64 input contains non-alphabet char(s)");
|
|
@@ -143,13 +144,13 @@ export function fromBase64(data, alphabet="A-Za-z0-9+/=", returnType="string", r
|
|
|
143
144
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
144
145
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
145
146
|
|
|
146
|
-
if (chr1 < 256) {
|
|
147
|
+
if (chr1 >= 0 && chr1 < 256) {
|
|
147
148
|
output.push(chr1);
|
|
148
149
|
}
|
|
149
|
-
if (chr2 < 256 && enc3 !== 64) {
|
|
150
|
+
if (chr2 >= 0 && chr2 < 256 && enc3 !== 64) {
|
|
150
151
|
output.push(chr2);
|
|
151
152
|
}
|
|
152
|
-
if (chr3 < 256 && enc4 !== 64) {
|
|
153
|
+
if (chr3 >= 0 && chr3 < 256 && enc4 !== 64) {
|
|
153
154
|
output.push(chr3);
|
|
154
155
|
}
|
|
155
156
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @author n1474335 [n1474335@gmail.com]
|
|
3
|
+
* @author cplussharp
|
|
3
4
|
* @copyright Crown Copyright 2016
|
|
4
5
|
* @license Apache-2.0
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
|
-
import
|
|
8
|
+
import { fromBase64 } from "../lib/Base64.mjs";
|
|
9
|
+
import { toHexFast } from "../lib/Hex.mjs";
|
|
8
10
|
import Operation from "../Operation.mjs";
|
|
11
|
+
import OperationError from "../errors/OperationError.mjs";
|
|
9
12
|
|
|
10
13
|
/**
|
|
11
14
|
* PEM to Hex operation
|
|
@@ -19,12 +22,18 @@ class PEMToHex extends Operation {
|
|
|
19
22
|
super();
|
|
20
23
|
|
|
21
24
|
this.name = "PEM to Hex";
|
|
22
|
-
this.module = "
|
|
25
|
+
this.module = "Default";
|
|
23
26
|
this.description = "Converts PEM (Privacy Enhanced Mail) format to a hexadecimal DER (Distinguished Encoding Rules) string.";
|
|
24
|
-
this.infoURL = "https://wikipedia.org/wiki/
|
|
27
|
+
this.infoURL = "https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail#Format";
|
|
25
28
|
this.inputType = "string";
|
|
26
29
|
this.outputType = "string";
|
|
27
30
|
this.args = [];
|
|
31
|
+
this.checks = [
|
|
32
|
+
{
|
|
33
|
+
"pattern": "----BEGIN ([A-Z][A-Z ]+[A-Z])-----",
|
|
34
|
+
"args": []
|
|
35
|
+
}
|
|
36
|
+
];
|
|
28
37
|
}
|
|
29
38
|
|
|
30
39
|
/**
|
|
@@ -33,17 +42,25 @@ class PEMToHex extends Operation {
|
|
|
33
42
|
* @returns {string}
|
|
34
43
|
*/
|
|
35
44
|
run(input, args) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
const output = [];
|
|
46
|
+
let match;
|
|
47
|
+
const regex = /-----BEGIN ([A-Z][A-Z ]+[A-Z])-----/g;
|
|
48
|
+
while ((match = regex.exec(input)) !== null) {
|
|
49
|
+
// find corresponding end tag
|
|
50
|
+
const indexBase64 = match.index + match[0].length;
|
|
51
|
+
const footer = `-----END ${match[1]}-----`;
|
|
52
|
+
const indexFooter = input.indexOf(footer, indexBase64);
|
|
53
|
+
if (indexFooter === -1) {
|
|
54
|
+
throw new OperationError(`PEM footer '${footer}' not found`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// decode base64 content
|
|
58
|
+
const base64 = input.substring(indexBase64, indexFooter);
|
|
59
|
+
const bytes = fromBase64(base64, "A-Za-z0-9+/=", "byteArray", true);
|
|
60
|
+
const hex = toHexFast(bytes);
|
|
61
|
+
output.push(hex);
|
|
43
62
|
}
|
|
44
|
-
|
|
45
|
-
cert.readCertPEM(input);
|
|
46
|
-
return cert.hex;
|
|
63
|
+
return output.join("\n");
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
}
|
|
@@ -67,6 +67,7 @@ import "./tests/PGP.mjs";
|
|
|
67
67
|
import "./tests/PHP.mjs";
|
|
68
68
|
import "./tests/ParseIPRange.mjs";
|
|
69
69
|
import "./tests/ParseQRCode.mjs";
|
|
70
|
+
import "./tests/PEMtoHex.mjs";
|
|
70
71
|
import "./tests/PowerSet.mjs";
|
|
71
72
|
import "./tests/Regex.mjs";
|
|
72
73
|
import "./tests/Register.mjs";
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test PEMtoHex with different inputs
|
|
3
|
+
*
|
|
4
|
+
* @author cplussharp
|
|
5
|
+
*
|
|
6
|
+
* @license Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import TestRegister from "../../lib/TestRegister.mjs";
|
|
10
|
+
|
|
11
|
+
/** RSA 2048bit key pair as PKCS1 and PKCS8 and as certificate */
|
|
12
|
+
const PEMS_RSA_PRIVATE_KEY_PKCS1 = `-----BEGIN RSA PRIVATE KEY-----
|
|
13
|
+
MIIEogIBAAKCAQEA5WykLKHiBAhmZh5WhocgpQQqZjdrApuRxRT21SJZx6Ce+Oz2
|
|
14
|
+
V17/heozu5LEz63jCxW1NrBckzl/Ys8p9LeqYTu6x/LbKloTjfEWxlzXnzUSqn9J
|
|
15
|
+
HIxmmJQzjXp9X1D99Tj+NWpRGEIiCFE7JfDhe2KnMGVDDg6kfCLokDdLo256LeQ4
|
|
16
|
+
CEkViwY6d+at4xDlIHwvZZmG4Smk56eHhvQE3I8sSAzgoLMBamQ5m3MbiULAYtxs
|
|
17
|
+
kCpCfjFxrL6Ziaaj7HZoneF40R30KCI9ygF8vkzxLwe3t5Y4XgHL9TYQm1+BDnin
|
|
18
|
+
upIB/zTeO1ygBGA66m6zpmkmuG7d8HXIducz+wIDAQABAoIBACQu3jWr0lmQeZXh
|
|
19
|
+
cwQEi8F6xrUYSGhA4NyUUdmLcV1ql6fqt29QLDySk1Yh76hRZF17LvlRF0ig6NZM
|
|
20
|
+
lfFihhyPrwWZ57bmPe9E9rKSMe+KD0eUi5NVEVk/BmJpzxwZSfRC6NTDz8Zjp7po
|
|
21
|
+
FUwGkYlEJdocHlc5N/fcCZG1Jti/Z1AsZIjO6r6S0O7neC7icECBKHUyWa8/yE1N
|
|
22
|
+
++TVyMV+z53Ad1PC+SHMGDlbqJAM3o4wAzD/FAIzyVo6GSnnC+bFdgMtIwtwgYTH
|
|
23
|
+
rbr8M8j5fqAHTqNJeblqt/5KHEj2VVsIsHIuQ6lv4llESEqmH+N5KE4O33U7/Wmj
|
|
24
|
+
y/+VGAECgYEA9ysROHXOx1ofh3tI/r2C2FUan6/AAe4dc+8E4jMGI5T4xeqYHTRV
|
|
25
|
+
l1yS+ZKIxqclIoAmd6SJ7Nx2GdQ55MmokZdZRqsFN1flFOZw2kFH/I0zQZXdOjF+
|
|
26
|
+
sf5Lu0FfcTw3VJhJ/YU3CVdlgdP4ekHbaJVFW5i/pTUf5vNs6AGBGxsCgYEA7Z9D
|
|
27
|
+
0qnF6GhxA8lJfwnyuktYnwIQoXE6Xp26/NZD7t7HzxHDf43LQxmTk+mDP/yIQHwb
|
|
28
|
+
xIx2NE/ncNxlUMl/g1PkJbKVkB8tdIZrLyiT4lebeqgT72Q07IsxRl/GHOr7CfN0
|
|
29
|
+
61OBRCe44IlOtaNAZk4zWwuAwAYx+G8ifuOJ+KECgYBP5NvsJChyx+7pHDC8JwXk
|
|
30
|
+
Z53zgBvQg+eBUgGCHHwfhEflsa75wbDo/EOF6JfNnrmiLUpB4i2zIpAKSU9tZMHY
|
|
31
|
+
TdPNw/orqX2jA9n2sqNSP1ISIR8hcF5Dqq9QGBGByLUZ4yAHksf3fQiSrrHi0ubZ
|
|
32
|
+
J2cD9Jv+Cu4E+Sp61AGngQKBgHmuTPTbq1TP5s+hi9laJsnvO3pxfEKv0MwSyWYf
|
|
33
|
+
8rmnq3oGBq6S1buOpVvhAC0MDFm5NB76Lq2rHUFWGyu7g2ik1PfY823SCVzaWJjV
|
|
34
|
+
lqUZZ6zv1QWJsvBOdvUqpjC4w8TcvsqjAFb+YFXa+ktZRekdsn607UFn6r7laizA
|
|
35
|
+
KC8BAoGAZty7sIGMt1gDaoIjySgOox8x7AlY3QUyNQC5N8KW3MZ8KLC5UBtjhqLy
|
|
36
|
+
wYOJr+/1R/7ibiHrKkIE/dmg5QN1iS5tZmFvyLwJ+nHQZObFrlcKtpr+1lekQY/m
|
|
37
|
+
ly6YJFk3yj2nhYzt8eVXBX2lCoLG1gsrbpXvUfIGJ53L9m1mVAo=
|
|
38
|
+
-----END RSA PRIVATE KEY-----`;
|
|
39
|
+
|
|
40
|
+
const PEMS_RSA_PRIVATE_KEY_PKCS8 = `-----BEGIN PRIVATE KEY-----
|
|
41
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDlbKQsoeIECGZm
|
|
42
|
+
HlaGhyClBCpmN2sCm5HFFPbVIlnHoJ747PZXXv+F6jO7ksTPreMLFbU2sFyTOX9i
|
|
43
|
+
zyn0t6phO7rH8tsqWhON8RbGXNefNRKqf0kcjGaYlDONen1fUP31OP41alEYQiII
|
|
44
|
+
UTsl8OF7YqcwZUMODqR8IuiQN0ujbnot5DgISRWLBjp35q3jEOUgfC9lmYbhKaTn
|
|
45
|
+
p4eG9ATcjyxIDOCgswFqZDmbcxuJQsBi3GyQKkJ+MXGsvpmJpqPsdmid4XjRHfQo
|
|
46
|
+
Ij3KAXy+TPEvB7e3ljheAcv1NhCbX4EOeKe6kgH/NN47XKAEYDrqbrOmaSa4bt3w
|
|
47
|
+
dch25zP7AgMBAAECggEAJC7eNavSWZB5leFzBASLwXrGtRhIaEDg3JRR2YtxXWqX
|
|
48
|
+
p+q3b1AsPJKTViHvqFFkXXsu+VEXSKDo1kyV8WKGHI+vBZnntuY970T2spIx74oP
|
|
49
|
+
R5SLk1URWT8GYmnPHBlJ9ELo1MPPxmOnumgVTAaRiUQl2hweVzk399wJkbUm2L9n
|
|
50
|
+
UCxkiM7qvpLQ7ud4LuJwQIEodTJZrz/ITU375NXIxX7PncB3U8L5IcwYOVuokAze
|
|
51
|
+
jjADMP8UAjPJWjoZKecL5sV2Ay0jC3CBhMetuvwzyPl+oAdOo0l5uWq3/kocSPZV
|
|
52
|
+
Wwiwci5DqW/iWURISqYf43koTg7fdTv9aaPL/5UYAQKBgQD3KxE4dc7HWh+He0j+
|
|
53
|
+
vYLYVRqfr8AB7h1z7wTiMwYjlPjF6pgdNFWXXJL5kojGpyUigCZ3pIns3HYZ1Dnk
|
|
54
|
+
yaiRl1lGqwU3V+UU5nDaQUf8jTNBld06MX6x/ku7QV9xPDdUmEn9hTcJV2WB0/h6
|
|
55
|
+
QdtolUVbmL+lNR/m82zoAYEbGwKBgQDtn0PSqcXoaHEDyUl/CfK6S1ifAhChcTpe
|
|
56
|
+
nbr81kPu3sfPEcN/jctDGZOT6YM//IhAfBvEjHY0T+dw3GVQyX+DU+QlspWQHy10
|
|
57
|
+
hmsvKJPiV5t6qBPvZDTsizFGX8Yc6vsJ83TrU4FEJ7jgiU61o0BmTjNbC4DABjH4
|
|
58
|
+
byJ+44n4oQKBgE/k2+wkKHLH7ukcMLwnBeRnnfOAG9CD54FSAYIcfB+ER+WxrvnB
|
|
59
|
+
sOj8Q4Xol82euaItSkHiLbMikApJT21kwdhN083D+iupfaMD2fayo1I/UhIhHyFw
|
|
60
|
+
XkOqr1AYEYHItRnjIAeSx/d9CJKuseLS5tknZwP0m/4K7gT5KnrUAaeBAoGAea5M
|
|
61
|
+
9NurVM/mz6GL2Vomye87enF8Qq/QzBLJZh/yuaeregYGrpLVu46lW+EALQwMWbk0
|
|
62
|
+
HvourasdQVYbK7uDaKTU99jzbdIJXNpYmNWWpRlnrO/VBYmy8E529SqmMLjDxNy+
|
|
63
|
+
yqMAVv5gVdr6S1lF6R2yfrTtQWfqvuVqLMAoLwECgYBm3LuwgYy3WANqgiPJKA6j
|
|
64
|
+
HzHsCVjdBTI1ALk3wpbcxnwosLlQG2OGovLBg4mv7/VH/uJuIesqQgT92aDlA3WJ
|
|
65
|
+
Lm1mYW/IvAn6cdBk5sWuVwq2mv7WV6RBj+aXLpgkWTfKPaeFjO3x5VcFfaUKgsbW
|
|
66
|
+
Cytule9R8gYnncv2bWZUCg==
|
|
67
|
+
-----END PRIVATE KEY-----`;
|
|
68
|
+
|
|
69
|
+
const PEMS_RSA_PUBLIC_KEY_PKCS1 = `-----BEGIN RSA PUBLIC KEY-----
|
|
70
|
+
MIIBCgKCAQEA5WykLKHiBAhmZh5WhocgpQQqZjdrApuRxRT21SJZx6Ce+Oz2V17/
|
|
71
|
+
heozu5LEz63jCxW1NrBckzl/Ys8p9LeqYTu6x/LbKloTjfEWxlzXnzUSqn9JHIxm
|
|
72
|
+
mJQzjXp9X1D99Tj+NWpRGEIiCFE7JfDhe2KnMGVDDg6kfCLokDdLo256LeQ4CEkV
|
|
73
|
+
iwY6d+at4xDlIHwvZZmG4Smk56eHhvQE3I8sSAzgoLMBamQ5m3MbiULAYtxskCpC
|
|
74
|
+
fjFxrL6Ziaaj7HZoneF40R30KCI9ygF8vkzxLwe3t5Y4XgHL9TYQm1+BDninupIB
|
|
75
|
+
/zTeO1ygBGA66m6zpmkmuG7d8HXIducz+wIDAQAB
|
|
76
|
+
-----END RSA PUBLIC KEY-----`;
|
|
77
|
+
|
|
78
|
+
const PEMS_RSA_PUBLIC_KEY_PKCS8 = `-----BEGIN PUBLIC KEY-----
|
|
79
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5WykLKHiBAhmZh5Whocg
|
|
80
|
+
pQQqZjdrApuRxRT21SJZx6Ce+Oz2V17/heozu5LEz63jCxW1NrBckzl/Ys8p9Leq
|
|
81
|
+
YTu6x/LbKloTjfEWxlzXnzUSqn9JHIxmmJQzjXp9X1D99Tj+NWpRGEIiCFE7JfDh
|
|
82
|
+
e2KnMGVDDg6kfCLokDdLo256LeQ4CEkViwY6d+at4xDlIHwvZZmG4Smk56eHhvQE
|
|
83
|
+
3I8sSAzgoLMBamQ5m3MbiULAYtxskCpCfjFxrL6Ziaaj7HZoneF40R30KCI9ygF8
|
|
84
|
+
vkzxLwe3t5Y4XgHL9TYQm1+BDninupIB/zTeO1ygBGA66m6zpmkmuG7d8HXIducz
|
|
85
|
+
+wIDAQAB
|
|
86
|
+
-----END PUBLIC KEY-----`;
|
|
87
|
+
|
|
88
|
+
const PEMS_RSA_CERT = `-----BEGIN CERTIFICATE-----
|
|
89
|
+
MIIDGzCCAgOgAwIBAgIUROs52CB3BsvEVLOCtALalnJG8tEwDQYJKoZIhvcNAQEL
|
|
90
|
+
BQAwHTEbMBkGA1UEAwwSUlNBIDIwNDggUHVibGljS2V5MB4XDTIxMDQxMzIxMDE0
|
|
91
|
+
OVoXDTMxMDQxMTIxMDE0OVowHTEbMBkGA1UEAwwSUlNBIDIwNDggUHVibGljS2V5
|
|
92
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5WykLKHiBAhmZh5Whocg
|
|
93
|
+
pQQqZjdrApuRxRT21SJZx6Ce+Oz2V17/heozu5LEz63jCxW1NrBckzl/Ys8p9Leq
|
|
94
|
+
YTu6x/LbKloTjfEWxlzXnzUSqn9JHIxmmJQzjXp9X1D99Tj+NWpRGEIiCFE7JfDh
|
|
95
|
+
e2KnMGVDDg6kfCLokDdLo256LeQ4CEkViwY6d+at4xDlIHwvZZmG4Smk56eHhvQE
|
|
96
|
+
3I8sSAzgoLMBamQ5m3MbiULAYtxskCpCfjFxrL6Ziaaj7HZoneF40R30KCI9ygF8
|
|
97
|
+
vkzxLwe3t5Y4XgHL9TYQm1+BDninupIB/zTeO1ygBGA66m6zpmkmuG7d8HXIducz
|
|
98
|
+
+wIDAQABo1MwUTAdBgNVHQ4EFgQUcRhRB6H5JqlDHbymwqydW2/EAt8wHwYDVR0j
|
|
99
|
+
BBgwFoAUcRhRB6H5JqlDHbymwqydW2/EAt8wDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
|
100
|
+
hkiG9w0BAQsFAAOCAQEALXBmDizTp/Uz4M2A4nCl0AVclrXEk+YjAKqZnvtj44Gs
|
|
101
|
+
CUcpxtcXu64ppsSYCwawvzIm6B2Mdmib422aInH0e0oNrn8cRzC144Hjnzxguamj
|
|
102
|
+
LyZXnH/0wN9SAjqCKt++urH9wbRMIl0v+g4CWjGyY+eYkMmd1UMQvdCCCv6RVm56
|
|
103
|
+
7dBCijJIHg23JbgPJD72JCluXtTYWllv3duSwuWeYHo5EftU456pDcztkgn9XwFk
|
|
104
|
+
PFGnHLmbjpSzjE7u29qCjwHl3CiUsjfUlYFl/mf27oDXPqaWqPYv3fWH3H3ymiZQ
|
|
105
|
+
cqptUF4hDtPkaNkKWFmlljChN92o8g/jrv4DVDgJzQ==
|
|
106
|
+
-----END CERTIFICATE-----`;
|
|
107
|
+
|
|
108
|
+
/** EC P-256 key pair and certificate */
|
|
109
|
+
const PEMS_EC_P256_PRIVATE_KEY = `-----BEGIN EC PRIVATE KEY-----
|
|
110
|
+
MHcCAQEEIIhdQxQIcMnCHD3X4WqNv+VgycWmFoEZpRl9X0+dT9uHoAoGCCqGSM49
|
|
111
|
+
AwEHoUQDQgAEFLQcBbzDweo6af4k3k0gKWMNWOZVn8+9hH2rv4DKKYZ7E1z64LBt
|
|
112
|
+
PnB1gMz++HDKySr2ozD3/46dIbQMXUZKpw==
|
|
113
|
+
-----END EC PRIVATE KEY-----`;
|
|
114
|
+
|
|
115
|
+
const PEMS_EC_P256_PRIVATE_KEY_PKCS8 = `-----BEGIN PRIVATE KEY-----
|
|
116
|
+
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgiF1DFAhwycIcPdfh
|
|
117
|
+
ao2/5WDJxaYWgRmlGX1fT51P24ehRANCAAQUtBwFvMPB6jpp/iTeTSApYw1Y5lWf
|
|
118
|
+
z72Efau/gMophnsTXPrgsG0+cHWAzP74cMrJKvajMPf/jp0htAxdRkqn
|
|
119
|
+
-----END PRIVATE KEY-----`;
|
|
120
|
+
|
|
121
|
+
const PEMS_EC_P256_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
|
|
122
|
+
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFLQcBbzDweo6af4k3k0gKWMNWOZV
|
|
123
|
+
n8+9hH2rv4DKKYZ7E1z64LBtPnB1gMz++HDKySr2ozD3/46dIbQMXUZKpw==
|
|
124
|
+
-----END PUBLIC KEY-----`;
|
|
125
|
+
|
|
126
|
+
const PEMS_FOO = `-----BEGIN FOO-----
|
|
127
|
+
Rk9P
|
|
128
|
+
-----END FOO-----`;
|
|
129
|
+
const PEMS_BAR = `-----BEGIN BAR-----
|
|
130
|
+
QkFS
|
|
131
|
+
-----END BAR-----`;
|
|
132
|
+
|
|
133
|
+
TestRegister.addTests([
|
|
134
|
+
{
|
|
135
|
+
name: "PEMtoHex: Nothing",
|
|
136
|
+
input: "",
|
|
137
|
+
expectedOutput: "",
|
|
138
|
+
recipeConfig: [
|
|
139
|
+
{
|
|
140
|
+
"op": "PEM to Hex",
|
|
141
|
+
"args": []
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "PEMtoHex: No footer",
|
|
147
|
+
input: PEMS_RSA_PRIVATE_KEY_PKCS1.substring(0, 200),
|
|
148
|
+
expectedOutput: "PEM footer '-----END RSA PRIVATE KEY-----' not found",
|
|
149
|
+
recipeConfig: [
|
|
150
|
+
{
|
|
151
|
+
"op": "PEM to Hex",
|
|
152
|
+
"args": []
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: "PEMtoHex: Multiple PEMs",
|
|
158
|
+
input: PEMS_FOO + "\n" + PEMS_BAR,
|
|
159
|
+
expectedOutput: "FOOBAR",
|
|
160
|
+
recipeConfig: [
|
|
161
|
+
{
|
|
162
|
+
"op": "PEM to Hex",
|
|
163
|
+
"args": []
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"op": "From Hex",
|
|
167
|
+
"args": ["Auto"]
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "PEMtoHex: Single line PEM",
|
|
173
|
+
input: PEMS_FOO.replace(/(\n|\r)/gm, ""),
|
|
174
|
+
expectedOutput: "FOO",
|
|
175
|
+
recipeConfig: [
|
|
176
|
+
{
|
|
177
|
+
"op": "PEM to Hex",
|
|
178
|
+
"args": []
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"op": "From Hex",
|
|
182
|
+
"args": ["None"]
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "PEMtoHex: EC P-256 Private Key",
|
|
188
|
+
input: PEMS_EC_P256_PRIVATE_KEY,
|
|
189
|
+
expectedOutput: "30770201010420885d43140870c9c21c3dd7e16a8dbfe560c9c5a6168119a5197d5f4f9d4fdb87a00a06082a8648ce3d030107a1440342000414b41c05bcc3c1ea3a69fe24de4d2029630d58e6559fcfbd847dabbf80ca29867b135cfae0b06d3e707580ccfef870cac92af6a330f7ff8e9d21b40c5d464aa7",
|
|
190
|
+
recipeConfig: [
|
|
191
|
+
{
|
|
192
|
+
"op": "PEM to Hex",
|
|
193
|
+
"args": []
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "PEMtoHex: EC P-256 Private Key PKCS8",
|
|
199
|
+
input: PEMS_EC_P256_PRIVATE_KEY_PKCS8,
|
|
200
|
+
expectedOutput: "308187020100301306072a8648ce3d020106082a8648ce3d030107046d306b0201010420885d43140870c9c21c3dd7e16a8dbfe560c9c5a6168119a5197d5f4f9d4fdb87a1440342000414b41c05bcc3c1ea3a69fe24de4d2029630d58e6559fcfbd847dabbf80ca29867b135cfae0b06d3e707580ccfef870cac92af6a330f7ff8e9d21b40c5d464aa7",
|
|
201
|
+
recipeConfig: [
|
|
202
|
+
{
|
|
203
|
+
"op": "PEM to Hex",
|
|
204
|
+
"args": []
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: "PEMtoHex: EC P-256 Public Key",
|
|
210
|
+
input: PEMS_EC_P256_PUBLIC_KEY,
|
|
211
|
+
expectedOutput: "3059301306072a8648ce3d020106082a8648ce3d0301070342000414b41c05bcc3c1ea3a69fe24de4d2029630d58e6559fcfbd847dabbf80ca29867b135cfae0b06d3e707580ccfef870cac92af6a330f7ff8e9d21b40c5d464aa7",
|
|
212
|
+
recipeConfig: [
|
|
213
|
+
{
|
|
214
|
+
"op": "PEM to Hex",
|
|
215
|
+
"args": []
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "PEMtoHex: RSA Private Key PKCS1",
|
|
221
|
+
input: PEMS_RSA_PRIVATE_KEY_PKCS1,
|
|
222
|
+
expectedOutput: "fb49bd96ffc5d1351a35d773921fac03",
|
|
223
|
+
recipeConfig: [
|
|
224
|
+
{
|
|
225
|
+
"op": "PEM to Hex",
|
|
226
|
+
"args": []
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"op": "MD5",
|
|
230
|
+
"args": []
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: "PEMtoHex: RSA Private Key PKCS8",
|
|
236
|
+
input: PEMS_RSA_PRIVATE_KEY_PKCS8,
|
|
237
|
+
expectedOutput: "23086d03633689fee64680c3c24409eb",
|
|
238
|
+
recipeConfig: [
|
|
239
|
+
{
|
|
240
|
+
"op": "PEM to Hex",
|
|
241
|
+
"args": []
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"op": "MD5",
|
|
245
|
+
"args": []
|
|
246
|
+
}
|
|
247
|
+
]
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: "PEMtoHex: RSA Public Key PKCS1",
|
|
251
|
+
input: PEMS_RSA_PUBLIC_KEY_PKCS1,
|
|
252
|
+
expectedOutput: "5fc3f1f6c5d5806760b12eaad0c0292c",
|
|
253
|
+
recipeConfig: [
|
|
254
|
+
{
|
|
255
|
+
"op": "PEM to Hex",
|
|
256
|
+
"args": []
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"op": "MD5",
|
|
260
|
+
"args": []
|
|
261
|
+
}
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "PEMtoHex: RSA Public Key PKCS8",
|
|
266
|
+
input: PEMS_RSA_PUBLIC_KEY_PKCS8,
|
|
267
|
+
expectedOutput: "30fbe8e9495d591232affebdd6206ea6",
|
|
268
|
+
recipeConfig: [
|
|
269
|
+
{
|
|
270
|
+
"op": "PEM to Hex",
|
|
271
|
+
"args": []
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"op": "MD5",
|
|
275
|
+
"args": []
|
|
276
|
+
}
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "PEMtoHex: Certificate",
|
|
281
|
+
input: PEMS_RSA_CERT,
|
|
282
|
+
expectedOutput: "6694d8ca4a0ceb84c3951d25dc05ec6e",
|
|
283
|
+
recipeConfig: [
|
|
284
|
+
{
|
|
285
|
+
"op": "PEM to Hex",
|
|
286
|
+
"args": []
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"op": "MD5",
|
|
290
|
+
"args": []
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
]);
|