mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 23:06:16 -04:00
Adds Affine/Atbash Cipher encryption/decryption
- 3 new operations - Affine Encode, Decode and Atbash Cipher - Added 3 new utils - mod, GCD and modInv
This commit is contained in:
parent
35d74980a1
commit
2750be36da
8 changed files with 247 additions and 83 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -66,6 +66,9 @@ var Categories = [
|
||||||
ops: [
|
ops: [
|
||||||
"AES Encrypt",
|
"AES Encrypt",
|
||||||
"AES Decrypt",
|
"AES Decrypt",
|
||||||
|
"Affine Cipher Encode",
|
||||||
|
"Affine Cipher Decode",
|
||||||
|
"Atbash Cipher",
|
||||||
"Blowfish Encrypt",
|
"Blowfish Encrypt",
|
||||||
"Blowfish Decrypt",
|
"Blowfish Decrypt",
|
||||||
"DES Encrypt",
|
"DES Encrypt",
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
* @property {boolean} [flowControl] - True if the operation is for Flow Control
|
* @property {boolean} [flowControl] - True if the operation is for Flow Control
|
||||||
* @property {ArgConf[]} [args] - A list of configuration objects for the arguments
|
* @property {ArgConf[]} [args] - A list of configuration objects for the arguments
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type definition for an ArgConf.
|
* Type definition for an ArgConf.
|
||||||
|
@ -800,7 +800,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -847,7 +847,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -894,7 +894,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -941,7 +941,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -988,7 +988,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -1035,7 +1035,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -1130,7 +1130,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -1177,7 +1177,7 @@ var OperationConfig = {
|
||||||
type: "toggleString",
|
type: "toggleString",
|
||||||
value: "",
|
value: "",
|
||||||
toggleValues: Cipher.IO_FORMAT1
|
toggleValues: Cipher.IO_FORMAT1
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Salt",
|
name: "Salt",
|
||||||
|
@ -1360,6 +1360,55 @@ var OperationConfig = {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"Affine Cipher Encode": {
|
||||||
|
description: "The affine cipher is a type of monoalphabetic substitution cipher, wherein each letter in an alphabet is mapped to its numeric equivalent, encrypted using simple mathematical function (ax + b) % 26, and converted back to a letter.",
|
||||||
|
run: Cipher.runAffineEnc,
|
||||||
|
highlight: true,
|
||||||
|
highlightReverse: true,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
name: "a",
|
||||||
|
type: "number",
|
||||||
|
value: Cipher.AFFINE_A
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "b",
|
||||||
|
type: "number",
|
||||||
|
value: Cipher.AFFINE_B
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Affine Cipher Decode": {
|
||||||
|
description: "The affine cipher is a type of monoalphabetic substitution cipher. To decrypt, each letter in an alphabet is mapped to its numeric equivalent, decrypted by a mathematical function, and converted back to a letter.",
|
||||||
|
run: Cipher.runAffineDec,
|
||||||
|
highlight: true,
|
||||||
|
highlightReverse: true,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: [
|
||||||
|
{
|
||||||
|
name: "a",
|
||||||
|
type: "number",
|
||||||
|
value: Cipher.AFFINE_A
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "b",
|
||||||
|
type: "number",
|
||||||
|
value: Cipher.AFFINE_B
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Atbash Cipher": {
|
||||||
|
description: "Atbash is a mono-alphabetic substitution cipher originally used to encode the Hebrew alphabet. It has been modified here for use with the latin alphabet.",
|
||||||
|
run: Cipher.runAtbash,
|
||||||
|
highlight: true,
|
||||||
|
highlightReverse: true,
|
||||||
|
inputType: "string",
|
||||||
|
outputType: "string",
|
||||||
|
args: []
|
||||||
|
},
|
||||||
"Rotate right": {
|
"Rotate right": {
|
||||||
description: "Rotates each byte to the right by the number of bits specified. Currently only supports 8-bit values.",
|
description: "Rotates each byte to the right by the number of bits specified. Currently only supports 8-bit values.",
|
||||||
run: Rotate.runRotr,
|
run: Rotate.runRotr,
|
||||||
|
@ -1724,7 +1773,7 @@ var OperationConfig = {
|
||||||
type: "boolean",
|
type: "boolean",
|
||||||
value: StrUtils.FIND_REPLACE_MULTILINE,
|
value: StrUtils.FIND_REPLACE_MULTILINE,
|
||||||
},
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"To Upper case": {
|
"To Upper case": {
|
||||||
|
|
|
@ -178,10 +178,10 @@ var Utils = {
|
||||||
if (window && window.app && !window.app.options.treatAsUtf8) {
|
if (window && window.app && !window.app.options.treatAsUtf8) {
|
||||||
str = Utils.byteArrayToChars(Utils.strToByteArray(str));
|
str = Utils.byteArrayToChars(Utils.strToByteArray(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
var re = /[\0-\x08\x0B-\x0C\x0E-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g;
|
var re = /[\0-\x08\x0B-\x0C\x0E-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g;
|
||||||
var wsRe = /[\x09-\x10\x0D\u2028\u2029]/g;
|
var wsRe = /[\x09-\x10\x0D\u2028\u2029]/g;
|
||||||
|
|
||||||
str = str.replace(re, ".");
|
str = str.replace(re, ".");
|
||||||
if (!preserveWs) str = str.replace(wsRe, ".");
|
if (!preserveWs) str = str.replace(wsRe, ".");
|
||||||
return str;
|
return str;
|
||||||
|
@ -240,14 +240,14 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
expandAlphRange: function(alphStr) {
|
expandAlphRange: function(alphStr) {
|
||||||
var alphArr = [];
|
var alphArr = [];
|
||||||
|
|
||||||
for (var i = 0; i < alphStr.length; i++) {
|
for (var i = 0; i < alphStr.length; i++) {
|
||||||
if (i < alphStr.length - 2 &&
|
if (i < alphStr.length - 2 &&
|
||||||
alphStr[i+1] === "-" &&
|
alphStr[i+1] === "-" &&
|
||||||
alphStr[i] !== "\\") {
|
alphStr[i] !== "\\") {
|
||||||
var start = Utils.ord(alphStr[i]),
|
var start = Utils.ord(alphStr[i]),
|
||||||
end = Utils.ord(alphStr[i+2]);
|
end = Utils.ord(alphStr[i+2]);
|
||||||
|
|
||||||
for (var j = start; j <= end; j++) {
|
for (var j = start; j <= end; j++) {
|
||||||
alphArr.push(Utils.chr(j));
|
alphArr.push(Utils.chr(j));
|
||||||
}
|
}
|
||||||
|
@ -402,7 +402,7 @@ var Utils = {
|
||||||
}
|
}
|
||||||
var wordArray = new CryptoJS.lib.WordArray.init(words, byteArray.length),
|
var wordArray = new CryptoJS.lib.WordArray.init(words, byteArray.length),
|
||||||
str = CryptoJS.enc.Utf8.stringify(wordArray);
|
str = CryptoJS.enc.Utf8.stringify(wordArray);
|
||||||
|
|
||||||
if (str.length !== wordArray.sigBytes)
|
if (str.length !== wordArray.sigBytes)
|
||||||
window.app.options.attemptHighlight = false;
|
window.app.options.attemptHighlight = false;
|
||||||
return str;
|
return str;
|
||||||
|
@ -434,8 +434,8 @@ var Utils = {
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a CryptoJS.lib.WordArray to a byteArray.
|
* Converts a CryptoJS.lib.WordArray to a byteArray.
|
||||||
*
|
*
|
||||||
|
@ -448,14 +448,14 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
wordArrayToByteArray: function(wordArray) {
|
wordArrayToByteArray: function(wordArray) {
|
||||||
if (wordArray.sigBytes <= 0) return [];
|
if (wordArray.sigBytes <= 0) return [];
|
||||||
|
|
||||||
var words = wordArray.words,
|
var words = wordArray.words,
|
||||||
byteArray = [];
|
byteArray = [];
|
||||||
|
|
||||||
for (var i = 0; i < wordArray.sigBytes; i++) {
|
for (var i = 0; i < wordArray.sigBytes; i++) {
|
||||||
byteArray.push((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);
|
byteArray.push((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
return byteArray;
|
return byteArray;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -532,7 +532,7 @@ var Utils = {
|
||||||
139: 8249, 155: 8250, 136: 8364, 185: 8470, 153: 8482
|
139: 8249, 155: 8250, 136: 8364, 185: 8470, 153: 8482
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a Unicode string to Windows-1251 encoding
|
* Converts a Unicode string to Windows-1251 encoding
|
||||||
*
|
*
|
||||||
|
@ -545,14 +545,14 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
unicodeToWin1251: function(unicStr) {
|
unicodeToWin1251: function(unicStr) {
|
||||||
var res = [];
|
var res = [];
|
||||||
|
|
||||||
for (var i = 0; i < unicStr.length; i++) {
|
for (var i = 0; i < unicStr.length; i++) {
|
||||||
var ord = unicStr.charCodeAt(i);
|
var ord = unicStr.charCodeAt(i);
|
||||||
if (!(ord in Utils.UNIC_WIN1251_MAP))
|
if (!(ord in Utils.UNIC_WIN1251_MAP))
|
||||||
throw "Character '" + unicStr.charAt(i) + "' isn't supported by Windows-1251";
|
throw "Character '" + unicStr.charAt(i) + "' isn't supported by Windows-1251";
|
||||||
res.push(String.fromCharCode(Utils.UNIC_WIN1251_MAP[ord]));
|
res.push(String.fromCharCode(Utils.UNIC_WIN1251_MAP[ord]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.join("");
|
return res.join("");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -569,14 +569,14 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
win1251ToUnicode: function(win1251Str) {
|
win1251ToUnicode: function(win1251Str) {
|
||||||
var res = [];
|
var res = [];
|
||||||
|
|
||||||
for (var i = 0; i < win1251Str.length; i++) {
|
for (var i = 0; i < win1251Str.length; i++) {
|
||||||
var ord = win1251Str.charCodeAt(i);
|
var ord = win1251Str.charCodeAt(i);
|
||||||
if (!(ord in Utils.WIN1251_UNIC_MAP))
|
if (!(ord in Utils.WIN1251_UNIC_MAP))
|
||||||
throw "Character '" + win1251Str.charAt(i) + "' isn't supported by Windows-1251";
|
throw "Character '" + win1251Str.charAt(i) + "' isn't supported by Windows-1251";
|
||||||
res.push(String.fromCharCode(Utils.WIN1251_UNIC_MAP[ord]));
|
res.push(String.fromCharCode(Utils.WIN1251_UNIC_MAP[ord]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.join("");
|
return res.join("");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -600,7 +600,7 @@ var Utils = {
|
||||||
if (typeof data == "string") {
|
if (typeof data == "string") {
|
||||||
data = Utils.strToByteArray(data);
|
data = Utils.strToByteArray(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
alphabet = alphabet ?
|
alphabet = alphabet ?
|
||||||
Utils.expandAlphRange(alphabet).join("") :
|
Utils.expandAlphRange(alphabet).join("") :
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||||
|
@ -651,22 +651,22 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
fromBase64: function(data, alphabet, returnType, removeNonAlphChars) {
|
fromBase64: function(data, alphabet, returnType, removeNonAlphChars) {
|
||||||
returnType = returnType || "string";
|
returnType = returnType || "string";
|
||||||
|
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return returnType === "string" ? "" : [];
|
return returnType === "string" ? "" : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
alphabet = alphabet ?
|
alphabet = alphabet ?
|
||||||
Utils.expandAlphRange(alphabet).join("") :
|
Utils.expandAlphRange(alphabet).join("") :
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||||
if (removeNonAlphChars === undefined)
|
if (removeNonAlphChars === undefined)
|
||||||
removeNonAlphChars = true;
|
removeNonAlphChars = true;
|
||||||
|
|
||||||
var output = [],
|
var output = [],
|
||||||
chr1, chr2, chr3,
|
chr1, chr2, chr3,
|
||||||
enc1, enc2, enc3, enc4,
|
enc1, enc2, enc3, enc4,
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
if (removeNonAlphChars) {
|
if (removeNonAlphChars) {
|
||||||
var re = new RegExp("[^" + alphabet.replace(/[\[\]\\\-^$]/g, "\\$&") + "]", "g");
|
var re = new RegExp("[^" + alphabet.replace(/[\[\]\\\-^$]/g, "\\$&") + "]", "g");
|
||||||
data = data.replace(re, "");
|
data = data.replace(re, "");
|
||||||
|
@ -677,7 +677,7 @@ var Utils = {
|
||||||
enc2 = alphabet.indexOf(data.charAt(i++) || "=");
|
enc2 = alphabet.indexOf(data.charAt(i++) || "=");
|
||||||
enc3 = alphabet.indexOf(data.charAt(i++) || "=");
|
enc3 = alphabet.indexOf(data.charAt(i++) || "=");
|
||||||
enc4 = alphabet.indexOf(data.charAt(i++) || "=");
|
enc4 = alphabet.indexOf(data.charAt(i++) || "=");
|
||||||
|
|
||||||
enc2 = enc2 === -1 ? 64 : enc2;
|
enc2 = enc2 === -1 ? 64 : enc2;
|
||||||
enc3 = enc3 === -1 ? 64 : enc3;
|
enc3 = enc3 === -1 ? 64 : enc3;
|
||||||
enc4 = enc4 === -1 ? 64 : enc4;
|
enc4 = enc4 === -1 ? 64 : enc4;
|
||||||
|
@ -695,7 +695,7 @@ var Utils = {
|
||||||
output.push(chr3);
|
output.push(chr3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnType === "string" ? Utils.byteArrayToUtf8(output) : output;
|
return returnType === "string" ? Utils.byteArrayToUtf8(output) : output;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -717,26 +717,26 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
toHex: function(data, delim, padding) {
|
toHex: function(data, delim, padding) {
|
||||||
if (!data) return "";
|
if (!data) return "";
|
||||||
|
|
||||||
delim = typeof delim == "string" ? delim : " ";
|
delim = typeof delim == "string" ? delim : " ";
|
||||||
padding = padding || 2;
|
padding = padding || 2;
|
||||||
var output = "";
|
var output = "";
|
||||||
|
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
output += Utils.pad(data[i].toString(16), padding) + delim;
|
output += Utils.pad(data[i].toString(16), padding) + delim;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add \x or 0x to beginning
|
// Add \x or 0x to beginning
|
||||||
if (delim === "0x") output = "0x" + output;
|
if (delim === "0x") output = "0x" + output;
|
||||||
if (delim === "\\x") output = "\\x" + output;
|
if (delim === "\\x") output = "\\x" + output;
|
||||||
|
|
||||||
if (delim.length)
|
if (delim.length)
|
||||||
return output.slice(0, -delim.length);
|
return output.slice(0, -delim.length);
|
||||||
else
|
else
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a byte array into a hex string as efficiently as possible with no options.
|
* Convert a byte array into a hex string as efficiently as possible with no options.
|
||||||
*
|
*
|
||||||
|
@ -749,14 +749,14 @@ var Utils = {
|
||||||
*/
|
*/
|
||||||
toHexFast: function(data) {
|
toHexFast: function(data) {
|
||||||
if (!data) return "";
|
if (!data) return "";
|
||||||
|
|
||||||
var output = [];
|
var output = [];
|
||||||
|
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
output.push((data[i] >>> 4).toString(16));
|
output.push((data[i] >>> 4).toString(16));
|
||||||
output.push((data[i] & 0x0f).toString(16));
|
output.push((data[i] & 0x0f).toString(16));
|
||||||
}
|
}
|
||||||
|
|
||||||
return output.join("");
|
return output.join("");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -783,15 +783,15 @@ var Utils = {
|
||||||
var delimRegex = Utils.regexRep[delim];
|
var delimRegex = Utils.regexRep[delim];
|
||||||
data = data.replace(delimRegex, "");
|
data = data.replace(delimRegex, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
var output = [];
|
var output = [];
|
||||||
for (var i = 0; i < data.length; i += byteLen) {
|
for (var i = 0; i < data.length; i += byteLen) {
|
||||||
output.push(parseInt(data.substr(i, byteLen), 16));
|
output.push(parseInt(data.substr(i, byteLen), 16));
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses CSV data and returns it as a two dimensional array or strings.
|
* Parses CSV data and returns it as a two dimensional array or strings.
|
||||||
*
|
*
|
||||||
|
@ -803,14 +803,14 @@ var Utils = {
|
||||||
* Utils.parseCSV("head1,head2\ndata1,data2");
|
* Utils.parseCSV("head1,head2\ndata1,data2");
|
||||||
*/
|
*/
|
||||||
parseCSV: function(data) {
|
parseCSV: function(data) {
|
||||||
|
|
||||||
var b,
|
var b,
|
||||||
ignoreNext = false,
|
ignoreNext = false,
|
||||||
inString = false,
|
inString = false,
|
||||||
cell = "",
|
cell = "",
|
||||||
line = [],
|
line = [],
|
||||||
lines = [];
|
lines = [];
|
||||||
|
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
b = data[i];
|
b = data[i];
|
||||||
if (ignoreNext) {
|
if (ignoreNext) {
|
||||||
|
@ -835,12 +835,12 @@ var Utils = {
|
||||||
cell += b;
|
cell += b;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line.length) {
|
if (line.length) {
|
||||||
line.push(cell);
|
line.push(cell);
|
||||||
lines.push(line);
|
lines.push(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
return lines;
|
return lines;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -912,8 +912,8 @@ var Utils = {
|
||||||
fuzzyTime: function(ms) {
|
fuzzyTime: function(ms) {
|
||||||
return moment.duration(ms, "milliseconds").humanize();
|
return moment.duration(ms, "milliseconds").humanize();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the properties of one Object to another.
|
* Adds the properties of one Object to another.
|
||||||
*
|
*
|
||||||
|
@ -927,7 +927,37 @@ var Utils = {
|
||||||
a[key] = b[key];
|
a[key] = b[key];
|
||||||
return a;
|
return a;
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* Actual modulo function, since % is actually the remainder function in JS
|
||||||
|
* @author Matt C [matt@artemisbot.pw]
|
||||||
|
* @param {number} x
|
||||||
|
* @param {number} y
|
||||||
|
*/
|
||||||
|
mod: function (x, y) {
|
||||||
|
return ((x % y) + y) % y;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds GCD of two numbers
|
||||||
|
* @author Matt C [matt@artemisbot.pw]
|
||||||
|
* @param {number} x
|
||||||
|
* @param {number} y
|
||||||
|
*/
|
||||||
|
gcd: function(x, y) {
|
||||||
|
if (!y) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
return Utils.gcd(y, x % y);
|
||||||
|
},
|
||||||
|
|
||||||
|
modInv: function(x, y) {
|
||||||
|
x %= y;
|
||||||
|
for (var i = 1; i < y; i++) {
|
||||||
|
if ((x * i) % 26 === 1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A mapping of names of delimiter characters to their symbols.
|
* A mapping of names of delimiter characters to their symbols.
|
||||||
|
@ -980,7 +1010,7 @@ var Utils = {
|
||||||
"UTF16BE": CryptoJS.enc.Utf16BE,
|
"UTF16BE": CryptoJS.enc.Utf16BE,
|
||||||
"Latin1": CryptoJS.enc.Latin1,
|
"Latin1": CryptoJS.enc.Latin1,
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1137,7 +1167,7 @@ String.prototype.count = function(chr) {
|
||||||
CryptoJS.enc.Hex.parse = function (hexStr) {
|
CryptoJS.enc.Hex.parse = function (hexStr) {
|
||||||
// Remove whitespace
|
// Remove whitespace
|
||||||
hexStr = hexStr.replace(/\s/g, "");
|
hexStr = hexStr.replace(/\s/g, "");
|
||||||
|
|
||||||
// Shortcut
|
// Shortcut
|
||||||
var hexStrLength = hexStr.length;
|
var hexStrLength = hexStr.length;
|
||||||
|
|
||||||
|
|
|
@ -385,7 +385,6 @@ var Cipher = {
|
||||||
return encrypted.ciphertext.toString(Utils.format[args[2]]);
|
return encrypted.ciphertext.toString(Utils.format[args[2]]);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Vigenère Encode operation.
|
* Vigenère Encode operation.
|
||||||
*
|
*
|
||||||
|
@ -475,6 +474,89 @@ var Cipher = {
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constant
|
||||||
|
* @default
|
||||||
|
*/
|
||||||
|
AFFINE_A: 1,
|
||||||
|
/**
|
||||||
|
* @constant
|
||||||
|
* @default
|
||||||
|
*/
|
||||||
|
AFFINE_B: 0,
|
||||||
|
/**
|
||||||
|
* Affine Cipher Encode operation.
|
||||||
|
*
|
||||||
|
* @author Matt C [matt@artemisbot.pw]
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
runAffineEnc: function (input, args) {
|
||||||
|
var alphabet = "abcdefghijklmnopqrstuvwxyz",
|
||||||
|
a = args[0],
|
||||||
|
b = args[1],
|
||||||
|
output = "";
|
||||||
|
if (!/^\+?(0|[1-9]\d*)$/.test(a) || !/^\+?(0|[1-9]\d*)$/.test(b)) return "The values of a and b can only be integers.";
|
||||||
|
for (var i = 0; i < input.length; i++) {
|
||||||
|
if (alphabet.indexOf(input[i]) >= 0) {
|
||||||
|
// Uses the affine function ax+b % m = y (where m is length of the alphabet)
|
||||||
|
output += alphabet[((a * alphabet.indexOf(input[i])) + b) % 26];
|
||||||
|
} else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) {
|
||||||
|
// Same as above, accounting for uppercase
|
||||||
|
output += alphabet[((a * alphabet.indexOf(input[i].toLowerCase())) + b) % 26].toUpperCase();
|
||||||
|
} else {
|
||||||
|
// Non-alphabetic characters
|
||||||
|
output += input[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affine Cipher Encode operation.
|
||||||
|
*
|
||||||
|
* @author Matt C [matt@artemisbot.pw]
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
runAffineDec: function (input, args) {
|
||||||
|
var alphabet = "abcdefghijklmnopqrstuvwxyz",
|
||||||
|
a = args[0],
|
||||||
|
b = args[1],
|
||||||
|
output = "",
|
||||||
|
aModInv;
|
||||||
|
if (!/^\+?(0|[1-9]\d*)$/.test(a) || !/^\+?(0|[1-9]\d*)$/.test(b)) return "The values of a and b can only be integers.";
|
||||||
|
if (Utils.gcd(a, 26) !== 1) return "The value of a must be coprime to 26.";
|
||||||
|
// Calculates modular inverse of a
|
||||||
|
aModInv = Utils.modInv(a, 26);
|
||||||
|
for (var i = 0; i < input.length; i++) {
|
||||||
|
if (alphabet.indexOf(input[i]) >= 0) {
|
||||||
|
// Uses the affine decode function (y-b * A') % m = x (where m is length of the alphabet and A' is modular inverse)
|
||||||
|
output += alphabet[Utils.mod((alphabet.indexOf(input[i]) - b) * aModInv, 26)];
|
||||||
|
} else if (alphabet.indexOf(input[i].toLowerCase()) >= 0) {
|
||||||
|
// Same as above, accounting for uppercase
|
||||||
|
output += alphabet[Utils.mod((alphabet.indexOf(input[i].toLowerCase()) - b) * aModInv, 26)].toUpperCase();
|
||||||
|
} else {
|
||||||
|
// Non-alphabetic characters
|
||||||
|
output += input[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Atbash Cipher Encode operation.
|
||||||
|
*
|
||||||
|
* @author Matt C [matt@artemisbot.pw]
|
||||||
|
* @param {string} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
runAtbash: function (input, args) {
|
||||||
|
return Cipher.runAffineEnc(input, [25, 25]);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constant
|
* @constant
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
212 source files
|
211 source files
|
||||||
115060 lines
|
115224 lines
|
||||||
4.3M size
|
4.3M size
|
||||||
|
|
||||||
142 JavaScript source files
|
142 JavaScript source files
|
||||||
105900 lines
|
106064 lines
|
||||||
3.8M size
|
3.8M size
|
||||||
|
|
||||||
83 third party JavaScript source files
|
83 third party JavaScript source files
|
||||||
|
@ -11,11 +11,11 @@
|
||||||
3.0M size
|
3.0M size
|
||||||
|
|
||||||
59 first party JavaScript source files
|
59 first party JavaScript source files
|
||||||
19642 lines
|
19806 lines
|
||||||
740K size
|
748K size
|
||||||
|
|
||||||
3.4M uncompressed JavaScript size
|
3.5M uncompressed JavaScript size
|
||||||
1.9M compressed JavaScript size
|
1.9M compressed JavaScript size
|
||||||
|
|
||||||
15 categories
|
15 categories
|
||||||
167 operations
|
170 operations
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue