cyberchef 11.2.0 → 11.3.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 (134) hide show
  1. package/AGENTS.md +75 -0
  2. package/CHANGELOG.md +147 -1
  3. package/Dockerfile +2 -2
  4. package/Gruntfile.js +1 -0
  5. package/package.json +22 -21
  6. package/src/core/Dish.mjs +1 -5
  7. package/src/core/Ingredient.mjs +92 -0
  8. package/src/core/Operation.mjs +19 -0
  9. package/src/core/Recipe.mjs +4 -0
  10. package/src/core/Utils.mjs +48 -0
  11. package/src/core/config/Categories.json +22 -6
  12. package/src/core/config/OperationConfig.json +4771 -1226
  13. package/src/core/config/modules/Ciphers.mjs +20 -0
  14. package/src/core/config/modules/Crypto.mjs +10 -0
  15. package/src/core/config/modules/Default.mjs +8 -0
  16. package/src/core/config/modules/File.mjs +16 -0
  17. package/src/core/config/modules/OpModules.mjs +2 -0
  18. package/src/core/config/scripts/generateHTMLEntities.mjs +139 -0
  19. package/src/core/config/scripts/htmlEntityOverrides.mjs +86 -0
  20. package/src/core/lib/Arithmetic.mjs +21 -5
  21. package/src/core/lib/BigIntUtils.mjs +0 -1
  22. package/src/core/lib/COBS.mjs +86 -0
  23. package/src/core/lib/Decimal.mjs +5 -5
  24. package/src/core/lib/HTMLEntities.mjs +2068 -0
  25. package/src/core/lib/Present.mjs +422 -0
  26. package/src/core/lib/TEA.mjs +494 -0
  27. package/src/core/lib/TLVParser.mjs +16 -7
  28. package/src/core/lib/Twofish.mjs +608 -0
  29. package/src/core/operations/AsconDecrypt.mjs +112 -0
  30. package/src/core/operations/AsconEncrypt.mjs +108 -0
  31. package/src/core/operations/AsconHash.mjs +49 -0
  32. package/src/core/operations/AsconMAC.mjs +68 -0
  33. package/src/core/operations/AutomatedValidationTestOp.mjs +84 -0
  34. package/src/core/operations/AvroToJSON.mjs +1 -1
  35. package/src/core/operations/BLAKE3.mjs +5 -1
  36. package/src/core/operations/BcryptCompare.mjs +11 -5
  37. package/src/core/operations/BitShiftLeft.mjs +4 -1
  38. package/src/core/operations/Bzip2Compress.mjs +1 -1
  39. package/src/core/operations/DechunkHTTPResponse.mjs +4 -1
  40. package/src/core/operations/ExtendedGCD.mjs +101 -0
  41. package/src/core/operations/FromBase.mjs +2 -1
  42. package/src/core/operations/FromCOBS.mjs +38 -0
  43. package/src/core/operations/FromDecimal.mjs +6 -1
  44. package/src/core/operations/FromHTMLEntity.mjs +2 -1458
  45. package/src/core/operations/GenerateHOTP.mjs +21 -6
  46. package/src/core/operations/GenerateImage.mjs +22 -10
  47. package/src/core/operations/GeneratePrime.mjs +154 -0
  48. package/src/core/operations/GenerateTOTP.mjs +24 -7
  49. package/src/core/operations/Gzip.mjs +1 -3
  50. package/src/core/operations/Jsonata.mjs +12 -0
  51. package/src/core/operations/MIMEDecoding.mjs +1 -1
  52. package/src/core/operations/MOD.mjs +62 -0
  53. package/src/core/operations/ModularInverse.mjs +107 -0
  54. package/src/core/operations/PRESENTDecrypt.mjs +94 -0
  55. package/src/core/operations/PRESENTEncrypt.mjs +94 -0
  56. package/src/core/operations/ParseURI.mjs +18 -5
  57. package/src/core/operations/PseudoRandomNumberGenerator.mjs +2 -1
  58. package/src/core/operations/RandomPrime.mjs +154 -0
  59. package/src/core/operations/RenderPDF.mjs +100 -0
  60. package/src/core/operations/SM4Encrypt.mjs +1 -1
  61. package/src/core/operations/SetDifference.mjs +8 -1
  62. package/src/core/operations/SetIntersection.mjs +8 -1
  63. package/src/core/operations/ShowOnMap.mjs +14 -2
  64. package/src/core/operations/TEADecrypt.mjs +98 -0
  65. package/src/core/operations/TEAEncrypt.mjs +98 -0
  66. package/src/core/operations/ToBase.mjs +4 -4
  67. package/src/core/operations/ToBase32.mjs +20 -4
  68. package/src/core/operations/ToBinary.mjs +4 -1
  69. package/src/core/operations/ToCOBS.mjs +38 -0
  70. package/src/core/operations/ToHTMLEntity.mjs +7 -1430
  71. package/src/core/operations/TwofishDecrypt.mjs +94 -0
  72. package/src/core/operations/TwofishEncrypt.mjs +94 -0
  73. package/src/core/operations/URLEncode.mjs +22 -18
  74. package/src/core/operations/UnescapeUnicodeCharacters.mjs +2 -1
  75. package/src/core/operations/ViewBitPlane.mjs +9 -3
  76. package/src/core/operations/Wrap.mjs +5 -0
  77. package/src/core/operations/XORBruteForce.mjs +4 -1
  78. package/src/core/operations/XORChecksum.mjs +2 -2
  79. package/src/core/operations/XTEADecrypt.mjs +110 -0
  80. package/src/core/operations/XTEAEncrypt.mjs +110 -0
  81. package/src/core/operations/index.mjs +42 -0
  82. package/src/core/vendor/ascon.mjs +162 -0
  83. package/src/core/vendor/htmlEntities/entity.json +2233 -0
  84. package/src/core/vendor/htmlEntities/entity.txt +14 -0
  85. package/src/node/api.mjs +4 -1
  86. package/src/node/index.mjs +105 -0
  87. package/src/web/HTMLOperation.mjs +2 -1
  88. package/src/web/stylesheets/layout/_io.css +8 -0
  89. package/tests/browser/00_nightwatch.js +26 -0
  90. package/tests/browser/02_ops.js +20 -4
  91. package/tests/node/index.mjs +1 -0
  92. package/tests/node/tests/Dish.mjs +19 -0
  93. package/tests/node/tests/NodeDish.mjs +36 -0
  94. package/tests/node/tests/ToHTMLEntity.mjs +82 -0
  95. package/tests/node/tests/Utils.mjs +77 -0
  96. package/tests/node/tests/nodeApi.mjs +33 -1
  97. package/tests/node/tests/operations.mjs +26 -1
  98. package/tests/operations/index.mjs +17 -0
  99. package/tests/operations/tests/Arithmetic.mjs +33 -0
  100. package/tests/operations/tests/Ascon.mjs +501 -0
  101. package/tests/operations/tests/AutomatedValidation.mjs +154 -0
  102. package/tests/operations/tests/BLAKE3.mjs +39 -1
  103. package/tests/operations/tests/Base32.mjs +22 -0
  104. package/tests/operations/tests/COBS.mjs +476 -0
  105. package/tests/operations/tests/CharEnc.mjs +2 -2
  106. package/tests/operations/tests/DechunkHTTPResponse.mjs +66 -0
  107. package/tests/operations/tests/ExtendedGCD.mjs +78 -0
  108. package/tests/operations/tests/FromBase.mjs +66 -0
  109. package/tests/operations/tests/FromDecimal.mjs +55 -0
  110. package/tests/operations/tests/GenerateLoremIpsum.mjs +2 -2
  111. package/tests/operations/tests/Gzip.mjs +60 -0
  112. package/tests/operations/tests/HTMLEntity.mjs +126 -0
  113. package/tests/operations/tests/Hash.mjs +44 -0
  114. package/tests/operations/tests/Hexdump.mjs +1 -1
  115. package/tests/operations/tests/Image.mjs +26 -0
  116. package/tests/operations/tests/Jsonata.mjs +23 -0
  117. package/tests/operations/tests/MIMEDecoding.mjs +33 -0
  118. package/tests/operations/tests/MOD.mjs +208 -0
  119. package/tests/operations/tests/Median.mjs +33 -0
  120. package/tests/operations/tests/ModularInverse.mjs +78 -0
  121. package/tests/operations/tests/OTP.mjs +167 -2
  122. package/tests/operations/tests/PRESENT.mjs +465 -0
  123. package/tests/operations/tests/ParseTLV.mjs +41 -0
  124. package/tests/operations/tests/RenderPDF.mjs +55 -0
  125. package/tests/operations/tests/SM2.mjs +1 -1
  126. package/tests/operations/tests/SetDifference.mjs +22 -0
  127. package/tests/operations/tests/SetIntersection.mjs +23 -1
  128. package/tests/operations/tests/ShowOnMap.mjs +61 -0
  129. package/tests/operations/tests/TEA.mjs +566 -0
  130. package/tests/operations/tests/Twofish.mjs +486 -0
  131. package/tests/operations/tests/URLEncodeDecode.mjs +26 -0
  132. package/tests/operations/tests/UnescapeUnicodeCharacters.mjs +88 -0
  133. package/tests/operations/tests/Wrap.mjs +44 -0
  134. package/webpack.config.js +3 -3
