cyberchef 9.35.0 → 9.36.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.
@@ -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
- seriesColours = args[4].split(","),
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,
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Emulation of the Typex machine.
3
3
  *
4
+ * Tested against a genuine Typex machine using a variety of inputs
5
+ * and settings to confirm correctness.
6
+ *
4
7
  * @author s2224834
5
8
  * @copyright Crown Copyright 2019
6
9
  * @license Apache-2.0
@@ -275,6 +275,7 @@ import SHA0 from "./SHA0.mjs";
275
275
  import SHA1 from "./SHA1.mjs";
276
276
  import SHA2 from "./SHA2.mjs";
277
277
  import SHA3 from "./SHA3.mjs";
278
+ import SIGABA from "./SIGABA.mjs";
278
279
  import SM3 from "./SM3.mjs";
279
280
  import SQLBeautify from "./SQLBeautify.mjs";
280
281
  import SQLMinify from "./SQLMinify.mjs";
@@ -644,6 +645,7 @@ export {
644
645
  SHA1,
645
646
  SHA2,
646
647
  SHA3,
648
+ SIGABA,
647
649
  SM3,
648
650
  SQLBeautify,
649
651
  SQLMinify,
@@ -276,6 +276,7 @@ import {
276
276
  SHA1 as core_SHA1,
277
277
  SHA2 as core_SHA2,
278
278
  SHA3 as core_SHA3,
279
+ SIGABA as core_SIGABA,
279
280
  SM3 as core_SM3,
280
281
  SQLBeautify as core_SQLBeautify,
281
282
  SQLMinify as core_SQLMinify,
@@ -645,6 +646,7 @@ function generateChef() {
645
646
  "SHA1": _wrap(core_SHA1),
646
647
  "SHA2": _wrap(core_SHA2),
647
648
  "SHA3": _wrap(core_SHA3),
649
+ "SIGABA": _wrap(core_SIGABA),
648
650
  "SM3": _wrap(core_SM3),
649
651
  "SQLBeautify": _wrap(core_SQLBeautify),
650
652
  "SQLMinify": _wrap(core_SQLMinify),
@@ -1031,6 +1033,7 @@ const SHA0 = chef.SHA0;
1031
1033
  const SHA1 = chef.SHA1;
1032
1034
  const SHA2 = chef.SHA2;
1033
1035
  const SHA3 = chef.SHA3;
1036
+ const SIGABA = chef.SIGABA;
1034
1037
  const SM3 = chef.SM3;
1035
1038
  const SQLBeautify = chef.SQLBeautify;
1036
1039
  const SQLMinify = chef.SQLMinify;
@@ -1402,6 +1405,7 @@ const operations = [
1402
1405
  SHA1,
1403
1406
  SHA2,
1404
1407
  SHA3,
1408
+ SIGABA,
1405
1409
  SM3,
1406
1410
  SQLBeautify,
1407
1411
  SQLMinify,
@@ -1777,6 +1781,7 @@ export {
1777
1781
  SHA1,
1778
1782
  SHA2,
1779
1783
  SHA3,
1784
+ SIGABA,
1780
1785
  SM3,
1781
1786
  SQLBeautify,
1782
1787
  SQLMinify,
@@ -109,6 +109,8 @@ import "./tests/JA3Fingerprint.mjs";
109
109
  import "./tests/JA3SFingerprint.mjs";
110
110
  import "./tests/HASSH.mjs";
111
111
  import "./tests/GetAllCasings.mjs";
112
+ import "./tests/SIGABA.mjs";
113
+
112
114
 
113
115
  // Cannot test operations that use the File type yet
114
116
  // import "./tests/SplitColourChannels.mjs";
@@ -0,0 +1,91 @@
1
+ /**
2
+ * SIGABA machine tests
3
+ *
4
+ * @author hettysymes
5
+ * @copyright hettysymes 2020
6
+ * @license Apache-2.0
7
+ */
8
+ import TestRegister from "../../lib/TestRegister.mjs";
9
+
10
+ TestRegister.addTests([
11
+ {
12
+ name: "SIGABA: encrypt test 1",
13
+ input: "HELLO WORLD TESTING THE SIGABA MACHINE",
14
+ expectedOutput: "ULBECJCZJBJFVUDWAVRGRBMPSQHOTTNVQEESKN",
15
+ recipeConfig: [
16
+ {
17
+ "op": "SIGABA",
18
+ "args": [
19
+ "BHKWECJDOVAYLFMITUGXRNSPZQ", true, "G",
20
+ "CDTAKGQOZXLVJYHSWMIBPRUNEF", false, "L",
21
+ "WAXHJZMBVDPOLTUYRCQFNSGKEI", false, "I",
22
+ "HUSCWIMJQXDALVGBFTOYZKRPNE", false, "T",
23
+ "RTLSMNKXFVWQUZGCHEJBYDAIPO", false, "B",
24
+ "GHAQBRJWDMNZTSKLOUXYPFIECV", false, "N",
25
+ "VFLGEMTCXZIQDYAKRPBONHWSUJ", true, "Q",
26
+ "ZQCAYHRJNXPFLKIOTBUSVWMGDE", false, "B",
27
+ "EZVSWPCTULGAOFDJNBIYMXKQHR", false, "J",
28
+ "ELKSGDXMVYJUZNCAROQBPWHITF", false, "R",
29
+ "3891625740", "3",
30
+ "6297135408", "1",
31
+ "2389715064", "8",
32
+ "9264351708", "6",
33
+ "9573086142", "6",
34
+ "Encrypt"
35
+ ]
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ name: "SIGABA: encrypt test 2",
41
+ input: "PCRPJZWSPNOHMWANBFBEIVZOXDQESPYDEFBNTHXLSICIRPKUATJVDUQFLZOKGHHHDUDIBRKUHVCGAGLBWVGFFXNDHKPFSPSCIIPCXUFRRHNYWIJFEJWQSGMSNJHWSLPKVXHUQUWIURHDIHIUTWGQFIYLTKEZAUESWYEKIWXUSSXWXBEHCXCUDQWKCISVPKXJVPOIJZWTUGKAORBMKBAQUZOPTSUSYZRROWQUYKNCLHVIHEGWCCONGVHEKCEXVYIPNILIXTXDELNGLJGMEQKKQJWZLPNXPOGIOSVAEAJYKWYJXXGKKPLVYAZGDCMNHMPLCYWDQSRBEMVVVZVFYJMRYGHJOTDOEQVRQOVXOGOVYGTXETFHAYELRYVDGWOFVGAOWPMHQYRZMNXVTAHWSKZLJDFVQPZGMHZWFNOBHSZHEDAEXIFCEEJYZDOEFOQWCXTKPJRUEITKHVCITCLKBUFNAFBYXELAYPBRGGGOCCAGLXXJXTSWCJHMHQPVUIBAGBDKAGEEEPKRGGICJQXSYHBNNAKGYODRAUWAEYHWCKHEQIBAONWQJYQCIFKDTOCTJMBJULWKMSNNMPXINHZQWUMJQLQKIPVZVRGYPCJJZMENWTFTUSPCSPRXHMZPCHCNQTUDCOUJHRKYQIUWWVEVVRYFDIYRQISNGPMQLNMCNMVBEWHNCUODHAGEVEUMKVZLEIKYAMPGVVSBYNRJMFCATDXTQCYXIBCXXKYEYHHYERQGQWZTWCEJBFQLRFFCIVVSZUKGLOTLNGLQNTIKTBBWVFMONUFKRLCJASEKUEEDDQDIVQMFRSJRNHYZJODFHSCJSDAIRUXOSDNFUFUFMNZYQIEGRUXKUPCHENUEZHRKYHDRJYSHLZNYRBWVXORMJMJRIRNSAJQRUMPCXUDFYRGKEAXQXJHPEWNIYIDURDGWIFEMSOFYYCFRZGMZXJNTLTJBBSZIULQSOMEVGCTCVXUHTIEHSPOPQYCJLPAJAPQPAQXE",
42
+ expectedOutput: "GMEXPPCMFGKUVGXZHVTCKXRSTJUYWNOKFVELWAHHSJBXGOEXCMLOVSIMCDMGEYMWWTFDUMCDUJEZITNPVVBGQDJEVHJXSKJAAUZWBELMSPUTXCUYPDTJCQXEBGWPWRSQLSNFMASCTJZDSFNKDDTAXLRGUPKCBNXMZPADJSFGGNYKRPYBNTYPTGVPACBEINILNACWFVKMJPGCEZFROEYYKTGYSQYMFSGVDOJJONNYEYSCCIXWLKUSJZDRVAQSNUWHMDJVDNNMPGOYRGQRSBGSPQKGCTFZQWSOXBWSQZDCRQJQAWZDPQEILGMMABIMCDPNSKAFCLPQGIRJCMGQREBEUHBYREXFABFMVZTZBDUMASVNUMHIYRSZLGNZFMVAIABLCUZLJLKKZPWEXDHYZFVSNRLCLNDRKLKSWRHQVQJRTHCNFZXDEXSLAXXOGMFVSGCJGAWOLGDMTLWSFNTCUVCCEACINRZAZZOGLEHHXLPHVKILBBJDPOOCILQKKGODSXOBDPZZDXHJLLBOBVFCHJVMUBUZZIKGCWGCYGXVEHHIJGPEQERWEZLILQNHPHALFKFMGADNELGBKILKIUETGDCBQUEOECWVFNOXTJKUYPWBNEKYSIKMVSAMBZGLIKDAOELRSTKFASEKABTUCPSFEGXXQGDFPSPVOLBHGLZSLLWCABSRKZDQQRKVCKXDGTIHPDNMPDZEXYFYKXZTPJPLYOFNLWAGKJEOHOYLMZELXIDWWNXPKEPUCKNNNHJLFYHPQNHMMCGMUPHSUSYYIVWTIMFKKKTFPGFTLTWWSQBRBMGBTZXPVULKNZIIKVTYLJFISGPTLZFTCLGNZOMVKZOIMUDGXRDDSVFRHRYWBEWHYLCUISYMRWAZZAQPJYXZQQKZLILOSHXUTQJFPTXQSREKSUDZTLGUDLUGOJMQHJRJHXCHQTKJULTWWQOXIRFRQEYBPJPEKXFIRMNATWNFBADOSIJVZYRYDBHDAEDJUVDHLDAU",
43
+ recipeConfig: [
44
+ { "op": "SIGABA",
45
+ "args": [
46
+ "YCHLQSUGBDIXNZKERPVJTAWFOM", true, "A",
47
+ "INPXBWETGUYSAOCHVLDMQKZJFR", false, "B",
48
+ "WNDRIOZPTAXHFJYQBMSVEKUCGL", false, "C",
49
+ "TZGHOBKRVUXLQDMPNFWCJYEIAS", false, "D",
50
+ "YWTAHRQJVLCEXUNGBIPZMSDFOK", true, "E",
51
+ "QSLRBTEKOGAICFWYVMHJNXZUDP", false, "F",
52
+ "CHJDQIGNBSAKVTUOXFWLEPRMZY", false, "G",
53
+ "CDFAJXTIMNBEQHSUGRYLWZKVPO", true, "H",
54
+ "XHFESZDNRBCGKQIJLTVMUOYAPW", false, "I",
55
+ "EZJQXMOGYTCSFRIUPVNADLHWBK", false, "J",
56
+ "7591482630", "0",
57
+ "3810592764", "1",
58
+ "4086153297", "2",
59
+ "3980526174", "3",
60
+ "6497135280", "4",
61
+ "Encrypt"]
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ name: "SIGABA: decrypt test",
67
+ input: "AKDHFWAYSLHJDKXEVMJJHGKFTQBZPJPJILOVHMBYOAGBZVLLTQUOIKXFPUFNILBDPCAELMAPSXTLMUEGSDTNUDWGZDADBFELWWHKVPRZNDATDPYEHIDMTGAGPDEZYXFSASVKSBMXVOJQXRMHDBWUNZDTIIIVKHJYPIEUHAJCNBXNLGVFADEWIKXDJZBUTGOQBCQZWYKRVEENWRWWRYDNOAPGMODTPTUJZCLUCRDILJABNTBTWUEIJSJRQBUVCOUJJDWFMNNUHXBDFYXLGUMXQEAWSVHBXQGEOOGPYRVOAJLAIYIOHHEXACDTAWWCBGQRNPERSIKHTXPXKBUNACZLFZTRBMBBDDGKNBIQMFHZROCZZBGNZSJKDRRWPEQHLCFADNPWPWSLPIFNKBWQPMARUERGWUUODXSCOJQECGHIZRFRNRSXWSFWKISHHTUFRVXLHCQWGBMRDHCYDSVNIDDRSTODCGJSSBLUYOBGEWFOVKOZBJTYCAKMZECUGLJGTSZJNBOLTMUZRRSIGGRQHLRPMGLINASSMZOBNACKUMSFNIZAUFCPFXXOOTJQWWLZOFLGZLHJCWZJCRJKVOUDLNMKQATGVTOFHACAEKFLRWRTTMVRXHYGOTYPNBMUSKDAKXFCICUOVSWXGPQOYUUWTWRPQMEQCSDJMMJKELIHGEDYKWOVHVPUAIBFGAODXODXVFIIZIGWRZSBTIGXVHFABMMOPGVMLGHQQXNOEJRDLOBGUOWSELBHERZFSBLUODMOGIBNVGVGQYDBTKLOPNKZZNGLTTGZYYXIBAHZJDCILZXKNSJDHXWTYQLFHTUINTYSBPIXOPLOQHSAHGQPYUWYNPKMRBBBYIICCBBJRKWVLBIDBBEKJCXHLPUBMIGBUFYDPOCSRUNZOKMKJHMYFJZWFNHQZOGGRTNNUVLMRLDSAJIECTYCJKBYVNAXGCMGNVFJEDSATZQDQTYRBPLZKHAXMOVJZEDKINXKBUVWXXHTYUFO",
68
+ expectedOutput: "KTSOYDGMLPMVXEAJIATXCNQFXHBNCBXIJOCQGCQBRQSBYFOOEVPVXACBMIUIRNVMJHREKRHBSXJFSMWCKTTCYXJOFSJCQECXXCHTEGPEYSMYDHCSMODUAVBNLILYUIBBIXJCXXNQPCERRSMJTPQLMOXSKTRPWOFUSWXOYRJLBIJGIOYTEAEJEGGYAGSXNHNQTETANPWEGATHSBFLHCVHVIJUAKDVGQCWUSIFFFVAJYPJAFUYDXSLGPGESOUAYXBQIIOXWTXNOXLNCGWSUKVIBMOUGNHORYLSNVNNJLKKFDUAEISOLBLCXYHMDGVBVVVIKDLTMTDVWWJBXWXROVTJBXXKXLEWTTISKIUMYSACVUGGNANMCGUMFNQUXDLTHJNYTFIQEPKQQQSSROYJOILJYQXICXACWGOHCSHENXJILOMIIFCIOUDXDCINIVKIRJCVHWXSFQXMNRBJJWTPXNJADEOPEJBLKHKXNTORIRVRLXUXXAMKMODBXNLQCVJXVOTBRHXBBVJHPFEQFCRXYRRXHXPTXXSUESUTHUGOWQYQPQFPXQPVGEIRPQNKXXMBHIPECRUWFEWJUTYIKSMJSRQIQAIAMXTGDXSJIABHIGKUPJBCHWMVYTMQNQYGDHCNMBSVTPXNFRELFXXQYIOLCDEXDXDVSINICOXRMNSPICPQMOBIDJCNBJKXFAVMUXOXHERJIBIXLMXXULDXKXXHAQDXEXIWXOEEUGKSUGCMRWJDPYCYKXTPCOXMURAJCPRXKFJAJALERWRHVMFHOGMFHXGSXQDPJCJNXRQFGHKRCYTEBJDHPCMYFEAPWSVVMMBVUJJMCAAYURHUPVQVJYDCSNMQEMNIFEXYXIIXBVRVILXAUCBDXRJHGPKPYXHPPPNVSBBCDRLVVIYPKAKYIXTJVYDGVPHXULWMADBEICNIFKWUOOHEFNANDKOXMCVBVORLQYNXLULOEGVGWNKNMOHYVRSYSOVYGAKCGAWKGAIAQNQR",
69
+ recipeConfig: [
70
+ { "op": "SIGABA",
71
+ "args": [
72
+ "YCHLQSUGBDIXNZKERPVJTAWFOM", true, "A",
73
+ "INPXBWETGUYSAOCHVLDMQKZJFR", false, "B",
74
+ "WNDRIOZPTAXHFJYQBMSVEKUCGL", false, "C",
75
+ "TZGHOBKRVUXLQDMPNFWCJYEIAS", false, "D",
76
+ "YWTAHRQJVLCEXUNGBIPZMSDFOK", true, "E",
77
+ "QSLRBTEKOGAICFWYVMHJNXZUDP", false, "F",
78
+ "CHJDQIGNBSAKVTUOXFWLEPRMZY", false, "G",
79
+ "CDFAJXTIMNBEQHSUGRYLWZKVPO", true, "H",
80
+ "XHFESZDNRBCGKQIJLTVMUOYAPW", false, "I",
81
+ "EZJQXMOGYTCSFRIUPVNADLHWBK", false, "J",
82
+ "7591482630", "0",
83
+ "3810592764", "1",
84
+ "4086153297", "2",
85
+ "3980526174", "3",
86
+ "6497135280", "4",
87
+ "Decrypt"]
88
+ }
89
+ ]
90
+ }
91
+ ]);