cyberchef 9.34.2 → 9.36.1
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/CHANGELOG.md +11 -0
- package/package.json +1 -1
- package/src/core/Utils.mjs +24 -0
- package/src/core/config/Categories.json +4 -1
- package/src/core/config/OperationConfig.json +1246 -155
- package/src/core/config/modules/Bletchley.mjs +2 -0
- package/src/core/config/modules/Default.mjs +4 -0
- package/src/core/lib/Base45.mjs +27 -0
- package/src/core/lib/Charts.mjs +2 -1
- package/src/core/lib/SIGABA.mjs +502 -0
- package/src/core/operations/Bombe.mjs +3 -0
- package/src/core/operations/Colossus.mjs +3 -0
- package/src/core/operations/Enigma.mjs +3 -0
- package/src/core/operations/FromBase45.mjs +89 -0
- package/src/core/operations/GetAllCasings.mjs +1 -1
- package/src/core/operations/Lorenz.mjs +3 -0
- package/src/core/operations/SIGABA.mjs +287 -0
- package/src/core/operations/ScatterChart.mjs +1 -1
- package/src/core/operations/SeriesChart.mjs +4 -1
- package/src/core/operations/ToBase45.mjs +78 -0
- package/src/core/operations/Typex.mjs +3 -0
- package/src/core/operations/index.mjs +6 -0
- package/src/node/index.mjs +15 -0
- package/tests/operations/index.mjs +3 -0
- package/tests/operations/tests/Base45.mjs +103 -0
- package/tests/operations/tests/GetAllCasings.mjs +3 -3
- package/tests/operations/tests/SIGABA.mjs +91 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Thomas Weißschuh [thomas@t-8ch.de]
|
|
3
|
+
* @copyright Crown Copyright 2021
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {ALPHABET, highlightToBase45, highlightFromBase45} from "../lib/Base45.mjs";
|
|
8
|
+
import Operation from "../Operation.mjs";
|
|
9
|
+
import OperationError from "../errors/OperationError.mjs";
|
|
10
|
+
import Utils from "../Utils.mjs";
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* From Base45 operation
|
|
15
|
+
*/
|
|
16
|
+
class FromBase45 extends Operation {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* FromBase45 constructor
|
|
20
|
+
*/
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
this.name = "From Base45";
|
|
25
|
+
this.module = "Default";
|
|
26
|
+
this.description = "Base45 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. The high number base results in shorter strings than with the decimal or hexadecimal system. Base45 is optimized for usage with QR codes.";
|
|
27
|
+
this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems";
|
|
28
|
+
this.inputType = "string";
|
|
29
|
+
this.outputType = "byteArray";
|
|
30
|
+
this.args = [
|
|
31
|
+
{
|
|
32
|
+
name: "Alphabet",
|
|
33
|
+
type: "string",
|
|
34
|
+
value: ALPHABET
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
this.highlight = highlightFromBase45;
|
|
39
|
+
this.highlightReverse = highlightToBase45;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @param {string} input
|
|
44
|
+
* @param {Object[]} args
|
|
45
|
+
* @returns {byteArray}
|
|
46
|
+
*/
|
|
47
|
+
run(input, args) {
|
|
48
|
+
if (!input) return [];
|
|
49
|
+
const alphabet = Utils.expandAlphRange(args[0]);
|
|
50
|
+
|
|
51
|
+
const res = [];
|
|
52
|
+
|
|
53
|
+
for (const triple of Utils.chunked(input, 3)) {
|
|
54
|
+
triple.reverse();
|
|
55
|
+
let b = 0;
|
|
56
|
+
for (const c of triple) {
|
|
57
|
+
const idx = alphabet.indexOf(c);
|
|
58
|
+
if (idx === -1) {
|
|
59
|
+
throw new OperationError(`Character not in alphabet: '${c}'`);
|
|
60
|
+
}
|
|
61
|
+
b *= 45;
|
|
62
|
+
b += idx;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (b > 65535) {
|
|
66
|
+
throw new OperationError(`Triplet too large: '${triple.join("")}'`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (triple.length > 2) {
|
|
70
|
+
/**
|
|
71
|
+
* The last triple may only have 2 bytes so we push the MSB when we got 3 bytes
|
|
72
|
+
* Pushing MSB
|
|
73
|
+
*/
|
|
74
|
+
res.push(b >> 8);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Pushing LSB
|
|
79
|
+
*/
|
|
80
|
+
res.push(b & 0xff);
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return res;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export default FromBase45;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Emulation of the Lorenz SZ40/42a/42b cipher attachment.
|
|
3
3
|
*
|
|
4
|
+
* Tested against the Colossus Rebuild at Bletchley Park's TNMOC
|
|
5
|
+
* using a variety of inputs and settings to confirm correctness.
|
|
6
|
+
*
|
|
4
7
|
* @author VirtualColossus [martin@virtualcolossus.co.uk]
|
|
5
8
|
* @copyright Crown Copyright 2019
|
|
6
9
|
* @license Apache-2.0
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emulation of the SIGABA machine.
|
|
3
|
+
*
|
|
4
|
+
* @author hettysymes
|
|
5
|
+
* @copyright hettysymes 2020
|
|
6
|
+
* @license Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import Operation from "../Operation.mjs";
|
|
10
|
+
import {LETTERS} from "../lib/Enigma.mjs";
|
|
11
|
+
import {NUMBERS, CR_ROTORS, I_ROTORS, SigabaMachine, CRRotor, IRotor} from "../lib/SIGABA.mjs";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Sigaba operation
|
|
15
|
+
*/
|
|
16
|
+
class Sigaba extends Operation {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Sigaba constructor
|
|
20
|
+
*/
|
|
21
|
+
constructor() {
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
this.name = "SIGABA";
|
|
25
|
+
this.module = "Bletchley";
|
|
26
|
+
this.description = "Encipher/decipher with the WW2 SIGABA machine. <br><br>SIGABA, otherwise known as ECM Mark II, was used by the United States for message encryption during WW2 up to the 1950s. It was developed in the 1930s by the US Army and Navy, and has up to this day never been broken. Consisting of 15 rotors: 5 cipher rotors and 10 rotors (5 control rotors and 5 index rotors) controlling the stepping of the cipher rotors, the rotor stepping for SIGABA is much more complex than other rotor machines of its time, such as Enigma. All example rotor wirings are random example sets.<br><br>To configure rotor wirings, for the cipher and control rotors enter a string of letters which map from A to Z, and for the index rotors enter a sequence of numbers which map from 0 to 9. Note that encryption is not the same as decryption, so first choose the desired mode. <br><br> Note: Whilst this has been tested against other software emulators, it has not been tested against hardware.";
|
|
27
|
+
this.infoURL = "https://wikipedia.org/wiki/SIGABA";
|
|
28
|
+
this.inputType = "string";
|
|
29
|
+
this.outputType = "string";
|
|
30
|
+
this.args = [
|
|
31
|
+
{
|
|
32
|
+
name: "1st (left-hand) cipher rotor",
|
|
33
|
+
type: "editableOption",
|
|
34
|
+
value: CR_ROTORS,
|
|
35
|
+
defaultIndex: 0
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "1st cipher rotor reversed",
|
|
39
|
+
type: "boolean",
|
|
40
|
+
value: false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "1st cipher rotor intial value",
|
|
44
|
+
type: "option",
|
|
45
|
+
value: LETTERS
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "2nd cipher rotor",
|
|
49
|
+
type: "editableOption",
|
|
50
|
+
value: CR_ROTORS,
|
|
51
|
+
defaultIndex: 0
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: "2nd cipher rotor reversed",
|
|
55
|
+
type: "boolean",
|
|
56
|
+
value: false
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: "2nd cipher rotor intial value",
|
|
60
|
+
type: "option",
|
|
61
|
+
value: LETTERS
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "3rd (middle) cipher rotor",
|
|
65
|
+
type: "editableOption",
|
|
66
|
+
value: CR_ROTORS,
|
|
67
|
+
defaultIndex: 0
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "3rd cipher rotor reversed",
|
|
71
|
+
type: "boolean",
|
|
72
|
+
value: false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "3rd cipher rotor intial value",
|
|
76
|
+
type: "option",
|
|
77
|
+
value: LETTERS
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: "4th cipher rotor",
|
|
81
|
+
type: "editableOption",
|
|
82
|
+
value: CR_ROTORS,
|
|
83
|
+
defaultIndex: 0
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "4th cipher rotor reversed",
|
|
87
|
+
type: "boolean",
|
|
88
|
+
value: false
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "4th cipher rotor intial value",
|
|
92
|
+
type: "option",
|
|
93
|
+
value: LETTERS
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "5th (right-hand) cipher rotor",
|
|
97
|
+
type: "editableOption",
|
|
98
|
+
value: CR_ROTORS,
|
|
99
|
+
defaultIndex: 0
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: "5th cipher rotor reversed",
|
|
103
|
+
type: "boolean",
|
|
104
|
+
value: false
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "5th cipher rotor intial value",
|
|
108
|
+
type: "option",
|
|
109
|
+
value: LETTERS
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "1st (left-hand) control rotor",
|
|
113
|
+
type: "editableOption",
|
|
114
|
+
value: CR_ROTORS,
|
|
115
|
+
defaultIndex: 0
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "1st control rotor reversed",
|
|
119
|
+
type: "boolean",
|
|
120
|
+
value: false
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "1st control rotor intial value",
|
|
124
|
+
type: "option",
|
|
125
|
+
value: LETTERS
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: "2nd control rotor",
|
|
129
|
+
type: "editableOption",
|
|
130
|
+
value: CR_ROTORS,
|
|
131
|
+
defaultIndex: 0
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: "2nd control rotor reversed",
|
|
135
|
+
type: "boolean",
|
|
136
|
+
value: false
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: "2nd control rotor intial value",
|
|
140
|
+
type: "option",
|
|
141
|
+
value: LETTERS
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: "3rd (middle) control rotor",
|
|
145
|
+
type: "editableOption",
|
|
146
|
+
value: CR_ROTORS,
|
|
147
|
+
defaultIndex: 0
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: "3rd control rotor reversed",
|
|
151
|
+
type: "boolean",
|
|
152
|
+
value: false
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "3rd control rotor intial value",
|
|
156
|
+
type: "option",
|
|
157
|
+
value: LETTERS
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "4th control rotor",
|
|
161
|
+
type: "editableOption",
|
|
162
|
+
value: CR_ROTORS,
|
|
163
|
+
defaultIndex: 0
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "4th control rotor reversed",
|
|
167
|
+
type: "boolean",
|
|
168
|
+
value: false
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "4th control rotor intial value",
|
|
172
|
+
type: "option",
|
|
173
|
+
value: LETTERS
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: "5th (right-hand) control rotor",
|
|
177
|
+
type: "editableOption",
|
|
178
|
+
value: CR_ROTORS,
|
|
179
|
+
defaultIndex: 0
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "5th control rotor reversed",
|
|
183
|
+
type: "boolean",
|
|
184
|
+
value: false
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: "5th control rotor intial value",
|
|
188
|
+
type: "option",
|
|
189
|
+
value: LETTERS
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
name: "1st (left-hand) index rotor",
|
|
193
|
+
type: "editableOption",
|
|
194
|
+
value: I_ROTORS,
|
|
195
|
+
defaultIndex: 0
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "1st index rotor intial value",
|
|
199
|
+
type: "option",
|
|
200
|
+
value: NUMBERS
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: "2nd index rotor",
|
|
204
|
+
type: "editableOption",
|
|
205
|
+
value: I_ROTORS,
|
|
206
|
+
defaultIndex: 0
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: "2nd index rotor intial value",
|
|
210
|
+
type: "option",
|
|
211
|
+
value: NUMBERS
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "3rd (middle) index rotor",
|
|
215
|
+
type: "editableOption",
|
|
216
|
+
value: I_ROTORS,
|
|
217
|
+
defaultIndex: 0
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "3rd index rotor intial value",
|
|
221
|
+
type: "option",
|
|
222
|
+
value: NUMBERS
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: "4th index rotor",
|
|
226
|
+
type: "editableOption",
|
|
227
|
+
value: I_ROTORS,
|
|
228
|
+
defaultIndex: 0
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: "4th index rotor intial value",
|
|
232
|
+
type: "option",
|
|
233
|
+
value: NUMBERS
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
name: "5th (right-hand) index rotor",
|
|
237
|
+
type: "editableOption",
|
|
238
|
+
value: I_ROTORS,
|
|
239
|
+
defaultIndex: 0
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: "5th index rotor intial value",
|
|
243
|
+
type: "option",
|
|
244
|
+
value: NUMBERS
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: "SIGABA mode",
|
|
248
|
+
type: "option",
|
|
249
|
+
value: ["Encrypt", "Decrypt"]
|
|
250
|
+
}
|
|
251
|
+
];
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* @param {string} input
|
|
256
|
+
* @param {Object[]} args
|
|
257
|
+
* @returns {string}
|
|
258
|
+
*/
|
|
259
|
+
run(input, args) {
|
|
260
|
+
const sigabaSwitch = args[40];
|
|
261
|
+
const cipherRotors = [];
|
|
262
|
+
const controlRotors = [];
|
|
263
|
+
const indexRotors = [];
|
|
264
|
+
for (let i=0; i<5; i++) {
|
|
265
|
+
const rotorWiring = args[i*3];
|
|
266
|
+
cipherRotors.push(new CRRotor(rotorWiring, args[i*3+2], args[i*3+1]));
|
|
267
|
+
}
|
|
268
|
+
for (let i=5; i<10; i++) {
|
|
269
|
+
const rotorWiring = args[i*3];
|
|
270
|
+
controlRotors.push(new CRRotor(rotorWiring, args[i*3+2], args[i*3+1]));
|
|
271
|
+
}
|
|
272
|
+
for (let i=15; i<20; i++) {
|
|
273
|
+
const rotorWiring = args[i*2];
|
|
274
|
+
indexRotors.push(new IRotor(rotorWiring, args[i*2+1]));
|
|
275
|
+
}
|
|
276
|
+
const sigaba = new SigabaMachine(cipherRotors, controlRotors, indexRotors);
|
|
277
|
+
let result;
|
|
278
|
+
if (sigabaSwitch === "Encrypt") {
|
|
279
|
+
result = sigaba.encrypt(input);
|
|
280
|
+
} else if (sigabaSwitch === "Decrypt") {
|
|
281
|
+
result = sigaba.decrypt(input);
|
|
282
|
+
}
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
}
|
|
287
|
+
export default Sigaba;
|
|
@@ -87,7 +87,7 @@ class ScatterChart extends Operation {
|
|
|
87
87
|
const recordDelimiter = Utils.charRep(args[0]),
|
|
88
88
|
fieldDelimiter = Utils.charRep(args[1]),
|
|
89
89
|
columnHeadingsAreIncluded = args[2],
|
|
90
|
-
fillColour = args[5],
|
|
90
|
+
fillColour = Utils.escapeHtml(args[5]),
|
|
91
91
|
radius = args[6],
|
|
92
92
|
colourInInput = args[7],
|
|
93
93
|
dimension = 500;
|
|
@@ -72,7 +72,10 @@ class SeriesChart extends Operation {
|
|
|
72
72
|
fieldDelimiter = Utils.charRep(args[1]),
|
|
73
73
|
xLabel = args[2],
|
|
74
74
|
pipRadius = args[3],
|
|
75
|
-
|
|
75
|
+
// Escape HTML from all colours to prevent reflected XSS. See https://github.com/gchq/CyberChef/issues/1265
|
|
76
|
+
seriesColours = args[4].split(",").map((colour) => {
|
|
77
|
+
return Utils.escapeHtml(colour);
|
|
78
|
+
}),
|
|
76
79
|
svgWidth = 500,
|
|
77
80
|
interSeriesPadding = 20,
|
|
78
81
|
xAxisHeight = 50,
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Thomas Weißschuh [thomas@t-8ch.de]
|
|
3
|
+
* @copyright Crown Copyright 2021
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {ALPHABET, highlightToBase45, highlightFromBase45} from "../lib/Base45.mjs";
|
|
8
|
+
import Operation from "../Operation.mjs";
|
|
9
|
+
import Utils from "../Utils.mjs";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* To Base45 operation
|
|
13
|
+
*/
|
|
14
|
+
class ToBase45 extends Operation {
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* ToBase45 constructor
|
|
18
|
+
*/
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
|
|
22
|
+
this.name = "To Base45";
|
|
23
|
+
this.module = "Default";
|
|
24
|
+
this.description = "Base45 is a notation for encoding arbitrary byte data using a restricted set of symbols that can be conveniently used by humans and processed by computers. The high number base results in shorter strings than with the decimal or hexadecimal system. Base45 is optimized for usage with QR codes.";
|
|
25
|
+
this.infoURL = "https://wikipedia.org/wiki/List_of_numeral_systems";
|
|
26
|
+
this.inputType = "ArrayBuffer";
|
|
27
|
+
this.outputType = "string";
|
|
28
|
+
this.args = [
|
|
29
|
+
{
|
|
30
|
+
name: "Alphabet",
|
|
31
|
+
type: "string",
|
|
32
|
+
value: ALPHABET
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
this.highlight = highlightToBase45;
|
|
37
|
+
this.highlightReverse = highlightFromBase45;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param {ArrayBuffer} input
|
|
42
|
+
* @param {Object[]} args
|
|
43
|
+
* @returns {string}
|
|
44
|
+
*/
|
|
45
|
+
run(input, args) {
|
|
46
|
+
input = new Uint8Array(input);
|
|
47
|
+
const alphabet = Utils.expandAlphRange(args[0]);
|
|
48
|
+
if (!input) return "";
|
|
49
|
+
|
|
50
|
+
const res = [];
|
|
51
|
+
|
|
52
|
+
for (const pair of Utils.chunked(input, 2)) {
|
|
53
|
+
let b = 0;
|
|
54
|
+
for (const e of pair) {
|
|
55
|
+
b *= 256;
|
|
56
|
+
b += e;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let chars = 0;
|
|
60
|
+
do {
|
|
61
|
+
res.push(alphabet[b % 45]);
|
|
62
|
+
chars++;
|
|
63
|
+
b = Math.floor(b / 45);
|
|
64
|
+
} while (b > 0);
|
|
65
|
+
|
|
66
|
+
if (chars < 2) {
|
|
67
|
+
res.push("0");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
return res.join("");
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export default ToBase45;
|
|
@@ -120,6 +120,7 @@ import FrequencyDistribution from "./FrequencyDistribution.mjs";
|
|
|
120
120
|
import FromBCD from "./FromBCD.mjs";
|
|
121
121
|
import FromBase from "./FromBase.mjs";
|
|
122
122
|
import FromBase32 from "./FromBase32.mjs";
|
|
123
|
+
import FromBase45 from "./FromBase45.mjs";
|
|
123
124
|
import FromBase58 from "./FromBase58.mjs";
|
|
124
125
|
import FromBase62 from "./FromBase62.mjs";
|
|
125
126
|
import FromBase64 from "./FromBase64.mjs";
|
|
@@ -274,6 +275,7 @@ import SHA0 from "./SHA0.mjs";
|
|
|
274
275
|
import SHA1 from "./SHA1.mjs";
|
|
275
276
|
import SHA2 from "./SHA2.mjs";
|
|
276
277
|
import SHA3 from "./SHA3.mjs";
|
|
278
|
+
import SIGABA from "./SIGABA.mjs";
|
|
277
279
|
import SM3 from "./SM3.mjs";
|
|
278
280
|
import SQLBeautify from "./SQLBeautify.mjs";
|
|
279
281
|
import SQLMinify from "./SQLMinify.mjs";
|
|
@@ -315,6 +317,7 @@ import TextEncodingBruteForce from "./TextEncodingBruteForce.mjs";
|
|
|
315
317
|
import ToBCD from "./ToBCD.mjs";
|
|
316
318
|
import ToBase from "./ToBase.mjs";
|
|
317
319
|
import ToBase32 from "./ToBase32.mjs";
|
|
320
|
+
import ToBase45 from "./ToBase45.mjs";
|
|
318
321
|
import ToBase58 from "./ToBase58.mjs";
|
|
319
322
|
import ToBase62 from "./ToBase62.mjs";
|
|
320
323
|
import ToBase64 from "./ToBase64.mjs";
|
|
@@ -487,6 +490,7 @@ export {
|
|
|
487
490
|
FromBCD,
|
|
488
491
|
FromBase,
|
|
489
492
|
FromBase32,
|
|
493
|
+
FromBase45,
|
|
490
494
|
FromBase58,
|
|
491
495
|
FromBase62,
|
|
492
496
|
FromBase64,
|
|
@@ -641,6 +645,7 @@ export {
|
|
|
641
645
|
SHA1,
|
|
642
646
|
SHA2,
|
|
643
647
|
SHA3,
|
|
648
|
+
SIGABA,
|
|
644
649
|
SM3,
|
|
645
650
|
SQLBeautify,
|
|
646
651
|
SQLMinify,
|
|
@@ -682,6 +687,7 @@ export {
|
|
|
682
687
|
ToBCD,
|
|
683
688
|
ToBase,
|
|
684
689
|
ToBase32,
|
|
690
|
+
ToBase45,
|
|
685
691
|
ToBase58,
|
|
686
692
|
ToBase62,
|
|
687
693
|
ToBase64,
|
package/src/node/index.mjs
CHANGED
|
@@ -127,6 +127,7 @@ import {
|
|
|
127
127
|
FromBCD as core_FromBCD,
|
|
128
128
|
FromBase as core_FromBase,
|
|
129
129
|
FromBase32 as core_FromBase32,
|
|
130
|
+
FromBase45 as core_FromBase45,
|
|
130
131
|
FromBase58 as core_FromBase58,
|
|
131
132
|
FromBase62 as core_FromBase62,
|
|
132
133
|
FromBase64 as core_FromBase64,
|
|
@@ -275,6 +276,7 @@ import {
|
|
|
275
276
|
SHA1 as core_SHA1,
|
|
276
277
|
SHA2 as core_SHA2,
|
|
277
278
|
SHA3 as core_SHA3,
|
|
279
|
+
SIGABA as core_SIGABA,
|
|
278
280
|
SM3 as core_SM3,
|
|
279
281
|
SQLBeautify as core_SQLBeautify,
|
|
280
282
|
SQLMinify as core_SQLMinify,
|
|
@@ -315,6 +317,7 @@ import {
|
|
|
315
317
|
ToBCD as core_ToBCD,
|
|
316
318
|
ToBase as core_ToBase,
|
|
317
319
|
ToBase32 as core_ToBase32,
|
|
320
|
+
ToBase45 as core_ToBase45,
|
|
318
321
|
ToBase58 as core_ToBase58,
|
|
319
322
|
ToBase62 as core_ToBase62,
|
|
320
323
|
ToBase64 as core_ToBase64,
|
|
@@ -494,6 +497,7 @@ function generateChef() {
|
|
|
494
497
|
"fromBCD": _wrap(core_FromBCD),
|
|
495
498
|
"fromBase": _wrap(core_FromBase),
|
|
496
499
|
"fromBase32": _wrap(core_FromBase32),
|
|
500
|
+
"fromBase45": _wrap(core_FromBase45),
|
|
497
501
|
"fromBase58": _wrap(core_FromBase58),
|
|
498
502
|
"fromBase62": _wrap(core_FromBase62),
|
|
499
503
|
"fromBase64": _wrap(core_FromBase64),
|
|
@@ -642,6 +646,7 @@ function generateChef() {
|
|
|
642
646
|
"SHA1": _wrap(core_SHA1),
|
|
643
647
|
"SHA2": _wrap(core_SHA2),
|
|
644
648
|
"SHA3": _wrap(core_SHA3),
|
|
649
|
+
"SIGABA": _wrap(core_SIGABA),
|
|
645
650
|
"SM3": _wrap(core_SM3),
|
|
646
651
|
"SQLBeautify": _wrap(core_SQLBeautify),
|
|
647
652
|
"SQLMinify": _wrap(core_SQLMinify),
|
|
@@ -682,6 +687,7 @@ function generateChef() {
|
|
|
682
687
|
"toBCD": _wrap(core_ToBCD),
|
|
683
688
|
"toBase": _wrap(core_ToBase),
|
|
684
689
|
"toBase32": _wrap(core_ToBase32),
|
|
690
|
+
"toBase45": _wrap(core_ToBase45),
|
|
685
691
|
"toBase58": _wrap(core_ToBase58),
|
|
686
692
|
"toBase62": _wrap(core_ToBase62),
|
|
687
693
|
"toBase64": _wrap(core_ToBase64),
|
|
@@ -872,6 +878,7 @@ const frequencyDistribution = chef.frequencyDistribution;
|
|
|
872
878
|
const fromBCD = chef.fromBCD;
|
|
873
879
|
const fromBase = chef.fromBase;
|
|
874
880
|
const fromBase32 = chef.fromBase32;
|
|
881
|
+
const fromBase45 = chef.fromBase45;
|
|
875
882
|
const fromBase58 = chef.fromBase58;
|
|
876
883
|
const fromBase62 = chef.fromBase62;
|
|
877
884
|
const fromBase64 = chef.fromBase64;
|
|
@@ -1026,6 +1033,7 @@ const SHA0 = chef.SHA0;
|
|
|
1026
1033
|
const SHA1 = chef.SHA1;
|
|
1027
1034
|
const SHA2 = chef.SHA2;
|
|
1028
1035
|
const SHA3 = chef.SHA3;
|
|
1036
|
+
const SIGABA = chef.SIGABA;
|
|
1029
1037
|
const SM3 = chef.SM3;
|
|
1030
1038
|
const SQLBeautify = chef.SQLBeautify;
|
|
1031
1039
|
const SQLMinify = chef.SQLMinify;
|
|
@@ -1067,6 +1075,7 @@ const textEncodingBruteForce = chef.textEncodingBruteForce;
|
|
|
1067
1075
|
const toBCD = chef.toBCD;
|
|
1068
1076
|
const toBase = chef.toBase;
|
|
1069
1077
|
const toBase32 = chef.toBase32;
|
|
1078
|
+
const toBase45 = chef.toBase45;
|
|
1070
1079
|
const toBase58 = chef.toBase58;
|
|
1071
1080
|
const toBase62 = chef.toBase62;
|
|
1072
1081
|
const toBase64 = chef.toBase64;
|
|
@@ -1241,6 +1250,7 @@ const operations = [
|
|
|
1241
1250
|
fromBCD,
|
|
1242
1251
|
fromBase,
|
|
1243
1252
|
fromBase32,
|
|
1253
|
+
fromBase45,
|
|
1244
1254
|
fromBase58,
|
|
1245
1255
|
fromBase62,
|
|
1246
1256
|
fromBase64,
|
|
@@ -1395,6 +1405,7 @@ const operations = [
|
|
|
1395
1405
|
SHA1,
|
|
1396
1406
|
SHA2,
|
|
1397
1407
|
SHA3,
|
|
1408
|
+
SIGABA,
|
|
1398
1409
|
SM3,
|
|
1399
1410
|
SQLBeautify,
|
|
1400
1411
|
SQLMinify,
|
|
@@ -1436,6 +1447,7 @@ const operations = [
|
|
|
1436
1447
|
toBCD,
|
|
1437
1448
|
toBase,
|
|
1438
1449
|
toBase32,
|
|
1450
|
+
toBase45,
|
|
1439
1451
|
toBase58,
|
|
1440
1452
|
toBase62,
|
|
1441
1453
|
toBase64,
|
|
@@ -1614,6 +1626,7 @@ export {
|
|
|
1614
1626
|
fromBCD,
|
|
1615
1627
|
fromBase,
|
|
1616
1628
|
fromBase32,
|
|
1629
|
+
fromBase45,
|
|
1617
1630
|
fromBase58,
|
|
1618
1631
|
fromBase62,
|
|
1619
1632
|
fromBase64,
|
|
@@ -1768,6 +1781,7 @@ export {
|
|
|
1768
1781
|
SHA1,
|
|
1769
1782
|
SHA2,
|
|
1770
1783
|
SHA3,
|
|
1784
|
+
SIGABA,
|
|
1771
1785
|
SM3,
|
|
1772
1786
|
SQLBeautify,
|
|
1773
1787
|
SQLMinify,
|
|
@@ -1809,6 +1823,7 @@ export {
|
|
|
1809
1823
|
toBCD,
|
|
1810
1824
|
toBase,
|
|
1811
1825
|
toBase32,
|
|
1826
|
+
toBase45,
|
|
1812
1827
|
toBase58,
|
|
1813
1828
|
toBase62,
|
|
1814
1829
|
toBase64,
|
|
@@ -20,6 +20,7 @@ import TestRegister from "../lib/TestRegister.mjs";
|
|
|
20
20
|
import "./tests/BCD.mjs";
|
|
21
21
|
import "./tests/BSON.mjs";
|
|
22
22
|
import "./tests/BaconCipher.mjs";
|
|
23
|
+
import "./tests/Base45.mjs";
|
|
23
24
|
import "./tests/Base58.mjs";
|
|
24
25
|
import "./tests/Base64.mjs";
|
|
25
26
|
import "./tests/Base62.mjs";
|
|
@@ -108,6 +109,8 @@ import "./tests/JA3Fingerprint.mjs";
|
|
|
108
109
|
import "./tests/JA3SFingerprint.mjs";
|
|
109
110
|
import "./tests/HASSH.mjs";
|
|
110
111
|
import "./tests/GetAllCasings.mjs";
|
|
112
|
+
import "./tests/SIGABA.mjs";
|
|
113
|
+
|
|
111
114
|
|
|
112
115
|
// Cannot test operations that use the File type yet
|
|
113
116
|
// import "./tests/SplitColourChannels.mjs";
|