@@ -0,0 +1,14 @@
1
+ entity.json is the WHATWG named character reference set, retrieved verbatim from:
2
+
3
+ https://html.spec.whatwg.org/entities.json
4
+
5
+ It is used by src/core/config/scripts/generateHTMLEntities.mjs to generate the
6
+ shared HTML entity lookup tables (src/core/lib/HTMLEntities.mjs) consumed by the
7
+ "To HTML Entity" and "From HTML Entity" operations.
8
+
9
+ Source: HTML Standard — 13.5 Named character references
10
+ https://html.spec.whatwg.org/multipage/named-characters.html
11
+
12
+ Copyright and licence
13
+ ---------------------
14
+ Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). This work is licensed under a Creative Commons Attribution 4.0 International License. To the extent portions of it are incorporated into source code, such portions in the source code are licensed under the BSD 3-Clause License instead.
package/src/node/api.mjs CHANGED
@@ -74,7 +74,7 @@ function transformArgs(opArgsList, newArgs) {
74
74
  return opArgs.map((arg) => {
75
75
  if (arg.type === "option") {
76
76
  // pick default option if not already chosen
77
- return typeof arg.value === "string" ? arg.value : arg.value[arg.defaultIndex ?? 0];
77
+ return !Array.isArray(arg.value) ? arg.value : arg.value[arg.defaultIndex ?? 0];
78
78
  }
79
79
 
80
80
  if (arg.type === "editableOption") {
@@ -193,6 +193,8 @@ export function _wrap(OpClass) {
193
193
  wrapped = async (input, args=null) => {
194
194
  const {transformedInput, transformedArgs} = prepareOp(opInstance, input, args);
195
195
 
196
+ opInstance.validateIngredients(transformedArgs);
197
+
196
198
  // SPECIAL CASE for Magic. Other flowControl operations will
197
199
  // not work because the opList is not passed in.
198
200
  if (isFlowControl) {
@@ -229,6 +231,7 @@ export function _wrap(OpClass) {
229
231
  */
230
232
  wrapped = (input, args=null) => {
231
233
  const {transformedInput, transformedArgs} = prepareOp(opInstance, input, args);
234
+ opInstance.validateIngredients(transformedArgs);
232
235
  const result = opInstance.run(transformedInput, transformedArgs);
233
236
  return new NodeDish({
234
237
  value: result,
@@ -35,7 +35,12 @@ import {
35
35
  AnalyseUUID as core_AnalyseUUID,
36
36
  Argon2 as core_Argon2,
37
37
  Argon2Compare as core_Argon2Compare,
38
+ AsconDecrypt as core_AsconDecrypt,
39
+ AsconEncrypt as core_AsconEncrypt,
40
+ AsconHash as core_AsconHash,
41
+ AsconMAC as core_AsconMAC,
38
42
  AtbashCipher as core_AtbashCipher,
43
+ AutomatedValidationTestOp as core_AutomatedValidationTestOp,
39
44
  AvroToJSON as core_AvroToJSON,
40
45
  BLAKE2b as core_BLAKE2b,
41
46
  BLAKE2s as core_BLAKE2s,
@@ -126,6 +131,7 @@ import {
126
131
  EscapeString as core_EscapeString,
127
132
  EscapeUnicodeCharacters as core_EscapeUnicodeCharacters,
128
133
  ExpandAlphabetRange as core_ExpandAlphabetRange,
134
+ ExtendedGCD as core_ExtendedGCD,
129
135
  ExtractAudioMetadata as core_ExtractAudioMetadata,
130
136
  ExtractDates as core_ExtractDates,
131
137
  ExtractDomains as core_ExtractDomains,
@@ -168,6 +174,7 @@ import {
168
174
  FromBech32 as core_FromBech32,
169
175
  FromBinary as core_FromBinary,
170
176
  FromBraille as core_FromBraille,
177
+ FromCOBS as core_FromCOBS,
171
178
  FromCaseInsensitiveRegex as core_FromCaseInsensitiveRegex,
172
179
  FromCharcode as core_FromCharcode,
173
180
  FromDecimal as core_FromDecimal,
@@ -199,6 +206,7 @@ import {
199
206
  GenerateImage as core_GenerateImage,
200
207
  GenerateLoremIpsum as core_GenerateLoremIpsum,
201
208
  GeneratePGPKeyPair as core_GeneratePGPKeyPair,
209
+ GeneratePrime as core_GeneratePrime,
202
210
  GenerateQRCode as core_GenerateQRCode,
203
211
  GenerateRSAKeyPair as core_GenerateRSAKeyPair,
204
212
  GenerateTOTP as core_GenerateTOTP,
@@ -263,10 +271,12 @@ import {
263
271
  MD5 as core_MD5,
264
272
  MD6 as core_MD6,
265
273
  MIMEDecoding as core_MIMEDecoding,
274
+ MOD as core_MOD,
266
275
  Magic as core_Magic,
267
276
  Mean as core_Mean,
268
277
  Median as core_Median,
269
278
  MicrosoftScriptDecoder as core_MicrosoftScriptDecoder,
279
+ ModularInverse as core_ModularInverse,
270
280
  MultipleBombe as core_MultipleBombe,
271
281
  Multiply as core_Multiply,
272
282
  MurmurHash3 as core_MurmurHash3,
@@ -290,6 +300,8 @@ import {
290
300
  PHPDeserialize as core_PHPDeserialize,
291
301
  PHPSerialize as core_PHPSerialize,
292
302
  PLISTViewer as core_PLISTViewer,
303
+ PRESENTDecrypt as core_PRESENTDecrypt,
304
+ PRESENTEncrypt as core_PRESENTEncrypt,
293
305
  PadLines as core_PadLines,
294
306
  ParityBit as core_ParityBit,
295
307
  ParseASN1HexString as core_ParseASN1HexString,
@@ -341,6 +353,7 @@ import {
341
353
  Rabbit as core_Rabbit,
342
354
  RailFenceCipherDecode as core_RailFenceCipherDecode,
343
355
  RailFenceCipherEncode as core_RailFenceCipherEncode,
356
+ RandomPrime as core_RandomPrime,
344
357
  RandomizeColourPalette as core_RandomizeColourPalette,
345
358
  RawDeflate as core_RawDeflate,
346
359
  RawInflate as core_RawInflate,
@@ -354,6 +367,7 @@ import {
354
367
  RemoveWhitespace as core_RemoveWhitespace,
355
368
  RenderImage as core_RenderImage,
356
369
  RenderMarkdown as core_RenderMarkdown,
370
+ RenderPDF as core_RenderPDF,
357
371
  ResizeImage as core_ResizeImage,
358
372
  Return as core_Return,
359
373
  Reverse as core_Reverse,
@@ -410,6 +424,8 @@ import {
410
424
  SwapEndianness as core_SwapEndianness,
411
425
  SymmetricDifference as core_SymmetricDifference,
412
426
  TCPIPChecksum as core_TCPIPChecksum,
427
+ TEADecrypt as core_TEADecrypt,
428
+ TEAEncrypt as core_TEAEncrypt,
413
429
  Tail as core_Tail,
414
430
  TakeBytes as core_TakeBytes,
415
431
  TakeNthBytes as core_TakeNthBytes,
@@ -429,6 +445,7 @@ import {
429
445
  ToBech32 as core_ToBech32,
430
446
  ToBinary as core_ToBinary,
431
447
  ToBraille as core_ToBraille,
448
+ ToCOBS as core_ToCOBS,
432
449
  ToCamelCase as core_ToCamelCase,
433
450
  ToCaseInsensitiveRegex as core_ToCaseInsensitiveRegex,
434
451
  ToCharcode as core_ToCharcode,
@@ -453,6 +470,8 @@ import {
453
470
  TranslateDateTimeFormat as core_TranslateDateTimeFormat,
454
471
  TripleDESDecrypt as core_TripleDESDecrypt,
455
472
  TripleDESEncrypt as core_TripleDESEncrypt,
473
+ TwofishDecrypt as core_TwofishDecrypt,
474
+ TwofishEncrypt as core_TwofishEncrypt,
456
475
  Typex as core_Typex,
457
476
  UNIXTimestampToWindowsFiletime as core_UNIXTimestampToWindowsFiletime,
458
477
  URLDecode as core_URLDecode,
@@ -479,6 +498,8 @@ import {
479
498
  XORChecksum as core_XORChecksum,
480
499
  XPathExpression as core_XPathExpression,
481
500
  XSalsa20 as core_XSalsa20,
501
+ XTEADecrypt as core_XTEADecrypt,
502
+ XTEAEncrypt as core_XTEAEncrypt,
482
503
  XXTEADecrypt as core_XXTEADecrypt,
483
504
  XXTEAEncrypt as core_XXTEAEncrypt,
484
505
  YAMLToJSON as core_YAMLToJSON,
@@ -518,7 +539,12 @@ function generateChef() {
518
539
  "analyseUUID": _wrap(core_AnalyseUUID),
519
540
  "argon2": _wrap(core_Argon2),
520
541
  "argon2Compare": _wrap(core_Argon2Compare),
542
+ "asconDecrypt": _wrap(core_AsconDecrypt),
543
+ "asconEncrypt": _wrap(core_AsconEncrypt),
544
+ "asconHash": _wrap(core_AsconHash),
545
+ "asconMAC": _wrap(core_AsconMAC),
521
546
  "atbashCipher": _wrap(core_AtbashCipher),
547
+ "automatedValidationTestOp": _wrap(core_AutomatedValidationTestOp),
522
548
  "avroToJSON": _wrap(core_AvroToJSON),
523
549
  "BLAKE2b": _wrap(core_BLAKE2b),
524
550
  "BLAKE2s": _wrap(core_BLAKE2s),
@@ -609,6 +635,7 @@ function generateChef() {
609
635
  "escapeString": _wrap(core_EscapeString),
610
636
  "escapeUnicodeCharacters": _wrap(core_EscapeUnicodeCharacters),
611
637
  "expandAlphabetRange": _wrap(core_ExpandAlphabetRange),
638
+ "extendedGCD": _wrap(core_ExtendedGCD),
612
639
  "extractAudioMetadata": _wrap(core_ExtractAudioMetadata),
613
640
  "extractDates": _wrap(core_ExtractDates),
614
641
  "extractDomains": _wrap(core_ExtractDomains),
@@ -651,6 +678,7 @@ function generateChef() {
651
678
  "fromBech32": _wrap(core_FromBech32),
652
679
  "fromBinary": _wrap(core_FromBinary),
653
680
  "fromBraille": _wrap(core_FromBraille),
681
+ "fromCOBS": _wrap(core_FromCOBS),
654
682
  "fromCaseInsensitiveRegex": _wrap(core_FromCaseInsensitiveRegex),
655
683
  "fromCharcode": _wrap(core_FromCharcode),
656
684
  "fromDecimal": _wrap(core_FromDecimal),
@@ -682,6 +710,7 @@ function generateChef() {
682
710
  "generateImage": _wrap(core_GenerateImage),
683
711
  "generateLoremIpsum": _wrap(core_GenerateLoremIpsum),
684
712
  "generatePGPKeyPair": _wrap(core_GeneratePGPKeyPair),
713
+ "generatePrime": _wrap(core_GeneratePrime),
685
714
  "generateQRCode": _wrap(core_GenerateQRCode),
686
715
  "generateRSAKeyPair": _wrap(core_GenerateRSAKeyPair),
687
716
  "generateTOTP": _wrap(core_GenerateTOTP),
@@ -746,10 +775,12 @@ function generateChef() {
746
775
  "MD5": _wrap(core_MD5),
747
776
  "MD6": _wrap(core_MD6),
748
777
  "MIMEDecoding": _wrap(core_MIMEDecoding),
778
+ "MOD": _wrap(core_MOD),
749
779
  "magic": _wrap(core_Magic),
750
780
  "mean": _wrap(core_Mean),
751
781
  "median": _wrap(core_Median),
752
782
  "microsoftScriptDecoder": _wrap(core_MicrosoftScriptDecoder),
783
+ "modularInverse": _wrap(core_ModularInverse),
753
784
  "multipleBombe": _wrap(core_MultipleBombe),
754
785
  "multiply": _wrap(core_Multiply),
755
786
  "murmurHash3": _wrap(core_MurmurHash3),
@@ -773,6 +804,8 @@ function generateChef() {
773
804
  "PHPDeserialize": _wrap(core_PHPDeserialize),
774
805
  "PHPSerialize": _wrap(core_PHPSerialize),
775
806
  "PLISTViewer": _wrap(core_PLISTViewer),
807
+ "PRESENTDecrypt": _wrap(core_PRESENTDecrypt),
808
+ "PRESENTEncrypt": _wrap(core_PRESENTEncrypt),
776
809
  "padLines": _wrap(core_PadLines),
777
810
  "parityBit": _wrap(core_ParityBit),
778
811
  "parseASN1HexString": _wrap(core_ParseASN1HexString),
@@ -824,6 +857,7 @@ function generateChef() {
824
857
  "rabbit": _wrap(core_Rabbit),
825
858
  "railFenceCipherDecode": _wrap(core_RailFenceCipherDecode),
826
859
  "railFenceCipherEncode": _wrap(core_RailFenceCipherEncode),
860
+ "randomPrime": _wrap(core_RandomPrime),
827
861
  "randomizeColourPalette": _wrap(core_RandomizeColourPalette),
828
862
  "rawDeflate": _wrap(core_RawDeflate),
829
863
  "rawInflate": _wrap(core_RawInflate),
@@ -837,6 +871,7 @@ function generateChef() {
837
871
  "removeWhitespace": _wrap(core_RemoveWhitespace),
838
872
  "renderImage": _wrap(core_RenderImage),
839
873
  "renderMarkdown": _wrap(core_RenderMarkdown),
874
+ "renderPDF": _wrap(core_RenderPDF),
840
875
  "resizeImage": _wrap(core_ResizeImage),
841
876
  "Return": _wrap(core_Return),
842
877
  "reverse": _wrap(core_Reverse),
@@ -893,6 +928,8 @@ function generateChef() {
893
928
  "swapEndianness": _wrap(core_SwapEndianness),
894
929
  "symmetricDifference": _wrap(core_SymmetricDifference),
895
930
  "TCPIPChecksum": _wrap(core_TCPIPChecksum),
931
+ "TEADecrypt": _wrap(core_TEADecrypt),
932
+ "TEAEncrypt": _wrap(core_TEAEncrypt),
896
933
  "tail": _wrap(core_Tail),
897
934
  "takeBytes": _wrap(core_TakeBytes),
898
935
  "takeNthBytes": _wrap(core_TakeNthBytes),
@@ -912,6 +949,7 @@ function generateChef() {
912
949
  "toBech32": _wrap(core_ToBech32),
913
950
  "toBinary": _wrap(core_ToBinary),
914
951
  "toBraille": _wrap(core_ToBraille),
952
+ "toCOBS": _wrap(core_ToCOBS),
915
953
  "toCamelCase": _wrap(core_ToCamelCase),
916
954
  "toCaseInsensitiveRegex": _wrap(core_ToCaseInsensitiveRegex),
917
955
  "toCharcode": _wrap(core_ToCharcode),
@@ -936,6 +974,8 @@ function generateChef() {
936
974
  "translateDateTimeFormat": _wrap(core_TranslateDateTimeFormat),
937
975
  "tripleDESDecrypt": _wrap(core_TripleDESDecrypt),
938
976
  "tripleDESEncrypt": _wrap(core_TripleDESEncrypt),
977
+ "twofishDecrypt": _wrap(core_TwofishDecrypt),
978
+ "twofishEncrypt": _wrap(core_TwofishEncrypt),
939
979
  "typex": _wrap(core_Typex),
940
980
  "UNIXTimestampToWindowsFiletime": _wrap(core_UNIXTimestampToWindowsFiletime),
941
981
  "URLDecode": _wrap(core_URLDecode),
@@ -962,6 +1002,8 @@ function generateChef() {
962
1002
  "XORChecksum": _wrap(core_XORChecksum),
963
1003
  "XPathExpression": _wrap(core_XPathExpression),
964
1004
  "XSalsa20": _wrap(core_XSalsa20),
1005
+ "XTEADecrypt": _wrap(core_XTEADecrypt),
1006
+ "XTEAEncrypt": _wrap(core_XTEAEncrypt),
965
1007
  "XXTEADecrypt": _wrap(core_XXTEADecrypt),
966
1008
  "XXTEAEncrypt": _wrap(core_XXTEAEncrypt),
967
1009
  "YAMLToJSON": _wrap(core_YAMLToJSON),
@@ -1009,7 +1051,12 @@ const analyseHash = chef.analyseHash;
1009
1051
  const analyseUUID = chef.analyseUUID;
1010
1052
  const argon2 = chef.argon2;
1011
1053
  const argon2Compare = chef.argon2Compare;
1054
+ const asconDecrypt = chef.asconDecrypt;
1055
+ const asconEncrypt = chef.asconEncrypt;
1056
+ const asconHash = chef.asconHash;
1057
+ const asconMAC = chef.asconMAC;
1012
1058
  const atbashCipher = chef.atbashCipher;
1059
+ const automatedValidationTestOp = chef.automatedValidationTestOp;
1013
1060
  const avroToJSON = chef.avroToJSON;
1014
1061
  const BLAKE2b = chef.BLAKE2b;
1015
1062
  const BLAKE2s = chef.BLAKE2s;
@@ -1102,6 +1149,7 @@ const escapeSmartCharacters = chef.escapeSmartCharacters;
1102
1149
  const escapeString = chef.escapeString;
1103
1150
  const escapeUnicodeCharacters = chef.escapeUnicodeCharacters;
1104
1151
  const expandAlphabetRange = chef.expandAlphabetRange;
1152
+ const extendedGCD = chef.extendedGCD;
1105
1153
  const extractAudioMetadata = chef.extractAudioMetadata;
1106
1154
  const extractDates = chef.extractDates;
1107
1155
  const extractDomains = chef.extractDomains;
@@ -1145,6 +1193,7 @@ const fromBase92 = chef.fromBase92;
1145
1193
  const fromBech32 = chef.fromBech32;
1146
1194
  const fromBinary = chef.fromBinary;
1147
1195
  const fromBraille = chef.fromBraille;
1196
+ const fromCOBS = chef.fromCOBS;
1148
1197
  const fromCaseInsensitiveRegex = chef.fromCaseInsensitiveRegex;
1149
1198
  const fromCharcode = chef.fromCharcode;
1150
1199
  const fromDecimal = chef.fromDecimal;
@@ -1176,6 +1225,7 @@ const generateHOTP = chef.generateHOTP;
1176
1225
  const generateImage = chef.generateImage;
1177
1226
  const generateLoremIpsum = chef.generateLoremIpsum;
1178
1227
  const generatePGPKeyPair = chef.generatePGPKeyPair;
1228
+ const generatePrime = chef.generatePrime;
1179
1229
  const generateQRCode = chef.generateQRCode;
1180
1230
  const generateRSAKeyPair = chef.generateRSAKeyPair;
1181
1231
  const generateTOTP = chef.generateTOTP;
@@ -1245,11 +1295,13 @@ const MD4 = chef.MD4;
1245
1295
  const MD5 = chef.MD5;
1246
1296
  const MD6 = chef.MD6;
1247
1297
  const MIMEDecoding = chef.MIMEDecoding;
1298
+ const MOD = chef.MOD;
1248
1299
  const magic = chef.magic;
1249
1300
  const mean = chef.mean;
1250
1301
  const median = chef.median;
1251
1302
  const merge = chef.merge;
1252
1303
  const microsoftScriptDecoder = chef.microsoftScriptDecoder;
1304
+ const modularInverse = chef.modularInverse;
1253
1305
  const multipleBombe = chef.multipleBombe;
1254
1306
  const multiply = chef.multiply;
1255
1307
  const murmurHash3 = chef.murmurHash3;
@@ -1273,6 +1325,8 @@ const PGPVerify = chef.PGPVerify;
1273
1325
  const PHPDeserialize = chef.PHPDeserialize;
1274
1326
  const PHPSerialize = chef.PHPSerialize;
1275
1327
  const PLISTViewer = chef.PLISTViewer;
1328
+ const PRESENTDecrypt = chef.PRESENTDecrypt;
1329
+ const PRESENTEncrypt = chef.PRESENTEncrypt;
1276
1330
  const padLines = chef.padLines;
1277
1331
  const parityBit = chef.parityBit;
1278
1332
  const parseASN1HexString = chef.parseASN1HexString;
@@ -1324,6 +1378,7 @@ const RSAVerify = chef.RSAVerify;
1324
1378
  const rabbit = chef.rabbit;
1325
1379
  const railFenceCipherDecode = chef.railFenceCipherDecode;
1326
1380
  const railFenceCipherEncode = chef.railFenceCipherEncode;
1381
+ const randomPrime = chef.randomPrime;
1327
1382
  const randomizeColourPalette = chef.randomizeColourPalette;
1328
1383
  const rawDeflate = chef.rawDeflate;
1329
1384
  const rawInflate = chef.rawInflate;
@@ -1337,6 +1392,7 @@ const removeNullBytes = chef.removeNullBytes;
1337
1392
  const removeWhitespace = chef.removeWhitespace;
1338
1393
  const renderImage = chef.renderImage;
1339
1394
  const renderMarkdown = chef.renderMarkdown;
1395
+ const renderPDF = chef.renderPDF;
1340
1396
  const resizeImage = chef.resizeImage;
1341
1397
  const Return = chef.Return;
1342
1398
  const reverse = chef.reverse;
@@ -1394,6 +1450,8 @@ const swapEndianness = chef.swapEndianness;
1394
1450
  const symmetricDifference = chef.symmetricDifference;
1395
1451
  const syntaxHighlighter = chef.syntaxHighlighter;
1396
1452
  const TCPIPChecksum = chef.TCPIPChecksum;
1453
+ const TEADecrypt = chef.TEADecrypt;
1454
+ const TEAEncrypt = chef.TEAEncrypt;
1397
1455
  const tail = chef.tail;
1398
1456
  const takeBytes = chef.takeBytes;
1399
1457
  const takeNthBytes = chef.takeNthBytes;
@@ -1413,6 +1471,7 @@ const toBase92 = chef.toBase92;
1413
1471
  const toBech32 = chef.toBech32;
1414
1472
  const toBinary = chef.toBinary;
1415
1473
  const toBraille = chef.toBraille;
1474
+ const toCOBS = chef.toCOBS;
1416
1475
  const toCamelCase = chef.toCamelCase;
1417
1476
  const toCaseInsensitiveRegex = chef.toCaseInsensitiveRegex;
1418
1477
  const toCharcode = chef.toCharcode;
@@ -1437,6 +1496,8 @@ const toUpperCase = chef.toUpperCase;
1437
1496
  const translateDateTimeFormat = chef.translateDateTimeFormat;
1438
1497
  const tripleDESDecrypt = chef.tripleDESDecrypt;
1439
1498
  const tripleDESEncrypt = chef.tripleDESEncrypt;
1499
+ const twofishDecrypt = chef.twofishDecrypt;
1500
+ const twofishEncrypt = chef.twofishEncrypt;
1440
1501
  const typex = chef.typex;
1441
1502
  const UNIXTimestampToWindowsFiletime = chef.UNIXTimestampToWindowsFiletime;
1442
1503
  const URLDecode = chef.URLDecode;
@@ -1463,6 +1524,8 @@ const XORBruteForce = chef.XORBruteForce;
1463
1524
  const XORChecksum = chef.XORChecksum;
1464
1525
  const XPathExpression = chef.XPathExpression;
1465
1526
  const XSalsa20 = chef.XSalsa20;
1527
+ const XTEADecrypt = chef.XTEADecrypt;
1528
+ const XTEAEncrypt = chef.XTEAEncrypt;
1466
1529
  const XXTEADecrypt = chef.XXTEADecrypt;
1467
1530
  const XXTEAEncrypt = chef.XXTEAEncrypt;
1468
1531
  const YAMLToJSON = chef.YAMLToJSON;
@@ -1494,7 +1557,12 @@ const operations = [
1494
1557
  analyseUUID,
1495
1558
  argon2,
1496
1559
  argon2Compare,
1560
+ asconDecrypt,
1561
+ asconEncrypt,
1562
+ asconHash,
1563
+ asconMAC,
1497
1564
  atbashCipher,
1565
+ automatedValidationTestOp,
1498
1566
  avroToJSON,
1499
1567
  BLAKE2b,
1500
1568
  BLAKE2s,
@@ -1587,6 +1655,7 @@ const operations = [
1587
1655
  escapeString,
1588
1656
  escapeUnicodeCharacters,
1589
1657
  expandAlphabetRange,
1658
+ extendedGCD,
1590
1659
  extractAudioMetadata,
1591
1660
  extractDates,
1592
1661
  extractDomains,
@@ -1630,6 +1699,7 @@ const operations = [
1630
1699
  fromBech32,
1631
1700
  fromBinary,
1632
1701
  fromBraille,
1702
+ fromCOBS,
1633
1703
  fromCaseInsensitiveRegex,
1634
1704
  fromCharcode,
1635
1705
  fromDecimal,
@@ -1661,6 +1731,7 @@ const operations = [
1661
1731
  generateImage,
1662
1732
  generateLoremIpsum,
1663
1733
  generatePGPKeyPair,
1734
+ generatePrime,
1664
1735
  generateQRCode,
1665
1736
  generateRSAKeyPair,
1666
1737
  generateTOTP,
@@ -1730,11 +1801,13 @@ const operations = [
1730
1801
  MD5,
1731
1802
  MD6,
1732
1803
  MIMEDecoding,
1804
+ MOD,
1733
1805
  magic,
1734
1806
  mean,
1735
1807
  median,
1736
1808
  merge,
1737
1809
  microsoftScriptDecoder,
1810
+ modularInverse,
1738
1811
  multipleBombe,
1739
1812
  multiply,
1740
1813
  murmurHash3,
@@ -1758,6 +1831,8 @@ const operations = [
1758
1831
  PHPDeserialize,
1759
1832
  PHPSerialize,
1760
1833
  PLISTViewer,
1834
+ PRESENTDecrypt,
1835
+ PRESENTEncrypt,
1761
1836
  padLines,
1762
1837
  parityBit,
1763
1838
  parseASN1HexString,
@@ -1809,6 +1884,7 @@ const operations = [
1809
1884
  rabbit,
1810
1885
  railFenceCipherDecode,
1811
1886
  railFenceCipherEncode,
1887
+ randomPrime,
1812
1888
  randomizeColourPalette,
1813
1889
  rawDeflate,
1814
1890
  rawInflate,
@@ -1822,6 +1898,7 @@ const operations = [
1822
1898
  removeWhitespace,
1823
1899
  renderImage,
1824
1900
  renderMarkdown,
1901
+ renderPDF,
1825
1902
  resizeImage,
1826
1903
  Return,
1827
1904
  reverse,
@@ -1879,6 +1956,8 @@ const operations = [
1879
1956
  symmetricDifference,
1880
1957
  syntaxHighlighter,
1881
1958
  TCPIPChecksum,
1959
+ TEADecrypt,
1960
+ TEAEncrypt,
1882
1961
  tail,
1883
1962
  takeBytes,
1884
1963
  takeNthBytes,
@@ -1898,6 +1977,7 @@ const operations = [
1898
1977
  toBech32,
1899
1978
  toBinary,
1900
1979
  toBraille,
1980
+ toCOBS,
1901
1981
  toCamelCase,
1902
1982
  toCaseInsensitiveRegex,
1903
1983
  toCharcode,
@@ -1922,6 +2002,8 @@ const operations = [
1922
2002
  translateDateTimeFormat,
1923
2003
  tripleDESDecrypt,
1924
2004
  tripleDESEncrypt,
2005
+ twofishDecrypt,
2006
+ twofishEncrypt,
1925
2007
  typex,
1926
2008
  UNIXTimestampToWindowsFiletime,
1927
2009
  URLDecode,
@@ -1948,6 +2030,8 @@ const operations = [
1948
2030
  XORChecksum,
1949
2031
  XPathExpression,
1950
2032
  XSalsa20,
2033
+ XTEADecrypt,
2034
+ XTEAEncrypt,
1951
2035
  XXTEADecrypt,
1952
2036
  XXTEAEncrypt,
1953
2037
  YAMLToJSON,
@@ -1983,7 +2067,12 @@ export {
1983
2067
  analyseUUID,
1984
2068
  argon2,
1985
2069
  argon2Compare,
2070
+ asconDecrypt,
2071
+ asconEncrypt,
2072
+ asconHash,
2073
+ asconMAC,
1986
2074
  atbashCipher,
2075
+ automatedValidationTestOp,
1987
2076
  avroToJSON,
1988
2077
  BLAKE2b,
1989
2078
  BLAKE2s,
@@ -2076,6 +2165,7 @@ export {
2076
2165
  escapeString,
2077
2166
  escapeUnicodeCharacters,
2078
2167
  expandAlphabetRange,
2168
+ extendedGCD,
2079
2169
  extractAudioMetadata,
2080
2170
  extractDates,
2081
2171
  extractDomains,
@@ -2119,6 +2209,7 @@ export {
2119
2209
  fromBech32,
2120
2210
  fromBinary,
2121
2211
  fromBraille,
2212
+ fromCOBS,
2122
2213
  fromCaseInsensitiveRegex,
2123
2214
  fromCharcode,
2124
2215
  fromDecimal,
@@ -2150,6 +2241,7 @@ export {
2150
2241
  generateImage,
2151
2242
  generateLoremIpsum,
2152
2243
  generatePGPKeyPair,
2244
+ generatePrime,
2153
2245
  generateQRCode,
2154
2246
  generateRSAKeyPair,
2155
2247
  generateTOTP,
@@ -2219,11 +2311,13 @@ export {
2219
2311
  MD5,
2220
2312
  MD6,
2221
2313
  MIMEDecoding,
2314
+ MOD,
2222
2315
  magic,
2223
2316
  mean,
2224
2317
  median,
2225
2318
  merge,
2226
2319
  microsoftScriptDecoder,
2320
+ modularInverse,
2227
2321
  multipleBombe,
2228
2322
  multiply,
2229
2323
  murmurHash3,
@@ -2247,6 +2341,8 @@ export {
2247
2341
  PHPDeserialize,
2248
2342
  PHPSerialize,
2249
2343
  PLISTViewer,
2344
+ PRESENTDecrypt,
2345
+ PRESENTEncrypt,
2250
2346
  padLines,
2251
2347
  parityBit,
2252
2348
  parseASN1HexString,
@@ -2298,6 +2394,7 @@ export {
2298
2394
  rabbit,
2299
2395
  railFenceCipherDecode,
2300
2396
  railFenceCipherEncode,
2397
+ randomPrime,
2301
2398
  randomizeColourPalette,
2302
2399
  rawDeflate,
2303
2400
  rawInflate,
@@ -2311,6 +2408,7 @@ export {
2311
2408
  removeWhitespace,
2312
2409
  renderImage,
2313
2410
  renderMarkdown,
2411
+ renderPDF,
2314
2412
  resizeImage,
2315
2413
  Return,
2316
2414
  reverse,
@@ -2368,6 +2466,8 @@ export {
2368
2466
  symmetricDifference,
2369
2467
  syntaxHighlighter,
2370
2468
  TCPIPChecksum,
2469
+ TEADecrypt,
2470
+ TEAEncrypt,
2371
2471
  tail,
2372
2472
  takeBytes,
2373
2473
  takeNthBytes,
@@ -2387,6 +2487,7 @@ export {
2387
2487
  toBech32,
2388
2488
  toBinary,
2389
2489
  toBraille,
2490
+ toCOBS,
2390
2491
  toCamelCase,
2391
2492
  toCaseInsensitiveRegex,
2392
2493
  toCharcode,
@@ -2411,6 +2512,8 @@ export {
2411
2512
  translateDateTimeFormat,
2412
2513
  tripleDESDecrypt,
2413
2514
  tripleDESEncrypt,
2515
+ twofishDecrypt,
2516
+ twofishEncrypt,
2414
2517
  typex,
2415
2518
  UNIXTimestampToWindowsFiletime,
2416
2519
  URLDecode,
@@ -2437,6 +2540,8 @@ export {
2437
2540
  XORChecksum,
2438
2541
  XPathExpression,
2439
2542
  XSalsa20,
2543
+ XTEADecrypt,
2544
+ XTEAEncrypt,
2440
2545
  XXTEADecrypt,
2441
2546
  XXTEAEncrypt,
2442
2547
  YAMLToJSON,
@@ -56,9 +56,10 @@ class HTMLOperation {
56
56
 
57
57
  if (this.description) {
58
58
  const infoLink = this.infoURL ? `<hr>${titleFromWikiLink(this.infoURL)}` : "";
59
+ const content = Utils.escapeHtml(this.description + infoLink);
59
60
 
60
61
  html += ` data-container='body' data-toggle='popover' data-placement='right'
61
- data-content="${this.description}${infoLink}" data-html='true' data-trigger='hover'
62
+ data-content="${content}" data-html='true' data-trigger='hover'
62
63
  data-boundary='viewport' role='button'`;
63
64
  }
64
65
 
@@ -24,6 +24,14 @@
24
24
  height: 100%;
25
25
  user-select: auto;
26
26
  }
27
+
28
+ #output-html > img {
29
+ display: block;
30
+ max-width: 100%;
31
+ max-height: 100%;
32
+ margin: auto;
33
+ }
34
+
27
35
  #output-text.html-output .cm-line .cm-widgetBuffer,
28
36
  #output-text.html-output .cm-line>br {
29
37
  display: none;
@@ -56,6 +56,32 @@ module.exports = {
56
56
  browser.expect.element("//li[contains(@class, 'operation') and text()='Play Media']").to.be.present;
57
57
  browser.expect.element("//li[contains(@class, 'operation') and text()='Disassemble x86']").to.be.present;
58
58
  browser.expect.element("//li[contains(@class, 'operation') and text()='Register']").to.be.present;
59
+ browser.expect.element("//li[contains(@class, 'operation') and text()='Escape Smart Characters']").to.be.present;
60
+ },
61
+
62
+ "Operation popover descriptions render HTML safely": browser => {
63
+ const favouritesCat = "//a[contains(@class, 'category-title') and contains(@data-target, '#catFavourites')]",
64
+ op = "//ul[@id='search-results']//li[contains(@class, 'operation') and contains(., 'Escape Smart Characters')]";
65
+
66
+ browser
67
+ .useCss()
68
+ .clearValue("#search")
69
+ .setValue("#search", "Escape Smart Characters")
70
+ .useXpath()
71
+ .waitForElementVisible(op, 1000)
72
+ .moveToElement(op, 10, 10)
73
+ .useCss()
74
+ .waitForElementVisible(".popover-body code:last-of-type", 1000)
75
+ .expect.element(".popover-body code:last-of-type").text.to.contain("\"Hello\" -- world...");
76
+
77
+ browser
78
+ .useCss()
79
+ .moveToElement("#operations .title", 1, 1)
80
+ .waitForElementNotPresent(".popover-body", 1000)
81
+ .clearValue("#search")
82
+ .useXpath()
83
+ .getLocationInView(favouritesCat)
84
+ .click(favouritesCat);
59
85
  },
60
86
 
61
87
  "Recipe can be run": browser => {
@@ -218,6 +218,7 @@ module.exports = {
218
218
  testOpHtml(browser, "JSON Beautify", "{a:1}", ".json-dict .json-literal", "1");
219
219
  // testOp(browser, "JSON Minify", "test input", "test_output");
220
220
  // testOp(browser, "JSON to CSV", "test input", "test_output");
221
+ testOp(browser, "Jsonata Query", '{"a": "SGVsbG8gV29ybGQh"}', '"Hello World!"', ["$base64decode($.a)"]);
221
222
  // testOp(browser, "JWT Decode", "test input", "test_output");
222
223
  // testOp(browser, "JWT Sign", "test input", "test_output");
223
224
  // testOp(browser, "JWT Verify", "test input", "test_output");
@@ -277,7 +278,7 @@ module.exports = {
277
278
  // testOp(browser, "Parse TLV", "test input", "test_output");
278
279
  testOpHtml(browser, "Parse UDP", "04 89 00 35 00 2c 01 01", "tr:last-child td:last-child", "0x0101");
279
280
  // testOp(browser, "Parse UNIX file permissions", "test input", "test_output");
280
- // testOp(browser, "Parse URI", "test input", "test_output");
281
+ testOp(browser, "Parse URI", "https://example.com/?constructor=ok&__proto__=hello", /Arguments:\s+constructor = ok\s+__proto__\s+= hello/);
281
282
  testOp(browser, "Parse User Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 ", /Architecture: amd64/);
282
283
  // testOp(browser, "Parse X.509 certificate", "test input", "test_output");
283
284
  testOpFile(browser, "Play Media", "files/mp3example.mp3", "audio", "");
@@ -345,8 +346,8 @@ module.exports = {
345
346
  // testOp(browser, "Strip HTTP headers", "test input", "test_output");
346
347
  // testOp(browser, "Subsection", "test input", "test_output");
347
348
  // testOp(browser, "Substitute", "test input", "test_output");
348
- // testOp(browser, "Subtract", "test input", "test_output");
349
- // testOp(browser, "Sum", "test input", "test_output");
349
+ testOp(browser, "Subtract", "321,123,test", "198", ["Comma"]);
350
+ testOp(browser, "Sum", "321,123,test", "444", ["Comma"]);
350
351
  // testOp(browser, "Swap endianness", "test input", "test_output");
351
352
  // testOp(browser, "Symmetric Difference", "test input", "test_output");
352
353
  testOpHtml(browser, "Syntax highlighter", "var a = [4,5,6]", ".hljs-selector-attr", "[4,5,6]");
@@ -492,7 +493,22 @@ function testOpImage(browser, opName, filename, args=[]) {
492
493
 
493
494
  browser
494
495
  .waitForElementVisible("#output-html img")
495
- .expect.element("#output-html img").to.have.css("width").which.matches(/^[^0]\d*px/);
496
+ .expect.element("#output-html img").to.have.css("width").which.matches(/^(?!0+(?:\.0+)?px$)\d+(?:\.\d+)?px$/);
497
+
498
+ browser.execute(function() {
499
+ const output = document.getElementById("output-html");
500
+ const img = output.querySelector("img");
501
+ const outputRect = output.getBoundingClientRect();
502
+ const imgRect = img.getBoundingClientRect();
503
+
504
+ return {
505
+ imageFitsWidth: imgRect.width <= outputRect.width,
506
+ imageFitsHeight: imgRect.height <= outputRect.height,
507
+ };
508
+ }, [], function({value}) {
509
+ browser.expect(value.imageFitsWidth).to.be.equal(true);
510
+ browser.expect(value.imageFitsHeight).to.be.equal(true);
511
+ });
496
512
  }
497
513
 
498
514
  /** @function