mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 14:56:19 -04:00
31 lines
764 KiB
HTML
Executable file
31 lines
764 KiB
HTML
Executable file
<html>
|
||
<head>
|
||
</head>
|
||
<body style="background: transparent;">
|
||
<script src="scripts/docstrap.lib.js"></script>
|
||
<script src="scripts/lunr.min.js"></script>
|
||
<script src="scripts/fulltext-search.js"></script>
|
||
|
||
<script type="text/x-docstrap-searchdb">
|
||
{"config_Categories.js.html":{"id":"config_Categories.js.html","title":"Source: config/Categories.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: config/Categories.js /** * Type definition for a CatConf. * * @typedef {Object} CatConf * @property {string} name - The display name for the category * @property {string[]} ops - A list of the operations to be included in this category */ /** * Categories of operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constant * @type {CatConf[]} */ var Categories = [ { name: "Favourites", ops: [] }, { name: "Data format", ops: [ "To Hexdump", "From Hexdump", "To Hex", "From Hex", "To Charcode", "From Charcode", "To Decimal", "From Decimal", "To Binary", "From Binary", "To Base64", "From Base64", "Show Base64 offsets", "To Base32", "From Base32", "To Base", "From Base", "To HTML Entity", "From HTML Entity", "URL Encode", "URL Decode", "Unescape Unicode Characters", "To Quoted Printable", "From Quoted Printable", "To Punycode", "From Punycode", "To Hex Content", "From Hex Content", "PEM to Hex", "Hex to PEM", "Parse ASN.1 hex string", "Change IP format", "Text encoding", "Swap endianness", ] }, { name: "Encryption / Encoding", ops: [ "AES Encrypt", "AES Decrypt", "Blowfish Encrypt", "Blowfish Decrypt", "DES Encrypt", "DES Decrypt", "Triple DES Encrypt", "Triple DES Decrypt", "Rabbit Encrypt", "Rabbit Decrypt", "RC4", "RC4 Drop", "ROT13", "XOR", "XOR Brute Force", "Derive PBKDF2 key", "Derive EVP key", ] }, { name: "Public Key", ops: [ "Parse X.509 certificate", "Parse ASN.1 hex string", "PEM to Hex", "Hex to PEM", "Hex to Object Identifier", "Object Identifier to Hex", ] }, { name: "Logical operations", ops: [ "XOR", "XOR Brute Force", "OR", "NOT", "AND", "ADD", "SUB", "Rotate left", "Rotate right", "ROT13", ] }, { name: "Networking", ops: [ "Strip HTTP headers", "Parse User Agent", "Parse IP range", "Parse IPv6 address", "Parse URI", "URL Encode", "URL Decode", "Format MAC addresses", "Change IP format", "Group IP addresses", ] }, { name: "Language", ops: [ "Text encoding", "Unescape Unicode Characters", ] }, { name: "Utils", ops: [ "Diff", "Remove whitespace", "Remove null bytes", "To Upper case", "To Lower case", "Add line numbers", "Remove line numbers", "Reverse", "Sort", "Unique", "Split", "Count occurrences", "Expand alphabet range", "Parse escaped string", "Drop bytes", "Take bytes", "Pad lines", "Find / Replace", "Regular expression", "Offset checker", "Convert distance", "Convert area", "Convert mass", "Convert speed", "Convert data units", "Parse UNIX file permissions", "Swap endianness", "Parse colour code", ] }, { name: "Date / Time", ops: [ "Parse DateTime", "Translate DateTime Format", "From UNIX Timestamp", "To UNIX Timestamp", "Extract dates", ] }, { name: "Extractors", ops: [ "Strings", "Extract IP addresses", "Extract email addresses", "Extract MAC addresses", "Extract URLs", "Extract domains", "Extract file paths", "Extract dates", "Regular expression", ] }, { name: "Compression", ops: [ "Raw Deflate", "Raw Inflate", "Zlib Deflate", "Zlib Inflate", "Gzip", "Gunzip", "Zip", "Unzip", "Bzip2 Decompress", ] }, { name: "Hashing", ops: [ "Analyse hash", "Generate all hashes", "MD5", "SHA1", "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "RIPEMD-160", "HMAC", "Fletcher-16 Checksum", "Adler-32 Checksum", "CRC-32 Checksum", "TCP/IP Checksum", ] }, { name: "Code tidy", ops: [ "Syntax highlighter", "Generic Code Beautify", "JavaScript Parser", "JavaScript Beautify", "JavaScript Minify", "JSON Beautify", "JSON Minify", "XML Beautify", "XML Minify", "SQL Beautify", "SQL Minify", "CSS Beautify", "CSS Minify", "Strip HTML tags", "Diff", ] }, { name: "Other", ops: [ "Entropy", "Frequency distribution", "Detect File Type", "Scan for Embedded Files", "Generate UUID", "Numberwang", ] }, { name: "Flow control", ops: [ "Fork", "Merge", "Jump", "Conditional Jump", "Return", ] }, ]; × Search results Close "},"config_OperationConfig.js.html":{"id":"config_OperationConfig.js.html","title":"Source: config/OperationConfig.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: config/OperationConfig.js /* * Tell JSHint to ignore "'Object' is not defined" errors in this file, as it references every * single operation object by definition. */ /* jshint -W117 */ /** * Type definition for an OpConf. * * @typedef {Object} OpConf * @property {html} description - A description of the operation with optional HTML tags * @property {Function} run - The function which can be called the run the operation * @property {string} input_type * @property {string} output_type * @property {Function|boolean} [highlight] - A function to calculate the highlight offset, or true * if the offset does not change * @property {Function|boolean} [highlight_reverse] - A function to calculate the highlight offset * in reverse, or true if the offset does not change * @property {boolean} [flow_control] - True if the operation is for Flow Control * @property {ArgConf[]} [args] - A list of configuration objects for the arguments */ /** * Type definition for an ArgConf. * * @typedef {Object} ArgConf * @property {string} name - The display name of the argument * @property {string} type - The data type of the argument * @property {*} value * @property {number[]} [disable_args] - A list of the indices of the operation's arguments which * should be toggled on or off when this argument is changed * @property {boolean} [disabled] - Whether or not this argument starts off disabled */ /** * Operation configuration objects. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constant * @type {Object.<string, OpConf>} */ var OperationConfig = { "Fork": { description: "Split the input data up based on the specified delimiter and run all subsequent operations on each branch separately.<br><br>For example, to decode multiple Base64 strings, enter them all on separate lines then add the 'Fork' and 'From Base64' operations to the recipe. Each string will be decoded separately.", run: FlowControl.run_fork, input_type: "string", output_type: "string", flow_control: true, args: [ { name: "Split delimiter", type: "binary_short_string", value: FlowControl.FORK_DELIM }, { name: "Merge delimiter", type: "binary_short_string", value: FlowControl.MERGE_DELIM } ] }, "Merge": { description: "Consolidate all branches back into a single trunk. The opposite of Fork.", run: FlowControl.run_merge, input_type: "string", output_type: "string", flow_control: true, args: [] }, "Jump": { description: "Jump forwards or backwards over the specified number of operations.", run: FlowControl.run_jump, input_type: "string", output_type: "string", flow_control: true, args: [ { name: "Number of operations to jump over", type: "number", value: FlowControl.JUMP_NUM }, { name: "Maximum jumps (if jumping backwards)", type: "number", value: FlowControl.MAX_JUMPS } ] }, "Conditional Jump": { description: "Conditionally jump forwards or backwards over the specified number of operations based on whether the data matches the specified regular expression.", run: FlowControl.run_cond_jump, input_type: "string", output_type: "string", flow_control: true, args: [ { name: "Match (regex)", type: "string", value: "" }, { name: "Number of operations to jump over if match found", type: "number", value: FlowControl.JUMP_NUM }, { name: "Maximum jumps (if jumping backwards)", type: "number", value: FlowControl.MAX_JUMPS } ] }, "Return": { description: "End execution of operations at this point in the recipe.", run: FlowControl.run_return, input_type: "string", output_type: "string", flow_control: true, args: [] }, "From Base64": { description: "Base64 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.<br><br>This operation decodes data from an ASCII Base64 string back into its raw format.<br><br>e.g. <code>aGVsbG8=</code> becomes <code>hello</code>", run: Base64.run_from, highlight: Base64.highlight_from, highlight_reverse: Base64.highlight_to, input_type: "string", output_type: "byte_array", args: [ { name: "Alphabet", type: "editable_option", value: Base64.ALPHABET_OPTIONS }, { name: "Remove non&#8209;alphabet chars", type: "boolean", value: Base64.REMOVE_NON_ALPH_CHARS } ] }, "To Base64": { description: "Base64 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.<br><br>This operation encodes data in an ASCII Base64 string.<br><br>e.g. <code>hello</code> becomes <code>aGVsbG8=</code>", run: Base64.run_to, highlight: Base64.highlight_to, highlight_reverse: Base64.highlight_from, input_type: "byte_array", output_type: "string", args: [ { name: "Alphabet", type: "editable_option", value: Base64.ALPHABET_OPTIONS }, ] }, "From Base32": { description: "Base32 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. It uses a smaller set of characters than Base64, usually the uppercase alphabet and the numbers 2 to 7.", run: Base64.run_from_32, input_type: "string", output_type: "byte_array", args: [ { name: "Alphabet", type: "binary_string", value: Base64.BASE32_ALPHABET }, { name: "Remove non&#8209;alphabet chars", type: "boolean", value: Base64.REMOVE_NON_ALPH_CHARS } ] }, "To Base32": { description: "Base32 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. It uses a smaller set of characters than Base64, usually the uppercase alphabet and the numbers 2 to 7.", run: Base64.run_to_32, input_type: "byte_array", output_type: "string", args: [ { name: "Alphabet", type: "binary_string", value: Base64.BASE32_ALPHABET } ] }, "Show Base64 offsets": { description: "When a string is within a block of data and the whole block is Base64'd, the string itself could be represented in Base64 in three distinct ways depending on its offset within the block.<br><br>This operation shows all possible offsets for a given string so that each possible encoding can be considered.", run: Base64.run_offsets, input_type: "byte_array", output_type: "html", args: [ { name: "Alphabet", type: "binary_string", value: Base64.ALPHABET }, { name: "Show variable chars and padding", type: "boolean", value: Base64.OFFSETS_SHOW_VARIABLE } ] }, "XOR": { description: "XOR the input with the given key.<br>e.g. <code>fe023da5</code><br><br><strong>Options</strong><br><u>Null preserving:</u> If the current byte is 0x00 or the same as the key, skip it.<br><br><u>Differential:</u> Set the key to the value of the previously decoded byte.", run: BitwiseOp.run_xor, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: BitwiseOp.KEY_FORMAT }, { name: "Null preserving", type: "boolean", value: BitwiseOp.XOR_PRESERVE_NULLS }, { name: "Differential", type: "boolean", value: BitwiseOp.XOR_DIFFERENTIAL } ] }, "XOR Brute Force": { description: "Enumerate all possible XOR solutions. Current maximum key length is 2 due to browser performance.<br><br>Optionally enter a regex string that you expect to find in the plaintext to filter results (crib).", run: BitwiseOp.run_xor_brute, input_type: "byte_array", output_type: "string", args: [ { name: "Key length", type: "option", value: BitwiseOp.XOR_BRUTE_KEY_LENGTH }, { name: "Length of sample", type: "number", value: BitwiseOp.XOR_BRUTE_SAMPLE_LENGTH }, { name: "Offset of sample", type: "number", value: BitwiseOp.XOR_BRUTE_SAMPLE_OFFSET }, { name: "Null preserving", type: "boolean", value: BitwiseOp.XOR_PRESERVE_NULLS }, { name: "Differential", type: "boolean", value: BitwiseOp.XOR_DIFFERENTIAL }, { name: "Crib (known plaintext string)", type: "binary_string", value: "" }, { name: "Print key", type: "boolean", value: BitwiseOp.XOR_BRUTE_PRINT_KEY }, { name: "Output as hex", type: "boolean", value: BitwiseOp.XOR_BRUTE_OUTPUT_HEX } ] }, "NOT": { description: "Returns the inverse of each byte.", run: BitwiseOp.run_not, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [] }, "AND": { description: "AND the input with the given key.<br>e.g. <code>fe023da5</code>", run: BitwiseOp.run_and, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: BitwiseOp.KEY_FORMAT } ] }, "OR": { description: "OR the input with the given key.<br>e.g. <code>fe023da5</code>", run: BitwiseOp.run_or, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: BitwiseOp.KEY_FORMAT } ] }, "ADD": { description: "ADD the input with the given key (e.g. <code>fe023da5</code>), MOD 255", run: BitwiseOp.run_add, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: BitwiseOp.KEY_FORMAT } ] }, "SUB": { description: "SUB the input with the given key (e.g. <code>fe023da5</code>), MOD 255", run: BitwiseOp.run_sub, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: BitwiseOp.KEY_FORMAT } ] }, "From Hex": { description: "Converts a hexadecimal byte string back into a its raw value.<br><br>e.g. <code>ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a</code> becomes the UTF-8 encoded string <code>Γειά σου</code>", run: ByteRepr.run_from_hex, highlight: ByteRepr.highlight_from, highlight_reverse: ByteRepr.highlight_to, input_type: "string", output_type: "byte_array", args: [ { name: "Delimiter", type: "option", value: ByteRepr.HEX_DELIM_OPTIONS } ] }, "To Hex": { description: "Converts the input string to hexadecimal bytes separated by the specified delimiter.<br><br>e.g. The UTF-8 encoded string <code>Γειά σου</code> becomes <code>ce 93 ce b5 ce b9 ce ac 20 cf 83 ce bf cf 85 0a</code>", run: ByteRepr.run_to_hex, highlight: ByteRepr.highlight_to, highlight_reverse: ByteRepr.highlight_from, input_type: "byte_array", output_type: "string", args: [ { name: "Delimiter", type: "option", value: ByteRepr.HEX_DELIM_OPTIONS } ] }, "From Charcode": { description: "Converts unicode character codes back into text.<br><br>e.g. <code>0393 03b5 03b9 03ac 20 03c3 03bf 03c5</code> becomes <code>Γειά σου</code>", run: ByteRepr.run_from_charcode, highlight: ByteRepr.highlight_from, highlight_reverse: ByteRepr.highlight_to, input_type: "string", output_type: "byte_array", args: [ { name: "Delimiter", type: "option", value: ByteRepr.DELIM_OPTIONS }, { name: "Base", type: "number", value: ByteRepr.CHARCODE_BASE } ] }, "To Charcode": { description: "Converts text to its unicode character code equivalent.<br><br>e.g. <code>Γειά σου</code> becomes <code>0393 03b5 03b9 03ac 20 03c3 03bf 03c5</code>", run: ByteRepr.run_to_charcode, highlight: ByteRepr.highlight_to, highlight_reverse: ByteRepr.highlight_from, input_type: "string", output_type: "string", args: [ { name: "Delimiter", type: "option", value: ByteRepr.DELIM_OPTIONS }, { name: "Base", type: "number", value: ByteRepr.CHARCODE_BASE } ] }, "From Binary": { description: "Converts a binary string back into its raw form.<br><br>e.g. <code>01001000 01101001</code> becomes <code>Hi</code>", run: ByteRepr.run_from_binary, highlight: ByteRepr.highlight_from_binary, highlight_reverse: ByteRepr.highlight_to_binary, input_type: "string", output_type: "byte_array", args: [ { name: "Delimiter", type: "option", value: ByteRepr.BIN_DELIM_OPTIONS } ] }, "To Binary": { description: "Displays the input data as a binary string.<br><br>e.g. <code>Hi</code> becomes <code>01001000 01101001</code>", run: ByteRepr.run_to_binary, highlight: ByteRepr.highlight_to_binary, highlight_reverse: ByteRepr.highlight_from_binary, input_type: "byte_array", output_type: "string", args: [ { name: "Delimiter", type: "option", value: ByteRepr.BIN_DELIM_OPTIONS } ] }, "From Decimal": { description: "Converts the data from an ordinal integer array back into its raw form.<br><br>e.g. <code>72 101 108 108 111</code> becomes <code>Hello</code>", run: ByteRepr.run_from_decimal, input_type: "string", output_type: "byte_array", args: [ { name: "Delimiter", type: "option", value: ByteRepr.DELIM_OPTIONS } ] }, "To Decimal": { description: "Converts the input data to an ordinal integer array.<br><br>e.g. <code>Hello</code> becomes <code>72 101 108 108 111</code>", run: ByteRepr.run_to_decimal, input_type: "byte_array", output_type: "string", args: [ { name: "Delimiter", type: "option", value: ByteRepr.DELIM_OPTIONS } ] }, "From Hexdump": { description: "Attempts to convert a hexdump back into raw data. This operation supports many different hexdump variations, but probably not all. Make sure you verify that the data it gives you is correct before continuing analysis.", run: Hexdump.run_from, highlight: Hexdump.highlight_from, highlight_reverse: Hexdump.highlight_to, input_type: "string", output_type: "byte_array", args: [] }, "To Hexdump": { description: "Creates a hexdump of the input data, displaying both the hexademinal values of each byte and an ASCII representation alongside.", run: Hexdump.run_to, highlight: Hexdump.highlight_to, highlight_reverse: Hexdump.highlight_from, input_type: "byte_array", output_type: "string", args: [ { name: "Width", type: "number", value: Hexdump.WIDTH }, { name: "Upper case hex", type: "boolean", value: Hexdump.UPPER_CASE }, { name: "Include final length", type: "boolean", value: Hexdump.INCLUDE_FINAL_LENGTH } ] }, "From Base": { description: "Converts a number to decimal from a given numerical base.", run: Base.run_from, input_type: "string", output_type: "number", args: [ { name: "Radix", type: "number", value: Base.DEFAULT_RADIX } ] }, "To Base": { description: "Converts a decimal number to a given numerical base.", run: Base.run_to, input_type: "number", output_type: "string", args: [ { name: "Radix", type: "number", value: Base.DEFAULT_RADIX } ] }, "From HTML Entity": { description: "Converts HTML entities back to characters<br><br>e.g. <code>&amp;<span>amp;</span></code> becomes <code>&amp;</code>", // <span> tags required to stop the browser just printing & run: HTML.run_from_entity, input_type: "string", output_type: "string", args: [] }, "To HTML Entity": { description: "Converts characters to HTML entities<br><br>e.g. <code>&amp;</code> becomes <code>&amp;<span>amp;</span></code>", // <span> tags required to stop the browser just printing & run: HTML.run_to_entity, input_type: "string", output_type: "string", args: [ { name: "Convert all characters", type: "boolean", value: HTML.CONVERT_ALL }, { name: "Convert to", type: "option", value: HTML.CONVERT_OPTIONS } ] }, "Strip HTML tags": { description: "Removes all HTML tags from the input.", run: HTML.run_strip_tags, input_type: "string", output_type: "string", args: [ { name: "Remove indentation", type: "boolean", value: HTML.REMOVE_INDENTATION }, { name: "Remove excess line breaks", type: "boolean", value: HTML.REMOVE_LINE_BREAKS } ] }, "URL Decode": { description: "Converts URI/URL percent-encoded characters back to their raw values.<br><br>e.g. <code>%3d</code> becomes <code>=</code>", run: URL_.run_from, input_type: "string", output_type: "string", args: [] }, "URL Encode": { description: "Encodes problematic characters into percent-encoding, a format supported by URIs/URLs.<br><br>e.g. <code>=</code> becomes <code>%3d</code>", run: URL_.run_to, input_type: "string", output_type: "string", args: [ { name: "Encode all special chars", type: "boolean", value: URL_.ENCODE_ALL } ] }, "Parse URI": { description: "Pretty prints complicated Uniform Resource Identifier (URI) strings for ease of reading. Particularly useful for Uniform Resource Locators (URLs) with a lot of arguments.", run: URL_.run_parse, input_type: "string", output_type: "string", args: [] }, "Unescape Unicode Characters": { description: "Converts unicode-escaped character notation back into raw characters.<br><br>Supports the prefixes:<ul><li><code>\\\\u</code></li><li><code>%u</code></li><li><code>U+</code></li></ul>e.g. <code>\\\\u03c3\\\\u03bf\\\\u03c5</code> becomes <code>σου</code>", run: Unicode.run_unescape, input_type: "string", output_type: "string", args: [ { name: "Prefix", type: "option", value: Unicode.PREFIXES } ] }, "From Quoted Printable": { description: "Converts QP-encoded text back to standard text.", run: QuotedPrintable.run_from, input_type: "string", output_type: "byte_array", args: [] }, "To Quoted Printable": { description: "Quoted-Printable, or QP encoding, is an encoding using printable ASCII characters (alphanumeric and the equals sign '=') to transmit 8-bit data over a 7-bit data path or, generally, over a medium which is not 8-bit clean. It is defined as a MIME content transfer encoding for use in e-mail.<br><br>QP works by using the equals sign '=' as an escape character. It also limits line length to 76, as some software has limits on line length.", run: QuotedPrintable.run_to, input_type: "byte_array", output_type: "string", args: [] }, "From Punycode": { description: "Punycode is a way to represent Unicode with the limited character subset of ASCII supported by the Domain Name System.<br><br>e.g. <code>mnchen-3ya</code> decodes to <code>münchen</code>", run: Punycode.run_to_unicode, input_type: "string", output_type: "string", args: [ { name: "Internationalised domain name", type: "boolean", value: Punycode.IDN } ] }, "To Punycode": { description: "Punycode is a way to represent Unicode with the limited character subset of ASCII supported by the Domain Name System.<br><br>e.g. <code>münchen</code> encodes to <code>mnchen-3ya</code>", run: Punycode.run_to_ascii, input_type: "string", output_type: "string", args: [ { name: "Internationalised domain name", type: "boolean", value: Punycode.IDN } ] }, "From Hex Content": { description: "Translates hexadecimal bytes in text back to raw bytes.<br><br>e.g. <code>foo|3d|bar</code> becomes <code>foo=bar</code>.", run: ByteRepr.run_from_hex_content, input_type: "string", output_type: "byte_array", args: [] }, "To Hex Content": { description: "Converts special characters in a string to hexadecimal.<br><br>e.g. <code>foo=bar</code> becomes <code>foo|3d|bar</code>.", run: ByteRepr.run_to_hex_content, input_type: "byte_array", output_type: "string", args: [ { name: "Convert", type: "option", value: ByteRepr.HEX_CONTENT_CONVERT_WHICH }, { name: "Print spaces between bytes", type: "boolean", value: ByteRepr.HEX_CONTENT_SPACES_BETWEEN_BYTES }, ] }, "Change IP format": { description: "Convert an IP address from one format to another, e.g. <code>172.20.23.54</code> to <code>ac141736</code>", run: IP.run_change_ip_format, input_type: "string", output_type: "string", args: [ { name: "Input format", type: "option", value: IP.IP_FORMAT_LIST }, { name: "Output format", type: "option", value: IP.IP_FORMAT_LIST } ] }, "Parse IP range": { description: "Given a CIDR range (e.g. <code>10.0.0.0/24</code>) or a hyphenated range (e.g. <code>10.0.0.0 - 10.0.1.0</code>), this operation provides network information and enumerates all IP addresses in the range.<br><br>IPv6 is supported but will not be enumerated.", run: IP.run_parse_ip_range, input_type: "string", output_type: "string", args: [ { name: "Include network info", type: "boolean", value: IP.INCLUDE_NETWORK_INFO }, { name: "Enumerate IP addresses", type: "boolean", value: IP.ENUMERATE_ADDRESSES }, { name: "Allow large queries", type: "boolean", value: IP.ALLOW_LARGE_LIST } ] }, "Group IP addresses": { description: "Groups a list of IP addresses into subnets. Supports both IPv4 and IPv6 addresses.", run: IP.run_group_ips, input_type: "string", output_type: "string", args: [ { name: "Delimiter", type: "option", value: IP.DELIM_OPTIONS }, { name: "Subnet (CIDR)", type: "number", value: IP.GROUP_CIDR }, { name: "Only show the subnets", type: "boolean", value: IP.GROUP_ONLY_SUBNET } ] }, "Parse IPv6 address": { description: "Displays the longhand and shorthand versions of a valid IPv6 address.<br><br>Recognises all reserved ranges and parses encapsulated or tunnelled addresses including Teredo and 6to4.", run: IP.run_parse_ipv6, input_type: "string", output_type: "string", args: [] }, "Text encoding": { description: "Translates the data between different character encodings.<br><br>Supported charsets are:<ul><li>UTF8</li><li>UTF16</li><li>UTF16LE (little-endian)</li><li>UTF16BE (big-endian)</li><li>Hex</li><li>Base64</li><li>Latin1 (ISO-8859-1)</li><li>Windows-1251</li></ul>", run: CharEnc.run, input_type: "string", output_type: "string", args: [ { name: "Input type", type: "option", value: CharEnc.IO_FORMAT }, { name: "Output type", type: "option", value: CharEnc.IO_FORMAT }, ] }, "AES Decrypt": { description: "To successfully decrypt AES, you need either:<ul><li>The passphrase</li><li>Or the key and IV</li></ul>The IV should be the first 16 bytes of encrypted material.", run: Cipher.run_aes_dec, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT1 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT2 }, ] }, "AES Encrypt": { description: "Input: Either enter a passphrase (which will be used to derive a key using the OpenSSL KDF) or both the key and IV.<br><br>Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated.<br><br>AES-128, AES-192, and AES-256 are supported. The variant will be chosen based on the size of the key passed in. If a passphrase is used, a 256-bit key will be generated.", run: Cipher.run_aes_enc, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Output result", type: "option", value: Cipher.RESULT_TYPE }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT1 }, ] }, "DES Decrypt": { description: "To successfully decrypt DES, you need either:<ul><li>The passphrase</li><li>Or the key and IV</li></ul>The IV should be the first 8 bytes of encrypted material.", run: Cipher.run_des_dec, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT1 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT2 }, ] }, "DES Encrypt": { description: "Input: Either enter a passphrase (which will be used to derive a key using the OpenSSL KDF) or both the key and IV.<br><br>DES is a previously dominant algorithm for encryption, and was published as an official U.S. Federal Information Processing Standard (FIPS). It is now considered to be insecure due to its small key size.", run: Cipher.run_des_enc, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Output result", type: "option", value: Cipher.RESULT_TYPE }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT1 }, ] }, "Triple DES Decrypt": { description: "To successfully decrypt Triple DES, you need either:<ul><li>The passphrase</li><li>Or the key and IV</li></ul>The IV should be the first 8 bytes of encrypted material.", run: Cipher.run_triple_des_dec, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT1 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT2 }, ] }, "Triple DES Encrypt": { description: "Input: Either enter a passphrase (which will be used to derive a key using the OpenSSL KDF) or both the key and IV.<br><br>Triple DES applies DES three times to each block to increase key size.", run: Cipher.run_triple_des_enc, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Output result", type: "option", value: Cipher.RESULT_TYPE }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT1 }, ] }, "Blowfish Decrypt": { description: "Blowfish is a symmetric-key block cipher designed in 1993 by Bruce Schneier and included in a large number of cipher suites and encryption products. AES now receives more attention.", run: Cipher.run_blowfish_dec, input_type: "string", output_type: "string", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "Mode", type: "option", value: Cipher.BLOWFISH_MODES }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT3 }, ] }, "Blowfish Encrypt": { description: "Blowfish is a symmetric-key block cipher designed in 1993 by Bruce Schneier and included in a large number of cipher suites and encryption products. AES now receives more attention.", run: Cipher.run_blowfish_enc, input_type: "string", output_type: "string", args: [ { name: "Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "Mode", type: "option", value: Cipher.BLOWFISH_MODES }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT3 }, ] }, "Rabbit Decrypt": { description: "To successfully decrypt Rabbit, you need either:<ul><li>The passphrase</li><li>Or the key and IV (This is currently broken. You need the key and salt at the moment.)</li></ul>The IV should be the first 8 bytes of encrypted material.", run: Cipher.run_rabbit_dec, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT1 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT2 }, ] }, "Rabbit Encrypt": { description: "Input: Either enter a passphrase (which will be used to derive a key using the OpenSSL KDF) or both the key and IV.<br><br>Rabbit is a high-performance stream cipher and a finalist in the eSTREAM Portfolio. It is one of the four designs selected after a 3 1/2 year process where 22 designs were evaluated.", run: Cipher.run_rabbit_enc, input_type: "string", output_type: "string", args: [ { name: "Passphrase/Key", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "IV", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Salt", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT1 }, { name: "Mode", type: "option", value: Cipher.MODES }, { name: "Padding", type: "option", value: Cipher.PADDING }, { name: "Output result", type: "option", value: Cipher.RESULT_TYPE }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT1 }, ] }, "RC4": { description: "RC4 is a widely-used stream cipher. It is used in popular protocols such as SSL and WEP. Although remarkable for its simplicity and speed, the algorithm's history doesn't inspire confidence in its security.", run: Cipher.run_rc4, highlight: true, highlight_reverse: true, input_type: "string", output_type: "string", args: [ { name: "Passphrase", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT4 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT4 }, ] }, "RC4 Drop": { description: "It was discovered that the first few bytes of the RC4 keystream are strongly non-random and leak information about the key. We can defend against this attack by discarding the initial portion of the keystream. This modified algorithm is traditionally called RC4-drop.", run: Cipher.run_rc4drop, highlight: true, highlight_reverse: true, input_type: "string", output_type: "string", args: [ { name: "Passphrase", type: "toggle_string", value: "", toggle_values: Cipher.IO_FORMAT2 }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT4 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT4 }, { name: "Number of bytes to drop", type: "number", value: Cipher.RC4DROP_BYTES }, ] }, "Derive PBKDF2 key": { description: "PBKDF2 is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required.<br><br>A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack.<br><br>Enter your passphrase as the input and then set the relevant options to generate a key.", run: Cipher.run_pbkdf2, input_type: "string", output_type: "string", args: [ { name: "Key size", type: "number", value: Cipher.KDF_KEY_SIZE }, { name: "Iterations", type: "number", value: Cipher.KDF_ITERATIONS }, { name: "Salt (hex)", type: "string", value: "" }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT2 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT3 }, ] }, "Derive EVP key": { description: "EVP is a password-based key derivation function used extensively in OpenSSL. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required.<br><br>A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack.<br><br>Enter your passphrase as the input and then set the relevant options to generate a key.", run: Cipher.run_evpkdf, input_type: "string", output_type: "string", args: [ { name: "Key size", type: "number", value: Cipher.KDF_KEY_SIZE }, { name: "Iterations", type: "number", value: Cipher.KDF_ITERATIONS }, { name: "Salt (hex)", type: "string", value: "" }, { name: "Input format", type: "option", value: Cipher.IO_FORMAT2 }, { name: "Output format", type: "option", value: Cipher.IO_FORMAT3 }, ] }, "Rotate right": { description: "Rotates each byte to the right by the number of bits specified. Currently only supports 8-bit values.", run: Rotate.run_rotr, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Number of bits", type: "number", value: Rotate.ROTATE_AMOUNT }, { name: "Rotate as a whole", type: "boolean", value: Rotate.ROTATE_WHOLE } ] }, "Rotate left": { description: "Rotates each byte to the left by the number of bits specified. Currently only supports 8-bit values.", run: Rotate.run_rotl, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Number of bits", type: "number", value: Rotate.ROTATE_AMOUNT }, { name: "Rotate as a whole", type: "boolean", value: Rotate.ROTATE_WHOLE } ] }, "ROT13": { description: "A simple caesar substitution cipher which rotates alphabet characters by the specified amount (default 13).", run: Rotate.run_rot13, highlight: true, highlight_reverse: true, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Rotate lower case chars", type: "boolean", value: Rotate.ROT13_LOWERCASE }, { name: "Rotate upper case chars", type: "boolean", value: Rotate.ROT13_UPPERCASE }, { name: "Amount", type: "number", value: Rotate.ROT13_AMOUNT }, ] }, "Strip HTTP headers": { description: "Removes HTTP headers from a request or response by looking for the first instance of a double newline.", run: HTTP.run_strip_headers, input_type: "string", output_type: "string", args: [] }, "Parse User Agent": { description: "Attempts to identify and categorise information contained in a user-agent string.", run: HTTP.run_parse_user_agent, input_type: "string", output_type: "string", args: [] }, "Format MAC addresses": { description: "Displays given MAC addresses in multiple different formats.<br><br>Expects addresses in a list separated by newlines, spaces or commas.<br><br>WARNING: There are no validity checks.", run: MAC.run_format, input_type: "string", output_type: "string", args: [ { name: "Output case", type: "option", value: MAC.OUTPUT_CASE }, { name: "No delimiter", type: "boolean", value: MAC.NO_DELIM }, { name: "Dash delimiter", type: "boolean", value: MAC.DASH_DELIM }, { name: "Colon delimiter", type: "boolean", value: MAC.COLON_DELIM }, { name: "Cisco style", type: "boolean", value: MAC.CISCO_STYLE } ] }, "Offset checker": { description: "Compares multiple inputs (separated by the specified delimiter) and highlights matching characters which appear at the same position in all samples.", run: StrUtils.run_offset_checker, input_type: "string", output_type: "html", args: [ { name: "Sample delimiter", type: "binary_string", value: StrUtils.OFF_CHK_SAMPLE_DELIMITER } ] }, "Remove whitespace": { description: "Optionally removes all spaces, carriage returns, line feeds, tabs and form feeds from the input data.<br><br>This operation also supports the removal of full stops which are sometimes used to represent non-printable bytes in ASCII output.", run: Tidy.run_remove_whitespace, input_type: "string", output_type: "string", args: [ { name: "Spaces", type: "boolean", value: Tidy.REMOVE_SPACES }, { name: "Carriage returns (\\\\r)", type: "boolean", value: Tidy.REMOVE_CARIAGE_RETURNS }, { name: "Line feeds (\\\\n)", type: "boolean", value: Tidy.REMOVE_LINE_FEEDS }, { name: "Tabs", type: "boolean", value: Tidy.REMOVE_TABS }, { name: "Form feeds (\\\\f)", type: "boolean", value: Tidy.REMOVE_FORM_FEEDS }, { name: "Full stops", type: "boolean", value: Tidy.REMOVE_FULL_STOPS } ] }, "Remove null bytes": { description: "Removes all null bytes (<code>0x00</code>) from the input.", run: Tidy.run_remove_nulls, input_type: "byte_array", output_type: "byte_array", args: [] }, "Drop bytes": { description: "Cuts the specified number of bytes out of the data.", run: Tidy.run_drop_bytes, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Start", type: "number", value: Tidy.DROP_START }, { name: "Length", type: "number", value: Tidy.DROP_LENGTH }, { name: "Apply to each line", type: "boolean", value: Tidy.APPLY_TO_EACH_LINE } ] }, "Take bytes": { description: "Takes a slice of the specified number of bytes from the data.", run: Tidy.run_take_bytes, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Start", type: "number", value: Tidy.TAKE_START }, { name: "Length", type: "number", value: Tidy.TAKE_LENGTH }, { name: "Apply to each line", type: "boolean", value: Tidy.APPLY_TO_EACH_LINE } ] }, "Pad lines": { description: "Add the specified number of the specified character to the beginning or end of each line", run: Tidy.run_pad, input_type: "string", output_type: "string", args: [ { name: "Position", type: "option", value: Tidy.PAD_POSITION }, { name: "Length", type: "number", value: Tidy.PAD_LENGTH }, { name: "Character", type: "binary_short_string", value: Tidy.PAD_CHAR } ] }, "Reverse": { description: "Reverses the input string.", run: SeqUtils.run_reverse, input_type: "byte_array", output_type: "byte_array", args: [ { name: "By", type: "option", value: SeqUtils.REVERSE_BY } ] }, "Sort": { description: "Alphabetically sorts strings separated by the specified delimiter.<br><br>The IP address option supports IPv4 only.", run: SeqUtils.run_sort, input_type: "string", output_type: "string", args: [ { name: "Delimiter", type: "option", value: SeqUtils.DELIMITER_OPTIONS }, { name: "Reverse", type: "boolean", value: SeqUtils.SORT_REVERSE }, { name: "Order", type: "option", value: SeqUtils.SORT_ORDER } ] }, "Unique": { description: "Removes duplicate strings from the input.", run: SeqUtils.run_unique, input_type: "string", output_type: "string", args: [ { name: "Delimiter", type: "option", value: SeqUtils.DELIMITER_OPTIONS } ] }, "Count occurrences": { description: "Counts the number of times the provided string occurs in the input.", run: SeqUtils.run_count, input_type: "string", output_type: "number", args: [ { name: "Search string", type: "toggle_string", value: "", toggle_values: SeqUtils.SEARCH_TYPE } ] }, "Add line numbers": { description: "Adds line numbers to the output.", run: SeqUtils.run_add_line_numbers, input_type: "string", output_type: "string", args: [] }, "Remove line numbers": { description: "Removes line numbers from the output if they can be trivially detected.", run: SeqUtils.run_remove_line_numbers, input_type: "string", output_type: "string", args: [] }, "Find / Replace": { description: "Replaces all occurrences of the first string with the second.<br><br>The three match options are only relevant to regex search strings.", run: StrUtils.run_find_replace, manual_bake: true, input_type: "string", output_type: "string", args: [ { name: "Find", type: "toggle_string", value: "", toggle_values: StrUtils.SEARCH_TYPE }, { name: "Replace", type: "binary_string", value: "" }, { name: "Global match", type: "boolean", value: StrUtils.FIND_REPLACE_GLOBAL, }, { name: "Case insensitive", type: "boolean", value: StrUtils.FIND_REPLACE_CASE, }, { name: "Multiline matching", type: "boolean", value: StrUtils.FIND_REPLACE_MULTILINE, }, ] }, "To Upper case": { description: "Converts the input string to upper case, optionally limiting scope to only the first character in each word, sentence or paragraph.", run: StrUtils.run_upper, highlight: true, highlight_reverse: true, input_type: "string", output_type: "string", args: [ { name: "Scope", type: "option", value: StrUtils.CASE_SCOPE } ] }, "To Lower case": { description: "Converts every character in the input to lower case.", run: StrUtils.run_lower, highlight: true, highlight_reverse: true, input_type: "string", output_type: "string", args: [] }, "Split": { description: "Splits a string into sections around a given delimiter.", run: StrUtils.run_split, input_type: "string", output_type: "string", args: [ { name: "Split delimiter", type: "binary_short_string", value: StrUtils.SPLIT_DELIM }, { name: "Join delimiter", type: "option", value: StrUtils.DELIMITER_OPTIONS } ] }, "Strings": { description: "Extracts all strings from the input.", run: Extract.run_strings, input_type: "string", output_type: "string", args: [ { name: "Minimum length", type: "number", value: Extract.MIN_STRING_LEN }, { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract IP addresses": { description: "Extracts all IPv4 and IPv6 addresses.<br><br>Warning: Given a string <code>710.65.0.456</code>, this will match <code>10.65.0.45</code> so always check the original input!", run: Extract.run_ip, input_type: "string", output_type: "string", args: [ { name: "IPv4", type: "boolean", value: Extract.INCLUDE_IPV4 }, { name: "IPv6", type: "boolean", value: Extract.INCLUDE_IPV6 }, { name: "Remove local IPv4 addresses", type: "boolean", value: Extract.REMOVE_LOCAL }, { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract email addresses": { description: "Extracts all email addresses from the input.", run: Extract.run_email, input_type: "string", output_type: "string", args: [ { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract MAC addresses": { description: "Extracts all Media Access Control (MAC) addresses from the input.", run: Extract.run_mac, input_type: "string", output_type: "string", args: [ { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract URLs": { description: "Extracts Uniform Resource Locators (URLs) from the input. The protocol (http, ftp etc.) is required otherwise there will be far too many false positives.", run: Extract.run_urls, input_type: "string", output_type: "string", args: [ { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract domains": { description: "Extracts domain names with common Top-Level Domains (TLDs).<br>Note that this will not include paths. Use <strong>Extract URLs</strong> to find entire URLs.", run: Extract.run_domains, input_type: "string", output_type: "string", args: [ { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract file paths": { description: "Extracts anything that looks like a Windows or UNIX file path.<br><br>Note that if UNIX is selected, there will likely be a lot of false positives.", run: Extract.run_file_paths, input_type: "string", output_type: "string", args: [ { name: "Windows", type: "boolean", value: Extract.INCLUDE_WIN_PATH }, { name: "UNIX", type: "boolean", value: Extract.INCLUDE_UNIX_PATH }, { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Extract dates": { description: "Extracts dates in the following formats<ul><li><code>yyyy-mm-dd</code></li><li><code>dd/mm/yyyy</code></li><li><code>mm/dd/yyyy</code></li></ul>Dividers can be any of /, -, . or space", run: Extract.run_dates, input_type: "string", output_type: "string", args: [ { name: "Display total", type: "boolean", value: Extract.DISPLAY_TOTAL } ] }, "Regular expression": { description: "Define your own regular expression to search the input data with, optionally choosing from a list of pre-defined patterns.", run: StrUtils.run_regex, manual_bake: true, input_type: "string", output_type: "html", args: [ { name: "Built in regexes", type: "populate_option", value: StrUtils.REGEX_PRE_POPULATE, target: 1, }, { name: "Regex", type: "text", value: "" }, { name: "Case insensitive", type: "boolean", value: StrUtils.REGEX_CASE_INSENSITIVE }, { name: "Multiline matching", type: "boolean", value: StrUtils.REGEX_MULTILINE_MATCHING }, { name: "Display total", type: "boolean", value: StrUtils.DISPLAY_TOTAL }, { name: "Output format", type: "option", value: StrUtils.OUTPUT_FORMAT }, ] }, "From UNIX Timestamp": { description: "Converts a UNIX timestamp to a datetime string.<br><br>e.g. <code>978346800</code> becomes <code>Mon 1 January 2001 11:00:00 UTC</code>", run: DateTime.run_from_unix_timestamp, input_type: "number", output_type: "string", args: [ { name: "Units", type: "option", value: DateTime.UNITS } ] }, "To UNIX Timestamp": { description: "Parses a datetime string and returns the corresponding UNIX timestamp.<br><br>e.g. <code>Mon 1 January 2001 11:00:00 UTC</code> becomes <code>978346800</code>", run: DateTime.run_to_unix_timestamp, input_type: "string", output_type: "number", args: [ { name: "Units", type: "option", value: DateTime.UNITS } ] }, "Translate DateTime Format": { description: "Parses a datetime string in one format and re-writes it in another.<br><br>Run with no input to see the relevant format string examples.", run: DateTime.run_translate_format, input_type: "string", output_type: "html", args: [ { name: "Built in formats", type: "populate_option", value: DateTime.DATETIME_FORMATS, target: 1 }, { name: "Input format string", type: "binary_string", value: DateTime.INPUT_FORMAT_STRING }, { name: "Input timezone", type: "option", value: DateTime.TIMEZONES }, { name: "Output format string", type: "binary_string", value: DateTime.OUTPUT_FORMAT_STRING }, { name: "Output timezone", type: "option", value: DateTime.TIMEZONES } ] }, "Parse DateTime": { description: "Parses a DateTime string in your specified format and displays it in whichever timezone you choose with the following information:<ul><li>Date</li><li>Time</li><li>Period (AM/PM)</li><li>Timezone</li><li>UTC offset</li><li>Daylight Saving Time</li><li>Leap year</li><li>Days in this month</li><li>Day of year</li><li>Week number</li><li>Quarter</li></ul>Run with no input to see format string examples if required.", run: DateTime.run_parse, input_type: "string", output_type: "html", args: [ { name: "Built in formats", type: "populate_option", value: DateTime.DATETIME_FORMATS, target: 1 }, { name: "Input format string", type: "binary_string", value: DateTime.INPUT_FORMAT_STRING }, { name: "Input timezone", type: "option", value: DateTime.TIMEZONES }, ] }, "Convert distance": { description: "Converts a unit of distance to another format.", run: Convert.run_distance, input_type: "number", output_type: "number", args: [ { name: "Input units", type: "option", value: Convert.DISTANCE_UNITS }, { name: "Output units", type: "option", value: Convert.DISTANCE_UNITS } ] }, "Convert area": { description: "Converts a unit of area to another format.", run: Convert.run_area, input_type: "number", output_type: "number", args: [ { name: "Input units", type: "option", value: Convert.AREA_UNITS }, { name: "Output units", type: "option", value: Convert.AREA_UNITS } ] }, "Convert mass": { description: "Converts a unit of mass to another format.", run: Convert.run_mass, input_type: "number", output_type: "number", args: [ { name: "Input units", type: "option", value: Convert.MASS_UNITS }, { name: "Output units", type: "option", value: Convert.MASS_UNITS } ] }, "Convert speed": { description: "Converts a unit of speed to another format.", run: Convert.run_speed, input_type: "number", output_type: "number", args: [ { name: "Input units", type: "option", value: Convert.SPEED_UNITS }, { name: "Output units", type: "option", value: Convert.SPEED_UNITS } ] }, "Convert data units": { description: "Converts a unit of data to another format.", run: Convert.run_data_size, input_type: "number", output_type: "number", args: [ { name: "Input units", type: "option", value: Convert.DATA_UNITS }, { name: "Output units", type: "option", value: Convert.DATA_UNITS } ] }, "Raw Deflate": { description: "Compresses data using the deflate algorithm with no headers.", run: Compress.run_raw_deflate, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Compression type", type: "option", value: Compress.COMPRESSION_TYPE } ] }, "Raw Inflate": { description: "Decompresses data which has been compressed using the deflate algorithm with no headers.", run: Compress.run_raw_inflate, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Start index", type: "number", value: Compress.INFLATE_INDEX }, { name: "Initial output buffer size", type: "number", value: Compress.INFLATE_BUFFER_SIZE }, { name: "Buffer expansion type", type: "option", value: Compress.INFLATE_BUFFER_TYPE }, { name: "Resize buffer after decompression", type: "boolean", value: Compress.INFLATE_RESIZE }, { name: "Verify result", type: "boolean", value: Compress.INFLATE_VERIFY } ] }, "Zlib Deflate": { description: "Compresses data using the deflate algorithm adding zlib headers.", run: Compress.run_zlib_deflate, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Compression type", type: "option", value: Compress.COMPRESSION_TYPE } ] }, "Zlib Inflate": { description: "Decompresses data which has been compressed using the deflate algorithm with zlib headers.", run: Compress.run_zlib_inflate, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Start index", type: "number", value: Compress.INFLATE_INDEX }, { name: "Initial output buffer size", type: "number", value: Compress.INFLATE_BUFFER_SIZE }, { name: "Buffer expansion type", type: "option", value: Compress.INFLATE_BUFFER_TYPE }, { name: "Resize buffer after decompression", type: "boolean", value: Compress.INFLATE_RESIZE }, { name: "Verify result", type: "boolean", value: Compress.INFLATE_VERIFY } ] }, "Gzip": { description: "Compresses data using the deflate algorithm with gzip headers.", run: Compress.run_gzip, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Compression type", type: "option", value: Compress.COMPRESSION_TYPE }, { name: "Filename (optional)", type: "string", value: "" }, { name: "Comment (optional)", type: "string", value: "" }, { name: "Include file checksum", type: "boolean", value: Compress.GZIP_CHECKSUM } ] }, "Gunzip": { description: "Decompresses data which has been compressed using the deflate algorithm with gzip headers.", run: Compress.run_gunzip, input_type: "byte_array", output_type: "byte_array", args: [] }, "Zip": { description: "Compresses data using the PKZIP algorithm with the given filename.<br><br>No support for multiple files at this time.", run: Compress.run_pkzip, input_type: "byte_array", output_type: "byte_array", args: [ { name: "Filename", type: "string", value: Compress.PKZIP_FILENAME }, { name: "Comment", type: "string", value: "" }, { name: "Password", type: "binary_string", value: "" }, { name: "Compression method", type: "option", value: Compress.COMPRESSION_METHOD }, { name: "Operating system", type: "option", value: Compress.OS }, { name: "Compression type", type: "option", value: Compress.COMPRESSION_TYPE } ] }, "Unzip": { description: "Decompresses data using the PKZIP algorithm and displays it per file, with support for passwords.", run: Compress.run_pkunzip, input_type: "byte_array", output_type: "html", args: [ { name: "Password", type: "binary_string", value: "" }, { name: "Verify result", type: "boolean", value: Compress.PKUNZIP_VERIFY } ] }, "Bzip2 Decompress": { description: "Decompresses data using the Bzip2 algorithm.", run: Compress.run_bzip2_decompress, input_type: "byte_array", output_type: "string", args: [] }, "Generic Code Beautify": { description: "Attempts to pretty print C-style languages such as C, C++, C#, Java, PHP, JavaScript etc.<br><br>This will not do a perfect job, and the resulting code may not work any more. This operation is designed purely to make obfuscated or minified code more easy to read and understand.<br><br>Things which will not work properly:<ul><li>For loop formatting</li><li>Do-While loop formatting</li><li>Switch/Case indentation</li><li>Certain bit shift operators</li></ul>", run: Code.run_generic_beautify, input_type: "string", output_type: "string", args: [] }, "JavaScript Parser": { description: "Returns an Abstract Syntax Tree for valid JavaScript code.", run: JS.run_parse, input_type: "string", output_type: "string", args: [ { name: "Location info", type: "boolean", value: JS.PARSE_LOC }, { name: "Range info", type: "boolean", value: JS.PARSE_RANGE }, { name: "Include tokens array", type: "boolean", value: JS.PARSE_TOKENS }, { name: "Include comments array", type: "boolean", value: JS.PARSE_COMMENT }, { name: "Report errors and try to continue", type: "boolean", value: JS.PARSE_TOLERANT }, ] }, "JavaScript Beautify": { description: "Parses and pretty prints valid JavaScript code. Also works with JavaScript Object Notation (JSON).", run: JS.run_beautify, input_type: "string", output_type: "string", args: [ { name: "Indent string", type: "binary_short_string", value: JS.BEAUTIFY_INDENT }, { name: "Quotes", type: "option", value: JS.BEAUTIFY_QUOTES }, { name: "Semicolons before closing braces", type: "boolean", value: JS.BEAUTIFY_SEMICOLONS }, { name: "Include comments", type: "boolean", value: JS.BEAUTIFY_COMMENT }, ] }, "JavaScript Minify": { description: "Compresses JavaScript code.", run: JS.run_minify, input_type: "string", output_type: "string", args: [] }, "XML Beautify": { description: "Indents and prettifies eXtensible Markup Language (XML) code.", run: Code.run_xml_beautify, input_type: "string", output_type: "string", args: [ { name: "Indent string", type: "binary_short_string", value: Code.BEAUTIFY_INDENT } ] }, "JSON Beautify": { description: "Indents and prettifies JavaScript Object Notation (JSON) code.", run: Code.run_json_beautify, input_type: "string", output_type: "string", args: [ { name: "Indent string", type: "binary_short_string", value: Code.BEAUTIFY_INDENT } ] }, "CSS Beautify": { description: "Indents and prettifies Cascading Style Sheets (CSS) code.", run: Code.run_css_beautify, input_type: "string", output_type: "string", args: [ { name: "Indent string", type: "binary_short_string", value: Code.BEAUTIFY_INDENT } ] }, "SQL Beautify": { description: "Indents and prettifies Structured Query Language (SQL) code.", run: Code.run_sql_beautify, input_type: "string", output_type: "string", args: [ { name: "Indent string", type: "binary_short_string", value: Code.BEAUTIFY_INDENT } ] }, "XML Minify": { description: "Compresses eXtensible Markup Language (XML) code.", run: Code.run_xml_minify, input_type: "string", output_type: "string", args: [ { name: "Preserve comments", type: "boolean", value: Code.PRESERVE_COMMENTS } ] }, "JSON Minify": { description: "Compresses JavaScript Object Notation (JSON) code.", run: Code.run_json_minify, input_type: "string", output_type: "string", args: [] }, "CSS Minify": { description: "Compresses Cascading Style Sheets (CSS) code.", run: Code.run_css_minify, input_type: "string", output_type: "string", args: [ { name: "Preserve comments", type: "boolean", value: Code.PRESERVE_COMMENTS } ] }, "SQL Minify": { description: "Compresses Structured Query Language (SQL) code.", run: Code.run_sql_minify, input_type: "string", output_type: "string", args: [] }, "Analyse hash": { description: "Tries to determine information about a given hash and suggests which algorithm may have been used to generate it based on its length.", run: Hash.run_analyse, input_type: "string", output_type: "string", args: [] }, "MD5": { description: "MD5 (Message-Digest 5) is a widely used hash function. It has been used in a variety of security applications and is also commonly used to check the integrity of files.<br><br>However, MD5 is not collision resistant and it isn't suitable for applications like SSL/TLS certificates or digital signatures that rely on this property.", run: Hash.run_md5, input_type: "string", output_type: "string", args: [] }, "SHA1": { description: "The SHA (Secure Hash Algorithm) hash functions were designed by the NSA. SHA-1 is the most established of the existing SHA hash functions and it is used in a variety of security applications and protocols.<br><br>However, SHA-1's collision resistance has been weakening as new attacks are discovered or improved.", run: Hash.run_sha1, input_type: "string", output_type: "string", args: [] }, "SHA224": { description: "SHA-224 is largely identical to SHA-256 but is truncated to 224 bytes.", run: Hash.run_sha224, input_type: "string", output_type: "string", args: [] }, "SHA256": { description: "SHA-256 is one of the four variants in the SHA-2 set. It isn't as widely used as SHA-1, though it provides much better security.", run: Hash.run_sha256, input_type: "string", output_type: "string", args: [] }, "SHA384": { description: "SHA-384 is largely identical to SHA-512 but is truncated to 384 bytes.", run: Hash.run_sha384, input_type: "string", output_type: "string", args: [] }, "SHA512": { description: "SHA-512 is largely identical to SHA-256 but operates on 64-bit words rather than 32.", run: Hash.run_sha512, input_type: "string", output_type: "string", args: [] }, "SHA3": { description: "This is an implementation of Keccak[c=2d]. SHA3 functions based on different implementations of Keccak will give different results.", run: Hash.run_sha3, input_type: "string", output_type: "string", args: [ { name: "Output length", type: "option", value: Hash.SHA3_LENGTH } ] }, "RIPEMD-160": { description: "RIPEMD (RACE Integrity Primitives Evaluation Message Digest) is a family of cryptographic hash functions developed in Leuven, Belgium, by Hans Dobbertin, Antoon Bosselaers and Bart Preneel at the COSIC research group at the Katholieke Universiteit Leuven, and first published in 1996.<br><br>RIPEMD was based upon the design principles used in MD4, and is similar in performance to the more popular SHA-1.<br><br>RIPEMD-160 is an improved, 160-bit version of the original RIPEMD, and the most common version in the family.", run: Hash.run_ripemd160, input_type: "string", output_type: "string", args: [] }, "HMAC": { description: "Keyed-Hash Message Authentication Codes (HMAC) are a mechanism for message authentication using cryptographic hash functions.", run: Hash.run_hmac, input_type: "string", output_type: "string", args: [ { name: "Password", type: "binary_string", value: "" }, { name: "Hashing function", type: "option", value: Hash.HMAC_FUNCTIONS }, ] }, "Fletcher-16 Checksum": { description: "The Fletcher checksum is an algorithm for computing a position-dependent checksum devised by John Gould Fletcher at Lawrence Livermore Labs in the late 1970s.<br><br>The objective of the Fletcher checksum was to provide error-detection properties approaching those of a cyclic redundancy check but with the lower computational effort associated with summation techniques.", run: Checksum.run_fletcher16, input_type: "byte_array", output_type: "string", args: [] }, "Adler-32 Checksum": { description: "Adler-32 is a checksum algorithm which was invented by Mark Adler in 1995, and is a modification of the Fletcher checksum. Compared to a cyclic redundancy check of the same length, it trades reliability for speed (preferring the latter).<br><br>Adler-32 is more reliable than Fletcher-16, and slightly less reliable than Fletcher-32.", run: Checksum.run_adler32, input_type: "byte_array", output_type: "string", args: [] }, "CRC-32 Checksum": { description: "A cyclic redundancy check (CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data.<br><br>The CRC was invented by W. Wesley Peterson in 1961; the 32-bit CRC function of Ethernet and many other standards is the work of several researchers and was published in 1975.", run: Checksum.run_crc32, input_type: "byte_array", output_type: "string", args: [] }, "Generate all hashes": { description: "Generates all available hashes and checksums for the input.", run: Hash.run_all, input_type: "string", output_type: "string", args: [] }, "Entropy": { description: "Calculates the Shannon entropy of the input data which gives an idea of its randomness. 8 is the maximum.", run: Entropy.run_entropy, input_type: "byte_array", output_type: "html", args: [ { name: "Chunk size", type: "number", value: Entropy.CHUNK_SIZE } ] }, "Frequency distribution": { description: "Displays the distribution of bytes in the data as a graph.", run: Entropy.run_freq_distrib, input_type: "byte_array", output_type: "html", args: [ { name: "Show 0%'s", type: "boolean", value: Entropy.FREQ_ZEROS } ] }, "Numberwang": { description: "Based on the popular gameshow by Mitchell and Webb.", run: Numberwang.run, input_type: "string", output_type: "string", args: [] }, "Parse X.509 certificate": { description: "X.509 is an ITU-T standard for a public key infrastructure (PKI) and Privilege Management Infrastructure (PMI). It is commonly involved with SSL/TLS security.<br><br>This operation displays the contents of a certificate in a human readable format, similar to the openssl command line tool.", run: PublicKey.run_parse_x509, input_type: "string", output_type: "string", args: [ { name: "Input format", type: "option", value: PublicKey.X509_INPUT_FORMAT } ] }, "PEM to Hex": { description: "Converts PEM (Privacy Enhanced Mail) format to a hexadecimal DER (Distinguished Encoding Rules) string.", run: PublicKey.run_pem_to_hex, input_type: "string", output_type: "string", args: [] }, "Hex to PEM": { description: "Converts a hexadecimal DER (Distinguished Encoding Rules) string into PEM (Privacy Enhanced Mail) format.", run: PublicKey.run_hex_to_pem, input_type: "string", output_type: "string", args: [ { name: "Header string", type: "string", value: PublicKey.PEM_HEADER_STRING } ] }, "Hex to Object Identifier": { description: "Converts a hexadecimal string into an object identifier (OID).", run: PublicKey.run_hex_to_object_identifier, input_type: "string", output_type: "string", args: [] }, "Object Identifier to Hex": { description: "Converts an object identifier (OID) into a hexadecimal string.", run: PublicKey.run_object_identifier_to_hex, input_type: "string", output_type: "string", args: [] }, "Parse ASN.1 hex string": { description: "Abstract Syntax Notation One (ASN.1) is a standard and notation that describes rules and structures for representing, encoding, transmitting, and decoding data in telecommunications and computer networking.<br><br>This operation parses arbitrary ASN.1 data and presents the resulting tree.", run: PublicKey.run_parse_asn1_hex_string, input_type: "string", output_type: "string", args: [ { name: "Starting index", type: "number", value: 0 }, { name: "Truncate octet strings longer than", type: "number", value: PublicKey.ASN1_TRUNCATE_LENGTH } ] }, "Detect File Type": { description: "Attempts to guess the MIME (Multipurpose Internet Mail Extensions) type of the data based on 'magic bytes'.<br><br>Currently supports the following file types: 7z, amr, avi, bmp, bz2, class, cr2, crx, dex, dmg, doc, elf, eot, epub, exe, flac, flv, gif, gz, ico, iso, jpg, jxr, m4a, m4v, mid, mkv, mov, mp3, mp4, mpg, ogg, otf, pdf, png, ppt, ps, psd, rar, rtf, sqlite, swf, tar, tar.z, tif, ttf, utf8, vmdk, wav, webm, webp, wmv, woff, woff2, xls, xz, zip.", run: FileType.run_detect, input_type: "byte_array", output_type: "string", args: [] }, "Scan for Embedded Files": { description: "Scans the data for potential embedded files by looking for magic bytes at all offsets. This operation is prone to false positives.<br><br>WARNING: Files over about 100KB in size will take a VERY long time to process.", run: FileType.run_scan_for_embedded_files, input_type: "byte_array", output_type: "string", args: [ { name: "Ignore common byte sequences", type: "boolean", value: FileType.IGNORE_COMMON_BYTE_SEQUENCES } ] }, "Expand alphabet range": { description: "Expand an alphabet range string into a list of the characters in that range.<br><br>e.g. <code>a-z</code> becomes <code>abcdefghijklmnopqrstuvwxyz</code>.", run: SeqUtils.run_expand_alph_range, input_type: "string", output_type: "string", args: [ { name: "Delimiter", type: "binary_string", value: "" } ] }, "Diff": { description: "Compares two inputs (separated by the specified delimiter) and highlights the differences between them.", run: StrUtils.run_diff, input_type: "string", output_type: "html", args: [ { name: "Sample delimiter", type: "binary_string", value: StrUtils.DIFF_SAMPLE_DELIMITER }, { name: "Diff by", type: "option", value: StrUtils.DIFF_BY }, { name: "Show added", type: "boolean", value: true }, { name: "Show removed", type: "boolean", value: true }, { name: "Ignore whitespace (relevant for word and line)", type: "boolean", value: false } ] }, "Parse UNIX file permissions": { description: "Given a UNIX/Linux file permission string in octal or textual format, this operation explains which permissions are granted to which user groups.<br><br>Input should be in either octal (e.g. <code>755</code>) or textual (e.g. <code>drwxr-xr-x</code>) format.", run: OS.run_parse_unix_perms, input_type: "string", output_type: "string", args: [] }, "Swap endianness": { description: "Switches the data from big-endian to little-endian or vice-versa. Data can be read in as hexadecimal or raw bytes. It will be returned in the same format as it is entered.", run: Endian.run_swap_endianness, highlight: true, highlight_reverse: true, input_type: "string", output_type: "string", args: [ { name: "Data format", type: "option", value: Endian.DATA_FORMAT }, { name: "Word length (bytes)", type: "number", value: Endian.WORD_LENGTH }, { name: "Pad incomplete words", type: "boolean", value: Endian.PAD_INCOMPLETE_WORDS } ] }, "Syntax highlighter": { description: "Adds syntax highlighting to a range of source code languages. Note that this will not indent the code. Use one of the 'Beautify' operations for that.", run: Code.run_syntax_highlight, highlight: true, highlight_reverse: true, input_type: "string", output_type: "html", args: [ { name: "Language/File extension", type: "option", value: Code.LANGUAGES }, { name: "Display line numbers", type: "boolean", value: Code.LINE_NUMS } ] }, "Parse escaped string": { description: "Replaces escaped characters with the bytes they represent.<br><br>e.g.<code>Hello\\\\nWorld</code> becomes <code>Hello<br>World</code>", run: StrUtils.run_parse_escaped_string, input_type: "string", output_type: "string", args: [] }, "TCP/IP Checksum": { description: "Calculates the checksum for a TCP (Transport Control Protocol) or IP (Internet Protocol) header from an input of raw bytes.", run: Checksum.run_tcp_ip, input_type: "byte_array", output_type: "string", args: [] }, "Parse colour code": { description: "Converts a colour code in a standard format to other standard formats and displays the colour itself.<br><br><strong>Example inputs</strong><ul><li><code>#d9edf7</code></li><li><code>rgba(217,237,247,1)</code></li><li><code>hsla(200,65%,91%,1)</code></li><li><code>cmyk(0.12, 0.04, 0.00, 0.03)</code></li></ul>", run: HTML.run_parse_colour_code, input_type: "string", output_type: "html", args: [] }, "Generate UUID": { description: "Generates an RFC 4122 version 4 compliant Universally Unique Identifier (UUID), also known as a Globally Unique Identifier (GUID).<br><br>A version 4 UUID relies on random numbers, in this case generated using <code>window.crypto</code> if available and falling back to <code>Math.random</code> if not.", run: UUID.run_generate_v4, input_type: "string", output_type: "string", args: [] } }; × Search results Close "},"core_Chef.js.html":{"id":"core_Chef.js.html","title":"Source: core/Chef.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Chef.js /** * The main controller for CyberChef. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @class */ var Chef = function() { this.dish = new Dish(); }; /** * Runs the recipe over the input. * * @param {string} input_text - The input data as a string * @param {Object[]} recipe_config - The recipe configuration object * @param {Object} options - The options object storing various user choices * @param {boolean} options.attemp_highlight - Whether or not to attempt highlighting * @param {number} progress - The position in the recipe to start from * @param {number} [step] - The number of operations to execute * * @returns {Object} response * @returns {string} response.result - The output of the recipe * @returns {string} response.type - The data type of the result * @returns {number} response.progress - The position that we have got to in the recipe * @returns {number} response.options - The app options object (which may have been changed) * @returns {number} response.duration - The number of ms it took to execute the recipe * @returns {number} response.error - The error object thrown by a failed operation (false if no error) */ Chef.prototype.bake = function(input_text, recipe_config, options, progress, step) { var start_time = new Date().getTime(), recipe = new Recipe(recipe_config), contains_fc = recipe.contains_flow_control(), error = false; // Reset attempt_highlight flag if (options.hasOwnProperty("attempt_highlight")) { options.attempt_highlight = true; } if (contains_fc) options.attempt_highlight = false; // Clean up progress if (progress >= recipe_config.length) { progress = 0; } if (step) { // Unset breakpoint on this step recipe.set_breakpoint(progress, false); // Set breakpoint on next step recipe.set_breakpoint(progress + 1, true); } // If stepping with flow control, we have to start from the beginning // but still want to skip all previous breakpoints if (progress > 0 && contains_fc) { recipe.remove_breaks_up_to(progress); progress = 0; } // If starting from scratch, load data if (progress === 0) { this.dish.set(input_text, Dish.STRING); } try { progress = recipe.execute(this.dish, progress); } catch (err) { // We can't throw the error from here as we will return in the finally block and ignore it // so we return the error in the result instead. error = err; progress = err.progress; } finally { return { result: this.dish.type == Dish.HTML ? this.dish.get(Dish.HTML) : this.dish.get(Dish.STRING), type: Dish.enum_lookup(this.dish.type), progress: progress, options: options, duration: new Date().getTime() - start_time, error: error }; } }; /** * When a browser tab is unfocused and the browser has to run lots of dynamic content in other tabs, * it swaps out the memory for that tab. If the CyberChef tab has been unfocused for more than a * minute, we run a silent bake which will force the browser to load and cache all the relevant * JavaScript code needed to do a real bake. * * This will stop baking taking a long time when the CyberChef browser tab has been unfocused for a * long time and the browser has swapped out all its memory. * * The output will not be modified (hence "silent" bake). * * This will only actually execute the recipe if auto-bake is enabled, otherwise it will just load * the recipe, ingredients and dish. * * @param {Object[]} recipe_config - The recipe configuration object * @returns {number} The time it took to run the silent bake in milliseconds. */ Chef.prototype.silent_bake = function(recipe_config) { var start_time = new Date().getTime(), recipe = new Recipe(recipe_config), dish = new Dish("", Dish.STRING); try { recipe.execute(dish); } catch(err) { // Suppress all errors } return new Date().getTime() - start_time; }; × Search results Close "},"core_Dish.js.html":{"id":"core_Dish.js.html","title":"Source: core/Dish.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Dish.js /** * The data being operated on by each operation. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @class * @param {byte_array|string|number} value - The value of the input data. * @param {number} type - The data type of value, see Dish enums. */ var Dish = function(value, type) { this.value = value || typeof value == "string" ? value : null; this.type = type || Dish.BYTE_ARRAY; }; /** * Dish data type enum for byte arrays. * @readonly * @enum */ Dish.BYTE_ARRAY = 0; /** * Dish data type enum for strings. * @readonly * @enum */ Dish.STRING = 1; /** * Dish data type enum for numbers. * @readonly * @enum */ Dish.NUMBER = 2; /** * Dish data type enum for HTML. * @readonly * @enum */ Dish.HTML = 3; /** * Returns the data type enum for the given type string. * * @static * @param {string} type_str - The name of the data type. * @returns {number} The data type enum value. */ Dish.type_enum = function(type_str) { switch (type_str) { case "byte_array": case "Byte array": return Dish.BYTE_ARRAY; case "string": case "String": return Dish.STRING; case "number": case "Number": return Dish.NUMBER; case "html": case "HTML": return Dish.HTML; default: throw "Invalid data type string. No matching enum."; } }; /** * Returns the data type string for the given type enum. * * @static * @param {string} type_enum - The enum value of the data type. * @returns {number} The data type as a string. */ Dish.enum_lookup = function(type_enum) { switch (type_enum) { case Dish.BYTE_ARRAY: return "byte_array"; case Dish.STRING: return "string"; case Dish.NUMBER: return "number"; case Dish.HTML: return "html"; default: throw "Invalid data type enum. No matching type."; } }; /** * Sets the data value and type and then validates them. * * @param {byte_array|string|number} value - The value of the input data. * @param {number} type - The data type of value, see Dish enums. */ Dish.prototype.set = function(value, type) { this.value = value; this.type = type; if (!this.valid()) { var sample = Utils.truncate(JSON.stringify(this.value), 13); throw "Data is not a valid " + Dish.enum_lookup(type) + ": " + sample; } }; /** * Returns the value of the data in the type format specified. * * @param {number} type - The data type of value, see Dish enums. * @returns {byte_array|string|number} The value of the output data. */ Dish.prototype.get = function(type) { if (this.type != type) { this.translate(type); } return this.value; }; /** * Translates the data to the given type format. * * @param {number} to_type - The data type of value, see Dish enums. */ Dish.prototype.translate = function(to_type) { // Convert data to intermediate byte_array type switch (this.type) { case Dish.STRING: this.value = this.value ? Utils.str_to_byte_array(this.value) : []; this.type = Dish.BYTE_ARRAY; break; case Dish.NUMBER: this.value = typeof this.value == "number" ? Utils.str_to_byte_array(this.value.toString()) : []; this.type = Dish.BYTE_ARRAY; break; case Dish.HTML: this.value = this.value ? Utils.str_to_byte_array(Utils.strip_html_tags(this.value, true)) : []; this.type = Dish.BYTE_ARRAY; break; default: break; } // Convert from byte_array to to_type switch (to_type) { case Dish.STRING: case Dish.HTML: this.value = this.value ? Utils.byte_array_to_utf8(this.value) : ""; this.type = Dish.STRING; break; case Dish.NUMBER: this.value = this.value ? parseFloat(Utils.byte_array_to_utf8(this.value)) : 0; this.type = Dish.NUMBER; break; default: break; } }; /** * Validates that the value is the type that has been specified. * May have to disable parts of BYTE_ARRAY validation if it effects performance. * * @returns {boolean} Whether the data is valid or not. */ Dish.prototype.valid = function() { switch (this.type) { case Dish.BYTE_ARRAY: if (!(this.value instanceof Array)) { return false; } // Check that every value is a number between 0 - 255 for (var i = 0; i < this.value.length; i++) { if (typeof this.value[i] != "number" || this.value[i] < 0 || this.value[i] > 255) { return false; } } return true; case Dish.STRING: case Dish.HTML: if (typeof this.value == "string") { return true; } return false; case Dish.NUMBER: if (typeof this.value == "number") { return true; } return false; default: return false; } }; × Search results Close "},"core_FlowControl.js.html":{"id":"core_FlowControl.js.html","title":"Source: core/FlowControl.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/FlowControl.js /** * Flow Control operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var FlowControl = { /** * @constant * @default */ FORK_DELIM: "\\\\n", /** * @constant * @default */ MERGE_DELIM: "\\\\n", /** * Fork operation. * * @param {Object} state - The current state of the recipe. * @param {number} state.progress - The current position in the recipe. * @param {Dish} state.dish - The Dish being operated on. * @param {Operation[]} state.op_list - The list of operations in the recipe. * @returns {Object} The updated state of the recipe. */ run_fork: function(state) { var op_list = state.op_list, input_type = op_list[state.progress].input_type, output_type = op_list[state.progress].output_type, input = state.dish.get(input_type), ings = op_list[state.progress].get_ing_values(), split_delim = ings[0], merge_delim = ings[1], sub_op_list = [], inputs = []; if (input) inputs = input.split(split_delim); // Create sub_op_list for each tranche to operate on // (all remaining operations unless we encounter a Merge) for (var i = state.progress + 1; i < op_list.length; i++) { if (op_list[i].name == "Merge" && !op_list[i].is_disabled()) { break; } else { sub_op_list.push(op_list[i]); } } var recipe = new Recipe(), output = "", progress; recipe.add_operations(sub_op_list); // Run recipe over each tranche for (i = 0; i < inputs.length; i++) { var dish = new Dish(inputs[i], input_type); progress = recipe.execute(dish, 0); output += dish.get(output_type) + merge_delim; } state.dish.set(output, output_type); state.progress += progress; return state; }, /** * Merge operation. * * @param {Object} state - The current state of the recipe. * @param {number} state.progress - The current position in the recipe. * @param {Dish} state.dish - The Dish being operated on. * @param {Operation[]} state.op_list - The list of operations in the recipe. * @returns {Object} The updated state of the recipe. */ run_merge: function(state) { // No need to actually do anything here. The fork operation will // merge when it sees this operation. return state; }, /** * @constant * @default */ JUMP_NUM: 0, /** * @constant * @default */ MAX_JUMPS: 10, /** * Jump operation. * * @param {Object} state - The current state of the recipe. * @param {number} state.progress - The current position in the recipe. * @param {Dish} state.dish - The Dish being operated on. * @param {Operation[]} state.op_list - The list of operations in the recipe. * @param {number} state.num_jumps - The number of jumps taken so far. * @returns {Object} The updated state of the recipe. */ run_jump: function(state) { var ings = state.op_list[state.progress].get_ing_values(), jump_num = ings[0], max_jumps = ings[1]; if (state.num_jumps >= max_jumps) { throw "Reached maximum jumps, sorry!"; } state.progress += jump_num; state.num_jumps++; return state; }, /** * Conditional Jump operation. * * @param {Object} state - The current state of the recipe. * @param {number} state.progress - The current position in the recipe. * @param {Dish} state.dish - The Dish being operated on. * @param {Operation[]} state.op_list - The list of operations in the recipe. * @param {number} state.num_jumps - The number of jumps taken so far. * @returns {Object} The updated state of the recipe. */ run_cond_jump: function(state) { var ings = state.op_list[state.progress].get_ing_values(), dish = state.dish, regex_str = ings[0], jump_num = ings[1], max_jumps = ings[2]; if (state.num_jumps >= max_jumps) { throw "Reached maximum jumps, sorry!"; } if (regex_str !== "" && dish.get(Dish.STRING).search(regex_str) > -1) { state.progress += jump_num; state.num_jumps++; } return state; }, /** * Return operation. * * @param {Object} state - The current state of the recipe. * @param {number} state.progress - The current position in the recipe. * @param {Dish} state.dish - The Dish being operated on. * @param {Operation[]} state.op_list - The list of operations in the recipe. * @returns {Object} The updated state of the recipe. */ run_return: function(state) { state.progress = state.op_list.length; return state; }, }; × Search results Close "},"core_Ingredient.js.html":{"id":"core_Ingredient.js.html","title":"Source: core/Ingredient.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Ingredient.js /** * The arguments to operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @class * @param {Object} ingredient_config */ var Ingredient = function(ingredient_config) { this.name = ""; this.type = ""; this.value = null; if (ingredient_config) { this._parse_config(ingredient_config); } }; /** * Reads and parses the given config. * * @private * @param {Object} ingredient_config */ Ingredient.prototype._parse_config = function(ingredient_config) { this.name = ingredient_config.name; this.type = ingredient_config.type; }; /** * Returns the value of the Ingredient as it should be displayed in a recipe config. * * @returns {*} */ Ingredient.prototype.get_config = function() { return this.value; }; /** * Sets the value of the Ingredient. * * @param {*} value */ Ingredient.prototype.set_value = function(value) { this.value = Ingredient.prepare(value, this.type); }; /** * Most values will be strings when they are entered. This function converts them to the correct * type. * * @static * @param {*} data * @param {string} type - The name of the data type. */ Ingredient.prepare = function(data, type) { switch (type) { case "binary_string": case "binary_short_string": case "editable_option": return Utils.parse_escaped_chars(data); case "byte_array": if (typeof data == "string") { data = data.replace(/\\s+/g, ''); return Utils.hex_to_byte_array(data); } else { return data; } break; case "number": var number = parseFloat(data); if (isNaN(number)) { var sample = Utils.truncate(data.toString(), 10); throw "Invalid ingredient value. Not a number: " + sample; } return number; default: return data; } }; × Search results Close "},"core_Operation.js.html":{"id":"core_Operation.js.html","title":"Source: core/Operation.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Operation.js /** * The Operation specified by the user to be run. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @class * @param {string} operation_name * @param {Object} operation_config */ var Operation = function(operation_name, operation_config) { this.name = operation_name; this.description = ""; this.input_type = -1; this.output_type = -1; this.run = null; this.highlight = null; this.highlight_reverse = null; this.breakpoint = false; this.disabled = false; this.ing_list = []; if (operation_config) { this._parse_config(operation_config); } }; /** * Reads and parses the given config. * * @private * @param {Object} operation_config */ Operation.prototype._parse_config = function(operation_config) { this.description = operation_config.description; this.input_type = Dish.type_enum(operation_config.input_type); this.output_type = Dish.type_enum(operation_config.output_type); this.run = operation_config.run; this.highlight = operation_config.highlight; this.highlight_reverse = operation_config.highlight_reverse; this.flow_control = operation_config.flow_control; for (var a = 0; a < operation_config.args.length; a++) { var ingredient_config = operation_config.args[a]; var ingredient = new Ingredient(ingredient_config); this.add_ingredient(ingredient); } }; /** * Returns the value of the Operation as it should be displayed in a recipe config. * * @returns {Object} */ Operation.prototype.get_config = function() { var ingredient_config = []; for (var o = 0; o < this.ing_list.length; o++) { ingredient_config.push(this.ing_list[o].get_config()); } var operation_config = { "op": this.name, "args": ingredient_config }; return operation_config; }; /** * Adds a new Ingredient to this Operation. * * @param {Ingredient} ingredient */ Operation.prototype.add_ingredient = function(ingredient) { this.ing_list.push(ingredient); }; /** * Set the Ingredient values for this Operation. * * @param {Object[]} ing_values */ Operation.prototype.set_ing_values = function(ing_values) { for (var i = 0; i < ing_values.length; i++) { this.ing_list[i].set_value(ing_values[i]); } }; /** * Get the Ingredient values for this Operation. * * @returns {Object[]} */ Operation.prototype.get_ing_values = function() { var ing_values = []; for (var i = 0; i < this.ing_list.length; i++) { ing_values.push(this.ing_list[i].value); } return ing_values; }; /** * Set whether this Operation has a breakpoint. * * @param {boolean} value */ Operation.prototype.set_breakpoint = function(value) { this.breakpoint = !!value; }; /** * Returns true if this Operation has a breakpoint set. * * @returns {boolean} */ Operation.prototype.is_breakpoint = function() { return this.breakpoint; }; /** * Set whether this Operation is disabled. * * @param {boolean} value */ Operation.prototype.set_disabled = function(value) { this.disabled = !!value; }; /** * Returns true if this Operation is disabled. * * @returns {boolean} */ Operation.prototype.is_disabled = function() { return this.disabled; }; /** * Returns true if this Operation is a flow control. * * @returns {boolean} */ Operation.prototype.is_flow_control = function() { return this.flow_control; }; × Search results Close "},"core_Recipe.js.html":{"id":"core_Recipe.js.html","title":"Source: core/Recipe.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Recipe.js /** * The Recipe controls a list of Operations and the Dish they operate on. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @class * @param {Object} recipe_config */ var Recipe = function(recipe_config) { this.op_list = []; if (recipe_config) { this._parse_config(recipe_config); } }; /** * Reads and parses the given config. * * @private * @param {Object} recipe_config */ Recipe.prototype._parse_config = function(recipe_config) { for (var c = 0; c < recipe_config.length; c++) { var operation_name = recipe_config[c].op; var operation_config = OperationConfig[operation_name]; var operation = new Operation(operation_name, operation_config); operation.set_ing_values(recipe_config[c].args); operation.set_breakpoint(recipe_config[c].breakpoint); operation.set_disabled(recipe_config[c].disabled); this.add_operation(operation); } }; /** * Returns the value of the Recipe as it should be displayed in a recipe config. * * @returns {*} */ Recipe.prototype.get_config = function() { var recipe_config = []; for (var o = 0; o < this.op_list.length; o++) { recipe_config.push(this.op_list[o].get_config()); } return recipe_config; }; /** * Adds a new Operation to this Recipe. * * @param {Operation} operation */ Recipe.prototype.add_operation = function(operation) { this.op_list.push(operation); }; /** * Adds a list of Operations to this Recipe. * * @param {Operation[]} operations */ Recipe.prototype.add_operations = function(operations) { this.op_list = this.op_list.concat(operations); }; /** * Set a breakpoint on a specified Operation. * * @param {number} position - The index of the Operation * @param {boolean} value */ Recipe.prototype.set_breakpoint = function(position, value) { try { this.op_list[position].set_breakpoint(value); } catch (err) { // Ignore index error } }; /** * Remove breakpoints on all Operations in the Recipe up to the specified position. Used by Flow * Control Fork operation. * * @param {number} pos */ Recipe.prototype.remove_breaks_up_to = function(pos) { for (var i = 0; i < pos; i++) { this.op_list[i].set_breakpoint(false); } }; /** * Returns true if there is an Flow Control Operation in this Recipe. * * @returns {boolean} */ Recipe.prototype.contains_flow_control = function() { for (var i = 0; i < this.op_list.length; i++) { if (this.op_list[i].is_flow_control()) return true; } return false; }; /** * Returns the index of the last Operation index that will be executed, taking into account disabled * Operations and breakpoints. * * @param {number} [start_index=0] - The index to start searching from * @returns (number} */ Recipe.prototype.last_op_index = function(start_index) { var i = start_index + 1 || 0, op; for (; i < this.op_list.length; i++) { op = this.op_list[i]; if (op.is_disabled()) return i-1; if (op.is_breakpoint()) return i-1; } return i-1; }; /** * Executes each operation in the recipe over the given Dish. * * @param {Dish} dish * @param {number} [start_from=0] - The index of the Operation to start executing from * @returns {number} - The final progress through the recipe */ Recipe.prototype.execute = function(dish, start_from) { start_from = start_from || 0; var op, input, output, num_jumps = 0; for (var i = start_from; i < this.op_list.length; i++) { op = this.op_list[i]; if (op.is_disabled()) { continue; } if (op.is_breakpoint()) { return i; } try { input = dish.get(op.input_type); if (op.is_flow_control()) { // Package up the current state var state = { "progress" : i, "dish" : dish, "op_list" : this.op_list, "num_jumps" : num_jumps }; state = op.run(state); i = state.progress; num_jumps = state.num_jumps; } else { output = op.run(input, op.get_ing_values()); dish.set(output, op.output_type); } } catch (err) { var e = typeof err == "string" ? { message: err } : err; e.progress = i; e.display_str = op.name + " - "; if (e.fileName) { e.display_str += e.name + " in " + e.fileName + " on line " + e.lineNumber + ".<br><br>Message: " + e.message; } else { e.display_str += e.message; } throw e; } } return this.op_list.length; }; /** * Returns the recipe configuration in string format. * * @returns {string} */ Recipe.prototype.to_string = function() { return JSON.stringify(this.get_config()); }; /** * Creates a Recipe from a given configuration string. * * @param {string} recipe_str */ Recipe.prototype.from_string = function(recipe_str) { var recipe_config = JSON.parse(recipe_str); this._parse_config(recipe_config); }; × Search results Close "},"core_Utils.js.html":{"id":"core_Utils.js.html","title":"Source: core/Utils.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: core/Utils.js /* globals CryptoJS, moment */ /** * Utility functions for use in operations, the core framework and the stage. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Utils = { /** * Translates an ordinal into a character. * * @param {number} o * @returns {char} * * @example * // returns 'a' * Utils.chr(97); */ chr: function(o) { return String.fromCharCode(o); }, /** * Translates a character into an ordinal. * * @param {char} c * @returns {number} * * @example * // returns 97 * Utils.ord('a'); */ ord: function(c) { return c.charCodeAt(0); }, /** * Adds leading zeros to strings * * @param {string} str - String to add leading characters to. * @param {number} max - Maximum width of the string. * @param {char} [chr='0'] - The character to pad with. * @returns {string} * * @example * // returns "0a" * Utils.pad_left("a", 2); * * // returns "000a" * Utils.pad_left("a", 4); * * // returns "xxxa" * Utils.pad_left("a", 4, "x"); * * // returns "bcabchello" * Utils.pad_left("hello", 10, "abc"); */ pad_left: function(str, max, chr) { chr = chr || "0"; var start_index = chr.length - (max - str.length); start_index = start_index < 0 ? 0 : start_index; return str.length < max ? Utils.pad_left(chr.slice(start_index, chr.length) + str, max, chr) : str; }, /** * Adds trailing spaces to strings. * * @param {string} str - String to add trailing characters to. * @param {number} max - Maximum width of the string. * @param {char} [chr='0'] - The character to pad with. * @returns {string} * * @example * // returns "a " * Utils.pad_right("a", 4); * * // returns "axxx" * Utils.pad_right("a", 4, "x"); */ pad_right: function(str, max, chr) { chr = chr || " "; return str.length < max ? Utils.pad_right(str + chr.slice(0, max-str.length), max, chr) : str; }, /** * @alias Utils.pad_left */ pad: function(str, max, chr) { return Utils.pad_left(str, max, chr); }, /** * Truncates a long string to max length and adds suffix. * * @param {string} str - String to truncate * @param {number} max - Maximum length of the final string * @param {string} [suffix='...'] - The string to add to the end of the final string * @returns {string} * * @example * // returns "A long..." * Utils.truncate("A long string", 9); * * // returns "A long s-" * Utils.truncate("A long string", 9, "-"); */ truncate: function(str, max, suffix) { suffix = suffix || "..."; if (str.length > max) { str = str.slice(0, max - suffix.length) + suffix; } return str; }, /** * Converts a character or number to its hex representation. * * @param {char|number} c * @param {number} [length=2] - The width of the resulting hex number. * @returns {string} * * @example * // returns "6e" * Utils.hex("n"); * * // returns "6e" * Utils.hex(110); */ hex: function(c, length) { c = typeof c == "string" ? Utils.ord(c) : c; length = length || 2; return Utils.pad(c.toString(16), length); }, /** * Converts a character or number to its binary representation. * * @param {char|number} c * @param {number} [length=8] - The width of the resulting binary number. * @returns {string} * * @example * // returns "01101110" * Utils.bin("n"); * * // returns "01101110" * Utils.bin(110); */ bin: function(c, length) { c = typeof c == "string" ? Utils.ord(c) : c; length = length || 8; return Utils.pad(c.toString(2), length); }, /** * Returns a string with all non-printable chars as dots, optionally preserving whitespace. * * @param {string} str - The input string to display. * @param {boolean} [preserve_ws=false] - Whether or not to print whitespace. * @returns {string} */ printable: function(str, preserve_ws) { if (window && window.app && !window.app.options.treat_as_utf8) { str = Utils.byte_array_to_chars(Utils.str_to_byte_array(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 ws_re = /[\\x09-\\x10\\x0D\\u2028\\u2029]/g; str = str.replace(re, "."); if (!preserve_ws) str = str.replace(ws_re, "."); return str; }, /** * Parse a string entered by a user and replace escaped chars with the bytes they represent. * * @param {string} str * @returns {string} * * @example * // returns "\\x00" * Utils.parse_escaped_chars("\\\\x00"); * * // returns "\\n" * Utils.parse_escaped_chars("\\\\n"); */ parse_escaped_chars: function(str) { return str.replace(/(\\\\)?\\\\([nrtbf]|x[\\da-f]{2})/g, function(m, a, b) { if (a == "\\\\") return "\\\\"+b; switch (b[0]) { case "n": return "\\n"; case "r": return "\\r"; case "t": return "\\t"; case "b": return "\\b"; case "f": return "\\f"; case "x": return Utils.chr(parseInt(b.substr(1), 16)); } }); }, /** * Expand an alphabet range string into a list of the characters in that range. * * @param {string} alph_str * @returns {char[]} * * @example * // returns ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] * Utils.expand_alph_range("0-9"); * * // returns ["a", "b", "c", "d", "0", "1", "2", "3", "+", "/"] * Utils.expand_alph_range("a-d0-3+/"); * * // returns ["a", "b", "c", "d", "0", "-", "3"] * Utils.expand_alph_range("a-d0\\\\-3") */ expand_alph_range: function(alph_str) { var alph_arr = []; for (var i = 0; i < alph_str.length; i++) { if (i < alph_str.length - 2 && alph_str[i+1] == "-" && alph_str[i] != "\\\\") { var start = Utils.ord(alph_str[i]), end = Utils.ord(alph_str[i+2]); for (var j = start; j <= end; j++) { alph_arr.push(Utils.chr(j)); } i += 2; } else if (i < alph_str.length - 2 && alph_str[i] == "\\\\" && alph_str[i+1] == "-") { alph_arr.push("-"); i++; } else { alph_arr.push(alph_str[i]); } } return alph_arr; }, /** * Translates a hex string into an array of bytes. * * @param {string} hex_str * @returns {byte_array} * * @example * // returns [0xfe, 0x09, 0xa7] * Utils.hex_to_byte_array("fe09a7"); */ hex_to_byte_array: function(hex_str) { // TODO: Handle errors i.e. input string is not hex if (!hex_str) return []; hex_str = hex_str.replace(/\\s+/g, ''); var byte_array = []; for (var i = 0; i < hex_str.length; i += 2) { byte_array.push(parseInt(hex_str.substr(i, 2), 16)); } return byte_array; }, /** * Translates an array of bytes to a hex string. * * @param {byte_array} byte_array * @returns {string} * * @example * // returns "fe09a7" * Utils.byte_array_to_hex([0xfe, 0x09, 0xa7]); */ byte_array_to_hex: function(byte_array) { if (!byte_array) return ""; var hex_str = ""; for (var i = 0; i < byte_array.length; i++) { hex_str += Utils.hex(byte_array[i]) + " "; } return hex_str.slice(0, hex_str.length-1); }, /** * Converts a string to a byte array. * Treats the string as UTF-8 if any values are over 255. * * @param {string} str * @returns {byte_array} * * @example * // returns [72,101,108,108,111] * Utils.str_to_byte_array("Hello"); * * // returns [228,189,160,229,165,189] * Utils.str_to_byte_array("你好"); */ str_to_byte_array: function(str) { var byte_array = new Array(str.length); var i = str.length, b; while (i--) { b = str.charCodeAt(i); byte_array[i] = b; // If any of the bytes are over 255, read as UTF-8 if (b > 255) return Utils.str_to_utf8_byte_array(str); } return byte_array; }, /** * Converts a string to a UTF-8 byte array. * * @param {string} str * @returns {byte_array} * * @example * // returns [72,101,108,108,111] * Utils.str_to_utf8_byte_array("Hello"); * * // returns [228,189,160,229,165,189] * Utils.str_to_utf8_byte_array("你好"); */ str_to_utf8_byte_array: function(str) { var word_array = CryptoJS.enc.Utf8.parse(str), byte_array = Utils.word_array_to_byte_array(word_array); if (str.length != word_array.sigBytes) window.app.options.attempt_highlight = false; return byte_array; }, /** * Converts a string to a charcode array * * @param {string} str * @returns {byte_array} * * @example * // returns [72,101,108,108,111] * Utils.str_to_charcode("Hello"); * * // returns [20320,22909] * Utils.str_to_charcode("你好"); */ str_to_charcode: function(str) { var byte_array = new Array(str.length); var i = str.length; while (i--) { byte_array[i] = str.charCodeAt(i); } return byte_array; }, /** * Attempts to convert a byte array to a UTF-8 string. * * @param {byte_array} byte_array * @returns {string} * * @example * // returns "Hello" * Utils.byte_array_to_utf8([72,101,108,108,111]); * * // returns "你好" * Utils.byte_array_to_utf8([228,189,160,229,165,189]); */ byte_array_to_utf8: function(byte_array) { try { // Try to output data as UTF-8 string var words = []; for (var i = 0; i < byte_array.length; i++) { words[i >>> 2] |= byte_array[i] << (24 - (i % 4) * 8); } var word_array = new CryptoJS.lib.WordArray.init(words, byte_array.length), str = CryptoJS.enc.Utf8.stringify(word_array); if (str.length != word_array.sigBytes) window.app.options.attempt_highlight = false; return str; } catch (err) { // If it fails, treat it as ANSI return Utils.byte_array_to_chars(byte_array); } }, /** * Converts a charcode array to a string. * * @param {byte_array} byte_array * @returns {string} * * @example * // returns "Hello" * Utils.byte_array_to_chars([72,101,108,108,111]); * * // returns "你好" * Utils.byte_array_to_chars([20320,22909]); */ byte_array_to_chars: function(byte_array) { if (!byte_array) return ""; var str = ""; for (var i = 0; i < byte_array.length;) { str += String.fromCharCode(byte_array[i++]); } return str; }, /** * Converts a CryptoJS.lib.WordArray to a byte_array. * * @param {CryptoJS.lib.WordArray} word_array * @returns {byte_array} * * @example * // returns [84, 101, 115, 116] * Utils.word_array_to_byte_array(CryptoJS.enc.Hex.parse("54657374")); */ word_array_to_byte_array: function(word_array) { if (word_array.sigBytes <= 0) return []; var words = word_array.words, byte_array = []; for (var i = 0; i < word_array.sigBytes; i++) { byte_array.push((words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff); } return byte_array; }, /** * Mapping of Unicode code points to Windows-1251 * @private * @constant */ UNIC_WIN1251_MAP: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 1027: 129, 8225: 135, 1046: 198, 8222: 132, 1047: 199, 1168: 165, 1048: 200, 1113: 154, 1049: 201, 1045: 197, 1050: 202, 1028: 170, 160: 160, 1040: 192, 1051: 203, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 1053: 205, 176: 176, 177: 177, 1114: 156, 181: 181, 182: 182, 183: 183, 8221: 148, 187: 187, 1029: 189, 1056: 208, 1057: 209, 1058: 210, 8364: 136, 1112: 188, 1115: 158, 1059: 211, 1060: 212, 1030: 178, 1061: 213, 1062: 214, 1063: 215, 1116: 157, 1064: 216, 1065: 217, 1031: 175, 1066: 218, 1067: 219, 1068: 220, 1069: 221, 1070: 222, 1032: 163, 8226: 149, 1071: 223, 1072: 224, 8482: 153, 1073: 225, 8240: 137, 1118: 162, 1074: 226, 1110: 179, 8230: 133, 1075: 227, 1033: 138, 1076: 228, 1077: 229, 8211: 150, 1078: 230, 1119: 159, 1079: 231, 1042: 194, 1080: 232, 1034: 140, 1025: 168, 1081: 233, 1082: 234, 8212: 151, 1083: 235, 1169: 180, 1084: 236, 1052: 204, 1085: 237, 1035: 142, 1086: 238, 1087: 239, 1088: 240, 1089: 241, 1090: 242, 1036: 141, 1041: 193, 1091: 243, 1092: 244, 8224: 134, 1093: 245, 8470: 185, 1094: 246, 1054: 206, 1095: 247, 1096: 248, 8249: 139, 1097: 249, 1098: 250, 1044: 196, 1099: 251, 1111: 191, 1055: 207, 1100: 252, 1038: 161, 8220: 147, 1101: 253, 8250: 155, 1102: 254, 8216: 145, 1103: 255, 1043: 195, 1105: 184, 1039: 143, 1026: 128, 1106: 144, 8218: 130, 1107: 131, 8217: 146, 1108: 186, 1109: 190 }, /** * Mapping of Windows-1251 code points to Unicode * @private * @constant */ WIN1251_UNIC_MAP: { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 160: 160, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 176: 176, 177: 177, 181: 181, 182: 182, 183: 183, 187: 187, 168: 1025, 128: 1026, 129: 1027, 170: 1028, 189: 1029, 178: 1030, 175: 1031, 163: 1032, 138: 1033, 140: 1034, 142: 1035, 141: 1036, 161: 1038, 143: 1039, 192: 1040, 193: 1041, 194: 1042, 195: 1043, 196: 1044, 197: 1045, 198: 1046, 199: 1047, 200: 1048, 201: 1049, 202: 1050, 203: 1051, 204: 1052, 205: 1053, 206: 1054, 207: 1055, 208: 1056, 209: 1057, 210: 1058, 211: 1059, 212: 1060, 213: 1061, 214: 1062, 215: 1063, 216: 1064, 217: 1065, 218: 1066, 219: 1067, 220: 1068, 221: 1069, 222: 1070, 223: 1071, 224: 1072, 225: 1073, 226: 1074, 227: 1075, 228: 1076, 229: 1077, 230: 1078, 231: 1079, 232: 1080, 233: 1081, 234: 1082, 235: 1083, 236: 1084, 237: 1085, 238: 1086, 239: 1087, 240: 1088, 241: 1089, 242: 1090, 243: 1091, 244: 1092, 245: 1093, 246: 1094, 247: 1095, 248: 1096, 249: 1097, 250: 1098, 251: 1099, 252: 1100, 253: 1101, 254: 1102, 255: 1103, 184: 1105, 144: 1106, 131: 1107, 186: 1108, 190: 1109, 179: 1110, 191: 1111, 188: 1112, 154: 1113, 156: 1114, 158: 1115, 157: 1116, 162: 1118, 159: 1119, 165: 1168, 180: 1169, 150: 8211, 151: 8212, 145: 8216, 146: 8217, 130: 8218, 147: 8220, 148: 8221, 132: 8222, 134: 8224, 135: 8225, 149: 8226, 133: 8230, 137: 8240, 139: 8249, 155: 8250, 136: 8364, 185: 8470, 153: 8482 }, /** * Converts a Unicode string to Windows-1251 encoding * * @param {string} unic_str * @returns {string} String encoded in Windows-1251 * * @example * // returns "îáíîâëåííàÿ òåõíè÷êà ïî Áîèíãó. îðèãèíàë ó ìåíÿ. çàáåðåòå êîãäà áóäåòå â ÊÈ" * Utils.unicode_to_win1251("обновленная техничка по Боингу. оригинал у меня. заберете когда будете в КИ"); */ unicode_to_win1251: function(unic_str) { var res = []; for (var i = 0; i < unic_str.length; i++) { var ord = unic_str.charCodeAt(i); if (!(ord in Utils.UNIC_WIN1251_MAP)) throw "Character '" + unic_str.charAt(i) + "' isn't supported by Windows-1251"; res.push(String.fromCharCode(Utils.UNIC_WIN1251_MAP[ord])); } return res.join(''); }, /** * Converts a Windows-1251 string to Unicode encoding * * @param {string} win1251_str * @returns {string} String encoded in Unicode * * @example * // returns "обновленная техничка по Боингу. оригинал у меня. заберете когда будете в КИ" * Utils.unicode_to_win1251("îáíîâëåííàÿ òåõíè÷êà ïî Áîèíãó. îðèãèíàë ó ìåíÿ. çàáåðåòå êîãäà áóäåòå â ÊÈ"); */ win1251_to_unicode: function(win1251_str) { var res = []; for (var i = 0; i < win1251_str.length; i++) { var ord = win1251_str.charCodeAt(i); if (!(ord in Utils.WIN1251_UNIC_MAP)) throw "Character '" + win1251_str.charAt(i) + "' isn't supported by Windows-1251"; res.push(String.fromCharCode(Utils.WIN1251_UNIC_MAP[ord])); } return res.join(''); }, /** * Base64's the input byte array using the given alphabet, returning a string. * * @param {byte_array|string} data * @param {string} [alphabet] * @returns {string} * * @example * // returns "SGVsbG8=" * Utils.to_base64([72, 101, 108, 108, 111]); * * // returns "SGVsbG8=" * Utils.to_base64("Hello"); */ to_base64: function(data, alphabet) { if (!data) return ""; if (typeof data == "string") { data = Utils.str_to_byte_array(data); } alphabet = alphabet ? Utils.expand_alph_range(alphabet).join("") : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; while (i < data.length) { chr1 = data[i++]; chr2 = data[i++]; chr3 = data[i++]; enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output += alphabet.charAt(enc1) + alphabet.charAt(enc2) + alphabet.charAt(enc3) + alphabet.charAt(enc4); } return output; }, /** * UnBase64's the input string using the given alphabet, returning a byte array. * * @param {byte_array} data * @param {string} [alphabet] * @param {string} [return_type="string"] - Either "string" or "byte_array" * @param {boolean} [remove_non_alph_chars=true] * @returns {byte_array} * * @example * // returns "Hello" * Utils.from_base64("SGVsbG8="); * * // returns [72, 101, 108, 108, 111] * Utils.from_base64("SGVsbG8=", null, "byte_array"); */ from_base64: function(data, alphabet, return_type, remove_non_alph_chars) { return_type = return_type || "string"; if (!data) { return return_type == "string" ? "" : []; } alphabet = alphabet ? Utils.expand_alph_range(alphabet).join("") : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; if (remove_non_alph_chars === undefined) remove_non_alph_chars = true; var output = [], chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0; if (remove_non_alph_chars) { var re = new RegExp("[^" + alphabet.replace(/[\\[\\]\\\\\\-^$]/g, "\\\\$&") + "]", "g"); data = data.replace(re, ""); } while (i < data.length) { enc1 = alphabet.indexOf(data.charAt(i++)); enc2 = alphabet.indexOf(data.charAt(i++) || "="); enc3 = alphabet.indexOf(data.charAt(i++) || "="); enc4 = alphabet.indexOf(data.charAt(i++) || "="); enc2 = enc2 == -1 ? 64 : enc2; enc3 = enc3 == -1 ? 64 : enc3; enc4 = enc4 == -1 ? 64 : enc4; chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output.push(chr1); if (enc3 != 64) { output.push(chr2); } if (enc4 != 64) { output.push(chr3); } } return return_type == "string" ? Utils.byte_array_to_utf8(output) : output; }, /** * Convert a byte array into a hex string. * * @param {byte_array} data * @param {string} [delim=" "] * @param {number} [padding=2] * @returns {string} * * @example * // returns "0a 14 1e" * Utils.to_hex([10,20,30]); * * // returns "0a:14:1e" * Utils.to_hex([10,20,30], ":"); */ to_hex: function(data, delim, padding) { if (!data) return ""; delim = typeof delim == "string" ? delim : " "; padding = padding || 2; var output = ""; for (var i = 0; i < data.length; i++) { output += Utils.pad(data[i].toString(16), padding) + delim; } // Add \\x or 0x to beginning if (delim == "0x") output = "0x" + output; if (delim == "\\\\x") output = "\\\\x" + output; if (delim.length) return output.slice(0, -delim.length); else return output; }, /** * Convert a byte array into a hex string as efficiently as possible with no options. * * @param {byte_array} data * @returns {string} * * @example * // returns "0a141e" * Utils.to_hex([10,20,30]); */ to_hex_fast: function(data) { if (!data) return ""; var output = []; for (var i = 0; i < data.length; i++) { output.push((data[i] >>> 4).toString(16)); output.push((data[i] & 0x0f).toString(16)); } return output.join(""); }, /** * Convert a hex string into a byte array. * * @param {string} data * @param {string} [delim] * @param {number} [byte_len=2] * @returns {byte_array} * * @example * // returns [10,20,30] * Utils.from_hex("0a 14 1e"); * * // returns [10,20,30] * Utils.from_hex("0a:14:1e", "Colon"); */ from_hex: function(data, delim, byte_len) { delim = delim || (data.indexOf(" ") >= 0 ? "Space" : "None"); byte_len = byte_len || 2; if (delim != "None") { var delim_regex = Utils.regex_rep[delim]; data = data.replace(delim_regex, ''); } var output = []; for (var i = 0; i < data.length; i += byte_len) { output.push(parseInt(data.substr(i, byte_len), 16)); } return output; }, /** * Parses CSV data and returns it as a two dimensional array or strings. * * @param {string} data * @returns {string[][]} * * @example * // returns [["head1", "head2"], ["data1", "data2"]] * Utils.parse_csv("head1,head2\\ndata1,data2"); */ parse_csv: function(data) { var b, ignore_next = false, in_string = false, cell = "", line = [], lines = []; for (var i = 0; i < data.length; i++) { b = data[i]; if (ignore_next) { cell += b; ignore_next = false; } else if (b == "\\\\") { cell += b; ignore_next = true; } else if (b == "\\"" && !in_string) { in_string = true; } else if (b == "\\"" && in_string) { in_string = false; } else if (b == "," && !in_string) { line.push(cell); cell = ""; } else if ((b == "\\n" || b == "\\r") && !in_string) { line.push(cell); cell = ""; lines.push(line); line = []; } else { cell += b; } } if (line.length) { line.push(cell); lines.push(line); } return lines; }, /** * Removes all HTML (or XML) tags from the input string. * * @param {string} html_str * @param {boolean} remove_script_and_style - Flag to specify whether to remove entire script or style blocks * @returns {string} * * @example * // returns "Test" * Utils.strip_html_tags("<div>Test</div>"); */ strip_html_tags: function(html_str, remove_script_and_style) { if (remove_script_and_style) { html_str = html_str.replace(/<(script|style)[^>]*>.*<\\/(script|style)>/gmi, ""); } return html_str.replace(/<[^>\\n]+>/g, ""); }, /** * Escapes HTML tags in a string to stop them being rendered * * @param {string} str * @returns string * * @example * // return "A &lt;script> tag" * Utils.escape_html("A <script> tag"); */ escape_html: function(str) { return str.replace(/</g, "&lt;"); }, /** * Expresses a number of milliseconds in a human readable format. * * Range | Sample Output * -----------------------------|------------------------------- * 0 to 45 seconds | a few seconds ago * 45 to 90 seconds | a minute ago * 90 seconds to 45 minutes | 2 minutes ago ... 45 minutes ago * 45 to 90 minutes | an hour ago * 90 minutes to 22 hours | 2 hours ago ... 22 hours ago * 22 to 36 hours | a day ago * 36 hours to 25 days | 2 days ago ... 25 days ago * 25 to 45 days | a month ago * 45 to 345 days | 2 months ago ... 11 months ago * 345 to 545 days (1.5 years) | a year ago * 546 days+ | 2 years ago ... 20 years ago * * @param {number} ms * @returns {string} * * @example * // returns "3 minutes" * Utils.fuzzy_time(152435); * * // returns "5 days" * Utils.fuzzy_time(456851321); */ fuzzy_time: function(ms) { return moment.duration(ms, "milliseconds").humanize(); }, /** * Adds the properties of one Object to another. * * @param {Object} a * @param {Object} b * @returns {Object} */ extend: function(a, b){ for(var key in b) if(b.hasOwnProperty(key)) a[key] = b[key]; return a; }, /** * A mapping of names of delimiter characters to their symbols. * @constant */ char_rep: { "Space": " ", "Comma": ",", "Semi-colon": ";", "Colon": ":", "Line feed": "\\n", "CRLF": "\\r\\n", "0x": "0x", "\\\\x": "\\\\x", "Nothing (separate chars)": "", "None": "", }, /** * A mapping of names of delimiter characters to regular expressions which can select them. * @constant */ regex_rep: { "Space": /\\s+/g, "Comma": /,/g, "Semi-colon": /;/g, "Colon": /:/g, "Line feed": /\\n/g, "CRLF": /\\r\\n/g, "0x": /0x/g, "\\\\x": /\\\\x/g }, /** * A mapping of string formats to their classes in the CryptoJS library. * @constant */ format: { "Hex": CryptoJS.enc.Hex, "Base64": CryptoJS.enc.Base64, "UTF8": CryptoJS.enc.Utf8, "UTF16": CryptoJS.enc.Utf16, "UTF16LE": CryptoJS.enc.Utf16LE, "UTF16BE": CryptoJS.enc.Utf16BE, "Latin1": CryptoJS.enc.Latin1, }, }; /** * A jQuery function to select a range of text. * * @param {number} start * @param {number} end * * @example * // Highlights the 4th, 5th and 6th characters in the element #input-text. * $("#input-text").selectRange(3,5); * * // Places the cursor at the beginning of the element #input-text. * $("#input-text").selectRange(0); */ $.fn.selectRange = function(start, end) { if (!end) end = start; return this.each(function() { if (this.setSelectionRange) { this.focus(); this.setSelectionRange(start, end); } else if (this.createTextRange) { var range = this.createTextRange(); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', start); range.select(); } }); }; /** * Removes all duplicates from an array. * * @returns {Array} * * @example * // returns [3,6,4,8,2] * [3,6,4,8,4,2,3].unique(); * * // returns ["One", "Two", "Three"] * ["One", "Two", "Three", "One"].unique(); */ Array.prototype.unique = function() { var u = {}, a = []; for (var i = 0, l = this.length; i < l; i++) { if (u.hasOwnProperty(this[i])) { continue; } a.push(this[i]); u[this[i]] = 1; } return a; }; /** * Returns the largest value in the array. * * @returns {number} * * @example * // returns 7 * [4,2,5,3,7].max(); */ Array.prototype.max = function() { return Math.max.apply(null, this); }; /** * Returns the smallest value in the array. * * @returns {number} * * @example * // returns 2 * [4,2,5,3,7].min(); */ Array.prototype.min = function() { return Math.min.apply(null, this); }; /** * Sums all the values in an array. * * @returns {number} * * @example * // returns 21 * [4,2,5,3,7].sum(); */ Array.prototype.sum = function() { return this.reduce(function (a, b) { return a + b; }, 0); }; /** * Determine whether two arrays are equal or not. * * @param {Object[]} other * @returns {boolean} * * @example * // returns true * [1,2,3].equals([1,2,3]); * * // returns false * [1,2,3].equals([3,2,1]); */ Array.prototype.equals = function(other) { if (!other) return false; var i = this.length; if (i != other.length) return false; while (i--) { if (this[i] !== other[i]) return false; } return true; }; /** * Counts the number of times a char appears in a string. * * @param {char} chr * @returns {number} * * @example * // returns 2 * "Hello".count("l"); */ String.prototype.count = function(chr) { return this.split(chr).length - 1; }; //////////////////////////////////////////////////////////////////////////////////////////////////// // Library overrides /////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// /** * Override for the CryptoJS Hex encoding parser to remove whitespace before attempting to parse * the hex string. * * @param {string} hexStr * @returns {CryptoJS.lib.WordArray} */ CryptoJS.enc.Hex.parse = function (hexStr) { // Remove whitespace hexStr = hexStr.replace(/\\s/g, ""); // Shortcut var hexStrLength = hexStr.length; // Convert var words = []; for (var i = 0; i < hexStrLength; i += 2) { words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); } return new CryptoJS.lib.WordArray.init(words, hexStrLength / 2); }; × Search results Close "},"operations_Base.js.html":{"id":"operations_Base.js.html","title":"Source: operations/Base.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Base.js /** * Numerical base operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Base = { /** * @constant * @default */ DEFAULT_RADIX: 36, /** * To Base operation. * * @param {number} input * @param {Object[]} args * @returns {string} */ run_to: function(input, args) { if (!input) { throw ("Error: Input must be a number"); } var radix = args[0] || Base.DEFAULT_RADIX; if (radix < 2 || radix > 36) { throw "Error: Radix argument must be between 2 and 36"; } return input.toString(radix); }, /** * From Base operation. * * @param {string} input * @param {Object[]} args * @returns {number} */ run_from: function(input, args) { var radix = args[0] || Base.DEFAULT_RADIX; if (radix < 2 || radix > 36) { throw "Error: Radix argument must be between 2 and 36"; } return parseInt(input.replace(/\\s/g, ""), radix); }, }; × Search results Close "},"operations_Base64.js.html":{"id":"operations_Base64.js.html","title":"Source: operations/Base64.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Base64.js /** * Base64 operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Base64 = { /** * @constant * @default */ ALPHABET: "A-Za-z0-9+/=", /** * @constant * @default */ ALPHABET_OPTIONS: [ {name: "Standard: A-Za-z0-9+/=", value: "A-Za-z0-9+/="}, {name: "URL safe: A-Za-z0-9-_", value: "A-Za-z0-9-_"}, {name: "Filename safe: A-Za-z0-9+-=", value: "A-Za-z0-9+\\\\-="}, {name: "itoa64: ./0-9A-Za-z=", value: "./0-9A-Za-z="}, {name: "XML: A-Za-z0-9_.", value: "A-Za-z0-9_."}, {name: "y64: A-Za-z0-9._-", value: "A-Za-z0-9._-"}, {name: "z64: 0-9a-zA-Z+/=", value: "0-9a-zA-Z+/="}, {name: "Radix-64: 0-9A-Za-z+/=", value: "0-9A-Za-z+/="}, {name: "Uuencoding: [space]-_", value: " -_"}, {name: "Xxencoding: +-0-9A-Za-z", value: "+\\\\-0-9A-Za-z"}, {name: "BinHex: !-,-0-689@A-NP-VX-Z[`a-fh-mp-r", value: "!-,-0-689@A-NP-VX-Z[`a-fh-mp-r"}, {name: "ROT13: N-ZA-Mn-za-m0-9+/=", value: "N-ZA-Mn-za-m0-9+/="}, ], /** * To Base64 operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to: function(input, args) { var alphabet = args[0] || Base64.ALPHABET; return Utils.to_base64(input, alphabet); }, /** * @constant * @default */ REMOVE_NON_ALPH_CHARS: true, /** * From Base64 operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from: function(input, args) { var alphabet = args[0] || Base64.ALPHABET, remove_non_alph_chars = args[1]; return Utils.from_base64(input, alphabet, "byte_array", remove_non_alph_chars); }, /** * @constant * @default */ BASE32_ALPHABET: "A-Z2-7=", /** * To Base32 operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to_32: function(input, args) { if (!input) return ""; var alphabet = args[0] ? Utils.expand_alph_range(args[0]).join("") : "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=", output = "", chr1, chr2, chr3, chr4, chr5, enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8, i = 0; while (i < input.length) { chr1 = input[i++]; chr2 = input[i++]; chr3 = input[i++]; chr4 = input[i++]; chr5 = input[i++]; enc1 = chr1 >> 3; enc2 = ((chr1 & 7) << 2) | (chr2 >> 6); enc3 = (chr2 >> 1) & 31; enc4 = ((chr2 & 1) << 4) | (chr3 >> 4); enc5 = ((chr3 & 15) << 1) | (chr4 >> 7); enc6 = (chr4 >> 2) & 63; enc7 = ((chr4 & 3) << 3) | (chr5 >> 5); enc8 = chr5 & 31; if (isNaN(chr2)) { enc3 = enc4 = enc5 = enc6 = enc7 = enc8 = 32; } else if (isNaN(chr3)) { enc5 = enc6 = enc7 = enc8 = 32; } else if (isNaN(chr4)) { enc6 = enc7 = enc8 = 32; } else if (isNaN(chr5)) { enc8 = 32; } output += alphabet.charAt(enc1) + alphabet.charAt(enc2) + alphabet.charAt(enc3) + alphabet.charAt(enc4) + alphabet.charAt(enc5) + alphabet.charAt(enc6) + alphabet.charAt(enc7) + alphabet.charAt(enc8); } return output; }, /** * From Base32 operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_32: function(input, args) { if (!input) return []; var alphabet = args[0] ? Utils.expand_alph_range(args[0]).join("") : "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=", remove_non_alph_chars = args[0]; var output = [], chr1, chr2, chr3, chr4, chr5, enc1, enc2, enc3, enc4, enc5, enc6, enc7, enc8, i = 0; if (remove_non_alph_chars) { var re = new RegExp("[^" + alphabet.replace(/[\\]\\\\\\-^]/g, "\\\\$&") + "]", "g"); input = input.replace(re, ""); } while (i < input.length) { enc1 = alphabet.indexOf(input.charAt(i++)); enc2 = alphabet.indexOf(input.charAt(i++) || "="); enc3 = alphabet.indexOf(input.charAt(i++) || "="); enc4 = alphabet.indexOf(input.charAt(i++) || "="); enc5 = alphabet.indexOf(input.charAt(i++) || "="); enc6 = alphabet.indexOf(input.charAt(i++) || "="); enc7 = alphabet.indexOf(input.charAt(i++) || "="); enc8 = alphabet.indexOf(input.charAt(i++) || "="); chr1 = (enc1 << 3) | (enc2 >> 2); chr2 = ((enc2 & 3) << 6) | (enc3 << 1) | (enc4 >> 4); chr3 = ((enc4 & 15) << 4) | (enc5 >> 1); chr4 = ((enc5 & 1) << 7) | (enc6 << 2) | (enc7 >> 3); chr5 = ((enc7 & 7) << 5) | enc8; output.push(chr1); if (enc2 & 3 !== 0 || enc3 !== 32) output.push(chr2); if (enc4 & 15 !== 0 || enc5 !== 32) output.push(chr3); if (enc5 & 1 !== 0 || enc6 !== 32) output.push(chr4); if (enc7 & 7 !== 0 || enc8 !== 32) output.push(chr5); } return output; }, /** * @constant * @default */ SHOW_IN_BINARY: false, /** * @constant * @default */ OFFSETS_SHOW_VARIABLE: true, /** * Show Base64 offsets operation. * * @param {byte_array} input * @param {Object[]} args * @returns {html} */ run_offsets: function(input, args) { var alphabet = args[0] || Base64.ALPHABET, show_variable = args[1], offset0 = Utils.to_base64(input, alphabet), offset1 = Utils.to_base64([0].concat(input), alphabet), offset2 = Utils.to_base64([0, 0].concat(input), alphabet), len0 = offset0.indexOf("="), len1 = offset1.indexOf("="), len2 = offset2.indexOf("="), script = "<script type='application/javascript'>$('[data-toggle=\\"tooltip\\"]').tooltip()</script>", static_section = "", padding = ""; if (input.length < 1) { return "Please enter a string."; } // Highlight offset 0 if (len0 % 4 == 2) { static_section = offset0.slice(0, -3); offset0 = "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64(static_section, alphabet).slice(0, -2) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset0.substr(offset0.length - 3, 1) + "</span>" + "<span class='hlred'>" + offset0.substr(offset0.length - 2) + "</span>"; } else if (len0 % 4 == 3) { static_section = offset0.slice(0, -2); offset0 = "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64(static_section, alphabet).slice(0, -1) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset0.substr(offset0.length - 2, 1) + "</span>" + "<span class='hlred'>" + offset0.substr(offset0.length - 1) + "</span>"; } else { static_section = offset0; offset0 = "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64(static_section, alphabet) + "'>" + static_section + "</span>"; } if (!show_variable) { offset0 = static_section; } // Highlight offset 1 padding = "<span class='hlred'>" + offset1.substr(0, 1) + "</span>" + "<span class='hlgreen'>" + offset1.substr(1, 1) + "</span>"; offset1 = offset1.substr(2); if (len1 % 4 == 2) { static_section = offset1.slice(0, -3); offset1 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AA" + static_section, alphabet).slice(1, -2) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset1.substr(offset1.length - 3, 1) + "</span>" + "<span class='hlred'>" + offset1.substr(offset1.length - 2) + "</span>"; } else if (len1 % 4 == 3) { static_section = offset1.slice(0, -2); offset1 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AA" + static_section, alphabet).slice(1, -1) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset1.substr(offset1.length - 2, 1) + "</span>" + "<span class='hlred'>" + offset1.substr(offset1.length - 1) + "</span>"; } else { static_section = offset1; offset1 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AA" + static_section, alphabet).slice(1) + "'>" + static_section + "</span>"; } if (!show_variable) { offset1 = static_section; } // Highlight offset 2 padding = "<span class='hlred'>" + offset2.substr(0, 2) + "</span>" + "<span class='hlgreen'>" + offset2.substr(2, 1) + "</span>"; offset2 = offset2.substr(3); if (len2 % 4 == 2) { static_section = offset2.slice(0, -3); offset2 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AAA" + static_section, alphabet).slice(2, -2) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset2.substr(offset2.length - 3, 1) + "</span>" + "<span class='hlred'>" + offset2.substr(offset2.length - 2) + "</span>"; } else if (len2 % 4 == 3) { static_section = offset2.slice(0, -2); offset2 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AAA" + static_section, alphabet).slice(2, -2) + "'>" + static_section + "</span>" + "<span class='hlgreen'>" + offset2.substr(offset2.length - 2, 1) + "</span>" + "<span class='hlred'>" + offset2.substr(offset2.length - 1) + "</span>"; } else { static_section = offset2; offset2 = padding + "<span data-toggle='tooltip' data-placement='top' title='" + Utils.from_base64("AAA" + static_section, alphabet).slice(2) + "'>" + static_section + "</span>"; } if (!show_variable) { offset2 = static_section; } return (show_variable ? "Characters highlighted in <span class='hlgreen'>green</span> could change if the input is surrounded by more data." + "\\nCharacters highlighted in <span class='hlred'>red</span> are for padding purposes only." + "\\nUnhighlighted characters are <span data-toggle='tooltip' data-placement='top' title='Tooltip on left'>static</span>." + "\\nHover over the static sections to see what they decode to on their own.\\n" + "\\nOffset 0: " + offset0 + "\\nOffset 1: " + offset1 + "\\nOffset 2: " + offset2 + script : offset0 + "\\n" + offset1 + "\\n" + offset2); }, /** * Highlight to Base64 * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_to: function(pos, args) { pos[0].start = Math.floor(pos[0].start / 3 * 4); pos[0].end = Math.ceil(pos[0].end / 3 * 4); return pos; }, /** * Highlight from Base64 * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_from: function(pos, args) { pos[0].start = Math.ceil(pos[0].start / 4 * 3); pos[0].end = Math.floor(pos[0].end / 4 * 3); return pos; }, }; × Search results Close "},"operations_BitwiseOp.js.html":{"id":"operations_BitwiseOp.js.html","title":"Source: operations/BitwiseOp.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/BitwiseOp.js /* globals CryptoJS */ /** * Bitwise operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var BitwiseOp = { /** * Runs bitwise operations across the input data. * * @private * @param {byte_array} input * @param {byte_array} key * @param {function} func - The bitwise calculation to carry out * @param {boolean} null_preserving * @param {boolean} differential * @returns {byte_array} */ _bit_op: function (input, key, func, null_preserving, differential) { if (!key || !key.length) key = [0]; var result = [], x = null, k = null, o = null; for (var i = 0; i < input.length; i++) { k = key[i % key.length]; o = input[i]; x = null_preserving && (o === 0 || o == k) ? o : func(o, k); result.push(x); if (differential && !(null_preserving && (o === 0 || o == k))) { key[i % key.length] = x; } } return result; }, /** * @constant * @default */ XOR_PRESERVE_NULLS: false, /** * @constant * @default */ XOR_DIFFERENTIAL: false, /** * @constant * @default */ KEY_FORMAT: ["Hex", "Base64", "UTF8", "UTF16", "UTF16LE", "UTF16BE", "Latin1"], /** * XOR operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_xor: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""), null_preserving = args[1], differential = args[2]; key = Utils.word_array_to_byte_array(key); return BitwiseOp._bit_op(input, key, BitwiseOp._xor, null_preserving, differential); }, /** * @constant * @default */ XOR_BRUTE_KEY_LENGTH: ["1", "2"], /** * @constant * @default */ XOR_BRUTE_SAMPLE_LENGTH: 100, /** * @constant * @default */ XOR_BRUTE_SAMPLE_OFFSET: 0, /** * @constant * @default */ XOR_BRUTE_PRINT_KEY: true, /** * @constant * @default */ XOR_BRUTE_OUTPUT_HEX: false, /** * XOR Brute Force operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_xor_brute: function (input, args) { var key_length = parseInt(args[0], 10), sample_length = args[1], sample_offset = args[2], null_preserving = args[3], differential = args[4], crib = args[5], print_key = args[6], output_hex = args[7], regex; var output = "", result, result_utf8; input = input.slice(sample_offset, sample_offset + sample_length); if (crib !== "") { regex = new RegExp(crib, "im"); } for (var key = 1, l = Math.pow(256, key_length); key < l; key++) { result = BitwiseOp._bit_op(input, Utils.hex_to_byte_array(key.toString(16)), BitwiseOp._xor, null_preserving, differential); result_utf8 = Utils.byte_array_to_utf8(result); if (crib !== "" && result_utf8.search(regex) === -1) continue; if (print_key) output += "Key = " + Utils.hex(key, (2*key_length)) + ": "; if (output_hex) output += Utils.byte_array_to_hex(result) + "\\n"; else output += Utils.printable(result_utf8, false) + "\\n"; if (print_key) output += "\\n"; } return output; }, /** * NOT operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_not: function (input, args) { return BitwiseOp._bit_op(input, null, BitwiseOp._not); }, /** * AND operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_and: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""); key = Utils.word_array_to_byte_array(key); return BitwiseOp._bit_op(input, key, BitwiseOp._and); }, /** * OR operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_or: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""); key = Utils.word_array_to_byte_array(key); return BitwiseOp._bit_op(input, key, BitwiseOp._or); }, /** * ADD operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_add: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""); key = Utils.word_array_to_byte_array(key); return BitwiseOp._bit_op(input, key, BitwiseOp._add); }, /** * SUB operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_sub: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""); key = Utils.word_array_to_byte_array(key); return BitwiseOp._bit_op(input, key, BitwiseOp._sub); }, /** * XOR bitwise calculation. * * @private * @param {number} operand * @param {number} key * @returns {number} */ _xor: function (operand, key) { return operand ^ key; }, /** * NOT bitwise calculation. * * @private * @param {number} operand * @returns {number} */ _not: function (operand, _) { return ~operand & 0xff; }, /** * AND bitwise calculation. * * @private * @param {number} operand * @param {number} key * @returns {number} */ _and: function (operand, key) { return operand & key; }, /** * OR bitwise calculation. * * @private * @param {number} operand * @param {number} key * @returns {number} */ _or: function (operand, key) { return operand | key; }, /** * ADD bitwise calculation. * * @private * @param {number} operand * @param {number} key * @returns {number} */ _add: function (operand, key) { return (operand + key) % 256; }, /** * SUB bitwise calculation. * * @private * @param {number} operand * @param {number} key * @returns {number} */ _sub: function (operand, key) { var result = operand - key; return (result < 0) ? 256 + result : result; }, }; × Search results Close "},"operations_ByteRepr.js.html":{"id":"operations_ByteRepr.js.html","title":"Source: operations/ByteRepr.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/ByteRepr.js /* globals app */ /** * Byte representation operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var ByteRepr = { /** * @constant * @default */ DELIM_OPTIONS: ["Space", "Comma", "Semi-colon", "Colon", "Line feed", "CRLF"], /** * @constant * @default */ HEX_DELIM_OPTIONS: ["Space", "Comma", "Semi-colon", "Colon", "Line feed", "CRLF", "0x", "\\\\x", "None"], /** * @constant * @default */ BIN_DELIM_OPTIONS: ["Space", "Comma", "Semi-colon", "Colon", "Line feed", "CRLF", "None"], /** * To Hex operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to_hex: function(input, args) { var delim = Utils.char_rep[args[0] || "Space"]; return Utils.to_hex(input, delim, 2); }, /** * From Hex operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_hex: function(input, args) { var delim = args[0] || "Space"; return Utils.from_hex(input, delim, 2); }, /** * @constant * @default */ CHARCODE_BASE: 16, /** * To Charcode operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_to_charcode: function(input, args) { var delim = Utils.char_rep[args[0] || "Space"], base = args[1], output = "", padding = 2, ordinal; if (base < 2 || base > 36) { throw "Error: Base argument must be between 2 and 36"; } for (var i = 0; i < input.length; i++) { ordinal = Utils.ord(input[i]); if (base == 16) { if (ordinal < 256) padding = 2; else if (ordinal < 65536) padding = 4; else if (ordinal < 16777216) padding = 6; else if (ordinal < 4294967296) padding = 8; else padding = 2; if (padding > 2) app.options.attempt_highlight = false; output += Utils.hex(ordinal, padding) + delim; } else { app.options.attempt_highlight = false; output += ordinal.toString(base) + delim; } } return output.slice(0, -delim.length); }, /** * From Charcode operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_charcode: function(input, args) { var delim = Utils.char_rep[args[0] || "Space"], base = args[1], bites = input.split(delim), i = 0; if (base < 2 || base > 36) { throw "Error: Base argument must be between 2 and 36"; } if (base != 16) { app.options.attempt_highlight = false; } // Split into groups of 2 if the whole string is concatenated and // too long to be a single character if (bites.length == 1 && input.length > 17) { bites = []; for (i = 0; i < input.length; i += 2) { bites.push(input.slice(i, i+2)); } } var latin1 = ""; for (i = 0; i < bites.length; i++) { latin1 += Utils.chr(parseInt(bites[i], base)); } return Utils.str_to_byte_array(latin1); }, /** * Highlight to hex * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_to: function(pos, args) { var delim = Utils.char_rep[args[0] || "Space"], len = delim == "\\r\\n" ? 1 : delim.length; pos[0].start = pos[0].start * (2 + len); pos[0].end = pos[0].end * (2 + len) - len; // 0x and \\x are added to the beginning if they are selected, so increment the positions accordingly if (delim == "0x" || delim == "\\\\x") { pos[0].start += 2; pos[0].end += 2; } return pos; }, /** * Highlight to hex * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_from: function(pos, args) { var delim = Utils.char_rep[args[0] || "Space"], len = delim == "\\r\\n" ? 1 : delim.length, width = len + 2; // 0x and \\x are added to the beginning if they are selected, so increment the positions accordingly if (delim == "0x" || delim == "\\\\x") { if (pos[0].start > 1) pos[0].start -= 2; else pos[0].start = 0; if (pos[0].end > 1) pos[0].end -= 2; else pos[0].end = 0; } pos[0].start = pos[0].start === 0 ? 0 : Math.round(pos[0].start / width); pos[0].end = pos[0].end === 0 ? 0 : Math.ceil(pos[0].end / width); return pos; }, /** * To Decimal operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to_decimal: function(input, args) { var delim = Utils.char_rep[args[0]]; return input.join(delim); }, /** * From Decimal operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_decimal: function(input, args) { var delim = Utils.char_rep[args[0]]; var byte_str = input.split(delim), output = []; if (byte_str[byte_str.length-1] === "") byte_str = byte_str.slice(0, byte_str.length-1); for (var i = 0; i < byte_str.length; i++) { output[i] = parseInt(byte_str[i]); } return output; }, /** * To Binary operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to_binary: function(input, args) { var delim = Utils.char_rep[args[0] || "Space"], output = "", padding = 8; for (var i = 0; i < input.length; i++) { output += Utils.pad(input[i].toString(2), padding) + delim; } if (delim.length) { return output.slice(0, -delim.length); } else { return output; } }, /** * From Binary operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_binary: function(input, args) { if (args[0] != "None") { var delim_regex = Utils.regex_rep[args[0] || "Space"]; input = input.replace(delim_regex, ''); } var output = []; var byte_len = 8; for (var i = 0; i < input.length; i += byte_len) { output.push(parseInt(input.substr(i, byte_len), 2)); } return output; }, /** * Highlight to binary * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_to_binary: function(pos, args) { var delim = Utils.char_rep[args[0] || "Space"]; pos[0].start = pos[0].start * (8 + delim.length); pos[0].end = pos[0].end * (8 + delim.length) - delim.length; return pos; }, /** * Highlight from binary * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_from_binary: function(pos, args) { var delim = Utils.char_rep[args[0] || "Space"]; pos[0].start = pos[0].start === 0 ? 0 : Math.floor(pos[0].start / (8 + delim.length)); pos[0].end = pos[0].end === 0 ? 0 : Math.ceil(pos[0].end / (8 + delim.length)); return pos; }, /** * @constant * @default */ HEX_CONTENT_CONVERT_WHICH: ["Only special chars", "Only special chars including spaces", "All chars"], /** * @constant * @default */ HEX_CONTENT_SPACES_BETWEEN_BYTES: false, /** * To Hex Content operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to_hex_content: function(input, args) { var convert = args[0]; var spaces = args[1]; if (convert == "All chars") { var result = "|" + Utils.to_hex(input) + "|"; if (!spaces) result = result.replace(/ /g, ""); return result; } var output = "", in_hex = false, convert_spaces = convert == "Only special chars including spaces", b; for (var i = 0; i < input.length; i++) { b = input[i]; if ((b == 32 && convert_spaces) || (b < 48 && b != 32) || (b > 57 && b < 65) || (b > 90 && b < 97) || b > 122) { if (!in_hex) { output += "|"; in_hex = true; } else if (spaces) output += " "; output += Utils.to_hex([b]); } else { if (in_hex) { output += "|"; in_hex = false; } output += Utils.chr(input[i]); } } if (in_hex) output += "|"; return output; }, /** * From Hex Content operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from_hex_content: function(input, args) { var regex = /\\|([a-f\\d ]{2,})\\|/gi; var output = [], m, i = 0; while (!!(m = regex.exec(input))) { // Add up to match for (; i < m.index;) output.push(Utils.ord(input[i++])); // Add match var bytes = Utils.from_hex(m[1]); if (bytes) { for (var a = 0; a < bytes.length;) output.push(bytes[a++]); } else { // Not valid hex, print as normal for (; i < regex.lastIndex;) output.push(Utils.ord(input[i++])); } i = regex.lastIndex; } // Add all after final match for (; i < input.length;) output.push(Utils.ord(input[i++])); return output; }, }; × Search results Close "},"operations_CharEnc.js.html":{"id":"operations_CharEnc.js.html","title":"Source: operations/CharEnc.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/CharEnc.js /* globals CryptoJS */ /** * Character encoding operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var CharEnc = { /** * @constant * @default */ IO_FORMAT: ["UTF8", "UTF16", "UTF16LE", "UTF16BE", "Latin1", "Windows-1251", "Hex", "Base64"], /** * Text encoding operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run: function(input, args) { var input_format = args[0], output_format = args[1]; if (input_format == "Windows-1251") { input = Utils.win1251_to_unicode(input); input = CryptoJS.enc.Utf8.parse(input); } else { input = Utils.format[input_format].parse(input); } if (output_format == "Windows-1251") { input = CryptoJS.enc.Utf8.stringify(input); return Utils.unicode_to_win1251(input); } else { return Utils.format[output_format].stringify(input); } }, }; × Search results Close "},"operations_Checksum.js.html":{"id":"operations_Checksum.js.html","title":"Source: operations/Checksum.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Checksum.js /** * Checksum operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Checksum = { /** * Fletcher-16 Checksum operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_fletcher16: function(input, args) { var a = 0, b = 0; for (var i = 0; i < input.length; i++) { a = (a + input[i]) % 0xff; b = (b + a) % 0xff; } return Utils.hex(((b << 8) | a) >>> 0, 4); }, /** * Adler-32 Checksum operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_adler32: function(input, args) { var MOD_ADLER = 65521, a = 1, b = 0; for (var i = 0; i < input.length; i++) { a += input[i]; b += a; } a %= MOD_ADLER; b %= MOD_ADLER; return Utils.hex(((b << 16) | a) >>> 0, 8); }, /** * CRC-32 Checksum operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_crc32: function(input, args) { var crc_table = window.crc_table || (window.crc_table = Checksum._gen_crc_table()), crc = 0 ^ (-1); for (var i = 0; i < input.length; i++) { crc = (crc >>> 8) ^ crc_table[(crc ^ input[i]) & 0xff]; } return Utils.hex((crc ^ (-1)) >>> 0); }, /** * TCP/IP Checksum operation. * * @author GCHQ Contributor [1] * @param {byte_array} input * @param {Object[]} args * @returns {string} * * @example * // returns '3f2c' * Checksum.run_tcp_ip([0x45,0x00,0x00,0x87,0xa3,0x1b,0x40,0x00,0x40,0x06, * 0x00,0x00,0xac,0x11,0x00,0x04,0xac,0x11,0x00,0x03]) * * // returns 'a249' * Checksum.run_tcp_ip([0x45,0x00,0x01,0x11,0x3f,0x74,0x40,0x00,0x40,0x06, * 0x00,0x00,0xac,0x11,0x00,0x03,0xac,0x11,0x00,0x04]) */ run_tcp_ip: function(input, args) { var csum = 0; for (var i = 0; i < input.length; i++) { if(i % 2 === 0) { csum += (input[i] << 8); } else { csum += input[i]; } } csum = (csum >> 16) + (csum & 0xffff); return Utils.hex(0xffff - csum); }, /** * Generates a CRC table for use with CRC checksums. * * @private * @returns {array} */ _gen_crc_table: function() { var c, crc_table = []; for (var n = 0; n < 256; n++) { c = n; for (var k = 0; k < 8; k++) { c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); } crc_table[n] = c; } return crc_table; }, }; × Search results Close "},"operations_Cipher.js.html":{"id":"operations_Cipher.js.html","title":"Source: operations/Cipher.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Cipher.js /* globals CryptoJS, blowfish */ /** * Cipher operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Cipher = { /** * @constant * @default */ IO_FORMAT1: ["Hex", "Base64", "UTF8", "UTF16", "UTF16LE", "UTF16BE", "Latin1"], /** * @constant * @default */ IO_FORMAT2: ["UTF8", "UTF16", "UTF16LE", "UTF16BE", "Latin1", "Hex", "Base64"], /** * @constant * @default */ IO_FORMAT3: ["Hex", "Base64", "UTF16", "UTF16LE", "UTF16BE", "Latin1"], /** * @constant * @default */ IO_FORMAT4: ["Latin1", "UTF8", "UTF16", "UTF16LE", "UTF16BE", "Hex", "Base64"], /** * @constant * @default */ MODES: ["CBC", "CFB", "CTR", "OFB", "ECB"], /** * @constant * @default */ PADDING: ["Pkcs7", "Iso97971", "AnsiX923", "Iso10126", "ZeroPadding", "NoPadding"], /** * @constant * @default */ RESULT_TYPE: ["Show all", "Ciphertext", "Key", "IV", "Salt"], /** * Runs encryption operations using the CryptoJS framework. * * @private * @param {function} algo - The CryptoJS algorithm to use * @param {byte_array} input * @param {function} args * @returns {string} */ _enc: function (algo, input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""), iv = Utils.format[args[1].option].parse(args[1].string || ""), salt = Utils.format[args[2].option].parse(args[2].string || ""), mode = CryptoJS.mode[args[3]], padding = CryptoJS.pad[args[4]], result_option = args[5].toLowerCase(), output_format = args[6]; if (iv.sigBytes === 0) { // Use passphrase rather than key. Need to convert it to a string. key = key.toString(CryptoJS.enc.Latin1); } var encrypted = algo.encrypt(input, key, { salt: salt.sigBytes > 0 ? salt : false, iv: iv.sigBytes > 0 ? iv : null, mode: mode, padding: padding }); var result = ""; if (result_option == "show all") { result += "Key: " + encrypted.key.toString(Utils.format[output_format]); result += "\\nIV: " + encrypted.iv.toString(Utils.format[output_format]); if (encrypted.salt) result += "\\nSalt: " + encrypted.salt.toString(Utils.format[output_format]); result += "\\n\\nCiphertext: " + encrypted.ciphertext.toString(Utils.format[output_format]); } else { result = encrypted[result_option].toString(Utils.format[output_format]); } return result; }, /** * Runs decryption operations using the CryptoJS framework. * * @private * @param {function} algo - The CryptoJS algorithm to use * @param {byte_array} input * @param {function} args * @returns {string} */ _dec: function (algo, input, args) { var key = Utils.format[args[0].option].parse(args[0].string || ""), iv = Utils.format[args[1].option].parse(args[1].string || ""), salt = Utils.format[args[2].option].parse(args[2].string || ""), mode = CryptoJS.mode[args[3]], padding = CryptoJS.pad[args[4]], input_format = args[5], output_format = args[6]; // The ZeroPadding option causes a crash when the input length is 0 if (!input.length) { return "No input"; } var ciphertext = Utils.format[input_format].parse(input); if (iv.sigBytes === 0) { // Use passphrase rather than key. Need to convert it to a string. key = key.toString(CryptoJS.enc.Latin1); } var decrypted = algo.decrypt({ ciphertext: ciphertext, salt: salt.sigBytes > 0 ? salt : false }, key, { iv: iv.sigBytes > 0 ? iv : null, mode: mode, padding: padding }); var result; try { result = decrypted.toString(Utils.format[output_format]); } catch (err) { result = "Decrypt error: " + err.message; } return result; }, /** * AES Encrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_aes_enc: function (input, args) { return Cipher._enc(CryptoJS.AES, input, args); }, /** * AES Decrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_aes_dec: function (input, args) { return Cipher._dec(CryptoJS.AES, input, args); }, /** * DES Encrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_des_enc: function (input, args) { return Cipher._enc(CryptoJS.DES, input, args); }, /** * DES Decrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_des_dec: function (input, args) { return Cipher._dec(CryptoJS.DES, input, args); }, /** * Triple DES Encrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_triple_des_enc: function (input, args) { return Cipher._enc(CryptoJS.TripleDES, input, args); }, /** * Triple DES Decrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_triple_des_dec: function (input, args) { return Cipher._dec(CryptoJS.TripleDES, input, args); }, /** * Rabbit Encrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_rabbit_enc: function (input, args) { return Cipher._enc(CryptoJS.Rabbit, input, args); }, /** * Rabbit Decrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_rabbit_dec: function (input, args) { return Cipher._dec(CryptoJS.Rabbit, input, args); }, /** * @constant * @default */ BLOWFISH_MODES: ["ECB", "CBC", "PCBC", "CFB", "OFB", "CTR"], /** * @constant * @default */ BLOWFISH_OUTPUT_TYPES: ["Base64", "Hex", "String", "Raw"], /** * Blowfish Encrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_blowfish_enc: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string).toString(Utils.format.Latin1), mode = args[1], output_format = args[2]; if (key.length === 0) return "Enter a key"; var enc_hex = blowfish.encrypt(input, key, { outputType: 1, cipherMode: Cipher.BLOWFISH_MODES.indexOf(mode) }), enc = CryptoJS.enc.Hex.parse(enc_hex); return enc.toString(Utils.format[output_format]); }, /** * Blowfish Decrypt operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_blowfish_dec: function (input, args) { var key = Utils.format[args[0].option].parse(args[0].string).toString(Utils.format.Latin1), mode = args[1], input_format = args[2]; if (key.length === 0) return "Enter a key"; input = Utils.format[input_format].parse(input); return blowfish.decrypt(input.toString(CryptoJS.enc.Base64), key, { outputType: 0, // This actually means inputType. The library is weird. cipherMode: Cipher.BLOWFISH_MODES.indexOf(mode) }); }, /** * @constant * @default */ KDF_KEY_SIZE: 256, /** * @constant * @default */ KDF_ITERATIONS: 1, /** * Derive PBKDF2 key operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_pbkdf2: function (input, args) { var key_size = args[0] / 32, iterations = args[1], salt = CryptoJS.enc.Hex.parse(args[2] || ""), input_format = args[3], output_format = args[4], passphrase = Utils.format[input_format].parse(input), key = CryptoJS.PBKDF2(passphrase, salt, { keySize: key_size, iterations: iterations }); return key.toString(Utils.format[output_format]); }, /** * Derive EVP key operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_evpkdf: function (input, args) { var key_size = args[0] / 32, iterations = args[1], salt = CryptoJS.enc.Hex.parse(args[2] || ""), input_format = args[3], output_format = args[4], passphrase = Utils.format[input_format].parse(input), key = CryptoJS.EvpKDF(passphrase, salt, { keySize: key_size, iterations: iterations }); return key.toString(Utils.format[output_format]); }, /** * RC4 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_rc4: function (input, args) { var message = Utils.format[args[1]].parse(input), passphrase = Utils.format[args[0].option].parse(args[0].string), encrypted = CryptoJS.RC4.encrypt(message, passphrase); return encrypted.ciphertext.toString(Utils.format[args[2]]); }, /** * @constant * @default */ RC4DROP_BYTES: 768, /** * RC4 Drop operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_rc4drop: function (input, args) { var message = Utils.format[args[1]].parse(input), passphrase = Utils.format[args[0].option].parse(args[0].string), drop = args[3], encrypted = CryptoJS.RC4Drop.encrypt(message, passphrase, { drop: drop }); return encrypted.ciphertext.toString(Utils.format[args[2]]); }, }; /** * Overwriting the CryptoJS OpenSSL key derivation function so that it is possible to not pass a * salt in. * @param {string} password - The password to derive from. * @param {number} keySize - The size in words of the key to generate. * @param {number} ivSize - The size in words of the IV to generate. * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be * generated randomly. If set to false, no salt will be added. * * @returns {CipherParams} A cipher params object with the key, IV, and salt. * * @static * * @example * // Randomly generates a salt * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); * // Uses the salt 'saltsalt' * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); * // Does not use a salt * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, false); */ CryptoJS.kdf.OpenSSL.execute = function (password, keySize, ivSize, salt) { // Generate random salt if no salt specified and not set to false // This line changed from `if (!salt) {` to the following if (salt === undefined || salt === null) { salt = CryptoJS.lib.WordArray.random(64/8); } // Derive key and IV var key = CryptoJS.algo.EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); // Separate key and IV var iv = CryptoJS.lib.WordArray.create(key.words.slice(keySize), ivSize * 4); key.sigBytes = keySize * 4; // Return params return CryptoJS.lib.CipherParams.create({ key: key, iv: iv, salt: salt }); }; × Search results Close "},"operations_Code.js.html":{"id":"operations_Code.js.html","title":"Source: operations/Code.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Code.js /* globals prettyPrintOne, vkbeautify */ /** * Code operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Code = { /** * @constant * @default */ LANGUAGES: ["default-code", "default-markup", "bash", "bsh", "c", "cc", "coffee", "cpp", "cs", "csh", "cv", "cxx", "cyc", "htm", "html", "in.tag", "java", "javascript", "js", "json", "m", "mxml", "perl", "pl", "pm", "py", "python", "rb", "rc", "rs", "ruby", "rust", "sh", "uq.val", "xhtml", "xml", "xsl"], /** * @constant * @default */ LINE_NUMS: false, /** * Syntax highlighter operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_syntax_highlight: function(input, args) { var language = args[0], line_nums = args[1]; return "<code class='prettyprint'>" + prettyPrintOne(Utils.escape_html(input), language, line_nums) + "</code>"; }, /** * @constant * @default */ BEAUTIFY_INDENT: "\\\\t", /** * XML Beautify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_xml_beautify: function(input, args) { var indent_str = args[0]; return vkbeautify.xml(input, indent_str); }, /** * JSON Beautify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_json_beautify: function(input, args) { var indent_str = args[0]; return vkbeautify.json(input, indent_str); }, /** * CSS Beautify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_css_beautify: function(input, args) { var indent_str = args[0]; return vkbeautify.css(input, indent_str); }, /** * SQL Beautify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sql_beautify: function(input, args) { var indent_str = args[0]; return vkbeautify.sql(input, indent_str); }, /** * @constant * @default */ PRESERVE_COMMENTS: false, /** * XML Minify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_xml_minify: function(input, args) { var preserve_comments = args[0]; return vkbeautify.xmlmin(input, preserve_comments); }, /** * JSON Minify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_json_minify: function(input, args) { return vkbeautify.jsonmin(input); }, /** * CSS Minify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_css_minify: function(input, args) { var preserve_comments = args[0]; return vkbeautify.cssmin(input, preserve_comments); }, /** * SQL Minify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sql_minify: function(input, args) { return vkbeautify.sqlmin(input); }, /** * Generic Code Beautify operation. * * Yeeeaaah... * * I'm not proud of this code, but seriously, try writing a generic lexer and parser that * correctly generates an AST for multiple different languages. I have tried, and I can tell * you it's pretty much impossible. * * This basically works. That'll have to be good enough. It's not meant to produce working code, * just slightly more readable code. * * Things that don't work: * - For loop formatting * - Do-While loop formatting * - Switch/Case indentation * - Bit shift operators * * @author n1474335 [n1474335@gmail.com] * @param {string} input * @param {Object[]} args * @returns {string} */ run_generic_beautify: function(input, args) { var code = input, t = 0, preserved_tokens = [], m; // Remove strings var sstrings = /'([^'\\\\]|\\\\.)*'/g; while (!!(m = sstrings.exec(code))) { code = preserve_token(code, m, t++); sstrings.lastIndex = m.index; } var dstrings = /"([^"\\\\]|\\\\.)*"/g; while (!!(m = dstrings.exec(code))) { code = preserve_token(code, m, t++); dstrings.lastIndex = m.index; } // Remove comments var scomments = /\\/\\/[^\\n\\r]*/g; while (!!(m = scomments.exec(code))) { code = preserve_token(code, m, t++); scomments.lastIndex = m.index; } var mcomments = /\\/\\*[\\s\\S]*?\\*\\//gm; while (!!(m = mcomments.exec(code))) { code = preserve_token(code, m, t++); mcomments.lastIndex = m.index; } var hcomments = /(^|\\n)#[^\\n\\r#]+/g; while (!!(m = hcomments.exec(code))) { code = preserve_token(code, m, t++); hcomments.lastIndex = m.index; } // Remove regexes var regexes = /\\/.*?[^\\\\]\\/[gim]{0,3}/gi; while (!!(m = regexes.exec(code))) { code = preserve_token(code, m, t++); regexes.lastIndex = m.index; } // Create newlines after ; code = code.replace(/;/g, ";\\n"); // Create newlines after { and around } code = code.replace(/{/g, "{\\n"); code = code.replace(/}/g, "\\n}\\n"); // Remove carriage returns code = code.replace(/\\r/g, ""); // Remove all indentation code = code.replace(/^\\s+/g, ""); code = code.replace(/\\n\\s+/g, "\\n"); // Remove trailing spaces code = code.replace(/\\s*$/g, ""); // Remove newlines before { code = code.replace(/\\n{/g, "{"); // Indent var i = 0, level = 0; while (i < code.length) { switch(code[i]) { case "{": level++; break; case "\\n": if (i+1 >= code.length) break; if (code[i+1] == "}") level--; var indent = (level >= 0) ? Array(level*4+1).join(" ") : ""; code = code.substring(0, i+1) + indent + code.substring(i+1); if (level > 0) i += level*4; break; } i++; } // Add strategic spaces code = code.replace(/\\s*([!<>=+-/*]?)=\\s*/g, " $1= "); code = code.replace(/\\s*<([=]?)\\s*/g, " <$1 "); code = code.replace(/\\s*>([=]?)\\s*/g, " >$1 "); code = code.replace(/([^+])\\+([^+=])/g, "$1 + $2"); code = code.replace(/([^-])-([^-=])/g, "$1 - $2"); code = code.replace(/([^*])\\*([^*=])/g, "$1 * $2"); code = code.replace(/([^/])\\/([^/=])/g, "$1 / $2"); code = code.replace(/\\s*,\\s*/g, ", "); code = code.replace(/\\s*{/g, " {"); code = code.replace(/}\\n/g, "}\\n\\n"); // Just... don't look at this code = code.replace(/(if|for|while|with|elif|elseif)\\s*\\(([^\\n]*)\\)\\s*\\n([^{])/gim, "$1 ($2)\\n $3"); code = code.replace(/(if|for|while|with|elif|elseif)\\s*\\(([^\\n]*)\\)([^{])/gim, "$1 ($2) $3"); code = code.replace(/else\\s*\\n([^{])/gim, "else\\n $1"); code = code.replace(/else\\s+([^{])/gim, "else $1"); // Remove strategic spaces code = code.replace(/\\s+;/g, ";"); code = code.replace(/\\{\\s+\\}/g, "{}"); code = code.replace(/\\[\\s+\\]/g, "[]"); code = code.replace(/}\\s*(else|catch|except|finally|elif|elseif|else if)/gi, "} $1"); // Replace preserved tokens var ptokens = /###preserved_token(\\d+)###/g; while (!!(m = ptokens.exec(code))) { var ti = parseInt(m[1]); code = code.substring(0, m.index) + preserved_tokens[ti] + code.substring(m.index + m[0].length); ptokens.lastIndex = m.index; } return code; function preserve_token(str, match, t) { preserved_tokens[t] = match[0]; return str.substring(0, match.index) + "###preserved_token" + t + "###" + str.substring(match.index + match[0].length); } }, }; × Search results Close "},"operations_Compress.js.html":{"id":"operations_Compress.js.html","title":"Source: operations/Compress.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Compress.js /* globals Zlib, bzip2 */ /** * Compression operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Compress = { /** * @constant * @default */ COMPRESSION_TYPE: ["Dynamic Huffman Coding", "Fixed Huffman Coding", "None (Store)"], /** * @constant * @default */ INFLATE_BUFFER_TYPE: ["Adaptive", "Block"], /** * @constant * @default */ COMPRESSION_METHOD: ["Deflate", "None (Store)"], /** * @constant * @default */ OS: ["MSDOS", "Unix", "Macintosh"], /** * @constant * @default */ RAW_COMPRESSION_TYPE_LOOKUP: { "Fixed Huffman Coding" : Zlib.RawDeflate.CompressionType.FIXED, "Dynamic Huffman Coding" : Zlib.RawDeflate.CompressionType.DYNAMIC, "None (Store)" : Zlib.RawDeflate.CompressionType.NONE, }, /** * Raw Deflate operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_raw_deflate: function(input, args) { var deflate = new Zlib.RawDeflate(input, { compressionType: Compress.RAW_COMPRESSION_TYPE_LOOKUP[args[0]] }); return Array.prototype.slice.call(deflate.compress()); }, /** * @constant * @default */ INFLATE_INDEX: 0, /** * @constant * @default */ INFLATE_BUFFER_SIZE: 0, /** * @constant * @default */ INFLATE_RESIZE: false, /** * @constant * @default */ INFLATE_VERIFY: false, /** * @constant * @default */ RAW_BUFFER_TYPE_LOOKUP: { "Adaptive" : Zlib.RawInflate.BufferType.ADAPTIVE, "Block" : Zlib.RawInflate.BufferType.BLOCK, }, /** * Raw Inflate operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_raw_inflate: function(input, args) { // Deal with character encoding issues input = Utils.str_to_byte_array(Utils.byte_array_to_utf8(input)); var inflate = new Zlib.RawInflate(input, { index: args[0], bufferSize: args[1], bufferType: Compress.RAW_BUFFER_TYPE_LOOKUP[args[2]], resize: args[3], verify: args[4] }), result = Array.prototype.slice.call(inflate.decompress()); // Raw Inflate somethimes messes up and returns nonsense like this: // ]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]....]... // e.g. Input data of [8b, 1d, dc, 44] // Look for the first two square brackets: if (result.length > 158 && result[0] == 93 && result[5] == 93) { // If the first two square brackets are there, check that the others // are also there. If they are, throw an error. If not, continue. var valid = false; for (var i = 0; i < 155; i += 5) { if (result[i] != 93) { valid = true; } } if (!valid) { throw "Error: Unable to inflate data"; } } // Trust me, this is the easiest way... return result; }, /** * @constant * @default */ ZLIB_COMPRESSION_TYPE_LOOKUP: { "Fixed Huffman Coding" : Zlib.Deflate.CompressionType.FIXED, "Dynamic Huffman Coding" : Zlib.Deflate.CompressionType.DYNAMIC, "None (Store)" : Zlib.Deflate.CompressionType.NONE, }, /** * Zlib Deflate operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_zlib_deflate: function(input, args) { var deflate = new Zlib.Deflate(input, { compressionType: Compress.ZLIB_COMPRESSION_TYPE_LOOKUP[args[0]] }); return Array.prototype.slice.call(deflate.compress()); }, /** * @constant * @default */ ZLIB_BUFFER_TYPE_LOOKUP: { "Adaptive" : Zlib.Inflate.BufferType.ADAPTIVE, "Block" : Zlib.Inflate.BufferType.BLOCK, }, /** * Zlib Inflate operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_zlib_inflate: function(input, args) { // Deal with character encoding issues input = Utils.str_to_byte_array(Utils.byte_array_to_utf8(input)); var inflate = new Zlib.Inflate(input, { index: args[0], bufferSize: args[1], bufferType: Compress.ZLIB_BUFFER_TYPE_LOOKUP[args[2]], resize: args[3], verify: args[4] }); return Array.prototype.slice.call(inflate.decompress()); }, /** * @constant * @default */ GZIP_CHECKSUM: false, /** * Gzip operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_gzip: function(input, args) { var filename = args[1], comment = args[2], options = { deflateOptions: { compressionType: Compress.ZLIB_COMPRESSION_TYPE_LOOKUP[args[0]] }, flags: { fhcrc: args[3] } }; if (filename.length) { options.flags.fname = true; options.filename = filename; } if (comment.length) { options.flags.fcommenct = true; options.comment = comment; } var gzip = new Zlib.Gzip(input, options); return Array.prototype.slice.call(gzip.compress()); }, /** * Gunzip operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_gunzip: function(input, args) { // Deal with character encoding issues input = Utils.str_to_byte_array(Utils.byte_array_to_utf8(input)); var gunzip = new Zlib.Gunzip(input); return Array.prototype.slice.call(gunzip.decompress()); }, /** * @constant * @default */ PKZIP_FILENAME: "file.txt", /** * @constant * @default */ ZIP_COMPRESSION_METHOD_LOOKUP: { "Deflate" : Zlib.Zip.CompressionMethod.DEFLATE, "None (Store)" : Zlib.Zip.CompressionMethod.STORE }, /** * @constant * @default */ ZIP_OS_LOOKUP: { "MSDOS" : Zlib.Zip.OperatingSystem.MSDOS, "Unix" : Zlib.Zip.OperatingSystem.UNIX, "Macintosh" : Zlib.Zip.OperatingSystem.MACINTOSH }, /** * Zip operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_pkzip: function(input, args) { var password = Utils.str_to_byte_array(args[2]), options = { filename: Utils.str_to_byte_array(args[0]), comment: Utils.str_to_byte_array(args[1]), compressionMethod: Compress.ZIP_COMPRESSION_METHOD_LOOKUP[args[3]], os: Compress.ZIP_OS_LOOKUP[args[4]], deflateOption: { compressionType: Compress.ZLIB_COMPRESSION_TYPE_LOOKUP[args[5]] }, }, zip = new Zlib.Zip(); if (password.length) zip.setPassword(password); zip.addFile(input, options); return Array.prototype.slice.call(zip.compress()); }, /** * @constant * @default */ PKUNZIP_VERIFY: false, /** * Unzip operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_pkunzip: function(input, args) { var options = { password: Utils.str_to_byte_array(args[0]), verify: args[1] }, file = "", unzip = new Zlib.Unzip(input, options), filenames = unzip.getFilenames(), output = "<div style='padding: 5px;'>" + filenames.length + " file(s) found</div>\\n"; output += "<div class='panel-group' id='zip-accordion' role='tablist' aria-multiselectable='true'>"; window.uzip = unzip; for (var i = 0; i < filenames.length; i++) { file = Utils.byte_array_to_utf8(unzip.decompress(filenames[i])); output += "<div class='panel panel-default'>" + "<div class='panel-heading' role='tab' id='heading" + i + "'>" + "<h4 class='panel-title'>" + "<a class='collapsed' role='button' data-toggle='collapse' data-parent='#zip-accordion' href='#collapse" + i + "' aria-expanded='true' aria-controls='collapse" + i + "'>" + filenames[i] + "<span class='pull-right'>" + file.length.toLocaleString() + " bytes</span></a></h4></div>" + "<div id='collapse" + i + "' class='panel-collapse collapse' role='tabpanel' aria-labelledby='heading" + i + "'>" + "<div class='panel-body'>" + Utils.escape_html(file) + "</div></div></div>"; } return output + "</div>"; }, /** * Bzip2 Decompress operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_bzip2_decompress: function(input, args) { var compressed = new Uint8Array(input), bzip2_reader, plain = ""; bzip2_reader = bzip2.array(compressed); plain = bzip2.simple(bzip2_reader); return plain; }, }; × Search results Close "},"operations_Convert.js.html":{"id":"operations_Convert.js.html","title":"Source: operations/Convert.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Convert.js /** * Unit conversion operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Convert = { /** * @constant * @default */ DISTANCE_UNITS: [ "[Metric]", "Nanometres (nm)", "Micrometres (µm)", "Millimetres (mm)", "Centimetres (cm)", "Metres (m)", "Kilometers (km)", "[/Metric]", "[Imperial]", "Thou (th)", "Inches (in)", "Feet (ft)", "Yards (yd)", "Chains (ch)", "Furlongs (fur)", "Miles (mi)", "Leagues (lea)", "[/Imperial]", "[Maritime]", "Fathoms (ftm)", "Cables", "Nautical miles", "[/Maritime]", "[Comparisons]", "Cars (4m)", "Buses (8.4m)", "American football fields (91m)", "Football pitches (105m)", "[/Comparisons]", "[Astronomical]", "Earth-to-Moons", "Earth's equators", "Astronomical units (au)", "Light-years (ly)", "Parsecs (pc)", "[/Astronomical]", ], /** * @constant * @default */ DISTANCE_FACTOR: { // Multiples of a metre "Nanometres (nm)" : 1e-9, "Micrometres (µm)" : 1e-6, "Millimetres (mm)" : 1e-3, "Centimetres (cm)" : 1e-2, "Metres (m)" : 1, "Kilometers (km)" : 1e3, "Thou (th)" : 0.0000254, "Inches (in)" : 0.0254, "Feet (ft)" : 0.3048, "Yards (yd)" : 0.9144, "Chains (ch)" : 20.1168, "Furlongs (fur)" : 201.168, "Miles (mi)" : 1609.344, "Leagues (lea)" : 4828.032, "Fathoms (ftm)" : 1.853184, "Cables" : 185.3184, "Nautical miles" : 1853.184, "Cars (4m)" : 4, "Buses (8.4m)" : 8.4, "American football fields (91m)": 91, "Football pitches (105m)": 105, "Earth-to-Moons" : 380000000, "Earth's equators" : 40075016.686, "Astronomical units (au)": 149597870700, "Light-years (ly)" : 9460730472580800, "Parsecs (pc)" : 3.0856776e16 }, /** * Convert distance operation. * * @param {number} input * @param {Object[]} args * @returns {number} */ run_distance: function (input, args) { var input_units = args[0], output_units = args[1]; input = input * Convert.DISTANCE_FACTOR[input_units]; return input / Convert.DISTANCE_FACTOR[output_units]; // TODO Remove rounding errors (e.g. 1.000000000001) }, /** * @constant * @default */ DATA_UNITS: [ "Bits (b)", "Nibbles", "Octets", "Bytes (B)", "[Binary bits (2^n)]", "Kibibits (Kib)", "Mebibits (Mib)", "Gibibits (Gib)", "Tebibits (Tib)", "Pebibits (Pib)", "Exbibits (Eib)", "Zebibits (Zib)", "Yobibits (Yib)", "[/Binary bits (2^n)]", "[Decimal bits (10^n)]", "Decabits", "Hectobits", "Kilobits (kb)", "Megabits (Mb)", "Gigabits (Gb)", "Terabits (Tb)", "Petabits (Pb)", "Exabits (Eb)", "Zettabits (Zb)", "Yottabits (Yb)", "[/Decimal bits (10^n)]", "[Binary bytes (8 x 2^n)]", "Kibibytes (KiB)", "Mebibytes (MiB)", "Gibibytes (GiB)", "Tebibytes (TiB)", "Pebibytes (PiB)", "Exbibytes (EiB)", "Zebibytes (ZiB)", "Yobibytes (YiB)", "[/Binary bytes (8 x 2^n)]", "[Decimal bytes (8 x 10^n)]", "Kilobytes (KB)", "Megabytes (MB)", "Gigabytes (GB)", "Terabytes (TB)", "Petabytes (PB)", "Exabytes (EB)", "Zettabytes (ZB)", "Yottabytes (YB)", "[/Decimal bytes (8 x 10^n)]" ], /** * @constant * @default */ DATA_FACTOR: { // Multiples of a bit "Bits (b)" : 1, "Nibbles" : 4, "Octets" : 8, "Bytes (B)" : 8, // Binary bits (2^n) "Kibibits (Kib)" : 1024, "Mebibits (Mib)" : 1048576, "Gibibits (Gib)" : 1073741824, "Tebibits (Tib)" : 1099511627776, "Pebibits (Pib)" : 1125899906842624, "Exbibits (Eib)" : 1152921504606846976, "Zebibits (Zib)" : 1180591620717411303424, "Yobibits (Yib)" : 1208925819614629174706176, // Decimal bits (10^n) "Decabits" : 10, "Hectobits" : 100, "Kilobits (Kb)" : 1e3, "Megabits (Mb)" : 1e6, "Gigabits (Gb)" : 1e9, "Terabits (Tb)" : 1e12, "Petabits (Pb)" : 1e15, "Exabits (Eb)" : 1e18, "Zettabits (Zb)" : 1e21, "Yottabits (Yb)" : 1e24, // Binary bytes (8 x 2^n) "Kibibytes (KiB)" : 8192, "Mebibytes (MiB)" : 8388608, "Gibibytes (GiB)" : 8589934592, "Tebibytes (TiB)" : 8796093022208, "Pebibytes (PiB)" : 9007199254740992, "Exbibytes (EiB)" : 9223372036854775808, "Zebibytes (ZiB)" : 9444732965739290427392, "Yobibytes (YiB)" : 9671406556917033397649408, // Decimal bytes (8 x 10^n) "Kilobytes (KB)" : 8e3, "Megabytes (MB)" : 8e6, "Gigabytes (GB)" : 8e9, "Terabytes (TB)" : 8e12, "Petabytes (PB)" : 8e15, "Exabytes (EB)" : 8e18, "Zettabytes (ZB)" : 8e21, "Yottabytes (YB)" : 8e24, }, /** * Convert data units operation. * * @param {number} input * @param {Object[]} args * @returns {number} */ run_data_size: function (input, args) { var input_units = args[0], output_units = args[1]; input = input * Convert.DATA_FACTOR[input_units]; return input / Convert.DATA_FACTOR[output_units]; }, /** * @constant * @default */ AREA_UNITS: [ "[Metric]", "Square metre (sq m)", "Square kilometre (sq km)", "Centiare (ca)", "Deciare (da)", "Are (a)", "Decare (daa)", "Hectare (ha)", "[/Metric]", "[Imperial]", "Square inch (sq in)", "Square foot (sq ft)", "Square yard (sq yd)", "Square mile (sq mi)", "Perch (sq per)", "Rood (ro)", "International acre (ac)", "[/Imperial]", "[US customary units]", "US survey acre (ac)", "US survey square mile (sq mi)", "US survey township", "[/US customary units]", "[Nuclear physics]", "Yoctobarn (yb)", "Zeptobarn (zb)", "Attobarn (ab)", "Femtobarn (fb)", "Picobarn (pb)", "Nanobarn (nb)", "Microbarn (μb)", "Millibarn (mb)", "Barn (b)", "Kilobarn (kb)", "Megabarn (Mb)", "Outhouse", "Shed", "Planck area", "[/Nuclear physics]", "[Comparisons]", "Washington D.C.", "Isle of Wight", "Wales", "Texas", "[/Comparisons]", ], /** * @constant * @default */ AREA_FACTOR: { // Multiples of a square metre // Metric "Square metre (sq m)" : 1, "Square kilometre (sq km)" : 1e6, "Centiare (ca)" : 1, "Deciare (da)" : 10, "Are (a)" : 100, "Decare (daa)" : 1e3, "Hectare (ha)" : 1e4, // Imperial "Square inch (sq in)" : 0.00064516, "Square foot (sq ft)" : 0.09290304, "Square yard (sq yd)" : 0.83612736, "Square mile (sq mi)" : 2589988.110336, "Perch (sq per)" : 42.21, "Rood (ro)" : 1011, "International acre (ac)" : 4046.8564224, // US customary units "US survey acre (ac)" : 4046.87261, "US survey square mile (sq mi)" : 2589998.470305239, "US survey township" : 93239944.9309886, // Nuclear physics "Yoctobarn (yb)" : 1e-52, "Zeptobarn (zb)" : 1e-49, "Attobarn (ab)" : 1e-46, "Femtobarn (fb)" : 1e-43, "Picobarn (pb)" : 1e-40, "Nanobarn (nb)" : 1e-37, "Microbarn (μb)" : 1e-34, "Millibarn (mb)" : 1e-31, "Barn (b)" : 1e-28, "Kilobarn (kb)" : 1e-25, "Megabarn (Mb)" : 1e-22, "Planck area" : 2.6e-70, "Shed" : 1e-52, "Outhouse" : 1e-34, // Comparisons "Washington D.C." : 176119191.502848, "Isle of Wight" : 380000000, "Wales" : 20779000000, "Texas" : 696241000000, }, /** * Convert area operation. * * @param {number} input * @param {Object[]} args * @returns {number} */ run_area: function (input, args) { var input_units = args[0], output_units = args[1]; input = input * Convert.AREA_FACTOR[input_units]; return input / Convert.AREA_FACTOR[output_units]; }, /** * @constant * @default */ MASS_UNITS: [ "[Metric]", "Yoctogram (yg)", "Zeptogram (zg)", "Attogram (ag)", "Femtogram (fg)", "Picogram (pg)", "Nanogram (ng)", "Microgram (μg)", "Milligram (mg)", "Centigram (cg)", "Decigram (dg)", "Gram (g)", "Decagram (dag)", "Hectogram (hg)", "Kilogram (kg)", "Megagram (Mg)", "Tonne (t)", "Gigagram (Gg)", "Teragram (Tg)", "Petagram (Pg)", "Exagram (Eg)", "Zettagram (Zg)", "Yottagram (Yg)", "[/Metric]", "[Imperial Avoirdupois]", "Grain (gr)", "Dram (dr)", "Ounce (oz)", "Pound (lb)", "Nail", "Stone (st)", "Quarter (gr)", "Tod", "US hundredweight (cwt)", "Imperial hundredweight (cwt)", "US ton (t)", "Imperial ton (t)", "[/Imperial Avoirdupois]", "[Imperial Troy]", "Grain (gr)", "Pennyweight (dwt)", "Troy dram (dr t)", "Troy ounce (oz t)", "Troy pound (lb t)", "Mark", "[/Imperial Troy]", "[Archaic]", "Wey", "Wool wey", "Suffolk wey", "Wool sack", "Coal sack", "Load", "Last", "Flax or feather last", "Gunpowder last", "Picul", "Rice last", "[/Archaic]", "[Comparisons]", "Big Ben (14 tonnes)", "Blue whale (180 tonnes)", "International Space Station (417 tonnes)", "Space Shuttle (2,041 tonnes)", "RMS Titanic (52,000 tonnes)", "Great Pyramid of Giza (6,000,000 tonnes)", "Earth's oceans (1.4 yottagrams)", "[/Comparisons]", "[Astronomical]", "A teaspoon of neutron star (5,500 million tonnes)", "Lunar mass (ML)", "Earth mass (M⊕)", "Jupiter mass (MJ)", "Solar mass (M☉)", "Sagittarius A* (7.5 x 10^36 kgs-ish)", "Milky Way galaxy (1.2 x 10^42 kgs)", "The observable universe (1.45 x 10^53 kgs)", "[/Astronomical]", ], /** * @constant * @default */ MASS_FACTOR: { // Multiples of a gram // Metric "Yoctogram (yg)" : 1e-24, "Zeptogram (zg)" : 1e-21, "Attogram (ag)" : 1e-18, "Femtogram (fg)" : 1e-15, "Picogram (pg)" : 1e-12, "Nanogram (ng)" : 1e-9, "Microgram (μg)" : 1e-6, "Milligram (mg)" : 1e-3, "Centigram (cg)" : 1e-2, "Decigram (dg)" : 1e-1, "Gram (g)" : 1, "Decagram (dag)" : 10, "Hectogram (hg)" : 100, "Kilogram (kg)" : 1000, "Megagram (Mg)" : 1e6, "Tonne (t)" : 1e6, "Gigagram (Gg)" : 1e9, "Teragram (Tg)" : 1e12, "Petagram (Pg)" : 1e15, "Exagram (Eg)" : 1e18, "Zettagram (Zg)" : 1e21, "Yottagram (Yg)" : 1e24, // Imperial Avoirdupois "Grain (gr)" : 64.79891e-3, "Dram (dr)" : 1.7718451953125, "Ounce (oz)" : 28.349523125, "Pound (lb)" : 453.59237, "Nail" : 3175.14659, "Stone (st)" : 6.35029318e3, "Quarter (gr)" : 12700.58636, "Tod" : 12700.58636, "US hundredweight (cwt)" : 45.359237e3, "Imperial hundredweight (cwt)" : 50.80234544e3, "US ton (t)" : 907.18474e3, "Imperial ton (t)" : 1016.0469088e3, // Imperial Troy "Pennyweight (dwt)" : 1.55517384, "Troy dram (dr t)" : 3.8879346, "Troy ounce (oz t)" : 31.1034768, "Troy pound (lb t)" : 373.2417216, "Mark" : 248.8278144, // Archaic "Wey" : 76.5e3, "Wool wey" : 101.7e3, "Suffolk wey" : 161.5e3, "Wool sack" : 153000, "Coal sack" : 50.80234544e3, "Load" : 918000, "Last" : 1836000, "Flax or feather last" : 770e3, "Gunpowder last" : 1090e3, "Picul" : 60.478982e3, "Rice last" : 1200e3, // Comparisons "Big Ben (14 tonnes)" : 14e6, "Blue whale (180 tonnes)" : 180e6, "International Space Station (417 tonnes)" : 417e6, "Space Shuttle (2,041 tonnes)" : 2041e6, "RMS Titanic (52,000 tonnes)" : 52000e6, "Great Pyramid of Giza (6,000,000 tonnes)" : 6e12, "Earth's oceans (1.4 yottagrams)" : 1.4e24, // Astronomical "A teaspoon of neutron star (5,500 million tonnes)" : 5.5e15, "Lunar mass (ML)" : 7.342e25, "Earth mass (M⊕)" : 5.97219e27, "Jupiter mass (MJ)" : 1.8981411476999997e30, "Solar mass (M☉)" : 1.98855e33, "Sagittarius A* (7.5 x 10^36 kgs-ish)" : 7.5e39, "Milky Way galaxy (1.2 x 10^42 kgs)" : 1.2e45, "The observable universe (1.45 x 10^53 kgs)" : 1.45e56, }, /** * Convert mass operation. * * @param {number} input * @param {Object[]} args * @returns {number} */ run_mass: function (input, args) { var input_units = args[0], output_units = args[1]; input = input * Convert.MASS_FACTOR[input_units]; return input / Convert.MASS_FACTOR[output_units]; }, /** * @constant * @default */ SPEED_UNITS: [ "[Metric]", "Metres per second (m/s)", "Kilometres per hour (km/h)", "[/Metric]", "[Imperial]", "Miles per hour (mph)", "Knots (kn)", "[/Imperial]", "[Comparisons]", "Human hair growth rate", "Bamboo growth rate", "World's fastest snail", "Usain Bolt's top speed", "Jet airliner cruising speed", "Concorde", "SR-71 Blackbird", "Space Shuttle", "International Space Station", "[/Comparisons]", "[Scientific]", "Sound in standard atmosphere", "Sound in water", "Lunar escape velocity", "Earth escape velocity", "Earth's solar orbit", "Solar system's Milky Way orbit", "Milky Way relative to the cosmic microwave background", "Solar escape velocity", "Neutron star escape velocity (0.3c)", "Light in a diamond (0.4136c)", "Signal in an optical fibre (0.667c)", "Light (c)", "[/Scientific]", ], /** * @constant * @default */ SPEED_FACTOR: { // Multiples of m/s // Metric "Metres per second (m/s)" : 1, "Kilometres per hour (km/h)" : 0.2778, // Imperial "Miles per hour (mph)" : 0.44704, "Knots (kn)" : 0.5144, // Comparisons "Human hair growth rate" : 4.8e-9, "Bamboo growth rate" : 1.4e-5, "World's fastest snail" : 0.00275, "Usain Bolt's top speed" : 12.42, "Jet airliner cruising speed" : 250, "Concorde" : 603, "SR-71 Blackbird" : 981, "Space Shuttle" : 1400, "International Space Station" : 7700, // Scientific "Sound in standard atmosphere" : 340.3, "Sound in water" : 1500, "Lunar escape velocity" : 2375, "Earth escape velocity" : 11200, "Earth's solar orbit" : 29800, "Solar system's Milky Way orbit" : 200000, "Milky Way relative to the cosmic microwave background" : 552000, "Solar escape velocity" : 617700, "Neutron star escape velocity (0.3c)" : 100000000, "Light in a diamond (0.4136c)" : 124000000, "Signal in an optical fibre (0.667c)" : 200000000, "Light (c)" : 299792458, }, /** * Convert speed operation. * * @param {number} input * @param {Object[]} args * @returns {number} */ run_speed: function (input, args) { var input_units = args[0], output_units = args[1]; input = input * Convert.SPEED_FACTOR[input_units]; return input / Convert.SPEED_FACTOR[output_units]; }, }; × Search results Close "},"operations_DateTime.js.html":{"id":"operations_DateTime.js.html","title":"Source: operations/DateTime.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/DateTime.js /* globals moment */ /** * Date and time operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var DateTime = { /** * @constant * @default */ UNITS: ["Seconds (s)", "Milliseconds (ms)", "Microseconds (μs)", "Nanoseconds (ns)"], /** * From UNIX Timestamp operation. * * @param {number} input * @param {Object[]} args * @returns {string} */ run_from_unix_timestamp: function(input, args) { var units = args[0], d; input = parseFloat(input); if (units == "Seconds (s)") { d = moment.unix(input); return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC"; } else if (units == "Milliseconds (ms)") { d = moment(input); return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC"; } else if (units == "Microseconds (μs)") { d = moment(input / 1000); return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC"; } else if (units == "Nanoseconds (ns)") { d = moment(input / 1000000); return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC"; } else { throw "Unrecognised unit"; } }, /** * To UNIX Timestamp operation. * * @param {string} input * @param {Object[]} args * @returns {number} */ run_to_unix_timestamp: function(input, args) { var units = args[0], d = moment(input); if (units == "Seconds (s)") { return d.unix(); } else if (units == "Milliseconds (ms)") { return d.valueOf(); } else if (units == "Microseconds (μs)") { return d.valueOf() * 1000; } else if (units == "Nanoseconds (ns)") { return d.valueOf() * 1000000; } else { throw "Unrecognised unit"; } }, /** * @constant * @default */ DATETIME_FORMATS: [ { name: "Standard date and time", value: "DD/MM/YYYY HH:mm:ss" }, { name: "American-style date and time", value: "MM/DD/YYYY HH:mm:ss" }, { name: "International date and time", value: "YYYY-MM-DD HH:mm:ss" }, { name: "Verbose date and time", value: "dddd Do MMMM YYYY HH:mm:ss Z z" }, { name: "UNIX timestamp (seconds)", value: "X" }, { name: "UNIX timestamp offset (milliseconds)", value: "x" }, { name: "Automatic", value: "" }, ], /** * @constant * @default */ INPUT_FORMAT_STRING: "DD/MM/YYYY HH:mm:ss", /** * @constant * @default */ OUTPUT_FORMAT_STRING: "dddd Do MMMM YYYY HH:mm:ss Z z", /** * @constant * @default */ TIMEZONES: ["UTC"].concat(moment.tz.names()), /** * Translate DateTime Format operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_translate_format: function(input, args) { var input_format = args[1], input_timezone = args[2], output_format = args[3], output_timezone = args[4], date; try { date = moment.tz(input, input_format, input_timezone); if (!date || date.format() == "Invalid date") throw Error; } catch(err) { return "Invalid format.\\n\\n" + DateTime.FORMAT_EXAMPLES; } return date.tz(output_timezone).format(output_format); }, /** * Parse DateTime operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_parse: function(input, args) { var input_format = args[1], input_timezone = args[2], date, output = ""; try { date = moment.tz(input, input_format, input_timezone); if (!date || date.format() == "Invalid date") throw Error; } catch(err) { return "Invalid format.\\n\\n" + DateTime.FORMAT_EXAMPLES; } output += "Date: " + date.format("dddd Do MMMM YYYY") + "\\nTime: " + date.format("HH:mm:ss") + "\\nPeriod: " + date.format("A") + "\\nTimezone: " + date.format("z") + "\\nUTC offset: " + date.format("ZZ") + "\\n\\nDaylight Saving Time: " + date.isDST() + "\\nLeap year: " + date.isLeapYear() + "\\nDays in this month: " + date.daysInMonth() + "\\n\\nDay of year: " + date.dayOfYear() + "\\nWeek number: " + date.weekYear() + "\\nQuarter: " + date.quarter(); return output; }, /** * @constant */ FORMAT_EXAMPLES: "Format string tokens:\\n\\n\\ <table class='table table-striped table-hover table-condensed table-bordered' style='font-family: sans-serif'>\\ <thead>\\ <tr>\\ <th>Category</th>\\ <th>Token</th>\\ <th>Output</th>\\ </tr>\\ </thead>\\ <tbody>\\ <tr>\\ <td><b>Month</b></td>\\ <td>M</td>\\ <td>1 2 ... 11 12</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>Mo</td>\\ <td>1st 2nd ... 11th 12th</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>MM</td>\\ <td>01 02 ... 11 12</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>MMM</td>\\ <td>Jan Feb ... Nov Dec</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>MMMM</td>\\ <td>January February ... November December</td>\\ </tr>\\ <tr>\\ <td><b>Quarter</b></td>\\ <td>Q</td>\\ <td>1 2 3 4</td>\\ </tr>\\ <tr>\\ <td><b>Day of Month</b></td>\\ <td>D</td>\\ <td>1 2 ... 30 31</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>Do</td>\\ <td>1st 2nd ... 30th 31st</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>DD</td>\\ <td>01 02 ... 30 31</td>\\ </tr>\\ <tr>\\ <td><b>Day of Year</b></td>\\ <td>DDD</td>\\ <td>1 2 ... 364 365</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>DDDo</td>\\ <td>1st 2nd ... 364th 365th</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>DDDD</td>\\ <td>001 002 ... 364 365</td>\\ </tr>\\ <tr>\\ <td><b>Day of Week</b></td>\\ <td>d</td>\\ <td>0 1 ... 5 6</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>do</td>\\ <td>0th 1st ... 5th 6th</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>dd</td>\\ <td>Su Mo ... Fr Sa</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>ddd</td>\\ <td>Sun Mon ... Fri Sat</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>dddd</td>\\ <td>Sunday Monday ... Friday Saturday</td>\\ </tr>\\ <tr>\\ <td><b>Day of Week (Locale)</b></td>\\ <td>e</td>\\ <td>0 1 ... 5 6</td>\\ </tr>\\ <tr>\\ <td><b>Day of Week (ISO)</b></td>\\ <td>E</td>\\ <td>1 2 ... 6 7</td>\\ </tr>\\ <tr>\\ <td><b>Week of Year</b></td>\\ <td>w</td>\\ <td>1 2 ... 52 53</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>wo</td>\\ <td>1st 2nd ... 52nd 53rd</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>ww</td>\\ <td>01 02 ... 52 53</td>\\ </tr>\\ <tr>\\ <td><b>Week of Year (ISO)</b></td>\\ <td>W</td>\\ <td>1 2 ... 52 53</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>Wo</td>\\ <td>1st 2nd ... 52nd 53rd</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>WW</td>\\ <td>01 02 ... 52 53</td>\\ </tr>\\ <tr>\\ <td><b>Year</b></td>\\ <td>YY</td>\\ <td>70 71 ... 29 30</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>YYYY</td>\\ <td>1970 1971 ... 2029 2030</td>\\ </tr>\\ <tr>\\ <td><b>Week Year</b></td>\\ <td>gg</td>\\ <td>70 71 ... 29 30</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>gggg</td>\\ <td>1970 1971 ... 2029 2030</td>\\ </tr>\\ <tr>\\ <td><b>Week Year (ISO)</b></td>\\ <td>GG</td>\\ <td>70 71 ... 29 30</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>GGGG</td>\\ <td>1970 1971 ... 2029 2030</td>\\ </tr>\\ <tr>\\ <td><b>AM/PM</b></td>\\ <td>A</td>\\ <td>AM PM</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>a</td>\\ <td>am pm</td>\\ </tr>\\ <tr>\\ <td><b>Hour</b></td>\\ <td>H</td>\\ <td>0 1 ... 22 23</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>HH</td>\\ <td>00 01 ... 22 23</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>h</td>\\ <td>1 2 ... 11 12</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>hh</td>\\ <td>01 02 ... 11 12</td>\\ </tr>\\ <tr>\\ <td><b>Minute</b></td>\\ <td>m</td>\\ <td>0 1 ... 58 59</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>mm</td>\\ <td>00 01 ... 58 59</td>\\ </tr>\\ <tr>\\ <td><b>Second</b></td>\\ <td>s</td>\\ <td>0 1 ... 58 59</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>ss</td>\\ <td>00 01 ... 58 59</td>\\ </tr>\\ <tr>\\ <td><b>Fractional Second</b></td>\\ <td>S</td>\\ <td>0 1 ... 8 9</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>SS</td>\\ <td>00 01 ... 98 99</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>SSS</td>\\ <td>000 001 ... 998 999</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>SSSS ... SSSSSSSSS</td>\\ <td>000[0..] 001[0..] ... 998[0..] 999[0..]</td>\\ </tr>\\ <tr>\\ <td><b>Timezone</b></td>\\ <td>z or zz</td>\\ <td>EST CST ... MST PST</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>Z</td>\\ <td>-07:00 -06:00 ... +06:00 +07:00</td>\\ </tr>\\ <tr>\\ <td></td>\\ <td>ZZ</td>\\ <td>-0700 -0600 ... +0600 +0700</td>\\ </tr>\\ <tr>\\ <td><b>Unix Timestamp</b></td>\\ <td>X</td>\\ <td>1360013296</td>\\ </tr>\\ <tr>\\ <td><b>Unix Millisecond Timestamp</b></td>\\ <td>x</td>\\ <td>1360013296123</td>\\ </tr>\\ </tbody>\\ </table>", }; × Search results Close "},"operations_Endian.js.html":{"id":"operations_Endian.js.html","title":"Source: operations/Endian.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Endian.js /** * Endian operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Endian = { /** * @constant * @default */ DATA_FORMAT: ["Hex", "Raw"], /** * @constant * @default */ WORD_LENGTH: 4, /** * @constant * @default */ PAD_INCOMPLETE_WORDS: true, /** * Swap endianness operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_swap_endianness: function(input, args) { var data_format = args[0], word_length = args[1], pad_incomplete_words = args[2], data = [], result = [], words = [], i = 0, j = 0; if (word_length <= 0) { return "Word length must be greater than 0"; } // Convert input to raw data based on specified data format switch (data_format) { case "Hex": data = Utils.from_hex(input); break; case "Raw": data = Utils.str_to_byte_array(input); break; default: data = input; } // Split up into words for (i = 0; i < data.length; i += word_length) { var word = data.slice(i, i + word_length); // Pad word if too short if (pad_incomplete_words && word.length < word_length){ for (j = word.length; j < word_length; j++) { word.push(0); } } words.push(word); } // Swap endianness and flatten for (i = 0; i < words.length; i++) { j = words[i].length; while (j--) { result.push(words[i][j]); } } // Convert data back to specified data format switch (data_format) { case "Hex": return Utils.to_hex(result); case "Raw": return Utils.byte_array_to_utf8(result); default: return result; } }, }; × Search results Close "},"operations_Entropy.js.html":{"id":"operations_Entropy.js.html","title":"Source: operations/Entropy.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Entropy.js /** * Entropy operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Entropy = { /** * @constant * @default */ CHUNK_SIZE: 1000, /** * Entropy operation. * * @param {byte_array} input * @param {Object[]} args * @returns {html} */ run_entropy: function(input, args) { var chunk_size = args[0], output = "", entropy = Entropy._calc_entropy(input); output += "Shannon entropy: " + entropy + "\\n" + "<br><canvas id='chart-area'></canvas><br>\\n" + "- 0 represents no randomness (i.e. all the bytes in the data have the same value) whereas 8, the maximum, represents a completely random string.\\n" + "- Standard English text usually falls somewhere between 3.5 and 5.\\n" + "- Properly encrypted or compressed data of a reasonable length should have an entropy of over 7.5.\\n\\n" + "The following results show the entropy of chunks of the input data. Chunks with particularly high entropy could suggest encrypted or compressed sections.\\n\\n" + "<br><script>\\ var canvas = document.getElementById('chart-area'),\\ parent_rect = canvas.parentNode.getBoundingClientRect(),\\ entropy = " + entropy + ",\\ height = parent_rect.height * 0.25;\\ \\ canvas.width = parent_rect.width * 0.95;\\ canvas.height = height > 150 ? 150 : height;\\ \\ CanvasComponents.draw_scale_bar(canvas, entropy, 8, [\\ {\\ label: 'English text',\\ min: 3.5,\\ max: 5\\ },{\\ label: 'Encrypted/compressed',\\ min: 7.5,\\ max: 8\\ }\\ ]);\\ </script>"; var chunk_entropy = 0; if (chunk_size !== 0) { for (var i = 0; i < input.length; i += chunk_size) { chunk_entropy = Entropy._calc_entropy(input.slice(i, i+chunk_size)); output += "Bytes " + i + " to " + (i+chunk_size) + ": " + chunk_entropy + "\\n"; } } else { output += "Chunk size cannot be 0."; } return output; }, /** * @constant * @default */ FREQ_ZEROS: false, /** * Frequency distribution operation. * * @param {byte_array} input * @param {Object[]} args * @returns {html} */ run_freq_distrib: function (input, args) { if (!input.length) return "No data"; var distrib = new Array(256), percentages = new Array(256), len = input.length, show_zeroes = args[0]; // Initialise distrib to 0 for (var i = 0; i < 256; i++) { distrib[i] = 0; } // Count bytes for (i = 0; i < len; i++) { distrib[input[i]]++; } // Calculate percentages var repr = 0; for (i = 0; i < 256; i++) { if (distrib[i] > 0) repr++; percentages[i] = distrib[i] / len * 100; } // Print var output = "<canvas id='chart-area'></canvas><br>" + "Total data length: " + len + "\\nNumber of bytes represented: " + repr + "\\nNumber of bytes not represented: " + (256-repr) + "\\n\\nByte Percentage\\n" + "<script>\\ var canvas = document.getElementById('chart-area'),\\ parent_rect = canvas.parentNode.getBoundingClientRect(),\\ scores = " + JSON.stringify(percentages) + ";\\ \\ canvas.width = parent_rect.width * 0.95;\\ canvas.height = parent_rect.height * 0.9;\\ \\ CanvasComponents.draw_bar_chart(canvas, scores, 'Byte', 'Frequency %', 16, 6);\\ </script>"; for (i = 0; i < 256; i++) { if (distrib[i] || show_zeroes) { output += " " + Utils.hex(i, 2) + " (" + Utils.pad_right(percentages[i].toFixed(2).replace(".00", "") + "%)", 8) + Array(Math.ceil(percentages[i])+1).join("|") + "\\n"; } } return output; }, /** * Calculates the Shannon entropy for a given chunk of data. * * @private * @param {byte_array} data * @returns {number} */ _calc_entropy: function(data) { var prob = [], uniques = data.unique(), str = Utils.byte_array_to_chars(data); for (var i = 0; i < uniques.length; i++) { prob.push(str.count(Utils.chr(uniques[i])) / data.length); } var entropy = 0, p; for (i = 0; i < prob.length; i++) { p = prob[i]; entropy += p * Math.log(p) / Math.log(2); } return -entropy; }, }; × Search results Close "},"operations_Extract.js.html":{"id":"operations_Extract.js.html","title":"Source: operations/Extract.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Extract.js /** * Identifier extraction operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Extract = { /** * Runs search operations across the input data using refular expressions. * * @private * @param {string} input * @param {RegExp} search_regex * @param {RegExp} remove_regex - A regular expression defining results to remove from the * final list * @param {boolean} include_total - Whether or not to include the total number of results * @returns {string} */ _search: function(input, search_regex, remove_regex, include_total) { var output = "", total = 0, match; while (!!(match = search_regex.exec(input))) { if (remove_regex && remove_regex.test(match[0])) continue; total++; output += match[0] + "\\n"; } if (include_total) output = "Total found: " + total + "\\n\\n" + output; return output; }, /** * @constant * @default */ MIN_STRING_LEN: 3, /** * @constant * @default */ DISPLAY_TOTAL: false, /** * Strings operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_strings: function(input, args) { var min_len = args[0] || Extract.MIN_STRING_LEN, display_total = args[1], strings = "[A-Z\\\\d/\\\\-:.,_$%'\\"()<>= !\\\\[\\\\]{}@]", regex = new RegExp(strings + "{" + min_len + ",}", "ig"); return Extract._search(input, regex, null, display_total); }, /** * @constant * @default */ INCLUDE_IPV4: true, /** * @constant * @default */ INCLUDE_IPV6: false, /** * @constant * @default */ REMOVE_LOCAL: false, /** * Extract IP addresses operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_ip: function(input, args) { var include_ipv4 = args[0], include_ipv6 = args[1], remove_local = args[2], display_total = args[3], ipv4 = "(?:(?:\\\\d|[01]?\\\\d\\\\d|2[0-4]\\\\d|25[0-5])\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d|\\\\d)(?:\\\\/\\\\d{1,2})?", ipv6 = "((?=.*::)(?!.*::.+::)(::)?([\\\\dA-F]{1,4}:(:|\\\\b)|){5}|([\\\\dA-F]{1,4}:){6})((([\\\\dA-F]{1,4}((?!\\\\3)::|:\\\\b|(?![\\\\dA-F])))|(?!\\\\2\\\\3)){2}|(((2[0-4]|1\\\\d|[1-9])?\\\\d|25[0-5])\\\\.?\\\\b){4})", ips = ""; if (include_ipv4 && include_ipv6) { ips = ipv4 + "|" + ipv6; } else if (include_ipv4) { ips = ipv4; } else if (include_ipv6) { ips = ipv6; } if (ips) { var regex = new RegExp(ips, "ig"); if (remove_local) { var ten = "10\\\\..+", oneninetwo = "192\\\\.168\\\\..+", oneseventwo = "172\\\\.(?:1[6-9]|2\\\\d|3[01])\\\\..+", onetwoseven = "127\\\\..+", remove_regex = new RegExp("^(?:" + ten + "|" + oneninetwo + "|" + oneseventwo + "|" + onetwoseven + ")"); return Extract._search(input, regex, remove_regex, display_total); } else { return Extract._search(input, regex, null, display_total); } } else { return ""; } }, /** * Extract email addresses operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_email: function(input, args) { var display_total = args[0], regex = /\\w[-.\\w]*@[-\\w]+(?:\\.[-\\w]+)*\\.[A-Z]{2,4}/ig; return Extract._search(input, regex, null, display_total); }, /** * Extract MAC addresses operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_mac: function(input, args) { var display_total = args[0], regex = /[A-F\\d]{2}(?:[:-][A-F\\d]{2}){5}/ig; return Extract._search(input, regex, null, display_total); }, /** * Extract URLs operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_urls: function(input, args) { var display_total = args[0], protocol = "[A-Z]+://", hostname = "[-\\\\w]+(?:\\\\.\\\\w[-\\\\w]*)+", port = ":\\\\d+", path = "/[^.!,?;\\"'<>()\\\\[\\\\]{}\\\\s\\\\x7F-\\\\xFF]*"; path += "(?:[.!,?]+[^.!,?;\\"'<>()\\\\[\\\\]{}\\\\s\\\\x7F-\\\\xFF]+)*"; var regex = new RegExp(protocol + hostname + "(?:" + port + ")?(?:" + path + ")?", "ig"); return Extract._search(input, regex, null, display_total); }, /** * Extract domains operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_domains: function(input, args) { var display_total = args[0], protocol = "https?://", hostname = "[-\\\\w\\\\.]+", tld = "\\\\.(?:com|net|org|biz|info|co|uk|onion|int|mobi|name|edu|gov|mil|eu|ac|ae|af|de|ca|ch|cn|cy|es|gb|hk|il|in|io|tv|me|nl|no|nz|ro|ru|tr|us|az|ir|kz|uz|pk)+", regex = new RegExp("(?:" + protocol + ")?" + hostname + tld, "ig"); return Extract._search(input, regex, null, display_total); }, /** * @constant * @default */ INCLUDE_WIN_PATH: true, /** * @constant * @default */ INCLUDE_UNIX_PATH: true, /** * Extract file paths operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_file_paths: function(input, args) { var include_win_path = args[0], include_unix_path = args[1], display_total = args[2], win_drive = "[A-Z]:\\\\\\\\", win_name = "[A-Z\\\\d][A-Z\\\\d\\\\- '_\\\\(\\\\)]{0,61}", win_ext = "[A-Z\\\\d]{1,6}", win_path = win_drive + "(?:" + win_name + "\\\\\\\\?)*" + win_name + "(?:\\\\." + win_ext + ")?", unix_path = "(?:/[A-Z\\\\d.][A-Z\\\\d\\\\-.]{0,61})+", file_paths = ""; if (include_win_path && include_unix_path) { file_paths = win_path + "|" + unix_path; } else if (include_win_path) { file_paths = win_path; } else if (include_unix_path) { file_paths = unix_path; } if (file_paths) { var regex = new RegExp(file_paths, "ig"); return Extract._search(input, regex, null, display_total); } else { return ""; } }, /** * Extract dates operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_dates: function(input, args) { var display_total = args[0], date1 = "(?:19|20)\\\\d\\\\d[- /.](?:0[1-9]|1[012])[- /.](?:0[1-9]|[12][0-9]|3[01])", // yyyy-mm-dd date2 = "(?:0[1-9]|[12][0-9]|3[01])[- /.](?:0[1-9]|1[012])[- /.](?:19|20)\\\\d\\\\d", // dd/mm/yyyy date3 = "(?:0[1-9]|1[012])[- /.](?:0[1-9]|[12][0-9]|3[01])[- /.](?:19|20)\\\\d\\\\d", // mm/dd/yyyy regex = new RegExp(date1 + "|" + date2 + "|" + date3, "ig"); return Extract._search(input, regex, null, display_total); }, /** * Extract all identifiers operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_all_idents: function(input, args) { var output = ""; output += "IP addresses\\n"; output += Extract.run_ip(input, [true, true, false]); output += "\\nEmail addresses\\n"; output += Extract.run_email(input, []); output += "\\nMAC addresses\\n"; output += Extract.run_mac(input, []); output += "\\nURLs\\n"; output += Extract.run_urls(input, []); output += "\\nDomain names\\n"; output += Extract.run_domains(input, []); output += "\\nFile paths\\n"; output += Extract.run_file_paths(input, [true, true]); output += "\\nDates\\n"; output += Extract.run_dates(input, []); return output; }, }; × Search results Close "},"operations_FileType.js.html":{"id":"operations_FileType.js.html","title":"Source: operations/FileType.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/FileType.js /** * File type operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var FileType = { /** * Detect File Type operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_detect: function(input, args) { var type = FileType._magic_type(input); if (!type) { return "Unknown file type. Have you tried checking the entropy of this data to determine whether it might be encrypted or compressed?"; } else { var output = "File extension: " + type.ext + "\\n" + "MIME type: " + type.mime; if (type.desc && type.desc.length) { output += "\\nDescription: " + type.desc; } return output; } }, /** * @constant * @default */ IGNORE_COMMON_BYTE_SEQUENCES: true, /** * Scan for Embedded Files operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_scan_for_embedded_files: function(input, args) { var output = "Scanning data for 'magic bytes' which may indicate embedded files. The following results may be false positives and should not be treat as reliable. Any suffiently long file is likely to contain these magic bytes coincidentally.\\n", type, ignore_common = args[0], common_exts = ["ico", "ttf", ""], num_found = 0, num_common_found = 0; for (var i = 0; i < input.length; i++) { type = FileType._magic_type(input.slice(i)); if (type) { if (ignore_common && common_exts.indexOf(type.ext) > -1) { num_common_found++; continue; } num_found++; output += "\\nOffset " + i + " (0x" + Utils.hex(i) + "):\\n" + " File extension: " + type.ext + "\\n" + " MIME type: " + type.mime + "\\n"; if (type.desc && type.desc.length) { output += " Description: " + type.desc + "\\n"; } } } if (num_found === 0) { output += "\\nNo embedded files were found."; } if (num_common_found > 0) { output += "\\n\\n" + num_common_found; output += num_common_found == 1 ? " file type was detected that has a common byte sequence. This is likely to be a false positive." : " file types were detected that have common byte sequences. These are likely to be false positives."; output += " Run this operation with the 'Ignore common byte sequences' option unchecked to see details."; } return output; }, /** * Given a buffer, detects magic byte sequences at specific positions and returns the * extension and mime type. * * @private * @param {byte_array} buf * @returns {Object} type * @returns {string} type.ext - File extension * @returns {string} type.mime - Mime type * @returns {string} [type.desc] - Description */ _magic_type: function (buf) { if (!(buf && buf.length > 1)) { return null; } if (buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF) { return { ext: 'jpg', mime: 'image/jpeg' }; } if (buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4E && buf[3] === 0x47) { return { ext: 'png', mime: 'image/png' }; } if (buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46) { return { ext: 'gif', mime: 'image/gif' }; } if (buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) { return { ext: 'webp', mime: 'image/webp' }; } // needs to be before `tif` check if (((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) && buf[8] === 0x43 && buf[9] === 0x52) { return { ext: 'cr2', mime: 'image/x-canon-cr2' }; } if ((buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0x2A && buf[3] === 0x0) || (buf[0] === 0x4D && buf[1] === 0x4D && buf[2] === 0x0 && buf[3] === 0x2A)) { return { ext: 'tif', mime: 'image/tiff' }; } if (buf[0] === 0x42 && buf[1] === 0x4D) { return { ext: 'bmp', mime: 'image/bmp' }; } if (buf[0] === 0x49 && buf[1] === 0x49 && buf[2] === 0xBC) { return { ext: 'jxr', mime: 'image/vnd.ms-photo' }; } if (buf[0] === 0x38 && buf[1] === 0x42 && buf[2] === 0x50 && buf[3] === 0x53) { return { ext: 'psd', mime: 'image/vnd.adobe.photoshop' }; } // needs to be before `zip` check if (buf[0] === 0x50 && buf[1] === 0x4B && buf[2] === 0x3 && buf[3] === 0x4 && buf[30] === 0x6D && buf[31] === 0x69 && buf[32] === 0x6D && buf[33] === 0x65 && buf[34] === 0x74 && buf[35] === 0x79 && buf[36] === 0x70 && buf[37] === 0x65 && buf[38] === 0x61 && buf[39] === 0x70 && buf[40] === 0x70 && buf[41] === 0x6C && buf[42] === 0x69 && buf[43] === 0x63 && buf[44] === 0x61 && buf[45] === 0x74 && buf[46] === 0x69 && buf[47] === 0x6F && buf[48] === 0x6E && buf[49] === 0x2F && buf[50] === 0x65 && buf[51] === 0x70 && buf[52] === 0x75 && buf[53] === 0x62 && buf[54] === 0x2B && buf[55] === 0x7A && buf[56] === 0x69 && buf[57] === 0x70) { return { ext: 'epub', mime: 'application/epub+zip' }; } if (buf[0] === 0x50 && buf[1] === 0x4B && (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)) { return { ext: 'zip', mime: 'application/zip' }; } if (buf[257] === 0x75 && buf[258] === 0x73 && buf[259] === 0x74 && buf[260] === 0x61 && buf[261] === 0x72) { return { ext: 'tar', mime: 'application/x-tar' }; } if (buf[0] === 0x52 && buf[1] === 0x61 && buf[2] === 0x72 && buf[3] === 0x21 && buf[4] === 0x1A && buf[5] === 0x7 && (buf[6] === 0x0 || buf[6] === 0x1)) { return { ext: 'rar', mime: 'application/x-rar-compressed' }; } if (buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x8) { return { ext: 'gz', mime: 'application/gzip' }; } if (buf[0] === 0x42 && buf[1] === 0x5A && buf[2] === 0x68) { return { ext: 'bz2', mime: 'application/x-bzip2' }; } if (buf[0] === 0x37 && buf[1] === 0x7A && buf[2] === 0xBC && buf[3] === 0xAF && buf[4] === 0x27 && buf[5] === 0x1C) { return { ext: '7z', mime: 'application/x-7z-compressed' }; } if (buf[0] === 0x78 && buf[1] === 0x01) { return { ext: 'dmg', mime: 'application/x-apple-diskimage' }; } if ((buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && (buf[3] === 0x18 || buf[3] === 0x20) && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) || (buf[0] === 0x33 && buf[1] === 0x67 && buf[2] === 0x70 && buf[3] === 0x35) || (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x6D && buf[9] === 0x70 && buf[10] === 0x34 && buf[11] === 0x32 && buf[16] === 0x6D && buf[17] === 0x70 && buf[18] === 0x34 && buf[19] === 0x31 && buf[20] === 0x6D && buf[21] === 0x70 && buf[22] === 0x34 && buf[23] === 0x32 && buf[24] === 0x69 && buf[25] === 0x73 && buf[26] === 0x6F && buf[27] === 0x6D)) { return { ext: 'mp4', mime: 'video/mp4' }; } if ((buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x1C && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x56)) { return { ext: 'm4v', mime: 'video/x-m4v' }; } if (buf[0] === 0x4D && buf[1] === 0x54 && buf[2] === 0x68 && buf[3] === 0x64) { return { ext: 'mid', mime: 'audio/midi' }; } // needs to be before the `webm` check if (buf[31] === 0x6D && buf[32] === 0x61 && buf[33] === 0x74 && buf[34] === 0x72 && buf[35] === 0x6f && buf[36] === 0x73 && buf[37] === 0x6B && buf[38] === 0x61) { return { ext: 'mkv', mime: 'video/x-matroska' }; } if (buf[0] === 0x1A && buf[1] === 0x45 && buf[2] === 0xDF && buf[3] === 0xA3) { return { ext: 'webm', mime: 'video/webm' }; } if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x0 && buf[3] === 0x14 && buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70) { return { ext: 'mov', mime: 'video/quicktime' }; } if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x41 && buf[9] === 0x56 && buf[10] === 0x49) { return { ext: 'avi', mime: 'video/x-msvideo' }; } if (buf[0] === 0x30 && buf[1] === 0x26 && buf[2] === 0xB2 && buf[3] === 0x75 && buf[4] === 0x8E && buf[5] === 0x66 && buf[6] === 0xCF && buf[7] === 0x11 && buf[8] === 0xA6 && buf[9] === 0xD9) { return { ext: 'wmv', mime: 'video/x-ms-wmv' }; } if (buf[0] === 0x0 && buf[1] === 0x0 && buf[2] === 0x1 && buf[3].toString(16)[0] === 'b') { return { ext: 'mpg', mime: 'video/mpeg' }; } if ((buf[0] === 0x49 && buf[1] === 0x44 && buf[2] === 0x33) || (buf[0] === 0xFF && buf[1] === 0xfb)) { return { ext: 'mp3', mime: 'audio/mpeg' }; } if ((buf[4] === 0x66 && buf[5] === 0x74 && buf[6] === 0x79 && buf[7] === 0x70 && buf[8] === 0x4D && buf[9] === 0x34 && buf[10] === 0x41) || (buf[0] === 0x4D && buf[1] === 0x34 && buf[2] === 0x41 && buf[3] === 0x20)) { return { ext: 'm4a', mime: 'audio/m4a' }; } if (buf[0] === 0x4F && buf[1] === 0x67 && buf[2] === 0x67 && buf[3] === 0x53) { return { ext: 'ogg', mime: 'audio/ogg' }; } if (buf[0] === 0x66 && buf[1] === 0x4C && buf[2] === 0x61 && buf[3] === 0x43) { return { ext: 'flac', mime: 'audio/x-flac' }; } if (buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 && buf[8] === 0x57 && buf[9] === 0x41 && buf[10] === 0x56 && buf[11] === 0x45) { return { ext: 'wav', mime: 'audio/x-wav' }; } if (buf[0] === 0x23 && buf[1] === 0x21 && buf[2] === 0x41 && buf[3] === 0x4D && buf[4] === 0x52 && buf[5] === 0x0A) { return { ext: 'amr', mime: 'audio/amr' }; } if (buf[0] === 0x25 && buf[1] === 0x50 && buf[2] === 0x44 && buf[3] === 0x46) { return { ext: 'pdf', mime: 'application/pdf' }; } if (buf[0] === 0x4D && buf[1] === 0x5A) { return { ext: 'exe', mime: 'application/x-msdownload' }; } if ((buf[0] === 0x43 || buf[0] === 0x46) && buf[1] === 0x57 && buf[2] === 0x53) { return { ext: 'swf', mime: 'application/x-shockwave-flash' }; } if (buf[0] === 0x7B && buf[1] === 0x5C && buf[2] === 0x72 && buf[3] === 0x74 && buf[4] === 0x66) { return { ext: 'rtf', mime: 'application/rtf' }; } if (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x46 && buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) { return { ext: 'woff', mime: 'application/font-woff' }; } if (buf[0] === 0x77 && buf[1] === 0x4F && buf[2] === 0x46 && buf[3] === 0x32 && buf[4] === 0x00 && buf[5] === 0x01 && buf[6] === 0x00 && buf[7] === 0x00) { return { ext: 'woff2', mime: 'application/font-woff' }; } if (buf[34] === 0x4C && buf[35] === 0x50 && ((buf[8] === 0x02 && buf[9] === 0x00 && buf[10] === 0x01) || (buf[8] === 0x01 && buf[9] === 0x00 && buf[10] === 0x00) || (buf[8] === 0x02 && buf[9] === 0x00 && buf[10] === 0x02))) { return { ext: 'eot', mime: 'application/octet-stream' }; } if (buf[0] === 0x00 && buf[1] === 0x01 && buf[2] === 0x00 && buf[3] === 0x00 && buf[4] === 0x00) { return { ext: 'ttf', mime: 'application/font-sfnt' }; } if (buf[0] === 0x4F && buf[1] === 0x54 && buf[2] === 0x54 && buf[3] === 0x4F && buf[4] === 0x00) { return { ext: 'otf', mime: 'application/font-sfnt' }; } if (buf[0] === 0x00 && buf[1] === 0x00 && buf[2] === 0x01 && buf[3] === 0x00) { return { ext: 'ico', mime: 'image/x-icon' }; } if (buf[0] === 0x46 && buf[1] === 0x4C && buf[2] === 0x56 && buf[3] === 0x01) { return { ext: 'flv', mime: 'video/x-flv' }; } if (buf[0] === 0x25 && buf[1] === 0x21) { return { ext: 'ps', mime: 'application/postscript' }; } if (buf[0] === 0xFD && buf[1] === 0x37 && buf[2] === 0x7A && buf[3] === 0x58 && buf[4] === 0x5A && buf[5] === 0x00) { return { ext: 'xz', mime: 'application/x-xz' }; } if (buf[0] === 0x53 && buf[1] === 0x51 && buf[2] === 0x4C && buf[3] === 0x69) { return { ext: 'sqlite', mime: 'application/x-sqlite3' }; } // Added by n1474335 [n1474335@gmail.com] from here on // ################################################################## // if ((buf[0] === 0x1F && buf[1] === 0x9D) || (buf[0] === 0x1F && buf[1] === 0xA0)) { return { ext: 'z, tar.z', mime: 'application/x-gtar' }; } if (buf[0] === 0x7F && buf[1] === 0x45 && buf[2] === 0x4C && buf[3] === 0x46) { return { ext: 'none, axf, bin, elf, o, prx, puff, so', mime: 'application/x-executable', desc: 'Executable and Linkable Format file. No standard file extension.' }; } if (buf[0] === 0xCA && buf[1] === 0xFE && buf[2] === 0xBA && buf[3] === 0xBE) { return { ext: 'class', mime: 'application/java-vm' }; } if (buf[0] === 0xEF && buf[1] === 0xBB && buf[2] === 0xBF) { return { ext: 'txt', mime: 'text/plain', desc: 'UTF-8 encoded Unicode byte order mark detected, commonly but not exclusively seen in text files.' }; } // Must be before Little-endian UTF-16 BOM if (buf[0] === 0xFF && buf[1] === 0xFE && buf[2] === 0x00 && buf[3] === 0x00) { return { ext: '', mime: '', desc: 'Little-endian UTF-32 encoded Unicode byte order mark detected.' }; } if (buf[0] === 0xFF && buf[1] === 0xFE) { return { ext: '', mime: '', desc: 'Little-endian UTF-16 encoded Unicode byte order mark detected.' }; } if ((buf[0x8001] === 0x43 && buf[0x8002] === 0x44 && buf[0x8003] === 0x30 && buf[0x8004] === 0x30 && buf[0x8005] === 0x31) || (buf[0x8801] === 0x43 && buf[0x8802] === 0x44 && buf[0x8803] === 0x30 && buf[0x8804] === 0x30 && buf[0x8805] === 0x31) || (buf[0x9001] === 0x43 && buf[0x9002] === 0x44 && buf[0x9003] === 0x30 && buf[0x9004] === 0x30 && buf[0x9005] === 0x31)) { return { ext: 'iso', mime: 'application/octet-stream', desc: 'ISO 9660 CD/DVD image file' }; } if (buf[0] === 0xD0 && buf[1] === 0xCF && buf[2] === 0x11 && buf[3] === 0xE0 && buf[4] === 0xA1 && buf[5] === 0xB1 && buf[6] === 0x1A && buf[7] === 0xE1) { return { ext: 'doc, xls, ppt', mime: 'application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint', desc: 'Microsoft Office documents' }; } if (buf[0] === 0x64 && buf[1] === 0x65 && buf[2] === 0x78 && buf[3] === 0x0A && buf[4] === 0x30 && buf[5] === 0x33 && buf[6] === 0x35 && buf[7] === 0x00) { return { ext: 'dex', mime: 'application/octet-stream', desc: 'Dalvik Executable (Android)' }; } if (buf[0] === 0x4B && buf[1] === 0x44 && buf[2] === 0x4D) { return { ext: 'vmdk', mime: 'application/vmdk, application/x-virtualbox-vmdk' }; } if (buf[0] === 0x43 && buf[1] === 0x72 && buf[2] === 0x32 && buf[3] == 0x34) { return { ext: 'crx', mime: 'application/crx', desc: 'Google Chrome extension or packaged app' }; } return null; }, }; × Search results Close "},"operations_HTML.js.html":{"id":"operations_HTML.js.html","title":"Source: operations/HTML.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/HTML.js /** * HTML operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var HTML = { /** * @constant * @default */ CONVERT_ALL: false, /** * @constant * @default */ CONVERT_OPTIONS: ["Named entities where possible", "Numeric entities", "Hex entities"], /** * To HTML Entity operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_to_entity: function(input, args) { var convert_all = args[0], numeric = args[1] == "Numeric entities", hexa = args[1] == "Hex entities"; var charcodes = Utils.str_to_charcode(input); var output = ""; for (var i = 0; i < charcodes.length; i++) { if (convert_all && numeric) { output += "&#" + charcodes[i] + ";"; } else if (convert_all && hexa) { output += "&#x" + Utils.hex(charcodes[i]) + ";"; } else if (convert_all) { output += HTML._byte_to_entity[charcodes[i]] || "&#" + charcodes[i] + ";"; } else if (numeric) { if (charcodes[i] > 255 || HTML._byte_to_entity.hasOwnProperty(charcodes[i])) { output += "&#" + charcodes[i] + ";"; } else { output += Utils.chr(charcodes[i]); } } else if (hexa) { if (charcodes[i] > 255 || HTML._byte_to_entity.hasOwnProperty(charcodes[i])) { output += "&#x" + Utils.hex(charcodes[i]) + ";"; } else { output += Utils.chr(charcodes[i]); } } else { output += HTML._byte_to_entity[charcodes[i]] || ( charcodes[i] > 255 ? "&#" + charcodes[i] + ";" : Utils.chr(charcodes[i]) ); } } return output; }, /** * From HTML Entity operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_from_entity: function(input, args) { var regex = /&(#?x?[a-zA-Z0-9]{1,8});/g, output = "", m, i = 0; while (!!(m = regex.exec(input))) { // Add up to match for (; i < m.index;) output += input[i++]; // Add match var bite = HTML._entity_to_byte[m[1]]; if (bite) { output += Utils.chr(bite); } else if (!bite && m[1][0] == "#" && m[1].length > 1 && /^#\\d{1,5}$/.test(m[1])) { // Numeric entity (e.g. &#10;) var num = m[1].slice(1,m[1].length); output += Utils.chr(parseInt(num, 10)); } else if (!bite && m[1][0] == "#" && m[1].length > 3 && /^#x[\\dA-F]{2,8}$/i.test(m[1])) { // Hex entity (e.g. &#x3A;) var hex = m[1].slice(2,m[1].length); output += Utils.chr(parseInt(hex, 16)); } else { // Not a valid entity, print as normal for (; i < regex.lastIndex;) output += input[i++]; } i = regex.lastIndex; } // Add all after final match for (; i < input.length;) output += input[i++]; return output; }, /** * @constant * @default */ REMOVE_INDENTATION: true, /** * @constant * @default */ REMOVE_LINE_BREAKS: true, /** * Strip HTML tags operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_strip_tags: function(input, args) { var remove_indentation = args[0], remove_line_breaks = args[1]; input = Utils.strip_html_tags(input); if (remove_indentation) { input = input.replace(/\\n[ \\f\\t]+/g, "\\n"); } if (remove_line_breaks) { input = input.replace(/^\\s*\\n/, "") // first line .replace(/(\\n\\s*){2,}/g, "\\n"); // all others } return input; }, /** * Parse colour code operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_parse_colour_code: function(input, args) { var m = null, r = 0, g = 0, b = 0, a = 1; // Read in the input if (!!(m = input.match(/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/i))) { // Hex - #d9edf7 r = parseInt(m[1], 16); g = parseInt(m[2], 16); b = parseInt(m[3], 16); } else if (!!(m = input.match(/rgba?\\((\\d{1,3}(?:\\.\\d+)?),\\s?(\\d{1,3}(?:\\.\\d+)?),\\s?(\\d{1,3}(?:\\.\\d+)?)(?:,\\s?(\\d(?:\\.\\d+)?))?\\)/i))) { // RGB or RGBA - rgb(217,237,247) or rgba(217,237,247,1) r = parseFloat(m[1]); g = parseFloat(m[2]); b = parseFloat(m[3]); a = m[4] ? parseFloat(m[4]) : 1; } else if (!!(m = input.match(/hsla?\\((\\d{1,3}(?:\\.\\d+)?),\\s?(\\d{1,3}(?:\\.\\d+)?)%,\\s?(\\d{1,3}(?:\\.\\d+)?)%(?:,\\s?(\\d(?:\\.\\d+)?))?\\)/i))) { // HSL or HSLA - hsl(200, 65%, 91%) or hsla(200, 65%, 91%, 1) var h_ = parseFloat(m[1]) / 360, s_ = parseFloat(m[2]) / 100, l_ = parseFloat(m[3]) / 100, rgb_ = HTML._hsl_to_rgb(h_, s_, l_); r = rgb_[0]; g = rgb_[1]; b = rgb_[2]; a = m[4] ? parseFloat(m[4]) : 1; } else if (!!(m = input.match(/cmyk\\((\\d(?:\\.\\d+)?),\\s?(\\d(?:\\.\\d+)?),\\s?(\\d(?:\\.\\d+)?),\\s?(\\d(?:\\.\\d+)?)\\)/i))) { // CMYK - cmyk(0.12, 0.04, 0.00, 0.03) var c_ = parseFloat(m[1]), m_ = parseFloat(m[2]), y_ = parseFloat(m[3]), k_ = parseFloat(m[4]); r = Math.round(255 * (1 - c_) * (1 - k_)); g = Math.round(255 * (1 - m_) * (1 - k_)); b = Math.round(255 * (1 - y_) * (1 - k_)); } var hsl_ = HTML._rgb_to_hsl(r, g, b), h = Math.round(hsl_[0] * 360), s = Math.round(hsl_[1] * 100), l = Math.round(hsl_[2] * 100), k = 1 - Math.max(r/255, g/255, b/255), c = (1 - r/255 - k) / (1 - k), m = (1 - g/255 - k) / (1 - k), // jshint ignore:line y = (1 - b/255 - k) / (1 - k); c = isNaN(c) ? "0" : c.toFixed(2); m = isNaN(m) ? "0" : m.toFixed(2); y = isNaN(y) ? "0" : y.toFixed(2); k = k.toFixed(2); var hex = "#" + Utils.pad_left(Math.round(r).toString(16), 2) + Utils.pad_left(Math.round(g).toString(16), 2) + Utils.pad_left(Math.round(b).toString(16), 2), rgb = "rgb(" + r + ", " + g + ", " + b + ")", rgba = "rgba(" + r + ", " + g + ", " + b + ", " + a + ")", hsl = "hsl(" + h + ", " + s + "%, " + l + "%)", hsla = "hsla(" + h + ", " + s + "%, " + l + "%, " + a + ")", cmyk = "cmyk(" + c + ", " + m + ", " + y + ", " + k + ")"; // Generate output return "<div id='colorpicker' style='display: inline-block'></div>" + "Hex: " + hex + "\\n" + "RGB: " + rgb + "\\n" + "RGBA: " + rgba + "\\n" + "HSL: " + hsl + "\\n" + "HSLA: " + hsla + "\\n" + "CMYK: " + cmyk + "<script>\\ $('#colorpicker').colorpicker({\\ format: 'rgba',\\ color: '" + rgba + "',\\ container: true,\\ inline: true,\\ }).on('changeColor', function(e) {\\ var color = e.color.toRGB();\\ document.getElementById('input-text').value = 'rgba(' +\\ color.r + ', ' + color.g + ', ' + color.b + ', ' + color.a + ')';\\ window.app.auto_bake();\\ });\\ </script>"; }, /** * Converts an HSL color value to RGB. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes h, s, and l are contained in the set [0, 1] and * returns r, g, and b in the set [0, 255]. * * @private * @author Mohsen (http://stackoverflow.com/a/9493060) * * @param {number} h - The hue * @param {number} s - The saturation * @param {number} l - The lightness * @return {Array} The RGB representation */ _hsl_to_rgb: function(h, s, l){ var r, g, b; if (s === 0){ r = g = b = l; // achromatic } else { var hue2rgb = function hue2rgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1/6) return p + (q - p) * 6 * t; if (t < 1/2) return q; if (t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; }; var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; }, /** * Converts an RGB color value to HSL. Conversion formula * adapted from http://en.wikipedia.org/wiki/HSL_color_space. * Assumes r, g, and b are contained in the set [0, 255] and * returns h, s, and l in the set [0, 1]. * * @private * @author Mohsen (http://stackoverflow.com/a/9493060) * * @param {number} r - The red color value * @param {number} g - The green color value * @param {number} b - The blue color value * @return {Array} The HSL representation */ _rgb_to_hsl: function(r, g, b) { r /= 255; g /= 255; b /= 255; var max = Math.max(r, g, b), min = Math.min(r, g, b), h, s, l = (max + min) / 2; if (max === min) { h = s = 0; // achromatic } else { var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return [h, s, l]; }, /** * Lookup table to translate byte values to their HTML entity codes. * * @private * @constant */ _byte_to_entity: { 34 : "&quot;", 38 : "&amp;", 39 : "&apos;", 60 : "&lt;", 62 : "&gt;", 160 : "&nbsp;", 161 : "&iexcl;", 162 : "&cent;", 163 : "&pound;", 164 : "&curren;", 165 : "&yen;", 166 : "&brvbar;", 167 : "&sect;", 168 : "&uml;", 169 : "&copy;", 170 : "&ordf;", 171 : "&laquo;", 172 : "&not;", 173 : "&shy;", 174 : "&reg;", 175 : "&macr;", 176 : "&deg;", 177 : "&plusmn;", 178 : "&sup2;", 179 : "&sup3;", 180 : "&acute;", 181 : "&micro;", 182 : "&para;", 183 : "&middot;", 184 : "&cedil;", 185 : "&sup1;", 186 : "&ordm;", 187 : "&raquo;", 188 : "&frac14;", 189 : "&frac12;", 190 : "&frac34;", 191 : "&iquest;", 192 : "&Agrave;", 193 : "&Aacute;", 194 : "&Acirc;", 195 : "&Atilde;", 196 : "&Auml;", 197 : "&Aring;", 198 : "&AElig;", 199 : "&Ccedil;", 200 : "&Egrave;", 201 : "&Eacute;", 202 : "&Ecirc;", 203 : "&Euml;", 204 : "&Igrave;", 205 : "&Iacute;", 206 : "&Icirc;", 207 : "&Iuml;", 208 : "&ETH;", 209 : "&Ntilde;", 210 : "&Ograve;", 211 : "&Oacute;", 212 : "&Ocirc;", 213 : "&Otilde;", 214 : "&Ouml;", 215 : "&times;", 216 : "&Oslash;", 217 : "&Ugrave;", 218 : "&Uacute;", 219 : "&Ucirc;", 220 : "&Uuml;", 221 : "&Yacute;", 222 : "&THORN;", 223 : "&szlig;", 224 : "&agrave;", 225 : "&aacute;", 226 : "&acirc;", 227 : "&atilde;", 228 : "&auml;", 229 : "&aring;", 230 : "&aelig;", 231 : "&ccedil;", 232 : "&egrave;", 233 : "&eacute;", 234 : "&ecirc;", 235 : "&euml;", 236 : "&igrave;", 237 : "&iacute;", 238 : "&icirc;", 239 : "&iuml;", 240 : "&eth;", 241 : "&ntilde;", 242 : "&ograve;", 243 : "&oacute;", 244 : "&ocirc;", 245 : "&otilde;", 246 : "&ouml;", 247 : "&divide;", 248 : "&oslash;", 249 : "&ugrave;", 250 : "&uacute;", 251 : "&ucirc;", 252 : "&uuml;", 253 : "&yacute;", 254 : "&thorn;", 255 : "&yuml;", 338 : "&OElig;", 339 : "&oelig;", 352 : "&Scaron;", 353 : "&scaron;", 376 : "&Yuml;", 402 : "&fnof;", 710 : "&circ;", 732 : "&tilde;", 913 : "&Alpha;", 914 : "&Beta;", 915 : "&Gamma;", 916 : "&Delta;", 917 : "&Epsilon;", 918 : "&Zeta;", 919 : "&Eta;", 920 : "&Theta;", 921 : "&Iota;", 922 : "&Kappa;", 923 : "&Lambda;", 924 : "&Mu;", 925 : "&Nu;", 926 : "&Xi;", 927 : "&Omicron;", 928 : "&Pi;", 929 : "&Rho;", 931 : "&Sigma;", 932 : "&Tau;", 933 : "&Upsilon;", 934 : "&Phi;", 935 : "&Chi;", 936 : "&Psi;", 937 : "&Omega;", 945 : "&alpha;", 946 : "&beta;", 947 : "&gamma;", 948 : "&delta;", 949 : "&epsilon;", 950 : "&zeta;", 951 : "&eta;", 952 : "&theta;", 953 : "&iota;", 954 : "&kappa;", 955 : "&lambda;", 956 : "&mu;", 957 : "&nu;", 958 : "&xi;", 959 : "&omicron;", 960 : "&pi;", 961 : "&rho;", 962 : "&sigmaf;", 963 : "&sigma;", 964 : "&tau;", 965 : "&upsilon;", 966 : "&phi;", 967 : "&chi;", 968 : "&psi;", 969 : "&omega;", 977 : "&thetasym;", 978 : "&upsih;", 982 : "&piv;", 8194 : "&ensp;", 8195 : "&emsp;", 8201 : "&thinsp;", 8204 : "&zwnj;", 8205 : "&zwj;", 8206 : "&lrm;", 8207 : "&rlm;", 8211 : "&ndash;", 8212 : "&mdash;", 8216 : "&lsquo;", 8217 : "&rsquo;", 8218 : "&sbquo;", 8220 : "&ldquo;", 8221 : "&rdquo;", 8222 : "&bdquo;", 8224 : "&dagger;", 8225 : "&Dagger;", 8226 : "&bull;", 8230 : "&hellip;", 8240 : "&permil;", 8242 : "&prime;", 8243 : "&Prime;", 8249 : "&lsaquo;", 8250 : "&rsaquo;", 8254 : "&oline;", 8260 : "&frasl;", 8364 : "&euro;", 8465 : "&image;", 8472 : "&weierp;", 8476 : "&real;", 8482 : "&trade;", 8501 : "&alefsym;", 8592 : "&larr;", 8593 : "&uarr;", 8594 : "&rarr;", 8595 : "&darr;", 8596 : "&harr;", 8629 : "&crarr;", 8656 : "&lArr;", 8657 : "&uArr;", 8658 : "&rArr;", 8659 : "&dArr;", 8660 : "&hArr;", 8704 : "&forall;", 8706 : "&part;", 8707 : "&exist;", 8709 : "&empty;", 8711 : "&nabla;", 8712 : "&isin;", 8713 : "&notin;", 8715 : "&ni;", 8719 : "&prod;", 8721 : "&sum;", 8722 : "&minus;", 8727 : "&lowast;", 8730 : "&radic;", 8733 : "&prop;", 8734 : "&infin;", 8736 : "&ang;", 8743 : "&and;", 8744 : "&or;", 8745 : "&cap;", 8746 : "&cup;", 8747 : "&int;", 8756 : "&there4;", 8764 : "&sim;", 8773 : "&cong;", 8776 : "&asymp;", 8800 : "&ne;", 8801 : "&equiv;", 8804 : "&le;", 8805 : "&ge;", 8834 : "&sub;", 8835 : "&sup;", 8836 : "&nsub;", 8838 : "&sube;", 8839 : "&supe;", 8853 : "&oplus;", 8855 : "&otimes;", 8869 : "&perp;", 8901 : "&sdot;", 8942 : "&vellip;", 8968 : "&lceil;", 8969 : "&rceil;", 8970 : "&lfloor;", 8971 : "&rfloor;", 9001 : "&lang;", 9002 : "&rang;", 9674 : "&loz;", 9824 : "&spades;", 9827 : "&clubs;", 9829 : "&hearts;", 9830 : "&diams;", }, /** * Lookup table to translate HTML entity codes to their byte values. * * @private * @constant */ _entity_to_byte : { "quot" : 34, "amp" : 38, "apos" : 39, "lt" : 60, "gt" : 62, "nbsp" : 160, "iexcl" : 161, "cent" : 162, "pound" : 163, "curren" : 164, "yen" : 165, "brvbar" : 166, "sect" : 167, "uml" : 168, "copy" : 169, "ordf" : 170, "laquo" : 171, "not" : 172, "shy" : 173, "reg" : 174, "macr" : 175, "deg" : 176, "plusmn" : 177, "sup2" : 178, "sup3" : 179, "acute" : 180, "micro" : 181, "para" : 182, "middot" : 183, "cedil" : 184, "sup1" : 185, "ordm" : 186, "raquo" : 187, "frac14" : 188, "frac12" : 189, "frac34" : 190, "iquest" : 191, "Agrave" : 192, "Aacute" : 193, "Acirc" : 194, "Atilde" : 195, "Auml" : 196, "Aring" : 197, "AElig" : 198, "Ccedil" : 199, "Egrave" : 200, "Eacute" : 201, "Ecirc" : 202, "Euml" : 203, "Igrave" : 204, "Iacute" : 205, "Icirc" : 206, "Iuml" : 207, "ETH" : 208, "Ntilde" : 209, "Ograve" : 210, "Oacute" : 211, "Ocirc" : 212, "Otilde" : 213, "Ouml" : 214, "times" : 215, "Oslash" : 216, "Ugrave" : 217, "Uacute" : 218, "Ucirc" : 219, "Uuml" : 220, "Yacute" : 221, "THORN" : 222, "szlig" : 223, "agrave" : 224, "aacute" : 225, "acirc" : 226, "atilde" : 227, "auml" : 228, "aring" : 229, "aelig" : 230, "ccedil" : 231, "egrave" : 232, "eacute" : 233, "ecirc" : 234, "euml" : 235, "igrave" : 236, "iacute" : 237, "icirc" : 238, "iuml" : 239, "eth" : 240, "ntilde" : 241, "ograve" : 242, "oacute" : 243, "ocirc" : 244, "otilde" : 245, "ouml" : 246, "divide" : 247, "oslash" : 248, "ugrave" : 249, "uacute" : 250, "ucirc" : 251, "uuml" : 252, "yacute" : 253, "thorn" : 254, "yuml" : 255, "OElig" : 338, "oelig" : 339, "Scaron" : 352, "scaron" : 353, "Yuml" : 376, "fnof" : 402, "circ" : 710, "tilde" : 732, "Alpha" : 913, "Beta" : 914, "Gamma" : 915, "Delta" : 916, "Epsilon" : 917, "Zeta" : 918, "Eta" : 919, "Theta" : 920, "Iota" : 921, "Kappa" : 922, "Lambda" : 923, "Mu" : 924, "Nu" : 925, "Xi" : 926, "Omicron" : 927, "Pi" : 928, "Rho" : 929, "Sigma" : 931, "Tau" : 932, "Upsilon" : 933, "Phi" : 934, "Chi" : 935, "Psi" : 936, "Omega" : 937, "alpha" : 945, "beta" : 946, "gamma" : 947, "delta" : 948, "epsilon" : 949, "zeta" : 950, "eta" : 951, "theta" : 952, "iota" : 953, "kappa" : 954, "lambda" : 955, "mu" : 956, "nu" : 957, "xi" : 958, "omicron" : 959, "pi" : 960, "rho" : 961, "sigmaf" : 962, "sigma" : 963, "tau" : 964, "upsilon" : 965, "phi" : 966, "chi" : 967, "psi" : 968, "omega" : 969, "thetasym" : 977, "upsih" : 978, "piv" : 982, "ensp" : 8194, "emsp" : 8195, "thinsp" : 8201, "zwnj" : 8204, "zwj" : 8205, "lrm" : 8206, "rlm" : 8207, "ndash" : 8211, "mdash" : 8212, "lsquo" : 8216, "rsquo" : 8217, "sbquo" : 8218, "ldquo" : 8220, "rdquo" : 8221, "bdquo" : 8222, "dagger" : 8224, "Dagger" : 8225, "bull" : 8226, "hellip" : 8230, "permil" : 8240, "prime" : 8242, "Prime" : 8243, "lsaquo" : 8249, "rsaquo" : 8250, "oline" : 8254, "frasl" : 8260, "euro" : 8364, "image" : 8465, "weierp" : 8472, "real" : 8476, "trade" : 8482, "alefsym" : 8501, "larr" : 8592, "uarr" : 8593, "rarr" : 8594, "darr" : 8595, "harr" : 8596, "crarr" : 8629, "lArr" : 8656, "uArr" : 8657, "rArr" : 8658, "dArr" : 8659, "hArr" : 8660, "forall" : 8704, "part" : 8706, "exist" : 8707, "empty" : 8709, "nabla" : 8711, "isin" : 8712, "notin" : 8713, "ni" : 8715, "prod" : 8719, "sum" : 8721, "minus" : 8722, "lowast" : 8727, "radic" : 8730, "prop" : 8733, "infin" : 8734, "ang" : 8736, "and" : 8743, "or" : 8744, "cap" : 8745, "cup" : 8746, "int" : 8747, "there4" : 8756, "sim" : 8764, "cong" : 8773, "asymp" : 8776, "ne" : 8800, "equiv" : 8801, "le" : 8804, "ge" : 8805, "sub" : 8834, "sup" : 8835, "nsub" : 8836, "sube" : 8838, "supe" : 8839, "oplus" : 8853, "otimes" : 8855, "perp" : 8869, "sdot" : 8901, "vellip" : 8942, "lceil" : 8968, "rceil" : 8969, "lfloor" : 8970, "rfloor" : 8971, "lang" : 9001, "rang" : 9002, "loz" : 9674, "spades" : 9824, "clubs" : 9827, "hearts" : 9829, "diams" : 9830, }, }; × Search results Close "},"operations_HTTP.js.html":{"id":"operations_HTTP.js.html","title":"Source: operations/HTTP.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/HTTP.js /* globals UAS_parser */ /** * HTTP operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var HTTP = { /** * Strip HTTP headers operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_strip_headers: function(input, args) { var header_end = input.indexOf("\\r\\n\\r\\n") + (header_end < 0) ? input.indexOf("\\n\\n") + 2 : header_end + 4; return (header_end < 2) ? input : input.slice(header_end, input.length); }, /** * Parse User Agent operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_user_agent: function(input, args) { var ua = UAS_parser.parse(input); return "Type: " + ua.type + "\\n" + "Family: " + ua.uaFamily + "\\n" + "Name: " + ua.uaName + "\\n" + "URL: " + ua.uaUrl + "\\n" + "Company: " + ua.uaCompany + "\\n" + "Company URL: " + ua.uaCompanyUrl + "\\n\\n" + "OS Family: " + ua.osFamily + "\\n" + "OS Name: " + ua.osName + "\\n" + "OS URL: " + ua.osUrl + "\\n" + "OS Company: " + ua.osCompany + "\\n" + "OS Company URL: " + ua.osCompanyUrl + "\\n" + "Device Type: " + ua.deviceType + "\\n"; }, }; × Search results Close "},"operations_Hash.js.html":{"id":"operations_Hash.js.html","title":"Source: operations/Hash.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Hash.js /* globals CryptoJS, Checksum */ /** * Hashing operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Hash = { /** * MD5 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_md5: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); // Cast to WordArray return CryptoJS.MD5(input).toString(CryptoJS.enc.Hex); }, /** * SHA1 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha1: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.SHA1(input).toString(CryptoJS.enc.Hex); }, /** * SHA224 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha224: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.SHA224(input).toString(CryptoJS.enc.Hex); }, /** * SHA256 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha256: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.SHA256(input).toString(CryptoJS.enc.Hex); }, /** * SHA384 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha384: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.SHA384(input).toString(CryptoJS.enc.Hex); }, /** * SHA512 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha512: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.SHA512(input).toString(CryptoJS.enc.Hex); }, /** * @constant * @default */ SHA3_LENGTH: ["512", "384", "256", "224"], /** * SHA3 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sha3: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); var sha3_length = args[0], options = { outputLength: parseInt(sha3_length, 10) }; return CryptoJS.SHA3(input, options).toString(CryptoJS.enc.Hex); }, /** * RIPEMD-160 operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_ripemd160: function (input, args) { input = CryptoJS.enc.Latin1.parse(input); return CryptoJS.RIPEMD160(input).toString(CryptoJS.enc.Hex); }, /** * @constant * @default */ HMAC_FUNCTIONS: ["MD5", "SHA1", "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "RIPEMD-160"], /** * HMAC operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_hmac: function (input, args) { var hash_func = args[1]; input = CryptoJS.enc.Latin1.parse(input); var execute = { "MD5": CryptoJS.HmacMD5(input, args[0]), "SHA1": CryptoJS.HmacSHA1(input, args[0]), "SHA224": CryptoJS.HmacSHA224(input, args[0]), "SHA256": CryptoJS.HmacSHA256(input, args[0]), "SHA384": CryptoJS.HmacSHA384(input, args[0]), "SHA512": CryptoJS.HmacSHA512(input, args[0]), "SHA3": CryptoJS.HmacSHA3(input, args[0]), "RIPEMD-160": CryptoJS.HmacRIPEMD160(input, args[0]), }; return execute[hash_func].toString(CryptoJS.enc.Hex); }, /** * Generate all hashes operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_all: function (input, args) { var byte_array = Utils.str_to_byte_array(input), output = "MD5: " + Hash.run_md5(input, []) + "\\nSHA1: " + Hash.run_sha1(input, []) + "\\nSHA2 224: " + Hash.run_sha224(input, []) + "\\nSHA2 256: " + Hash.run_sha256(input, []) + "\\nSHA2 384: " + Hash.run_sha384(input, []) + "\\nSHA2 512: " + Hash.run_sha512(input, []) + "\\nSHA3 224: " + Hash.run_sha3(input, ["224"]) + "\\nSHA3 256: " + Hash.run_sha3(input, ["256"]) + "\\nSHA3 384: " + Hash.run_sha3(input, ["384"]) + "\\nSHA3 512: " + Hash.run_sha3(input, ["512"]) + "\\nRIPEMD-160: " + Hash.run_ripemd160(input, []) + "\\n\\nChecksums:" + "\\nFletcher-16: " + Checksum.run_fletcher16(byte_array, []) + "\\nAdler-32: " + Checksum.run_adler32(byte_array, []) + "\\nCRC-32: " + Checksum.run_crc32(byte_array, []); return output; }, /** * Analyse hash operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_analyse: function(input, args) { input = input.replace(/\\s/g, ""); var output = "", byte_length = input.length / 2, bit_length = byte_length * 8, possible_hash_functions = []; if (!/^[a-f0-9]+$/i.test(input)) { return "Invalid hash"; } output += "Hash length: " + input.length + "\\n" + "Byte length: " + byte_length + "\\n" + "Bit length: " + bit_length + "\\n\\n" + "Based on the length, this hash could have been generated by one of the following hashing functions:\\n"; switch (bit_length) { case 4: possible_hash_functions = [ "Fletcher-4", "Luhn algorithm", "Verhoeff algorithm", ]; break; case 8: possible_hash_functions = [ "Fletcher-8", ]; break; case 16: possible_hash_functions = [ "BSD checksum", "CRC-16", "SYSV checksum", "Fletcher-16" ]; break; case 32: possible_hash_functions = [ "CRC-32", "Fletcher-32", "Adler-32", ]; break; case 64: possible_hash_functions = [ "CRC-64", "RIPEMD-64", "SipHash", ]; break; case 128: possible_hash_functions = [ "MD5", "MD4", "MD2", "HAVAL-128", "RIPEMD-128", "Snefru", "Tiger-128", ]; break; case 160: possible_hash_functions = [ "SHA-1", "SHA-0", "FSB-160", "HAS-160", "HAVAL-160", "RIPEMD-160", "Tiger-160", ]; break; case 192: possible_hash_functions = [ "Tiger", "HAVAL-192", ]; break; case 224: possible_hash_functions = [ "SHA-224", "SHA3-224", "ECOH-224", "FSB-224", "HAVAL-224", ]; break; case 256: possible_hash_functions = [ "SHA-256", "SHA3-256", "BLAKE-256", "ECOH-256", "FSB-256", "GOST", "Grøstl-256", "HAVAL-256", "PANAMA", "RIPEMD-256", "Snefru", ]; break; case 320: possible_hash_functions = [ "RIPEMD-320", ]; break; case 384: possible_hash_functions = [ "SHA-384", "SHA3-384", "ECOH-384", "FSB-384", ]; break; case 512: possible_hash_functions = [ "SHA-512", "SHA3-512", "BLAKE-512", "ECOH-512", "FSB-512", "Grøstl-512", "JH", "MD6", "Spectral Hash", "SWIFFT", "Whirlpool", ]; break; case 1024: possible_hash_functions = [ "Fowler-Noll-Vo", ]; break; default: possible_hash_functions = [ "Unknown" ]; break; } return output + possible_hash_functions.join("\\n"); }, }; × Search results Close "},"operations_Hexdump.js.html":{"id":"operations_Hexdump.js.html","title":"Source: operations/Hexdump.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Hexdump.js /* globals app */ /** * Hexdump operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Hexdump = { /** * @constant * @default */ WIDTH: 16, /** * @constant * @default */ UPPER_CASE: false, /** * @constant * @default */ INCLUDE_FINAL_LENGTH: false, /** * To Hexdump operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to: function(input, args) { var length = args[0] || Hexdump.WIDTH; var upper_case = args[1]; var include_final_length = args[2]; var output = "", padding = 2; for (var i = 0; i < input.length; i += length) { var buff = input.slice(i, i+length); var hexa = ""; for (var j = 0; j < buff.length; j++) { hexa += Utils.hex(buff[j], padding) + " "; } var line_no = Utils.hex(i, 8); if (upper_case) { hexa = hexa.toUpperCase(); line_no = line_no.toUpperCase(); } output += line_no + " " + Utils.pad_right(hexa, (length*(padding+1))) + " |" + Utils.pad_right(Utils.printable(Utils.byte_array_to_chars(buff)), buff.length) + "|\\n"; if (include_final_length && i+buff.length == input.length) { output += Utils.hex(i+buff.length, 8) + "\\n"; } } return output.slice(0, -1); }, /** * From Hexdump operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from: function(input, args) { var output = [], regex = /^\\s*(?:[\\dA-F]{4,16}:?)?\\s*((?:[\\dA-F]{2}\\s){1,8}(?:\\s|[\\dA-F]{2}-)(?:[\\dA-F]{2}\\s){1,8}|(?:[\\dA-F]{2}\\s|[\\dA-F]{4}\\s)+)/igm, block, line; while (!!(block = regex.exec(input))) { line = Utils.from_hex(block[1].replace(/-/g, " ")); for (var i = 0; i < line.length; i++) { output.push(line[i]); } } // Is this a CyberChef hexdump or is it from a different tool? var width = input.indexOf("\\n"); var w = (width - 13) / 4; // w should be the specified width of the hexdump and therefore a round number if (Math.floor(w) != w || input.indexOf("\\r") != -1 || output.indexOf(13) != -1) { app.options.attempt_highlight = false; } return output; }, /** * Highlight to hexdump * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_to: function(pos, args) { // Calculate overall selection var w = args[0] || 16, width = 14 + (w*4), line = Math.floor(pos[0].start / w), offset = pos[0].start % w, start = 0, end = 0; pos[0].start = line*width + 10 + offset*3; line = Math.floor(pos[0].end / w); offset = pos[0].end % w; if (offset === 0) { line--; offset = w; } pos[0].end = line*width + 10 + offset*3 - 1; // Set up multiple selections for bytes var start_line_num = Math.floor(pos[0].start / width); var end_line_num = Math.floor(pos[0].end / width); if (start_line_num == end_line_num) { pos.push(pos[0]); } else { start = pos[0].start; end = (start_line_num+1) * width - w - 5; pos.push({ start: start, end: end }); while (end < pos[0].end) { start_line_num++; start = start_line_num * width + 10; end = (start_line_num+1) * width - w - 5; if (end > pos[0].end) end = pos[0].end; pos.push({ start: start, end: end }); } } // Set up multiple selections for ASCII var len = pos.length, line_num = 0; start = 0; end = 0; for (var i = 1; i < len; i++) { line_num = Math.floor(pos[i].start / width); start = (((pos[i].start - (line_num * width)) - 10) / 3) + (width - w -2) + (line_num * width); end = (((pos[i].end + 1 - (line_num * width)) - 10) / 3) + (width - w -2) + (line_num * width); pos.push({ start: start, end: end }); } return pos; }, /** * Highlight from hexdump * * @param {Object[]} pos * @param {number} pos[].start * @param {number} pos[].end * @param {Object[]} args * @returns {Object[]} pos */ highlight_from: function(pos, args) { var w = args[0] || 16; var width = 14 + (w*4); var line = Math.floor(pos[0].start / width); var offset = pos[0].start % width; if (offset < 10) { // In line number section pos[0].start = line*w; } else if (offset > 10+(w*3)) { // In ASCII section pos[0].start = (line+1)*w; } else { // In byte section pos[0].start = line*w + Math.floor((offset-10)/3); } line = Math.floor(pos[0].end / width); offset = pos[0].end % width; if (offset < 10) { // In line number section pos[0].end = line*w; } else if (offset > 10+(w*3)) { // In ASCII section pos[0].end = (line+1)*w; } else { // In byte section pos[0].end = line*w + Math.ceil((offset-10)/3); } return pos; }, }; × Search results Close "},"operations_IP.js.html":{"id":"operations_IP.js.html","title":"Source: operations/IP.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/IP.js /* globals BigInteger */ /** * Internet Protocol address operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var IP = { /** * @constant * @default */ INCLUDE_NETWORK_INFO: true, /** * @constant * @default */ ENUMERATE_ADDRESSES: true, /** * @constant * @default */ ALLOW_LARGE_LIST: false, /** * Parse IP range operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_ip_range: function (input, args) { var include_network_info = args[0], enumerate_addresses = args[1], allow_large_list = args[2]; // Check what type of input we are looking at var ipv4_cidr_regex = /^\\s*((?:\\d{1,3}\\.){3}\\d{1,3})\\/(\\d\\d?)\\s*$/, ipv4_range_regex = /^\\s*((?:\\d{1,3}\\.){3}\\d{1,3})\\s*-\\s*((?:\\d{1,3}\\.){3}\\d{1,3})\\s*$/, ipv6_cidr_regex = /^\\s*(((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\4)::|:\\b|(?![\\dA-F])))|(?!\\3\\4)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4}))\\/(\\d\\d?\\d?)\\s*$/i, ipv6_range_regex = /^\\s*(((?=.*::)(?!.*::[^-]+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\4)::|:\\b|(?![\\dA-F])))|(?!\\3\\4)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4}))\\s*-\\s*(((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\17)::|:\\b|(?![\\dA-F])))|(?!\\16\\17)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4}))\\s*$/i, match; if (!!(match = ipv4_cidr_regex.exec(input))) { return IP._ipv4_cidr_range(match, include_network_info, enumerate_addresses, allow_large_list); } else if (!!(match = ipv4_range_regex.exec(input))) { return IP._ipv4_hyphenated_range(match, include_network_info, enumerate_addresses, allow_large_list); } else if (!!(match = ipv6_cidr_regex.exec(input))) { return IP._ipv6_cidr_range(match, include_network_info); } else if (!!(match = ipv6_range_regex.exec(input))) { return IP._ipv6_hyphenated_range(match, include_network_info); } else { return "Invalid input.\\n\\nEnter either a CIDR range (e.g. 10.0.0.0/24) or a hyphenated range (e.g. 10.0.0.0 - 10.0.1.0). IPv6 also supported."; } }, /** * @constant * @default */ IPv4_REGEX: /^\\s*((?:\\d{1,3}\\.){3}\\d{1,3})\\s*$/, /** * @constant * @default */ IPv6_REGEX: /^\\s*(((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\4)::|:\\b|(?![\\dA-F])))|(?!\\3\\4)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4}))\\s*$/i, /** * Parse IPv6 address operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_ipv6: function (input, args) { var match, output = ""; if (!!(match = IP.IPv6_REGEX.exec(input))) { var ipv6 = IP._str_to_ipv6(match[1]), longhand = IP._ipv6_to_str(ipv6), shorthand = IP._ipv6_to_str(ipv6, true); output += "Longhand: " + longhand + "\\nShorthand: " + shorthand + "\\n"; // Detect reserved addresses if (shorthand == "::") { // Unspecified address output += "\\nUnspecified address corresponding to 0.0.0.0/32 in IPv4."; output += "\\nUnspecified address range: ::/128"; } else if (shorthand == "::1") { // Loopback address output += "\\nLoopback address to the local host corresponding to 127.0.0.1/8 in IPv4."; output += "\\nLoopback addresses range: ::1/128"; } else if (ipv6[0] === 0 && ipv6[1] === 0 && ipv6[2] === 0 && ipv6[3] === 0 && ipv6[4] === 0 && ipv6[5] === 0xffff) { // IPv4-mapped IPv6 address output += "\\nIPv4-mapped IPv6 address detected. IPv6 clients will be handled natively by default, and IPv4 clients appear as IPv6 clients at their IPv4-mapped IPv6 address."; output += "\\nMapped IPv4 address: " + IP._ipv4_to_str((ipv6[6] << 16) + ipv6[7]); output += "\\nIPv4-mapped IPv6 addresses range: ::ffff:0:0/96"; } else if (ipv6[0] === 0 && ipv6[1] === 0 && ipv6[2] === 0 && ipv6[3] === 0 && ipv6[4] === 0xffff && ipv6[5] === 0) { // IPv4-translated address output += "\\nIPv4-translated address detected. Used by Stateless IP/ICMP Translation (SIIT). See RFCs 6145 and 6052 for more details."; output += "\\nTranslated IPv4 address: " + IP._ipv4_to_str((ipv6[6] << 16) + ipv6[7]); output += "\\nIPv4-translated addresses range: ::ffff:0:0:0/96"; } else if (ipv6[0] === 0x100) { // Discard prefix per RFC 6666 output += "\\nDiscard prefix detected. This is used when forwarding traffic to a sinkhole router to mitigate the effects of a denial-of-service attack. See RFC 6666 for more details."; output += "\\nDiscard range: 100::/64"; } else if (ipv6[0] === 0x64 && ipv6[1] === 0xff9b && ipv6[2] === 0 && ipv6[3] === 0 && ipv6[4] === 0 && ipv6[5] === 0) { // IPv4/IPv6 translation per RFC 6052 output += "\\n'Well-Known' prefix for IPv4/IPv6 translation detected. See RFC 6052 for more details."; output += "\\nTranslated IPv4 address: " + IP._ipv4_to_str((ipv6[6] << 16) + ipv6[7]); output += "\\n'Well-Known prefix range: 64:ff9b::/96"; } else if (ipv6[0] === 0x2001 && ipv6[1] === 0) { // Teredo tunneling output += "\\nTeredo tunneling IPv6 address detected\\n"; var server_ipv4 = (ipv6[2] << 16) + ipv6[3], udp_port = (~ipv6[5]) & 0xffff, client_ipv4 = ~((ipv6[6] << 16) + ipv6[7]), flag_cone = (ipv6[4] >>> 15) & 1, flag_r = (ipv6[4] >>> 14) & 1, flag_random1 = (ipv6[4] >>> 10) & 15, flag_ug = (ipv6[4] >>> 8) & 3, flag_random2 = ipv6[4] & 255; output += "\\nServer IPv4 address: " + IP._ipv4_to_str(server_ipv4) + "\\nClient IPv4 address: " + IP._ipv4_to_str(client_ipv4) + "\\nClient UDP port: " + udp_port + "\\nFlags:" + "\\n\\tCone: " + flag_cone; if (flag_cone) { output += " (Client is behind a cone NAT)"; } else { output += " (Client is not behind a cone NAT)"; } output += "\\n\\tR: " + flag_r; if (flag_r) { output += " Error: This flag should be set to 0. See RFC 5991 and RFC 4380."; } output += "\\n\\tRandom1: " + Utils.bin(flag_random1, 4) + "\\n\\tUG: " + Utils.bin(flag_ug, 2); if (flag_ug) { output += " Error: This flag should be set to 00. See RFC 4380."; } output += "\\n\\tRandom2: " + Utils.bin(flag_random2, 8); if (!flag_r && !flag_ug && flag_random1 && flag_random2) { output += "\\n\\nThis is a valid Teredo address which complies with RFC 4380 and RFC 5991."; } else if (!flag_r && !flag_ug) { output += "\\n\\nThis is a valid Teredo address which complies with RFC 4380, however it does not comply with RFC 5991 (Teredo Security Updates) as there are no randomised bits in the flag field."; } else { output += "\\n\\nThis is an invalid Teredo address."; } output += "\\n\\nTeredo prefix range: 2001::/32"; } else if (ipv6[0] === 0x2001 && ipv6[1] === 0x2 && ipv6[2] === 0) { // Benchmarking output += "\\nAssigned to the Benchmarking Methodology Working Group (BMWG) for benchmarking IPv6. Corresponds to 198.18.0.0/15 for benchmarking IPv4. See RFC 5180 for more details."; output += "\\nBMWG range: 2001:2::/48"; } else if (ipv6[0] == 0x2001 && ipv6[1] >= 0x10 && ipv6[1] <= 0x1f) { // ORCHIDv1 output += "\\nDeprecated, previously ORCHIDv1 (Overlay Routable Cryptographic Hash Identifiers).\\nORCHIDv1 range: 2001:10::/28\\nORCHIDv2 now uses 2001:20::/28."; } else if (ipv6[0] == 0x2001 && ipv6[1] >= 0x20 && ipv6[1] <= 0x2f) { // ORCHIDv2 output += "\\nORCHIDv2 (Overlay Routable Cryptographic Hash Identifiers).\\nThese are non-routed IPv6 addresses used for Cryptographic Hash Identifiers."; output += "\\nORCHIDv2 range: 2001:20::/28"; } else if (ipv6[0] == 0x2001 && ipv6[1] == 0xdb8) { // Documentation output += "\\nThis is a documentation IPv6 address. This range should be used whenever an example IPv6 address is given or to model networking scenarios. Corresponds to 192.0.2.0/24, 198.51.100.0/24, and 203.0.113.0/24 in IPv4."; output += "\\nDocumentation range: 2001:db8::/32"; } else if (ipv6[0] == 0x2002) { // 6to4 output += "\\n6to4 transition IPv6 address detected. See RFC 3056 for more details." + "\\n6to4 prefix range: 2002::/16"; var v4_addr = IP._ipv4_to_str((ipv6[1] << 16) + ipv6[2]), sla_id = ipv6[3], interface_id_str = ipv6[4].toString(16) + ipv6[5].toString(16) + ipv6[6].toString(16) + ipv6[7].toString(16), interface_id = new BigInteger(interface_id_str, 16); output += "\\n\\nEncapsulated IPv4 address: " + v4_addr + "\\nSLA ID: " + sla_id + "\\nInterface ID (base 16): " + interface_id_str + "\\nInterface ID (base 10): " + interface_id.toString(); } else if (ipv6[0] >= 0xfc00 && ipv6[0] <= 0xfdff) { // Unique local address output += "\\nThis is a unique local address comparable to the IPv4 private addresses 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16. See RFC 4193 for more details."; output += "\\nUnique local addresses range: fc00::/7"; } else if (ipv6[0] >= 0xfe80 && ipv6[0] <= 0xfebf) { // Link-local address output += "\\nThis is a link-local address comparable to the auto-configuration addresses 169.254.0.0/16 in IPv4."; output += "\\nLink-local addresses range: fe80::/10"; } else if (ipv6[0] >= 0xff00) { // Multicast output += "\\nThis is a reserved multicast address."; output += "\\nMulticast addresses range: ff00::/8"; } } else { return "Invalid IPv6 address"; } return output; }, /** * @constant * @default */ IP_FORMAT_LIST: ["Dotted Decimal", "Decimal", "Hex"], /** * Change IP format operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_change_ip_format: function(input, args) { var in_format = args[0], out_format = args[1], lines = input.split("\\n"), output = "", j = 0; for (var i = 0; i < lines.length; i++) { if (lines[i] === "") continue; var ba_ip = []; if (in_format == out_format) { output += lines[i] + "\\n"; continue; } // Convert to byte array IP from input format switch (in_format) { case "Dotted Decimal": var octets = lines[i].split("."); for (j = 0; j < octets.length; j++) { ba_ip.push(parseInt(octets[j], 10)); } break; case "Decimal": var decimal = lines[i].toString(); ba_ip.push(decimal >> 24 & 255); ba_ip.push(decimal >> 16 & 255); ba_ip.push(decimal >> 8 & 255); ba_ip.push(decimal & 255); break; case "Hex": ba_ip = Utils.hex_to_byte_array(lines[i]); break; default: throw "Unsupported input IP format"; } // Convert byte array IP to output format switch (out_format) { case "Dotted Decimal": var dd_ip = ""; for (j = 0; j < ba_ip.length; j++) { dd_ip += ba_ip[j] + "."; } output += dd_ip.slice(0, dd_ip.length-1) + "\\n"; break; case "Decimal": var dec_ip = ((ba_ip[0] << 24) | (ba_ip[1] << 16) | (ba_ip[2] << 8) | ba_ip[3]) >>> 0; output += dec_ip.toString() + "\\n"; break; case "Hex": var hex_ip = ""; for (j = 0; j < ba_ip.length; j++) { hex_ip += Utils.hex(ba_ip[j]); } output += hex_ip + "\\n"; break; default: throw "Unsupported output IP format"; } } return output.slice(0, output.length-1); }, /** * @constant * @default */ DELIM_OPTIONS: ["Line feed", "CRLF", "Space", "Comma", "Semi-colon"], /** * @constant * @default */ GROUP_CIDR: 24, /** * @constant * @default */ GROUP_ONLY_SUBNET: false, /** * Group IP addresses operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_group_ips: function(input, args) { var delim = Utils.char_rep[args[0]], cidr = args[1], only_subnets = args[2], ipv4_mask = cidr < 32 ? ~(0xFFFFFFFF >>> cidr) : 0xFFFFFFFF, ipv6_mask = IP._gen_ipv6_mask(cidr), ips = input.split(delim), ipv4_networks = {}, ipv6_networks = {}, match = null, output = "", ip = null, network = null, network_str = ""; if (cidr < 0 || cidr > 127) { return "CIDR must be less than 32 for IPv4 or 128 for IPv6"; } // Parse all IPs and add to network dictionary for (var i = 0; i < ips.length; i++) { if (!!(match = IP.IPv4_REGEX.exec(ips[i]))) { ip = IP._str_to_ipv4(match[1]) >>> 0; network = ip & ipv4_mask; if (ipv4_networks.hasOwnProperty(network)) { ipv4_networks[network].push(ip); } else { ipv4_networks[network] = [ip]; } } else if (!!(match = IP.IPv6_REGEX.exec(ips[i]))) { ip = IP._str_to_ipv6(match[1]); network = []; network_str = ""; for (var j = 0; j < 8; j++) { network.push(ip[j] & ipv6_mask[j]); } network_str = IP._ipv6_to_str(network, true); if (ipv6_networks.hasOwnProperty(network_str)) { ipv6_networks[network_str].push(ip); } else { ipv6_networks[network_str] = [ip]; } } } // Sort IPv4 network dictionaries and print for (network in ipv4_networks) { ipv4_networks[network] = ipv4_networks[network].sort(); output += IP._ipv4_to_str(network) + "/" + cidr + "\\n"; if (!only_subnets) { for (i = 0; i < ipv4_networks[network].length; i++) { output += " " + IP._ipv4_to_str(ipv4_networks[network][i]) + "\\n"; } output += "\\n"; } } // Sort IPv6 network dictionaries and print for (network_str in ipv6_networks) { //ipv6_networks[network_str] = ipv6_networks[network_str].sort(); TODO output += network_str + "/" + cidr + "\\n"; if (!only_subnets) { for (i = 0; i < ipv6_networks[network_str].length; i++) { output += " " + IP._ipv6_to_str(ipv6_networks[network_str][i], true) + "\\n"; } output += "\\n"; } } return output; }, /** * @constant * @default * @private */ _LARGE_RANGE_ERROR: "The specified range contains more than 65,536 addresses. Running this query could crash your browser. If you want to run it, select the \\"Allow large queries\\" option. You are advised to turn off \\"Auto Bake\\" whilst editing large ranges.", /** * Parses an IPv4 CIDR range (e.g. 192.168.0.0/24) and displays information about it. * * @private * @param {RegExp} cidr * @param {boolean} include_network_info * @param {boolean} enumerate_addresses * @param {boolean} allow_large_list * @returns {string} */ _ipv4_cidr_range: function(cidr, include_network_info, enumerate_addresses, allow_large_list) { var output = "", network = IP._str_to_ipv4(cidr[1]), cidr_range = parseInt(cidr[2], 10); if (cidr_range < 0 || cidr_range > 31) { return "IPv4 CIDR must be less than 32"; } var mask = ~(0xFFFFFFFF >>> cidr_range), ip1 = network & mask, ip2 = ip1 | ~mask; if (include_network_info) { output += "Network: " + IP._ipv4_to_str(network) + "\\n"; output += "CIDR: " + cidr_range + "\\n"; output += "Mask: " + IP._ipv4_to_str(mask) + "\\n"; output += "Range: " + IP._ipv4_to_str(ip1) + " - " + IP._ipv4_to_str(ip2) + "\\n"; output += "Total addresses in range: " + (((ip2 - ip1) >>> 0) + 1) + "\\n\\n"; } if (enumerate_addresses) { if (cidr_range >= 16 || allow_large_list) { output += IP._generate_ipv4_range(ip1, ip2).join("\\n"); } else { output += IP._LARGE_RANGE_ERROR; } } return output; }, /** * Parses an IPv6 CIDR range (e.g. ff00::/48) and displays information about it. * * @private * @param {RegExp} cidr * @param {boolean} include_network_info * @returns {string} */ _ipv6_cidr_range: function(cidr, include_network_info) { var output = "", network = IP._str_to_ipv6(cidr[1]), cidr_range = parseInt(cidr[cidr.length-1], 10); if (cidr_range < 0 || cidr_range > 127) { return "IPv6 CIDR must be less than 128"; } var mask = IP._gen_ipv6_mask(cidr_range), ip1 = new Array(8), ip2 = new Array(8), total_diff = "", total = new Array(128); for (var i = 0; i < 8; i++) { ip1[i] = network[i] & mask[i]; ip2[i] = ip1[i] | (~mask[i] & 0x0000FFFF); total_diff = (ip2[i] - ip1[i]).toString(2); if (total_diff != "0") { for (var n = 0; n < total_diff.length; n++) { total[i*16 + 16-(total_diff.length-n)] = total_diff[n]; } } } if (include_network_info) { output += "Network: " + IP._ipv6_to_str(network) + "\\n"; output += "Shorthand: " + IP._ipv6_to_str(network, true) + "\\n"; output += "CIDR: " + cidr_range + "\\n"; output += "Mask: " + IP._ipv6_to_str(mask) + "\\n"; output += "Range: " + IP._ipv6_to_str(ip1) + " - " + IP._ipv6_to_str(ip2) + "\\n"; output += "Total addresses in range: " + (parseInt(total.join(""), 2) + 1) + "\\n\\n"; } return output; }, /** * Generates an IPv6 subnet mask given a CIDR value. * * @private * @param {number} cidr * @returns {number[]} */ _gen_ipv6_mask: function(cidr) { var mask = new Array(8), shift; for (var i = 0; i < 8; i++) { if (cidr > ((i+1)*16)) { mask[i] = 0x0000FFFF; } else { shift = cidr-(i*16); if (shift < 0) shift = 0; mask[i] = ~((0x0000FFFF >>> shift) | 0xFFFF0000); } } return mask; }, /** * Parses an IPv4 hyphenated range (e.g. 192.168.0.0 - 192.168.0.255) and displays information * about it. * * @private * @param {RegExp} range * @param {boolean} include_network_info * @param {boolean} enumerate_addresses * @param {boolean} allow_large_list * @returns {string} */ _ipv4_hyphenated_range: function(range, include_network_info, enumerate_addresses, allow_large_list) { var output = "", ip1 = IP._str_to_ipv4(range[1]), ip2 = IP._str_to_ipv4(range[2]); // Calculate mask var diff = ip1 ^ ip2, cidr = 32, mask = 0; while (diff !== 0) { diff >>= 1; cidr--; mask = (mask << 1) | 1; } mask = ~mask >>> 0; var network = ip1 & mask, sub_ip1 = network & mask, sub_ip2 = sub_ip1 | ~mask; if (include_network_info) { output += "Minimum subnet required to hold this range:\\n"; output += "\\tNetwork: " + IP._ipv4_to_str(network) + "\\n"; output += "\\tCIDR: " + cidr + "\\n"; output += "\\tMask: " + IP._ipv4_to_str(mask) + "\\n"; output += "\\tSubnet range: " + IP._ipv4_to_str(sub_ip1) + " - " + IP._ipv4_to_str(sub_ip2) + "\\n"; output += "\\tTotal addresses in subnet: " + (((sub_ip2 - sub_ip1) >>> 0) + 1) + "\\n\\n"; output += "Range: " + IP._ipv4_to_str(ip1) + " - " + IP._ipv4_to_str(ip2) + "\\n"; output += "Total addresses in range: " + (((ip2 - ip1) >>> 0) + 1) + "\\n\\n"; } if (enumerate_addresses) { if (((ip2 - ip1) >>> 0) <= 65536 || allow_large_list) { output += IP._generate_ipv4_range(ip1, ip2).join("\\n"); } else { output += IP._LARGE_RANGE_ERROR; } } return output; }, /** * Parses an IPv6 hyphenated range (e.g. ff00:: - ffff::) and displays information about it. * * @private * @param {RegExp} range * @param {boolean} include_network_info * @returns {string} */ _ipv6_hyphenated_range: function(range, include_network_info) { var output = "", ip1 = IP._str_to_ipv6(range[1]), ip2 = IP._str_to_ipv6(range[14]); var t = "", total = new Array(128); // Initialise total array to "0" for (var i = 0; i < 128; i++) total[i] = "0"; for (i = 0; i < 8; i++) { t = (ip2[i] - ip1[i]).toString(2); if (t != "0") { for (var n = 0; n < t.length; n++) { total[i*16 + 16-(t.length-n)] = t[n]; } } } if (include_network_info) { output += "Range: " + IP._ipv6_to_str(ip1) + " - " + IP._ipv6_to_str(ip2) + "\\n"; output += "Shorthand range: " + IP._ipv6_to_str(ip1, true) + " - " + IP._ipv6_to_str(ip2, true) + "\\n"; output += "Total addresses in range: " + (parseInt(total.join(""), 2) + 1) + "\\n\\n"; } return output; }, /** * Converts an IPv4 address from string format to numerical format. * * @private * @param {string} ip_str * @returns {number} * * @example * // returns 168427520 * IP._str_to_ipv4("10.10.0.0"); */ _str_to_ipv4: function (ip_str) { var blocks = ip_str.split("."), num_blocks = parse_blocks(blocks), result = 0; result += num_blocks[0] << 24; result += num_blocks[1] << 16; result += num_blocks[2] << 8; result += num_blocks[3]; return result; function parse_blocks(blocks) { if (blocks.length != 4) throw "More than 4 blocks."; var num_blocks = []; for (var i = 0; i < 4; i++) { num_blocks[i] = parseInt(blocks[i], 10); if (num_blocks[i] < 0 || num_blocks[i] > 255) throw "Block out of range."; } return num_blocks; } }, /** * Converts an IPv4 address from numerical format to string format. * * @private * @param {number} ip_int * @returns {string} * * @example * // returns "10.10.0.0" * IP._ipv4_to_str(168427520); */ _ipv4_to_str: function(ip_int) { var blockA = (ip_int >> 24) & 255, blockB = (ip_int >> 16) & 255, blockC = (ip_int >> 8) & 255, blockD = ip_int & 255; return blockA + "." + blockB + "." + blockC + "." + blockD; }, /** * Converts an IPv6 address from string format to numerical array format. * * @private * @param {string} ip_str * @returns {number[]} * * @example * // returns [65280, 0, 0, 0, 0, 0, 4369, 8738] * IP._str_to_ipv6("ff00::1111:2222"); */ _str_to_ipv6: function(ip_str) { var blocks = ip_str.split(":"), num_blocks = parse_blocks(blocks), j = 0, ipv6 = new Array(8); for (var i = 0; i < 8; i++) { if (isNaN(num_blocks[j])) { ipv6[i] = 0; if (i == (8-num_blocks.slice(j).length)) j++; } else { ipv6[i] = num_blocks[j]; j++; } } return ipv6; function parse_blocks(blocks) { if (blocks.length < 3 || blocks.length > 8) throw "Badly formatted IPv6 address."; var num_blocks = []; for (var i = 0; i < blocks.length; i++) { num_blocks[i] = parseInt(blocks[i], 16); if (num_blocks[i] < 0 || num_blocks[i] > 65535) throw "Block out of range."; } return num_blocks; } }, /** * Converts an IPv6 address from numerical array format to string format. * * @private * @param {number[]} ipv6 * @param {boolean} compact - Whether or not to return the address in shorthand or not * @returns {string} * * @example * // returns "ff00::1111:2222" * IP._ipv6_to_str([65280, 0, 0, 0, 0, 0, 4369, 8738], true); * * // returns "ff00:0000:0000:0000:0000:0000:1111:2222" * IP._ipv6_to_str([65280, 0, 0, 0, 0, 0, 4369, 8738], false); */ _ipv6_to_str: function(ipv6, compact) { var output = "", skips = 0, i = 0; if (compact) { var start = -1, end = -1, s = 0, e = -1; for (i = 0; i < 8; i++) { if (ipv6[i] === 0 && e === (i-1)) { e = i; } else if (ipv6[i] === 0) { s = i; e = i; } if (e >= 0 && (e-s) > (end - start)) { start = s; end = e; } } for (i = 0; i < 8; i++) { if (i != start) { output += Utils.hex(ipv6[i],1) + ":"; } else { output += ":"; i = end; if (end === 7) output += ":"; } } if (output[0] === ":") output = ":" + output; } else { for (i = 0; i < 8; i++) { output += Utils.hex(ipv6[i],4) + ":"; } } return output.slice(0,output.length-1); }, /** * Generates a list of IPv4 addresses in string format between two given numerical values. * * @private * @param {number} ip * @param {number} end_ip * @returns {string[]} * * @example * // returns ["0.0.0.1", "0.0.0.2", "0.0.0.3"] * IP._generate_ipv4_range(1, 3); */ _generate_ipv4_range: function(ip, end_ip) { var range = []; if (end_ip >= ip) { for (; ip <= end_ip; ip++) { range.push(IP._ipv4_to_str(ip)); } } else { range[0] = "Second IP address smaller than first."; } return range; }, }; × Search results Close "},"operations_JS.js.html":{"id":"operations_JS.js.html","title":"Source: operations/JS.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/JS.js /* globals esprima, escodegen, esmangle */ /** * JavaScript operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var JS = { /** * @constant * @default */ PARSE_LOC: false, /** * @constant * @default */ PARSE_RANGE: false, /** * @constant * @default */ PARSE_TOKENS: false, /** * @constant * @default */ PARSE_COMMENT: false, /** * @constant * @default */ PARSE_TOLERANT: false, /** * JavaScript Parser operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse: function (input, args) { var parse_loc = args[0], parse_range = args[1], parse_tokens = args[2], parse_comment = args[3], parse_tolerant = args[4], result = {}, options = { loc: parse_loc, range: parse_range, tokens: parse_tokens, comment: parse_comment, tolerant: parse_tolerant }; result = esprima.parse(input, options); return JSON.stringify(result, null, 2); }, /** * @constant * @default */ BEAUTIFY_INDENT: "\\\\t", /** * @constant * @default */ BEAUTIFY_QUOTES: ["Auto", "Single", "Double"], /** * @constant * @default */ BEAUTIFY_SEMICOLONS: true, /** * @constant * @default */ BEAUTIFY_COMMENT: true, /** * JavaScript Beautify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_beautify: function(input, args) { var beautify_indent = args[0] || JS.BEAUTIFY_INDENT, quotes = args[1].toLowerCase(), beautify_semicolons = args[2], beautify_comment = args[3], result = "", AST; try { AST = esprima.parse(input, { range: true, tokens: true, comment: true }); var options = { format: { indent: { style: beautify_indent }, quotes: quotes, semicolons: beautify_semicolons, }, comment: beautify_comment }; if (options.comment) AST = escodegen.attachComments(AST, AST.comments, AST.tokens); result = escodegen.generate(AST, options); } catch(e) { // Leave original error so the user can see the detail throw "Unable to parse JavaScript.<br>" + e.message; } return result; }, /** * JavaScript Minify operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_minify: function(input, args) { var result = "", AST = esprima.parse(input), optimised_AST = esmangle.optimize(AST, null), mangled_AST = esmangle.mangle(optimised_AST); result = escodegen.generate(mangled_AST, { format: { renumber: true, hexadecimal: true, escapeless: true, compact: true, semicolons: false, parentheses: false } }); return result; }, }; × Search results Close "},"operations_MAC.js.html":{"id":"operations_MAC.js.html","title":"Source: operations/MAC.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/MAC.js /** * MAC address operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var MAC = { /** * @constant * @default */ OUTPUT_CASE: ["Both", "Upper only", "Lower only"], /** * @constant * @default */ NO_DELIM: true, /** * @constant * @default */ DASH_DELIM: true, /** * @constant * @default */ COLON_DELIM: true, /** * @constant * @default */ CISCO_STYLE: false, /** * Format MAC addresses operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_format: function(input, args) { if (!input) return ""; var output_case = args[0], no_delim = args[1], dash_delim = args[2], colon_delim = args[3], cisco_style = args[4], output_list = [], macs = input.toLowerCase().split(/[,\\s\\r\\n]+/); macs.forEach(function(mac) { var cleanMac = mac.replace(/[:.-]+/g, ''), macHyphen = cleanMac.replace(/(.{2}(?=.))/g, '$1-'), macColon = cleanMac.replace(/(.{2}(?=.))/g, '$1:'), macCisco = cleanMac.replace(/(.{4}(?=.))/g, '$1.'); if (output_case == "Lower only") { if (no_delim) output_list.push(cleanMac); if (dash_delim) output_list.push(macHyphen); if (colon_delim) output_list.push(macColon); if (cisco_style) output_list.push(macCisco); } else if (output_case == "Upper only") { if (no_delim) output_list.push(cleanMac.toUpperCase()); if (dash_delim) output_list.push(macHyphen.toUpperCase()); if (colon_delim) output_list.push(macColon.toUpperCase()); if (cisco_style) output_list.push(macCisco.toUpperCase()); } else { if (no_delim) output_list.push(cleanMac, cleanMac.toUpperCase()); if (dash_delim) output_list.push(macHyphen, macHyphen.toUpperCase()); if (colon_delim) output_list.push(macColon, macColon.toUpperCase()); if (cisco_style) output_list.push(macCisco, macCisco.toUpperCase()); } output_list.push( "" // Empty line to delimit groups ); }); // Return the data as a string return output_list.join('\\n'); }, }; × Search results Close "},"operations_Numberwang.js.html":{"id":"operations_Numberwang.js.html","title":"Source: operations/Numberwang.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Numberwang.js /** * Numberwang operations. * * @author Unknown Male 282 * @namespace */ var Numberwang = { /** * Numberwang operation. Remain indoors. * * @param {string} input * @param {Object[]} args * @returns {string} */ run: function(input, args) { if (!input) return "Let's play Wangernumb!"; var match = input.match(/\\d+/); if (match) { return match[0] + "! That's Numberwang!"; } else { // That's a bad miss! return "Sorry, that's not Numberwang. Let's rotate the board!"; } }, }; × Search results Close "},"operations_OS.js.html":{"id":"operations_OS.js.html","title":"Source: operations/OS.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/OS.js /** * Operating system operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var OS = { /** * Parse UNIX file permissions operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_unix_perms: function(input, args) { var perms = { d : false, // directory sl : false, // symbolic link np : false, // named pipe s : false, // socket cd : false, // character device bd : false, // block device dr : false, // door sb : false, // sticky bit su : false, // setuid sg : false, // setgid ru : false, // read user wu : false, // write user eu : false, // execute user rg : false, // read group wg : false, // write group eg : false, // execute group ro : false, // read other wo : false, // write other eo : false // execute other }, d = 0, u = 0, g = 0, o = 0, output = "", octal = null, textual = null; if (input.search(/\\s*[0-7]{1,4}\\s*/i) === 0) { // Input is octal octal = input.match(/\\s*([0-7]{1,4})\\s*/i)[1]; if (octal.length == 4) { d = parseInt(octal[0], 8); u = parseInt(octal[1], 8); g = parseInt(octal[2], 8); o = parseInt(octal[3], 8); } else { if (octal.length > 0) u = parseInt(octal[0], 8); if (octal.length > 1) g = parseInt(octal[1], 8); if (octal.length > 2) o = parseInt(octal[2], 8); } perms.su = d >> 2 & 0x1; perms.sg = d >> 1 & 0x1; perms.sb = d & 0x1; perms.ru = u >> 2 & 0x1; perms.wu = u >> 1 & 0x1; perms.eu = u & 0x1; perms.rg = g >> 2 & 0x1; perms.wg = g >> 1 & 0x1; perms.eg = g & 0x1; perms.ro = o >> 2 & 0x1; perms.wo = o >> 1 & 0x1; perms.eo = o & 0x1; } else if (input.search(/\\s*[dlpcbDrwxsStT-]{1,10}\\s*/) === 0) { // Input is textual textual = input.match(/\\s*([dlpcbDrwxsStT-]{1,10})\\s*/)[1]; switch (textual[0]) { case "d": perms.d = true; break; case "l": perms.sl = true; break; case "p": perms.np = true; break; case "s": perms.s = true; break; case "c": perms.cd = true; break; case "b": perms.bd = true; break; case "D": perms.dr = true; break; } if (textual.length > 1) perms.ru = textual[1] == "r"; if (textual.length > 2) perms.wu = textual[2] == "w"; if (textual.length > 3) { switch (textual[3]) { case "x": perms.eu = true; break; case "s": perms.eu = true; perms.su = true; break; case "S": perms.su = true; break; } } if (textual.length > 4) perms.rg = textual[4] == "r"; if (textual.length > 5) perms.wg = textual[5] == "w"; if (textual.length > 6) { switch (textual[6]) { case "x": perms.eg = true; break; case "s": perms.eg = true; perms.sg = true; break; case "S": perms.sg = true; break; } } if (textual.length > 7) perms.ro = textual[7] == "r"; if (textual.length > 8) perms.wo = textual[8] == "w"; if (textual.length > 9) { switch (textual[9]) { case "x": perms.eo = true; break; case "t": perms.eo = true; perms.sb = true; break; case "T": perms.sb = true; break; } } } else { return "Invalid input format.\\nPlease enter the permissions in either octal (e.g. 755) or textual (e.g. drwxr-xr-x) format."; } output += "Textual representation: " + OS._perms_to_str(perms); output += "\\nOctal representation: " + OS._perms_to_octal(perms); // File type if (textual) { output += "\\nFile type: " + OS._ft_from_perms(perms); } // setuid, setgid if (perms.su) { output += "\\nThe setuid flag is set"; } if (perms.sg) { output += "\\nThe setgid flag is set"; } // sticky bit if (perms.sb) { output += "\\nThe sticky bit is set"; } // Permission matrix output += "\\n\\n +---------+-------+-------+-------+\\n" + " | | User | Group | Other |\\n" + " +---------+-------+-------+-------+\\n" + " | Read | " + (perms.ru ? "X" : " ") + " | " + (perms.rg ? "X" : " ") + " | " + (perms.ro ? "X" : " ") + " |\\n" + " +---------+-------+-------+-------+\\n" + " | Write | " + (perms.wu ? "X" : " ") + " | " + (perms.wg ? "X" : " ") + " | " + (perms.wo ? "X" : " ") + " |\\n" + " +---------+-------+-------+-------+\\n" + " | Execute | " + (perms.eu ? "X" : " ") + " | " + (perms.eg ? "X" : " ") + " | " + (perms.eo ? "X" : " ") + " |\\n" + " +---------+-------+-------+-------+\\n"; return output; }, /** * Given a permissions object dictionary, generates a textual permissions string. * * @private * @param {Object} perms * @returns {string} */ _perms_to_str: function(perms) { var str = "", type = "-"; if (perms.d) type = "d"; if (perms.sl) type = "l"; if (perms.np) type = "p"; if (perms.s) type = "s"; if (perms.cd) type = "c"; if (perms.bd) type = "b"; if (perms.dr) type = "D"; str = type; str += perms.ru ? "r" : "-"; str += perms.wu ? "w" : "-"; if (perms.eu && perms.su) { str += "s"; } else if (perms.su) { str += "S"; } else if (perms.eu) { str += "x"; } else { str += "-"; } str += perms.rg ? "r" : "-"; str += perms.wg ? "w" : "-"; if (perms.eg && perms.sg) { str += "s"; } else if (perms.sg) { str += "S"; } else if (perms.eg) { str += "x"; } else { str += "-"; } str += perms.ro ? "r" : "-"; str += perms.wo ? "w" : "-"; if (perms.eo && perms.sb) { str += "t"; } else if (perms.sb) { str += "T"; } else if (perms.eo) { str += "x"; } else { str += "-"; } return str; }, /** * Given a permissions object dictionary, generates an octal permissions string. * * @private * @param {Object} perms * @returns {string} */ _perms_to_octal: function(perms) { var d = 0, u = 0, g = 0, o = 0; if (perms.su) d += 4; if (perms.sg) d += 2; if (perms.sb) d += 1; if (perms.ru) u += 4; if (perms.wu) u += 2; if (perms.eu) u += 1; if (perms.rg) g += 4; if (perms.wg) g += 2; if (perms.eg) g += 1; if (perms.ro) o += 4; if (perms.wo) o += 2; if (perms.eo) o += 1; return d.toString() + u.toString() + g.toString() + o.toString(); }, /** * Given a permissions object dictionary, returns the file type. * * @private * @param {Object} perms * @returns {string} */ _ft_from_perms: function(perms) { if (perms.d) return "Directory"; if (perms.sl) return "Symbolic link"; if (perms.np) return "Named pipe"; if (perms.s) return "Socket"; if (perms.cd) return "Character device"; if (perms.bd) return "Block device"; if (perms.dr) return "Door"; return "Regular file"; }, }; × Search results Close "},"operations_PublicKey.js.html":{"id":"operations_PublicKey.js.html","title":"Source: operations/PublicKey.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/PublicKey.js /* globals X509, KJUR, ASN1HEX, KEYUTIL, BigInteger */ /** * Public Key operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var PublicKey = { /** * @constant * @default */ X509_INPUT_FORMAT: ["PEM", "DER Hex", "Base64", "Raw"], /** * Parse X.509 certificate operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_x509: function (input, args) { var cert = new X509(), input_format = args[0]; if (!input.length) { return "No input"; } switch (input_format) { case "DER Hex": input = input.replace(/\\s/g, ""); cert.hex = input; cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(input, "CERTIFICATE"); break; case "PEM": cert.hex = X509.pemToHex(input); cert.pem = input; break; case "Base64": cert.hex = Utils.to_hex(Utils.from_base64(input, null, "byte_array"), ""); cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE"); break; case "Raw": cert.hex = Utils.to_hex(Utils.str_to_byte_array(input), ""); cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE"); break; default: throw "Undefined input format"; } var version = ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 0, 0]), sn = cert.getSerialNumberHex(), algorithm = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 2, 0]))), issuer = cert.getIssuerString(), not_before = cert.getNotBefore(), not_after = cert.getNotAfter(), subject = cert.getSubjectString(), pk_algorithm = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 6, 0, 0]))), pk = X509.getPublicKeyFromCertPEM(cert.pem), pk_fields = [], pk_str = "", cert_sig_alg = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [1, 0]))), cert_sig = ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [2]).substr(2), sig_str = "", extensions = ASN1HEX.dump(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 7])); // Public Key fields if (pk.type == "EC") { // ECDSA pk_fields.push({ key: "Curve Name", value: pk.curveName }); pk_fields.push({ key: "Length", value: (((new BigInteger(pk.pubKeyHex, 16)).bitLength()-3) /2) + " bits" }); pk_fields.push({ key: "pub", value: PublicKey._format_byte_str(pk.pubKeyHex, 16, 18) }); } else if (pk.type == "DSA") { // DSA pk_fields.push({ key: "pub", value: PublicKey._format_byte_str(pk.y.toString(16), 16, 18) }); pk_fields.push({ key: "P", value: PublicKey._format_byte_str(pk.p.toString(16), 16, 18) }); pk_fields.push({ key: "Q", value: PublicKey._format_byte_str(pk.q.toString(16), 16, 18) }); pk_fields.push({ key: "G", value: PublicKey._format_byte_str(pk.g.toString(16), 16, 18) }); } else if (pk.e) { // RSA pk_fields.push({ key: "Length", value: pk.n.bitLength() + " bits" }); pk_fields.push({ key: "Modulus", value: PublicKey._format_byte_str(pk.n.toString(16), 16, 18) }); pk_fields.push({ key: "Exponent", value: pk.e + " (0x" + pk.e.toString(16) + ")" }); } else { pk_fields.push({ key: "Error", value: "Unknown Public Key type" }); } // Signature fields if (ASN1HEX.dump(cert_sig).indexOf("SEQUENCE") === 0) { // DSA or ECDSA sig_str = " r: " + PublicKey._format_byte_str(ASN1HEX.getDecendantHexVByNthList(cert_sig, 0, [0]), 16, 18) + "\\n" + " s: " + PublicKey._format_byte_str(ASN1HEX.getDecendantHexVByNthList(cert_sig, 0, [1]), 16, 18) + "\\n"; } else { // RSA sig_str = " Signature: " + PublicKey._format_byte_str(cert_sig, 16, 18) + "\\n"; } // Format Public Key fields for (var i = 0; i < pk_fields.length; i++) { pk_str += " " + pk_fields[i].key + ":" + Utils.pad_left( pk_fields[i].value + "\\n", 18 - (pk_fields[i].key.length + 3) + pk_fields[i].value.length + 1, " " ); } var issuer_str = PublicKey._format_dn_str(issuer, 2), nb_date = PublicKey._format_date(not_before), na_date = PublicKey._format_date(not_after), subject_str = PublicKey._format_dn_str(subject, 2), cert_sig_str = PublicKey._format_byte_str(cert_sig, 16, 18); var output = "Version: " + (parseInt(version, 16) + 1) + " (0x" + version + ")\\n" + "Serial number: " + new BigInteger(sn, 16).toString() + " (0x" + sn + ")\\n" + "Algorithm ID: " + algorithm + "\\n" + "Validity\\n" + " Not Before: " + nb_date + " (dd-mm-yy hh:mm:ss) (" + not_before + ")\\n" + " Not After: " + na_date + " (dd-mm-yy hh:mm:ss) (" + not_after + ")\\n" + "Issuer\\n" + issuer_str + "Subject\\n" + subject_str + "Public Key\\n" + " Algorithm: " + pk_algorithm + "\\n" + pk_str + "Certificate Signature\\n" + " Algorithm: " + cert_sig_alg + "\\n" + sig_str + "\\nExtensions (parsed ASN.1)\\n" + extensions; return output; }, /** * PEM to Hex operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_pem_to_hex: function(input, args) { if (input.indexOf("-----BEGIN") < 0) { // Add header so that the KEYUTIL function works input = "-----BEGIN CERTIFICATE-----" + input; } if (input.indexOf("-----END") < 0) { // Add footer so that the KEYUTIL function works input = input + "-----END CERTIFICATE-----"; } return KEYUTIL.getHexFromPEM(input); }, /** * @constant * @default */ PEM_HEADER_STRING: "CERTIFICATE", /** * Hex to PEM operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_hex_to_pem: function(input, args) { return KJUR.asn1.ASN1Util.getPEMStringFromHex(input.replace(/\\s/g, ""), args[0]); }, /** * Hex to Object Identifier operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_hex_to_object_identifier: function(input, args) { return KJUR.asn1.ASN1Util.oidHexToInt(input.replace(/\\s/g, "")); }, /** * Object Identifier to Hex operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_object_identifier_to_hex: function(input, args) { return KJUR.asn1.ASN1Util.oidIntToHex(input); }, /** * @constant * @default */ ASN1_TRUNCATE_LENGTH: 32, /** * Parse ASN.1 hex string operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_asn1_hex_string: function(input, args) { var truncate_len = args[1], index = args[0]; return ASN1HEX.dump(input.replace(/\\s/g, ""), { "ommit_long_octet": truncate_len }, index); }, /** * Formats Distinguished Name (DN) strings. * * @private * @param {string} dn_str * @param {number} indent * @returns {string} */ _format_dn_str: function(dn_str, indent) { var output = "", fields = dn_str.split(",/|"), max_key_len = 0, key, value, str; for (var i = 0; i < fields.length; i++) { if (!fields[i].length) continue; key = fields[i].split("=")[0]; max_key_len = key.length > max_key_len ? key.length : max_key_len; } for (i = 0; i < fields.length; i++) { if (!fields[i].length) continue; key = fields[i].split("=")[0]; value = fields[i].split("=")[1]; str = Utils.pad_right(key, max_key_len) + " = " + value + "\\n"; output += Utils.pad_left(str, indent + str.length, " "); } return output; }, /** * Formats byte strings by adding line breaks and delimiters. * * @private * @param {string} byte_str * @param {number} length - Line width * @param {number} indent * @returns {string} */ _format_byte_str: function(byte_str, length, indent) { byte_str = Utils.to_hex(Utils.from_hex(byte_str), ":"); length = length * 3; var output = ""; for (var i = 0; i < byte_str.length; i += length) { var str = byte_str.slice(i, i + length) + "\\n"; if (i === 0) { output += str; } else { output += Utils.pad_left(str, indent + str.length, " "); } } return output.slice(0, output.length-1); }, /** * Formats dates. * * @private * @param {string} date_str * @returns {string} */ _format_date: function(date_str) { return date_str[4] + date_str[5] + "/" + date_str[2] + date_str[3] + "/" + date_str[0] + date_str[1] + " " + date_str[6] + date_str[7] + ":" + date_str[8] + date_str[9] + ":" + date_str[10] + date_str[11]; }, }; /** * Overwrite X509.hex2dn function so as to join RDNs with a string which can be split on without * causing problems later (I hope). * * @param {string} hDN - Hex DN string * @returns {string} */ X509.hex2dn = function(hDN) { var s = ""; var a = ASN1HEX.getPosArrayOfChildren_AtObj(hDN, 0); for (var i = 0; i < a.length; i++) { var hRDN = ASN1HEX.getHexOfTLV_AtObj(hDN, a[i]); s = s + ",/|" + X509.hex2rdn(hRDN); } return s; }; /** * Overwrite DN attribute lookup in jsrasign library with a much more complete version from * https://github.com/nfephp-org/nfephp/blob/master/libs/Common/Certificate/Oids.php * * Various duplicates commented out. * * @constant */ X509.DN_ATTRHEX = { '0603550403' : 'commonName', '0603550404' : 'surname', '0603550406' : 'countryName', '0603550407' : 'localityName', '0603550408' : 'stateOrProvinceName', '0603550409' : 'streetAddress', '060355040a' : 'organizationName', '060355040b' : 'organizationalUnitName', '060355040c' : 'title', '0603550414' : 'telephoneNumber', '060355042a' : 'givenName', // '0603551d0e' : 'id-ce-subjectKeyIdentifier', // '0603551d0f' : 'id-ce-keyUsage', // '0603551d11' : 'id-ce-subjectAltName', // '0603551d13' : 'id-ce-basicConstraints', // '0603551d14' : 'id-ce-cRLNumber', // '0603551d1f' : 'id-ce-CRLDistributionPoints', // '0603551d20' : 'id-ce-certificatePolicies', // '0603551d23' : 'id-ce-authorityKeyIdentifier', // '0603551d25' : 'id-ce-extKeyUsage', // '06032a864886f70d010901' : 'Email', // '06032a864886f70d010101' : 'RSAEncryption', // '06032a864886f70d010102' : 'md2WithRSAEncryption', // '06032a864886f70d010104' : 'md5withRSAEncryption', // '06032a864886f70d010105' : 'SHA-1WithRSAEncryption', // '06032a8648ce380403' : 'id-dsa-with-sha-1', // '06032b06010505070302' : 'id_kp_clientAuth', // '06032b06010505070304' : 'id_kp_securityemail', '06032b06010505070201' : 'id_certificatePolicies', '06036086480186f8420101' : 'netscape-cert-type', '06036086480186f8420102' : 'netscape-base-url', '06036086480186f8420103' : 'netscape-revocation-url', '06036086480186f8420104' : 'netscape-ca-revocation-url', '06036086480186f8420107' : 'netscape-cert-renewal-url', '06036086480186f8420108' : 'netscape-ca-policy-url', '06036086480186f842010c' : 'netscape-ssl-server-name', '06036086480186f842010d' : 'netscape-comment', '0603604c010201' : 'A1', '0603604c010203' : 'A3', '0603604c01020110' : 'Certification Practice Statement pointer', '0603604c010301' : 'Dados do cert parte 1', '0603604c010305' : 'Dados do cert parte 2', '0603604c010306' : 'Dados do cert parte 3', '06030992268993f22c640119' : 'domainComponent', '06032a24a0f2a07d01010a' : 'Signet pilot', '06032a24a0f2a07d01010b' : 'Signet intraNet', '06032a24a0f2a07d010102' : 'Signet personal', '06032a24a0f2a07d010114' : 'Signet securityPolicy', '06032a24a0f2a07d010103' : 'Signet business', '06032a24a0f2a07d010104' : 'Signet legal', '06032a24a497a35301640101' : 'Certificates Australia policyIdentifier', '06032a85702201' : 'seis-cp', '06032a8570220101' : 'SEIS certificatePolicy-s10', '06032a85702202' : 'SEIS pe', '06032a85702203' : 'SEIS at', '06032a8570220301' : 'SEIS at-personalIdentifier', '06032a8648ce380201' : 'holdinstruction-none', '06032a8648ce380202' : 'holdinstruction-callissuer', '06032a8648ce380203' : 'holdinstruction-reject', '06032a8648ce380401' : 'dsa', '06032a8648ce380403' : 'dsaWithSha1', '06032a8648ce3d01' : 'fieldType', '06032a8648ce3d0101' : 'prime-field', '06032a8648ce3d0102' : 'characteristic-two-field', '06032a8648ce3d010201' : 'ecPublicKey', '06032a8648ce3d010203' : 'characteristic-two-basis', '06032a8648ce3d01020301' : 'onBasis', '06032a8648ce3d01020302' : 'tpBasis', '06032a8648ce3d01020303' : 'ppBasis', '06032a8648ce3d02' : 'publicKeyType', '06032a8648ce3d0201' : 'ecPublicKey', '06032a8648ce3e0201' : 'dhPublicNumber', '06032a864886f67d07' : 'nsn', '06032a864886f67d0741' : 'nsn-ce', '06032a864886f67d074100' : 'entrustVersInfo', '06032a864886f67d0742' : 'nsn-alg', '06032a864886f67d07420a' : 'cast5CBC', '06032a864886f67d07420b' : 'cast5MAC', '06032a864886f67d07420c' : 'pbeWithMD5AndCAST5-CBC', '06032a864886f67d07420d' : 'passwordBasedMac', '06032a864886f67d074203' : 'cast3CBC', '06032a864886f67d0743' : 'nsn-oc', '06032a864886f67d074300' : 'entrustUser', '06032a864886f67d0744' : 'nsn-at', '06032a864886f67d074400' : 'entrustCAInfo', '06032a864886f67d07440a' : 'attributeCertificate', '06032a864886f70d0101' : 'pkcs-1', '06032a864886f70d010101' : 'rsaEncryption', '06032a864886f70d010102' : 'md2withRSAEncryption', '06032a864886f70d010103' : 'md4withRSAEncryption', '06032a864886f70d010104' : 'md5withRSAEncryption', '06032a864886f70d010105' : 'sha1withRSAEncryption', '06032a864886f70d010106' : 'rsaOAEPEncryptionSET', '06032a864886f70d010910020b' : 'SMIMEEncryptionKeyPreference', '06032a864886f70d010c' : 'pkcs-12', '06032a864886f70d010c01' : 'pkcs-12-PbeIds', '06032a864886f70d010c0101' : 'pbeWithSHAAnd128BitRC4', '06032a864886f70d010c0102' : 'pbeWithSHAAnd40BitRC4', '06032a864886f70d010c0103' : 'pbeWithSHAAnd3-KeyTripleDES-CBC', '06032a864886f70d010c0104' : 'pbeWithSHAAnd2-KeyTripleDES-CBC', '06032a864886f70d010c0105' : 'pbeWithSHAAnd128BitRC2-CBC', '06032a864886f70d010c0106' : 'pbeWithSHAAnd40BitRC2-CBC', '06032a864886f70d010c0a' : 'pkcs-12Version1', '06032a864886f70d010c0a01' : 'pkcs-12BadIds', '06032a864886f70d010c0a0101' : 'pkcs-12-keyBag', '06032a864886f70d010c0a0102' : 'pkcs-12-pkcs-8ShroudedKeyBag', '06032a864886f70d010c0a0103' : 'pkcs-12-certBag', '06032a864886f70d010c0a0104' : 'pkcs-12-crlBag', '06032a864886f70d010c0a0105' : 'pkcs-12-secretBag', '06032a864886f70d010c0a0106' : 'pkcs-12-safeContentsBag', '06032a864886f70d010c02' : 'pkcs-12-ESPVKID', '06032a864886f70d010c0201' : 'pkcs-12-PKCS8KeyShrouding', '06032a864886f70d010c03' : 'pkcs-12-BagIds', '06032a864886f70d010c0301' : 'pkcs-12-keyBagId', '06032a864886f70d010c0302' : 'pkcs-12-certAndCRLBagId', '06032a864886f70d010c0303' : 'pkcs-12-secretBagId', '06032a864886f70d010c0304' : 'pkcs-12-safeContentsId', '06032a864886f70d010c0305' : 'pkcs-12-pkcs-8ShroudedKeyBagId', '06032a864886f70d010c04' : 'pkcs-12-CertBagID', '06032a864886f70d010c0401' : 'pkcs-12-X509CertCRLBagID', '06032a864886f70d010c0402' : 'pkcs-12-SDSICertBagID', '06032a864886f70d010c05' : 'pkcs-12-OID', '06032a864886f70d010c0501' : 'pkcs-12-PBEID', '06032a864886f70d010c050101' : 'pkcs-12-PBEWithSha1And128BitRC4', '06032a864886f70d010c050102' : 'pkcs-12-PBEWithSha1And40BitRC4', '06032a864886f70d010c050103' : 'pkcs-12-PBEWithSha1AndTripleDESCBC', '06032a864886f70d010c050104' : 'pkcs-12-PBEWithSha1And128BitRC2CBC', '06032a864886f70d010c050105' : 'pkcs-12-PBEWithSha1And40BitRC2CBC', '06032a864886f70d010c050106' : 'pkcs-12-PBEWithSha1AndRC4', '06032a864886f70d010c050107' : 'pkcs-12-PBEWithSha1AndRC2CBC', '06032a864886f70d010c0502' : 'pkcs-12-EnvelopingID', '06032a864886f70d010c050201' : 'pkcs-12-RSAEncryptionWith128BitRC4', '06032a864886f70d010c050202' : 'pkcs-12-RSAEncryptionWith40BitRC4', '06032a864886f70d010c050203' : 'pkcs-12-RSAEncryptionWithTripleDES', '06032a864886f70d010c0503' : 'pkcs-12-SignatureID', '06032a864886f70d010c050301' : 'pkcs-12-RSASignatureWithSHA1Digest', '06032a864886f70d0103' : 'pkcs-3', '06032a864886f70d010301' : 'dhKeyAgreement', '06032a864886f70d0105' : 'pkcs-5', '06032a864886f70d010501' : 'pbeWithMD2AndDES-CBC', '06032a864886f70d01050a' : 'pbeWithSHAAndDES-CBC', '06032a864886f70d010503' : 'pbeWithMD5AndDES-CBC', '06032a864886f70d010504' : 'pbeWithMD2AndRC2-CBC', '06032a864886f70d010506' : 'pbeWithMD5AndRC2-CBC', '06032a864886f70d010509' : 'pbeWithMD5AndXOR', '06032a864886f70d0107' : 'pkcs-7', '06032a864886f70d010701' : 'data', '06032a864886f70d010702' : 'signedData', '06032a864886f70d010703' : 'envelopedData', '06032a864886f70d010704' : 'signedAndEnvelopedData', '06032a864886f70d010705' : 'digestData', '06032a864886f70d010706' : 'encryptedData', '06032a864886f70d010707' : 'dataWithAttributes', '06032a864886f70d010708' : 'encryptedPrivateKeyInfo', '06032a864886f70d0109' : 'pkcs-9', '06032a864886f70d010901' : 'emailAddress', '06032a864886f70d01090a' : 'issuerAndSerialNumber', '06032a864886f70d01090b' : 'passwordCheck', '06032a864886f70d01090c' : 'publicKey', '06032a864886f70d01090d' : 'signingDescription', '06032a864886f70d01090e' : 'extensionReq', '06032a864886f70d01090f' : 'sMIMECapabilities', '06032a864886f70d01090f01' : 'preferSignedData', '06032a864886f70d01090f02' : 'canNotDecryptAny', '06032a864886f70d01090f03' : 'receiptRequest', '06032a864886f70d01090f04' : 'receipt', '06032a864886f70d01090f05' : 'contentHints', '06032a864886f70d01090f06' : 'mlExpansionHistory', '06032a864886f70d010910' : 'id-sMIME', '06032a864886f70d01091000' : 'id-mod', '06032a864886f70d0109100001' : 'id-mod-cms', '06032a864886f70d0109100002' : 'id-mod-ess', '06032a864886f70d01091001' : 'id-ct', '06032a864886f70d0109100101' : 'id-ct-receipt', '06032a864886f70d01091002' : 'id-aa', '06032a864886f70d0109100201' : 'id-aa-receiptRequest', '06032a864886f70d0109100202' : 'id-aa-securityLabel', '06032a864886f70d0109100203' : 'id-aa-mlExpandHistory', '06032a864886f70d0109100204' : 'id-aa-contentHint', '06032a864886f70d010902' : 'unstructuredName', '06032a864886f70d010914' : 'friendlyName', '06032a864886f70d010915' : 'localKeyID', '06032a864886f70d010916' : 'certTypes', '06032a864886f70d01091601' : 'x509Certificate', '06032a864886f70d01091602' : 'sdsiCertificate', '06032a864886f70d010917' : 'crlTypes', '06032a864886f70d01091701' : 'x509Crl', '06032a864886f70d010903' : 'contentType', '06032a864886f70d010904' : 'messageDigest', '06032a864886f70d010905' : 'signingTime', '06032a864886f70d010906' : 'countersignature', '06032a864886f70d010907' : 'challengePassword', '06032a864886f70d010908' : 'unstructuredAddress', '06032a864886f70d010909' : 'extendedCertificateAttributes', '06032a864886f70d02' : 'digestAlgorithm', '06032a864886f70d0202' : 'md2', '06032a864886f70d0204' : 'md4', '06032a864886f70d0205' : 'md5', '06032a864886f70d03' : 'encryptionAlgorithm', '06032a864886f70d030a' : 'desCDMF', '06032a864886f70d0302' : 'rc2CBC', '06032a864886f70d0303' : 'rc2ECB', '06032a864886f70d0304' : 'rc4', '06032a864886f70d0305' : 'rc4WithMAC', '06032a864886f70d0306' : 'DESX-CBC', '06032a864886f70d0307' : 'DES-EDE3-CBC', '06032a864886f70d0308' : 'RC5CBC', '06032a864886f70d0309' : 'RC5-CBCPad', '06032a864886f7140403' : 'microsoftExcel', '06032a864886f7140404' : 'titledWithOID', '06032a864886f7140405' : 'microsoftPowerPoint', '06032b81051086480954' : 'x9-84', '06032b8105108648095400' : 'x9-84-Module', '06032b810510864809540001' : 'x9-84-Biometrics', '06032b810510864809540002' : 'x9-84-CMS', '06032b810510864809540003' : 'x9-84-Identifiers', '06032b8105108648095401' : 'biometric', '06032b810510864809540100' : 'id-unknown-Type', '06032b810510864809540101' : 'id-body-Odor', '06032b81051086480954010a' : 'id-palm', '06032b81051086480954010b' : 'id-retina', '06032b81051086480954010c' : 'id-signature', '06032b81051086480954010d' : 'id-speech-Pattern', '06032b81051086480954010e' : 'id-thermal-Image', '06032b81051086480954010f' : 'id-vein-Pattern', '06032b810510864809540110' : 'id-thermal-Face-Image', '06032b810510864809540111' : 'id-thermal-Hand-Image', '06032b810510864809540112' : 'id-lip-Movement', '06032b810510864809540113' : 'id-gait', '06032b810510864809540102' : 'id-dna', '06032b810510864809540103' : 'id-ear-Shape', '06032b810510864809540104' : 'id-facial-Features', '06032b810510864809540105' : 'id-finger-Image', '06032b810510864809540106' : 'id-finger-Geometry', '06032b810510864809540107' : 'id-hand-Geometry', '06032b810510864809540108' : 'id-iris-Features', '06032b810510864809540109' : 'id-keystroke-Dynamics', '06032b8105108648095402' : 'processing-algorithm', '06032b8105108648095403' : 'matching-method', '06032b8105108648095404' : 'format-Owner', '06032b810510864809540400' : 'cbeff-Owner', '06032b810510864809540401' : 'ibia-Owner', '06032b81051086480954040101' : 'id-ibia-SAFLINK', '06032b8105108648095404010a' : 'id-ibia-SecuGen', '06032b8105108648095404010b' : 'id-ibia-PreciseBiometric', '06032b8105108648095404010c' : 'id-ibia-Identix', '06032b8105108648095404010d' : 'id-ibia-DERMALOG', '06032b8105108648095404010e' : 'id-ibia-LOGICO', '06032b8105108648095404010f' : 'id-ibia-NIST', '06032b81051086480954040110' : 'id-ibia-A3Vision', '06032b81051086480954040111' : 'id-ibia-NEC', '06032b81051086480954040112' : 'id-ibia-STMicroelectronics', '06032b81051086480954040102' : 'id-ibia-Bioscrypt', '06032b81051086480954040103' : 'id-ibia-Visionics', '06032b81051086480954040104' : 'id-ibia-InfineonTechnologiesAG', '06032b81051086480954040105' : 'id-ibia-IridianTechnologies', '06032b81051086480954040106' : 'id-ibia-Veridicom', '06032b81051086480954040107' : 'id-ibia-CyberSIGN', '06032b81051086480954040108' : 'id-ibia-eCryp.', '06032b81051086480954040109' : 'id-ibia-FingerprintCardsAB', '06032b810510864809540402' : 'x9-Owner', '06032b0e021a05' : 'sha', '06032b0e03020101' : 'rsa', '06032b0e03020a' : 'desMAC', '06032b0e03020b' : 'rsaSignature', '06032b0e03020c' : 'dsa', '06032b0e03020d' : 'dsaWithSHA', '06032b0e03020e' : 'mdc2WithRSASignature', '06032b0e03020f' : 'shaWithRSASignature', '06032b0e030210' : 'dhWithCommonModulus', '06032b0e030211' : 'desEDE', '06032b0e030212' : 'sha', '06032b0e030213' : 'mdc-2', '06032b0e030202' : 'md4WitRSA', '06032b0e03020201' : 'sqmod-N', '06032b0e030214' : 'dsaCommon', '06032b0e030215' : 'dsaCommonWithSHA', '06032b0e030216' : 'rsaKeyTransport', '06032b0e030217' : 'keyed-hash-seal', '06032b0e030218' : 'md2WithRSASignature', '06032b0e030219' : 'md5WithRSASignature', '06032b0e03021a' : 'sha1', '06032b0e03021b' : 'dsaWithSHA1', '06032b0e03021c' : 'dsaWithCommonSHA1', '06032b0e03021d' : 'sha-1WithRSAEncryption', '06032b0e030203' : 'md5WithRSA', '06032b0e03020301' : 'sqmod-NwithRSA', '06032b0e030204' : 'md4WithRSAEncryption', '06032b0e030206' : 'desECB', '06032b0e030207' : 'desCBC', '06032b0e030208' : 'desOFB', '06032b0e030209' : 'desCFB', '06032b0e030301' : 'simple-strong-auth-mechanism', '06032b0e07020101' : 'ElGamal', '06032b0e07020301' : 'md2WithRSA', '06032b0e07020302' : 'md2WithElGamal', '06032b2403' : 'algorithm', '06032b240301' : 'encryptionAlgorithm', '06032b24030101' : 'des', '06032b240301010101' : 'desECBPad', '06032b24030101010101' : 'desECBPadISO', '06032b240301010201' : 'desCBCPad', '06032b24030101020101' : 'desCBCPadISO', '06032b24030102' : 'idea', '06032b2403010201' : 'ideaECB', '06032b240301020101' : 'ideaECBPad', '06032b24030102010101' : 'ideaECBPadISO', '06032b2403010202' : 'ideaCBC', '06032b240301020201' : 'ideaCBCPad', '06032b24030102020101' : 'ideaCBCPadISO', '06032b2403010203' : 'ideaOFB', '06032b2403010204' : 'ideaCFB', '06032b24030103' : 'des-3', '06032b240301030101' : 'des-3ECBPad', '06032b24030103010101' : 'des-3ECBPadISO', '06032b240301030201' : 'des-3CBCPad', '06032b24030103020101' : 'des-3CBCPadISO', '06032b240302' : 'hashAlgorithm', '06032b24030201' : 'ripemd160', '06032b24030202' : 'ripemd128', '06032b24030203' : 'ripemd256', '06032b24030204' : 'mdc2singleLength', '06032b24030205' : 'mdc2doubleLength', '06032b240303' : 'signatureAlgorithm', '06032b24030301' : 'rsa', '06032b2403030101' : 'rsaMitSHA-1', '06032b2403030102' : 'rsaMitRIPEMD160', '06032b24030302' : 'ellipticCurve', '06032b240304' : 'signatureScheme', '06032b24030401' : 'iso9796-1', '06032b2403040201' : 'iso9796-2', '06032b2403040202' : 'iso9796-2rsa', '06032b2404' : 'attribute', '06032b2405' : 'policy', '06032b2406' : 'api', '06032b240601' : 'manufacturerSpecific', '06032b240602' : 'functionalitySpecific', '06032b2407' : 'api', '06032b240701' : 'keyAgreement', '06032b240702' : 'keyTransport', '06032b06010401927c0a0101' : 'UNINETT policyIdentifier', '06032b0601040195180a' : 'ICE-TEL policyIdentifier', '06032b0601040197552001' : 'cryptlibEnvelope', '06032b0601040197552002' : 'cryptlibPrivateKey', '060a2b060104018237' : 'Microsoft OID', '060a2b0601040182370a' : 'Crypto 2.0', '060a2b0601040182370a01' : 'certTrustList', '060a2b0601040182370a0101' : 'szOID_SORTED_CTL', '060a2b0601040182370a0a' : 'Microsoft CMC OIDs', '060a2b0601040182370a0a01' : 'szOID_CMC_ADD_ATTRIBUTES', '060a2b0601040182370a0b' : 'Microsoft certificate property OIDs', '060a2b0601040182370a0b01' : 'szOID_CERT_PROP_ID_PREFIX', '060a2b0601040182370a0c' : 'CryptUI', '060a2b0601040182370a0c01' : 'szOID_ANY_APPLICATION_POLICY', '060a2b0601040182370a02' : 'nextUpdateLocation', '060a2b0601040182370a0301' : 'certTrustListSigning', '060a2b0601040182370a030a' : 'szOID_KP_QUALIFIED_SUBORDINATION', '060a2b0601040182370a030b' : 'szOID_KP_KEY_RECOVERY', '060a2b0601040182370a030c' : 'szOID_KP_DOCUMENT_SIGNING', '060a2b0601040182370a0302' : 'timeStampSigning', '060a2b0601040182370a0303' : 'serverGatedCrypto', '060a2b0601040182370a030301' : 'szOID_SERIALIZED', '060a2b0601040182370a0304' : 'encryptedFileSystem', '060a2b0601040182370a030401' : 'szOID_EFS_RECOVERY', '060a2b0601040182370a0305' : 'szOID_WHQL_CRYPTO', '060a2b0601040182370a0306' : 'szOID_NT5_CRYPTO', '060a2b0601040182370a0307' : 'szOID_OEM_WHQL_CRYPTO', '060a2b0601040182370a0308' : 'szOID_EMBEDDED_NT_CRYPTO', '060a2b0601040182370a0309' : 'szOID_ROOT_LIST_SIGNER', '060a2b0601040182370a0401' : 'yesnoTrustAttr', '060a2b0601040182370a0501' : 'szOID_DRM', '060a2b0601040182370a0502' : 'szOID_DRM_INDIVIDUALIZATION', '060a2b0601040182370a0601' : 'szOID_LICENSES', '060a2b0601040182370a0602' : 'szOID_LICENSE_SERVER', '060a2b0601040182370a07' : 'szOID_MICROSOFT_RDN_PREFIX', '060a2b0601040182370a0701' : 'szOID_KEYID_RDN', '060a2b0601040182370a0801' : 'szOID_REMOVE_CERTIFICATE', '060a2b0601040182370a0901' : 'szOID_CROSS_CERT_DIST_POINTS', '060a2b0601040182370c' : 'Catalog', '060a2b0601040182370c0101' : 'szOID_CATALOG_LIST', '060a2b0601040182370c0102' : 'szOID_CATALOG_LIST_MEMBER', '060a2b0601040182370c0201' : 'CAT_NAMEVALUE_OBJID', '060a2b0601040182370c0202' : 'CAT_MEMBERINFO_OBJID', '060a2b0601040182370d' : 'Microsoft PKCS10 OIDs', '060a2b0601040182370d01' : 'szOID_RENEWAL_CERTIFICATE', '060a2b0601040182370d0201' : 'szOID_ENROLLMENT_NAME_VALUE_PAIR', '060a2b0601040182370d0202' : 'szOID_ENROLLMENT_CSP_PROVIDER', '060a2b0601040182370d0203' : 'OS Version', '060a2b0601040182370f' : 'Microsoft Java', '060a2b06010401823710' : 'Microsoft Outlook/Exchange', '060a2b0601040182371004' : 'Outlook Express', '060a2b06010401823711' : 'Microsoft PKCS12 attributes', '060a2b0601040182371101' : 'szOID_LOCAL_MACHINE_KEYSET', '060a2b06010401823712' : 'Microsoft Hydra', '060a2b06010401823713' : 'Microsoft ISPU Test', '060a2b06010401823702' : 'Authenticode', '060a2b06010401823702010a' : 'spcAgencyInfo', '060a2b06010401823702010b' : 'spcStatementType', '060a2b06010401823702010c' : 'spcSpOpusInfo', '060a2b06010401823702010e' : 'certExtensions', '060a2b06010401823702010f' : 'spcPelmageData', '060a2b060104018237020112' : 'SPC_RAW_FILE_DATA_OBJID', '060a2b060104018237020113' : 'SPC_STRUCTURED_STORAGE_DATA_OBJID', '060a2b060104018237020114' : 'spcLink', '060a2b060104018237020115' : 'individualCodeSigning', '060a2b060104018237020116' : 'commercialCodeSigning', '060a2b060104018237020119' : 'spcLink', '060a2b06010401823702011a' : 'spcMinimalCriteriaInfo', '060a2b06010401823702011b' : 'spcFinancialCriteriaInfo', '060a2b06010401823702011c' : 'spcLink', '060a2b06010401823702011d' : 'SPC_HASH_INFO_OBJID', '060a2b06010401823702011e' : 'SPC_SIPINFO_OBJID', '060a2b060104018237020104' : 'spcIndirectDataContext', '060a2b0601040182370202' : 'CTL for Software Publishers Trusted CAs', '060a2b060104018237020201' : 'szOID_TRUSTED_CODESIGNING_CA_LIST', '060a2b060104018237020202' : 'szOID_TRUSTED_CLIENT_AUTH_CA_LIST', '060a2b060104018237020203' : 'szOID_TRUSTED_SERVER_AUTH_CA_LIST', '060a2b06010401823714' : 'Microsoft Enrollment Infrastructure', '060a2b0601040182371401' : 'szOID_AUTO_ENROLL_CTL_USAGE', '060a2b0601040182371402' : 'szOID_ENROLL_CERTTYPE_EXTENSION', '060a2b060104018237140201' : 'szOID_ENROLLMENT_AGENT', '060a2b060104018237140202' : 'szOID_KP_SMARTCARD_LOGON', '060a2b060104018237140203' : 'szOID_NT_PRINCIPAL_NAME', '060a2b0601040182371403' : 'szOID_CERT_MANIFOLD', '06092b06010401823715' : 'Microsoft CertSrv Infrastructure', '06092b0601040182371501' : 'szOID_CERTSRV_CA_VERSION', '06092b0601040182371514' : 'Client Information', '060a2b06010401823719' : 'Microsoft Directory Service', '060a2b0601040182371901' : 'szOID_NTDS_REPLICATION', '060a2b06010401823703' : 'Time Stamping', '060a2b060104018237030201' : 'SPC_TIME_STAMP_REQUEST_OBJID', '060a2b0601040182371e' : 'IIS', '060a2b0601040182371f' : 'Windows updates and service packs', '060a2b0601040182371f01' : 'szOID_PRODUCT_UPDATE', '060a2b06010401823704' : 'Permissions', '060a2b06010401823728' : 'Fonts', '060a2b06010401823729' : 'Microsoft Licensing and Registration', '060a2b0601040182372a' : 'Microsoft Corporate PKI (ITG)', '060a2b06010401823758' : 'CAPICOM', '060a2b0601040182375801' : 'szOID_CAPICOM_VERSION', '060a2b0601040182375802' : 'szOID_CAPICOM_ATTRIBUTE', '060a2b060104018237580201' : 'szOID_CAPICOM_DOCUMENT_NAME', '060a2b060104018237580202' : 'szOID_CAPICOM_DOCUMENT_DESCRIPTION', '060a2b0601040182375803' : 'szOID_CAPICOM_ENCRYPTED_DATA', '060a2b060104018237580301' : 'szOID_CAPICOM_ENCRYPTED_CONTENT', '06032b0601050507' : 'pkix', '06032b060105050701' : 'privateExtension', '06032b06010505070101' : 'authorityInfoAccess', '06032b06010505070c02' : 'CMC Data', '06032b060105050702' : 'policyQualifierIds', // '06032b06010505070201' : 'cps', '06032b06010505070202' : 'unotice', '06032b060105050703' : 'keyPurpose', '06032b06010505070301' : 'serverAuth', '06032b06010505070302' : 'clientAuth', '06032b06010505070303' : 'codeSigning', '06032b06010505070304' : 'emailProtection', '06032b06010505070305' : 'ipsecEndSystem', '06032b06010505070306' : 'ipsecTunnel', '06032b06010505070307' : 'ipsecUser', '06032b06010505070308' : 'timeStamping', '06032b060105050704' : 'cmpInformationTypes', '06032b06010505070401' : 'caProtEncCert', '06032b06010505070402' : 'signKeyPairTypes', '06032b06010505070403' : 'encKeyPairTypes', '06032b06010505070404' : 'preferredSymmAlg', '06032b06010505070405' : 'caKeyUpdateInfo', '06032b06010505070406' : 'currentCRL', '06032b06010505073001' : 'ocsp', '06032b06010505073002' : 'caIssuers', '06032b06010505080101' : 'HMAC-MD5', '06032b06010505080102' : 'HMAC-SHA', '060360864801650201010a' : 'mosaicKeyManagementAlgorithm', '060360864801650201010b' : 'sdnsKMandSigAlgorithm', '060360864801650201010c' : 'mosaicKMandSigAlgorithm', '060360864801650201010d' : 'SuiteASignatureAlgorithm', '060360864801650201010e' : 'SuiteAConfidentialityAlgorithm', '060360864801650201010f' : 'SuiteAIntegrityAlgorithm', '06036086480186f84201' : 'cert-extension', // '06036086480186f8420101' : 'netscape-cert-type', '06036086480186f842010a' : 'EntityLogo', '06036086480186f842010b' : 'UserPicture', // '06036086480186f842010c' : 'netscape-ssl-server-name', // '06036086480186f842010d' : 'netscape-comment', // '06036086480186f8420102' : 'netscape-base-url', // '06036086480186f8420103' : 'netscape-revocation-url', // '06036086480186f8420104' : 'netscape-ca-revocation-url', // '06036086480186f8420107' : 'netscape-cert-renewal-url', // '06036086480186f8420108' : 'netscape-ca-policy-url', '06036086480186f8420109' : 'HomePage-url', '06036086480186f84202' : 'data-type', '06036086480186f8420201' : 'GIF', '06036086480186f8420202' : 'JPEG', '06036086480186f8420203' : 'URL', '06036086480186f8420204' : 'HTML', '06036086480186f8420205' : 'netscape-cert-sequence', '06036086480186f8420206' : 'netscape-cert-url', '06036086480186f84203' : 'directory', '06036086480186f8420401' : 'serverGatedCrypto', '06036086480186f845010603' : 'Unknown Verisign extension', '06036086480186f845010606' : 'Unknown Verisign extension', '06036086480186f84501070101' : 'Verisign certificatePolicy', '06036086480186f8450107010101' : 'Unknown Verisign policy qualifier', '06036086480186f8450107010102' : 'Unknown Verisign policy qualifier', '0603678105' : 'TCPA', '060367810501' : 'tcpa_specVersion', '060367810502' : 'tcpa_attribute', '06036781050201' : 'tcpa_at_tpmManufacturer', '0603678105020a' : 'tcpa_at_securityQualities', '0603678105020b' : 'tcpa_at_tpmProtectionProfile', '0603678105020c' : 'tcpa_at_tpmSecurityTarget', '0603678105020d' : 'tcpa_at_foundationProtectionProfile', '0603678105020e' : 'tcpa_at_foundationSecurityTarget', '0603678105020f' : 'tcpa_at_tpmIdLabel', '06036781050202' : 'tcpa_at_tpmModel', '06036781050203' : 'tcpa_at_tpmVersion', '06036781050204' : 'tcpa_at_platformManufacturer', '06036781050205' : 'tcpa_at_platformModel', '06036781050206' : 'tcpa_at_platformVersion', '06036781050207' : 'tcpa_at_componentManufacturer', '06036781050208' : 'tcpa_at_componentModel', '06036781050209' : 'tcpa_at_componentVersion', '060367810503' : 'tcpa_protocol', '06036781050301' : 'tcpa_prtt_tpmIdProtocol', '0603672a00' : 'contentType', '0603672a0000' : 'PANData', '0603672a0001' : 'PANToken', '0603672a0002' : 'PANOnly', '0603672a01' : 'msgExt', '0603672a0a' : 'national', '0603672a0a8140' : 'Japan', '0603672a02' : 'field', '0603672a0200' : 'fullName', '0603672a0201' : 'givenName', '0603672a020a' : 'amount', '0603672a0202' : 'familyName', '0603672a0203' : 'birthFamilyName', '0603672a0204' : 'placeName', '0603672a0205' : 'identificationNumber', '0603672a0206' : 'month', '0603672a0207' : 'date', '0603672a02070b' : 'accountNumber', '0603672a02070c' : 'passPhrase', '0603672a0208' : 'address', '0603672a0209' : 'telephone', '0603672a03' : 'attribute', '0603672a0300' : 'cert', '0603672a030000' : 'rootKeyThumb', '0603672a030001' : 'additionalPolicy', '0603672a04' : 'algorithm', '0603672a05' : 'policy', '0603672a0500' : 'root', '0603672a06' : 'module', '0603672a07' : 'certExt', '0603672a0700' : 'hashedRootKey', '0603672a0701' : 'certificateType', '0603672a0702' : 'merchantData', '0603672a0703' : 'cardCertRequired', '0603672a0704' : 'tunneling', '0603672a0705' : 'setExtensions', '0603672a0706' : 'setQualifier', '0603672a08' : 'brand', '0603672a0801' : 'IATA-ATA', '0603672a081e' : 'Diners', '0603672a0822' : 'AmericanExpress', '0603672a0804' : 'VISA', '0603672a0805' : 'MasterCard', '0603672a08ae7b' : 'Novus', '0603672a09' : 'vendor', '0603672a0900' : 'GlobeSet', '0603672a0901' : 'IBM', '0603672a090a' : 'Griffin', '0603672a090b' : 'Certicom', '0603672a090c' : 'OSS', '0603672a090d' : 'TenthMountain', '0603672a090e' : 'Antares', '0603672a090f' : 'ECC', '0603672a0910' : 'Maithean', '0603672a0911' : 'Netscape', '0603672a0912' : 'Verisign', '0603672a0913' : 'BlueMoney', '0603672a0902' : 'CyberCash', '0603672a0914' : 'Lacerte', '0603672a0915' : 'Fujitsu', '0603672a0916' : 'eLab', '0603672a0917' : 'Entrust', '0603672a0918' : 'VIAnet', '0603672a0919' : 'III', '0603672a091a' : 'OpenMarket', '0603672a091b' : 'Lexem', '0603672a091c' : 'Intertrader', '0603672a091d' : 'Persimmon', '0603672a0903' : 'Terisa', '0603672a091e' : 'NABLE', '0603672a091f' : 'espace-net', '0603672a0920' : 'Hitachi', '0603672a0921' : 'Microsoft', '0603672a0922' : 'NEC', '0603672a0923' : 'Mitsubishi', '0603672a0924' : 'NCR', '0603672a0925' : 'e-COMM', '0603672a0926' : 'Gemplus', '0603672a0904' : 'RSADSI', '0603672a0905' : 'VeriFone', '0603672a0906' : 'TrinTech', '0603672a0907' : 'BankGate', '0603672a0908' : 'GTE', '0603672a0909' : 'CompuSource', '0603551d01' : 'authorityKeyIdentifier', '0603551d0a' : 'basicConstraints', '0603551d0b' : 'nameConstraints', '0603551d0c' : 'policyConstraints', '0603551d0d' : 'basicConstraints', '0603551d0e' : 'subjectKeyIdentifier', '0603551d0f' : 'keyUsage', '0603551d10' : 'privateKeyUsagePeriod', '0603551d11' : 'subjectAltName', '0603551d12' : 'issuerAltName', '0603551d13' : 'basicConstraints', '0603551d02' : 'keyAttributes', '0603551d14' : 'cRLNumber', '0603551d15' : 'cRLReason', '0603551d16' : 'expirationDate', '0603551d17' : 'instructionCode', '0603551d18' : 'invalidityDate', '0603551d1a' : 'issuingDistributionPoint', '0603551d1b' : 'deltaCRLIndicator', '0603551d1c' : 'issuingDistributionPoint', '0603551d1d' : 'certificateIssuer', '0603551d03' : 'certificatePolicies', '0603551d1e' : 'nameConstraints', '0603551d1f' : 'cRLDistributionPoints', '0603551d20' : 'certificatePolicies', '0603551d21' : 'policyMappings', '0603551d22' : 'policyConstraints', '0603551d23' : 'authorityKeyIdentifier', '0603551d24' : 'policyConstraints', '0603551d25' : 'extKeyUsage', '0603551d04' : 'keyUsageRestriction', '0603551d05' : 'policyMapping', '0603551d06' : 'subtreesConstraint', '0603551d07' : 'subjectAltName', '0603551d08' : 'issuerAltName', '0603551d09' : 'subjectDirectoryAttributes', '0603550400' : 'objectClass', '0603550401' : 'aliasObjectName', // '060355040c' : 'title', '060355040d' : 'description', '060355040e' : 'searchGuide', '060355040f' : 'businessCategory', '0603550410' : 'postalAddress', '0603550411' : 'postalCode', '0603550412' : 'postOfficeBox', '0603550413' : 'physicalDeliveryOfficeName', '0603550402' : 'knowledgeInformation', // '0603550414' : 'telephoneNumber', '0603550415' : 'telexNumber', '0603550416' : 'teletexTerminalIdentifier', '0603550417' : 'facsimileTelephoneNumber', '0603550418' : 'x121Address', '0603550419' : 'internationalISDNNumber', '060355041a' : 'registeredAddress', '060355041b' : 'destinationIndicator', '060355041c' : 'preferredDeliveryMehtod', '060355041d' : 'presentationAddress', '060355041e' : 'supportedApplicationContext', '060355041f' : 'member', '0603550420' : 'owner', '0603550421' : 'roleOccupant', '0603550422' : 'seeAlso', '0603550423' : 'userPassword', '0603550424' : 'userCertificate', '0603550425' : 'caCertificate', '0603550426' : 'authorityRevocationList', '0603550427' : 'certificateRevocationList', '0603550428' : 'crossCertificatePair', '0603550429' : 'givenName', // '060355042a' : 'givenName', '0603550405' : 'serialNumber', '0603550434' : 'supportedAlgorithms', '0603550435' : 'deltaRevocationList', '060355043a' : 'crossCertificatePair', // '0603550409' : 'streetAddress', '06035508' : 'X.500-Algorithms', '0603550801' : 'X.500-Alg-Encryption', '060355080101' : 'rsa', '0603604c0101' : 'DPC' }; × Search results Close "},"operations_Punycode.js.html":{"id":"operations_Punycode.js.html","title":"Source: operations/Punycode.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Punycode.js /* globals punycode */ /** * Punycode operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Punycode = { /** * @constant * @default */ IDN: false, /** * To Punycode operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_to_ascii: function(input, args) { var idn = args[0]; if (idn) { return punycode.ToASCII(input); } else { return punycode.encode(input); } }, /** * From Punycode operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_to_unicode: function(input, args) { var idn = args[0]; if (idn) { return punycode.ToUnicode(input); } else { return punycode.decode(input); } }, }; × Search results Close "},"operations_QuotedPrintable.js.html":{"id":"operations_QuotedPrintable.js.html","title":"Source: operations/QuotedPrintable.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/QuotedPrintable.js /** @license ======================================================================== mimelib: http://github.com/andris9/mimelib Copyright (c) 2011-2012 Andris Reinman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /** * Quoted Printable operations. * Some parts taken from mimelib (http://github.com/andris9/mimelib) * * @author Andris Reinman * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var QuotedPrintable = { /** * To Quoted Printable operation. * * @param {byte_array} input * @param {Object[]} args * @returns {string} */ run_to: function (input, args) { var mimeEncodedStr = QuotedPrintable.mimeEncode(input); // fix line breaks mimeEncodedStr = mimeEncodedStr.replace(/\\r?\\n|\\r/g, function() { return "\\r\\n"; }).replace(/[\\t ]+$/gm, function(spaces) { return spaces.replace(/ /g, "=20").replace(/\\t/g, "=09"); }); return QuotedPrintable._addSoftLinebreaks(mimeEncodedStr, "qp"); }, /** * From Quoted Printable operation. * * @param {string} input * @param {Object[]} args * @returns {byte_array} */ run_from: function (input, args) { var str = input.replace(/\\=(?:\\r?\\n|$)/g, ""); return QuotedPrintable.mimeDecode(str); }, /** * Decodes mime-encoded data. * * @param {string} str * @returns {byte_array} */ mimeDecode: function(str) { var encodedBytesCount = (str.match(/\\=[\\da-fA-F]{2}/g) || []).length, bufferLength = str.length - encodedBytesCount * 2, chr, hex, buffer = new Array(bufferLength), bufferPos = 0; for (var i = 0, len = str.length; i < len; i++) { chr = str.charAt(i); if (chr == "=" && (hex = str.substr(i + 1, 2)) && /[\\da-fA-F]{2}/.test(hex)) { buffer[bufferPos++] = parseInt(hex, 16); i += 2; continue; } buffer[bufferPos++] = chr.charCodeAt(0); } return buffer; }, /** * Encodes mime data. * * @param {byte_array} buffer * @returns {string} */ mimeEncode: function(buffer) { var ranges = [ [0x09], [0x0A], [0x0D], [0x20], [0x21], [0x23, 0x3C], [0x3E], [0x40, 0x5E], [0x60, 0x7E] ], result = ""; for (var i = 0, len = buffer.length; i < len; i++) { if (this._checkRanges(buffer[i], ranges)) { result += String.fromCharCode(buffer[i]); continue; } result += "=" + (buffer[i] < 0x10 ? "0" : "") + buffer[i].toString(16).toUpperCase(); } return result; }, /** * Checks if a given number falls within a given set of ranges. * * @private * @param {number} nr * @param {byte_array[]} ranges * @returns {bolean} */ _checkRanges: function(nr, ranges) { for (var i = ranges.length - 1; i >= 0; i--) { if (!ranges[i].length) continue; if (ranges[i].length == 1 && nr == ranges[i][0]) return true; if (ranges[i].length == 2 && nr >= ranges[i][0] && nr <= ranges[i][1]) return true; } return false; }, /** * Adds soft line breaks to a string. * Lines can't be longer that 76 + <CR><LF> = 78 bytes * http://tools.ietf.org/html/rfc2045#section-6.7 * * @private * @param {string} str * @param {string} encoding * @returns {string} */ _addSoftLinebreaks: function(str, encoding) { var lineLengthMax = 76; encoding = (encoding || "base64").toString().toLowerCase().trim(); if (encoding == "qp") { return this._addQPSoftLinebreaks(str, lineLengthMax); } else { return this._addBase64SoftLinebreaks(str, lineLengthMax); } }, /** * Adds soft line breaks to a base64 string. * * @private * @param {string} base64EncodedStr * @param {number} lineLengthMax * @returns {string} */ _addBase64SoftLinebreaks: function(base64EncodedStr, lineLengthMax) { base64EncodedStr = (base64EncodedStr || "").toString().trim(); return base64EncodedStr.replace(new RegExp(".{" + lineLengthMax + "}", "g"), "$&\\r\\n").trim(); }, /** * Adds soft line breaks to a quoted printable string. * * @private * @param {string} mimeEncodedStr * @param {number} lineLengthMax * @returns {string} */ _addQPSoftLinebreaks: function(mimeEncodedStr, lineLengthMax) { var pos = 0, len = mimeEncodedStr.length, match, code, line, lineMargin = Math.floor(lineLengthMax / 3), result = ""; // insert soft linebreaks where needed while (pos < len) { line = mimeEncodedStr.substr(pos, lineLengthMax); if ((match = line.match(/\\r\\n/))) { line = line.substr(0, match.index + match[0].length); result += line; pos += line.length; continue; } if (line.substr(-1) == "\\n") { // nothing to change here result += line; pos += line.length; continue; } else if ((match = line.substr(-lineMargin).match(/\\n.*?$/))) { // truncate to nearest line break line = line.substr(0, line.length - (match[0].length - 1)); result += line; pos += line.length; continue; } else if (line.length > lineLengthMax - lineMargin && (match = line.substr(-lineMargin).match(/[ \\t\\.,!\\?][^ \\t\\.,!\\?]*$/))) { // truncate to nearest space line = line.substr(0, line.length - (match[0].length - 1)); } else if (line.substr(-1) == "\\r") { line = line.substr(0, line.length - 1); } else { if (line.match(/\\=[\\da-f]{0,2}$/i)) { // push incomplete encoding sequences to the next line if ((match = line.match(/\\=[\\da-f]{0,1}$/i))) { line = line.substr(0, line.length - match[0].length); } // ensure that utf-8 sequences are not split while (line.length > 3 && line.length < len - pos && !line.match(/^(?:=[\\da-f]{2}){1,4}$/i) && (match = line.match(/\\=[\\da-f]{2}$/ig))) { code = parseInt(match[0].substr(1, 2), 16); if (code < 128) { break; } line = line.substr(0, line.length - 3); if (code >= 0xC0) { break; } } } } if (pos + line.length < len && line.substr(-1) != "\\n") { if (line.length == 76 && line.match(/\\=[\\da-f]{2}$/i)) { line = line.substr(0, line.length - 3); } else if (line.length == 76) { line = line.substr(0, line.length - 1); } pos += line.length; line += "=\\r\\n"; } else { pos += line.length; } result += line; } return result; }, }; × Search results Close "},"operations_Rotate.js.html":{"id":"operations_Rotate.js.html","title":"Source: operations/Rotate.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Rotate.js /** * Bit rotation operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace * * @todo Support for UTF16 */ var Rotate = { /** * @constant * @default */ ROTATE_AMOUNT: 1, /** * @constant * @default */ ROTATE_WHOLE: false, /** * Runs rotation operations across the input data. * * @private * @param {byte_array} data * @param {number} amount * @param {function} algo - The rotation operation to carry out * @returns {byte_array} */ _rot: function(data, amount, algo) { var result = []; for (var i = 0; i < data.length; i++) { var b = data[i]; for (var j = 0; j < amount; j++) { b = algo(b); } result.push(b); } return result; }, /** * Rotate right operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_rotr: function(input, args) { if (args[1]) { return Rotate._rotr_whole(input, args[0]); } else { return Rotate._rot(input, args[0], Rotate._rotr); } }, /** * Rotate left operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_rotl: function(input, args) { if (args[1]) { return Rotate._rotl_whole(input, args[0]); } else { return Rotate._rot(input, args[0], Rotate._rotl); } }, /** * @constant * @default */ ROT13_AMOUNT: 13, /** * @constant * @default */ ROT13_LOWERCASE: true, /** * @constant * @default */ ROT13_UPPERCASE: true, /** * ROT13 operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_rot13: function(input, args) { var amount = args[2], output = input, chr, rot13_lowercase = args[0], rot13_upperacse = args[1]; if (amount) { if (amount < 0) { amount = 26 - (Math.abs(amount) % 26); } for (var i = 0; i < input.length; i++) { chr = input[i]; if (rot13_upperacse && chr >= 65 && chr <= 90) { // Upper case chr = (chr - 65 + amount) % 26; output[i] = chr + 65; } else if (rot13_lowercase && chr >= 97 && chr <= 122) { // Lower case chr = (chr - 97 + amount) % 26; output[i] = chr + 97; } } } return output; }, /** * Rotate right bitwise op. * * @private * @param {byte} b * @returns {byte} */ _rotr: function(b) { var bit = (b & 1) << 7; return (b >> 1) | bit; }, /** * Rotate left bitwise op. * * @private * @param {byte} b * @returns {byte} */ _rotl: function(b) { var bit = (b >> 7) & 1; return ((b << 1) | bit) & 0xFF; }, /** * Rotates a byte array to the right by a specific amount as a whole, so that bits are wrapped * from the end of the array to the beginning. * * @private * @param {byte_array} data * @param {number} amount * @returns {byte_array} */ _rotr_whole: function(data, amount) { var carry_bits = 0, new_byte, result = []; amount = amount % 8; for (var i = 0; i < data.length; i++) { var old_byte = data[i] >>> 0; new_byte = (old_byte >> amount) | carry_bits; carry_bits = (old_byte & (Math.pow(2, amount)-1)) << (8-amount); result.push(new_byte); } result[0] |= carry_bits; return result; }, /** * Rotates a byte array to the left by a specific amount as a whole, so that bits are wrapped * from the beginning of the array to the end. * * @private * @param {byte_array} data * @param {number} amount * @returns {byte_array} */ _rotl_whole: function(data, amount) { var carry_bits = 0, new_byte, result = []; amount = amount % 8; for (var i = data.length-1; i >= 0; i--) { var old_byte = data[i]; new_byte = ((old_byte << amount) | carry_bits) & 0xFF; carry_bits = (old_byte >> (8-amount)) & (Math.pow(2, amount)-1); result[i] = (new_byte); } result[data.length-1] = result[data.length-1] | carry_bits; return result; }, }; × Search results Close "},"operations_SeqUtils.js.html":{"id":"operations_SeqUtils.js.html","title":"Source: operations/SeqUtils.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/SeqUtils.js /** * Sequence utility operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var SeqUtils = { /** * @constant * @default */ DELIMITER_OPTIONS: ["Line feed", "CRLF", "Space", "Comma", "Semi-colon", "Colon", "Nothing (separate chars)"], /** * @constant * @default */ SORT_REVERSE: false, /** * @constant * @default */ SORT_ORDER: ["Alphabetical (case sensitive)", "Alphabetical (case insensitive)", "IP address"], /** * Sort operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_sort: function (input, args) { var delim = Utils.char_rep[args[0]], sort_reverse = args[1], order = args[2], sorted = input.split(delim); if (order == "Alphabetical (case sensitive)") { sorted = sorted.sort(); } else if (order == "Alphabetical (case insensitive)") { sorted = sorted.sort(SeqUtils._case_insensitive_sort); } else if (order == "IP address") { sorted = sorted.sort(SeqUtils._ip_sort); } if (sort_reverse) sorted.reverse(); return sorted.join(delim); }, /** * Unique operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_unique: function (input, args) { var delim = Utils.char_rep[args[0]]; return input.split(delim).unique().join(delim); }, /** * @constant * @default */ SEARCH_TYPE: ["Regex", "Extended (\\\\n, \\\\t, \\\\x...)", "Simple string"], /** * Count occurrences operation. * * @param {string} input * @param {Object[]} args * @returns {number} */ run_count: function(input, args) { var search = args[0].string, type = args[0].option; if (type == "Regex" && search) { try { var regex = new RegExp(search, "gi"), matches = input.match(regex); return matches.length; } catch(err) { return 0; } } else if (search) { if (type.indexOf("Extended") === 0) { search = Utils.parse_escaped_chars(search); } return input.count(search); } else { return 0; } }, /** * @constant * @default */ REVERSE_BY: ["Character", "Line"], /** * Reverse operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_reverse: function (input, args) { if (args[0] == "Line") { var lines = [], line = [], result = []; for (var i = 0; i < input.length; i++) { if (input[i] == 0x0a) { lines.push(line); line = []; } else { line.push(input[i]); } } lines.push(line); lines.reverse(); for (i = 0; i < lines.length; i++) { result = result.concat(lines[i]); result.push(0x0a); } return result.slice(0, input.length); } else { return input.reverse(); } }, /** * Add line numbers operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_add_line_numbers: function(input, args) { var lines = input.split("\\n"), output = "", width = lines.length.toString().length; for (var n = 0; n < lines.length; n++) { output += Utils.pad((n+1).toString(), width, " ") + " " + lines[n] + "\\n"; } return output.slice(0, output.length-1); }, /** * Remove line numbers operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_remove_line_numbers: function(input, args) { return input.replace(/^[ \\t]{0,5}\\d+[\\s:|\\-,.)\\]]/gm, ""); }, /** * Expand alphabet range operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_expand_alph_range: function(input, args) { return Utils.expand_alph_range(input).join(args[0]); }, /** * Comparison operation for sorting of strings ignoring case. * * @private * @param {string} a * @param {string} b * @returns {number} */ _case_insensitive_sort: function(a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }, /** * Comparison operation for sorting of IPv4 addresses. * * @private * @param {string} a * @param {string} b * @returns {number} */ _ip_sort: function(a, b) { var a_ = a.split("."), b_ = b.split("."); a_ = a_[0] * 0x1000000 + a_[1] * 0x10000 + a_[2] * 0x100 + a_[3] * 1; b_ = b_[0] * 0x1000000 + b_[1] * 0x10000 + b_[2] * 0x100 + b_[3] * 1; if (isNaN(a_) && !isNaN(b_)) return 1; if (!isNaN(a_) && isNaN(b_)) return -1; if (isNaN(a_) && isNaN(b_)) return a.localeCompare(b); return a_ - b_; }, }; × Search results Close "},"operations_StrUtils.js.html":{"id":"operations_StrUtils.js.html","title":"Source: operations/StrUtils.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/StrUtils.js /* globals JsDiff */ /** * String utility operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var StrUtils = { /** * @constant * @default */ REGEX_PRE_POPULATE: [ { name: "User defined", value: "" }, { name: "IPv4 address", value: "(?:(?:\\\\d|[01]?\\\\d\\\\d|2[0-4]\\\\d|25[0-5])\\\\.){3}(?:25[0-5]|2[0-4]\\\\d|[01]?\\\\d\\\\d|\\\\d)(?:\\\\/\\\\d{1,2})?" }, { name: "IPv6 address", value: "((?=.*::)(?!.*::.+::)(::)?([\\\\dA-Fa-f]{1,4}:(:|\\\\b)|){5}|([\\\\dA-Fa-f]{1,4}:){6})((([\\\\dA-Fa-f]{1,4}((?!\\\\3)::|:\\\\b|(?![\\\\dA-Fa-f])))|(?!\\\\2\\\\3)){2}|(((2[0-4]|1\\\\d|[1-9])?\\\\d|25[0-5])\\\\.?\\\\b){4})" }, { name: "Email address", value: "(\\\\w[-.\\\\w]*)@([-\\\\w]+(?:\\\\.[-\\\\w]+)*)\\\\.([A-Za-z]{2,4})" }, { name: "URL", value: "([A-Za-z]+://)([-\\\\w]+(?:\\\\.\\\\w[-\\\\w]*)+)(:\\\\d+)?(/[^.!,?;\\"\\\\x27<>()\\\\[\\\\]{}\\\\s\\\\x7F-\\\\xFF]*(?:[.!,?]+[^.!,?;\\"\\\\x27<>()\\\\[\\\\]{}\\\\s\\\\x7F-\\\\xFF]+)*)?" }, { name: "Domain", value: "(?:(https?):\\\\/\\\\/)?([-\\\\w.]+)\\\\.(com|net|org|biz|info|co|uk|onion|int|mobi|name|edu|gov|mil|eu|ac|ae|af|de|ca|ch|cn|cy|es|gb|hk|il|in|io|tv|me|nl|no|nz|ro|ru|tr|us|az|ir|kz|uz|pk)+" }, { name: "Windows file path", value: "([A-Za-z]):\\\\\\\\((?:[A-Za-z\\\\d][A-Za-z\\\\d\\\\- \\\\x27_\\\\(\\\\)]{0,61}\\\\\\\\?)*[A-Za-z\\\\d][A-Za-z\\\\d\\\\- \\\\x27_\\\\(\\\\)]{0,61})(\\\\.[A-Za-z\\\\d]{1,6})?" }, { name: "UNIX file path", value: "(?:/[A-Za-z\\\\d.][A-Za-z\\\\d\\\\-.]{0,61})+" }, { name: "MAC address", value: "[A-Fa-f\\\\d]{2}(?:[:-][A-Fa-f\\\\d]{2}){5}" }, { name: "Date (yyyy-mm-dd)", value: "((?:19|20)\\\\d\\\\d)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])" }, { name: "Date (dd/mm/yyyy)", value: "(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((?:19|20)\\\\d\\\\d)" }, { name: "Date (mm/dd/yyyy)", value: "(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]((?:19|20)\\\\d\\\\d)" }, { name: "Strings", value: "[A-Za-z\\\\d/\\\\-:.,_$%\\\\x27\\"()<>= !\\\\[\\\\]{}@]{4,}" }, ], /** * @constant * @default */ REGEX_CASE_INSENSITIVE: true, /** * @constant * @default */ REGEX_MULTILINE_MATCHING: true, /** * @constant * @default */ OUTPUT_FORMAT: ["Highlight matches", "List matches", "List capture groups", "List matches with capture groups"], /** * @constant * @default */ DISPLAY_TOTAL: false, /** * Regular expression operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_regex: function(input, args) { var user_regex = args[1], i = args[2], m = args[3], display_total = args[4], output_format = args[5], modifiers = "g"; if (i) modifiers += "i"; if (m) modifiers += "m"; if (user_regex && user_regex != "^" && user_regex != "$") { try { var regex = new RegExp(user_regex, modifiers); switch (output_format) { case "Highlight matches": return StrUtils._regex_highlight(input, regex, display_total); case "List matches": return Utils.escape_html(StrUtils._regex_list(input, regex, display_total, true, false)); case "List capture groups": return Utils.escape_html(StrUtils._regex_list(input, regex, display_total, false, true)); case "List matches with capture groups": return Utils.escape_html(StrUtils._regex_list(input, regex, display_total, true, true)); default: return "Error: Invalid output format"; } } catch (err) { return "Invalid regex. Details: " + err.message; } } else { return Utils.escape_html(input); } }, /** * @constant * @default */ CASE_SCOPE: ["All", "Word", "Sentence", "Paragraph"], /** * To Upper case operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_upper: function (input, args) { var scope = args[0]; switch (scope) { case "Word": return input.replace(/(\\b\\w)/gi, function(m) { return m.toUpperCase(); }); case "Sentence": return input.replace(/(?:\\.|^)\\s*(\\b\\w)/gi, function(m) { return m.toUpperCase(); }); case "Paragraph": return input.replace(/(?:\\n|^)\\s*(\\b\\w)/gi, function(m) { return m.toUpperCase(); }); case "All": /* falls through */ default: return input.toUpperCase(); } }, /** * To Upper case operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_lower: function (input, args) { return input.toLowerCase(); }, /** * @constant * @default */ SEARCH_TYPE: ["Regex", "Extended (\\\\n, \\\\t, \\\\x...)", "Simple string"], /** * @constant * @default */ FIND_REPLACE_GLOBAL : true, /** * @constant * @default */ FIND_REPLACE_CASE : false, /** * @constant * @default */ FIND_REPLACE_MULTILINE : true, /** * Find / Replace operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_find_replace: function(input, args) { var find = args[0].string, type = args[0].option, replace = args[1], g = args[2], i = args[3], m = args[4], modifiers = ""; if (g) modifiers += "g"; if (i) modifiers += "i"; if (m) modifiers += "m"; if (type == "Regex") { find = new RegExp(find, modifiers); } else if (type.indexOf("Extended") === 0) { find = Utils.parse_escaped_chars(find); } return input.replace(find, replace, modifiers); // Non-standard addition of flags in the third argument. This will work in Firefox but // probably nowhere else. The purpose is to allow global matching when the `find` parameter // is just a string. }, /** * @constant * @default */ SPLIT_DELIM: ",", /** * @constant * @default */ DELIMITER_OPTIONS: ["Line feed", "CRLF", "Space", "Comma", "Semi-colon", "Colon", "Nothing (separate chars)"], /** * Split operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_split: function(input, args) { var split_delim = args[0] || StrUtils.SPLIT_DELIM, join_delim = Utils.char_rep[args[1]], sections = input.split(split_delim); return sections.join(join_delim); }, /** * @constant * @default */ DIFF_SAMPLE_DELIMITER: "\\\\n\\\\n", /** * @constant * @default */ DIFF_BY: ["Character", "Word", "Line", "Sentence", "CSS", "JSON"], /** * Diff operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_diff: function(input, args) { var sample_delim = args[0], diff_by = args[1], show_added = args[2], show_removed = args[3], ignore_whitespace = args[4], samples = input.split(sample_delim), output = "", diff; if (!samples || samples.length != 2) { return "Incorrect number of samples, perhaps you need to modify the sample delimiter or add more samples?"; } switch (diff_by) { case "Character": diff = JsDiff.diffChars(samples[0], samples[1]); break; case "Word": if (ignore_whitespace) { diff = JsDiff.diffWords(samples[0], samples[1]); } else { diff = JsDiff.diffWordsWithSpace(samples[0], samples[1]); } break; case "Line": if (ignore_whitespace) { diff = JsDiff.diffTrimmedLines(samples[0], samples[1]); } else { diff = JsDiff.diffLines(samples[0], samples[1]); } break; case "Sentence": diff = JsDiff.diffSentences(samples[0], samples[1]); break; case "CSS": diff = JsDiff.diffCss(samples[0], samples[1]); break; case "JSON": diff = JsDiff.diffJson(samples[0], samples[1]); break; default: return "Invalid 'Diff by' option."; } for (var i = 0; i < diff.length; i++) { if (diff[i].added) { if (show_added) output += "<span class='hlgreen'>" + Utils.escape_html(diff[i].value) + "</span>"; } else if (diff[i].removed) { if (show_removed) output += "<span class='hlred'>" + Utils.escape_html(diff[i].value) + "</span>"; } else { output += Utils.escape_html(diff[i].value); } } return output; }, /** * @constant * @default */ OFF_CHK_SAMPLE_DELIMITER: "\\\\n\\\\n", /** * Offset checker operation. * * @param {string} input * @param {Object[]} args * @returns {html} */ run_offset_checker: function(input, args) { var sample_delim = args[0], samples = input.split(sample_delim), outputs = [], i = 0, s = 0, match = false, in_match = false, chr; if (!samples || samples.length < 2) { return "Not enough samples, perhaps you need to modify the sample delimiter or add more data?"; } // Initialise output strings for (s = 0; s < samples.length; s++) { outputs[s] = ""; } // Loop through each character in the first sample for (i = 0; i < samples[0].length; i++) { chr = samples[0][i]; match = false; // Loop through each sample to see if the chars are the same for (s = 1; s < samples.length; s++) { if (samples[s][i] != chr) { match = false; break; } match = true; } // Write output for each sample for (s = 0; s < samples.length; s++) { if (samples[s].length <= i) { if (in_match) outputs[s] += "</span>"; if (s == samples.length - 1) in_match = false; continue; } if (match && !in_match) { outputs[s] += "<span class='hlgreen'>" + Utils.escape_html(samples[s][i]); if (samples[s].length == i + 1) outputs[s] += "</span>"; if (s == samples.length - 1) in_match = true; } else if (!match && in_match) { outputs[s] += "</span>" + Utils.escape_html(samples[s][i]); if (s == samples.length - 1) in_match = false; } else { outputs[s] += Utils.escape_html(samples[s][i]); if (in_match && samples[s].length == i + 1) { outputs[s] += "</span>"; if (samples[s].length - 1 != i) in_match = false; } } if (samples[0].length - 1 == i) { if (in_match) outputs[s] += "</span>"; outputs[s] += Utils.escape_html(samples[s].substring(i + 1)); } } } return outputs.join(sample_delim); }, /** * Parse escaped string operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse_escaped_string: function(input, args) { return Utils.parse_escaped_chars(input); }, /** * Adds HTML highlights to matches within a string. * * @private * @param {string} input * @param {RegExp} regex * @param {boolean} display_total * @returns {string} */ _regex_highlight: function(input, regex, display_total) { var output = "", m, hl = 1, i = 0, total = 0; while (!!(m = regex.exec(input))) { // Add up to match output += Utils.escape_html(input.slice(i, m.index)); // Add match with highlighting output += "<span class='hl"+hl+"'>" + Utils.escape_html(m[0]) + "</span>"; // Switch highlight hl = hl == 1 ? 2 : 1; i = regex.lastIndex; total++; } // Add all after final match output += Utils.escape_html(input.slice(i, input.length)); if (display_total) output = "Total found: " + total + "\\n\\n" + output; return output; }, /** * Creates a string listing the matches within a string. * * @private * @param {string} input * @param {RegExp} regex * @param {boolean} display_total * @param {boolean} matches - Display full match * @param {boolean} capture_groups - Display each of the capture groups separately * @returns {string} */ _regex_list: function(input, regex, display_total, matches, capture_groups) { var output = "", total = 0, match; while (!!(match = regex.exec(input))) { total++; if (matches) { output += match[0] + "\\n"; } if (capture_groups) { for (var i = 1; i < match.length; i++) { if (matches) { output += " Group " + i + ": "; } output += match[i] + "\\n"; } } } if (display_total) output = "Total found: " + total + "\\n\\n" + output; return output; }, }; × Search results Close "},"operations_Tidy.js.html":{"id":"operations_Tidy.js.html","title":"Source: operations/Tidy.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Tidy.js /** * Tidy operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Tidy = { /** * @constant * @default */ REMOVE_SPACES : true, /** * @constant * @default */ REMOVE_CARIAGE_RETURNS : true, /** * @constant * @default */ REMOVE_LINE_FEEDS : true, /** * @constant * @default */ REMOVE_TABS : true, /** * @constant * @default */ REMOVE_FORM_FEEDS : true, /** * @constant * @default */ REMOVE_FULL_STOPS : false, /** * Remove whitespace operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_remove_whitespace: function (input, args) { var remove_spaces = args[0], remove_cariage_returns = args[1], remove_line_feeds = args[2], remove_tabs = args[3], remove_form_feeds = args[4], remove_full_stops = args[5], data = input; if (remove_spaces) data = data.replace(/ /g, ""); if (remove_cariage_returns) data = data.replace(/\\r/g, ""); if (remove_line_feeds) data = data.replace(/\\n/g, ""); if (remove_tabs) data = data.replace(/\\t/g, ""); if (remove_form_feeds) data = data.replace(/\\f/g, ""); if (remove_full_stops) data = data.replace(/\\./g, ""); return data; }, /** * Remove null bytes operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_remove_nulls: function (input, args) { var output = []; for (var i = 0; i < input.length; i++) { if (input[i] !== 0) output.push(input[i]); } return output; }, /** * @constant * @default */ APPLY_TO_EACH_LINE : false, /** * @constant * @default */ DROP_START : 0, /** * @constant * @default */ DROP_LENGTH : 5, /** * Drop bytes operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_drop_bytes: function(input, args) { var start = args[0], length = args[1], apply_to_each_line = args[2]; if (start < 0 || length < 0) throw "Error: Invalid value"; if (!apply_to_each_line) return input.slice(0, start).concat(input.slice(start+length, input.length)); // Split input into lines var lines = [], line = []; for (var i = 0; i < input.length; i++) { if (input[i] == 0x0a) { lines.push(line); line = []; } else { line.push(input[i]); } } lines.push(line); var output = []; for (i = 0; i < lines.length; i++) { output = output.concat(lines[i].slice(0, start).concat(lines[i].slice(start+length, lines[i].length))); output.push(0x0a); } return output.slice(0, output.length-1); }, /** * @constant * @default */ TAKE_START: 0, /** * @constant * @default */ TAKE_LENGTH: 5, /** * Take bytes operation. * * @param {byte_array} input * @param {Object[]} args * @returns {byte_array} */ run_take_bytes: function(input, args) { var start = args[0], length = args[1], apply_to_each_line = args[2]; if (start < 0 || length < 0) throw "Error: Invalid value"; if (!apply_to_each_line) return input.slice(start, start+length); // Split input into lines var lines = [], line = []; for (var i = 0; i < input.length; i++) { if (input[i] == 0x0a) { lines.push(line); line = []; } else { line.push(input[i]); } } lines.push(line); var output = []; for (i = 0; i < lines.length; i++) { output = output.concat(lines[i].slice(start, start+length)); output.push(0x0a); } return output.slice(0, output.length-1); }, /** * @constant * @default */ PAD_POSITION : ["Start", "End"], /** * @constant * @default */ PAD_LENGTH : 5, /** * @constant * @default */ PAD_CHAR : " ", /** * Pad lines operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_pad: function(input, args) { var position = args[0], len = args[1], chr = args[2], lines = input.split("\\n"), output = "", i = 0; if (position == "Start") { for (i = 0; i < lines.length; i++) { output += Utils.pad_left(lines[i], lines[i].length+len, chr) + "\\n"; } } else if (position == "End") { for (i = 0; i < lines.length; i++) { output += Utils.pad_right(lines[i], lines[i].length+len, chr) + "\\n"; } } return output.slice(0, output.length-1); }, }; × Search results Close "},"operations_URL.js.html":{"id":"operations_URL.js.html","title":"Source: operations/URL.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/URL.js /* globals unescape */ /** * URL operations. * Namespace is appended with an underscore to prevent overwriting the global URL object. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var URL_ = { /** * @constant * @default */ ENCODE_ALL: false, /** * URL Encode operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_to: function(input, args) { var encode_all = args[0]; return encode_all ? URL_._encode_all_chars(input) : encodeURI(input); }, /** * URL Decode operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_from: function(input, args) { var data = input.replace(/\\+/g, "%20"); try { return decodeURIComponent(data); } catch(err) { return unescape(data); } }, /** * Parse URI operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_parse: function(input, args) { var a = document.createElement("a"); // Overwrite base href which will be the current CyberChef URL to reduce confusion. a.href = "http://example.com/"; a.href = input; if (a.protocol) { var output = ""; if (a.hostname != window.location.hostname) { output = "Protocol:\\t" + a.protocol + "\\n"; if (a.hostname) output += "Hostname:\\t" + a.hostname + "\\n"; if (a.port) output += "Port:\\t\\t" + a.port + "\\n"; } if (a.pathname) { var pathname = a.pathname; if (pathname.indexOf(window.location.pathname) === 0) pathname = pathname.replace(window.location.pathname, ""); if (pathname) output += "Path name:\\t" + pathname + "\\n"; } if (a.hash) { output += "Hash:\\t\\t" + a.hash + "\\n"; } if (a.search) { output += "Arguments:\\n"; var args_ = (a.search.slice(1, a.search.length)).split("&"); var split_args = [], padding = 0; for (var i = 0; i < args_.length; i++) { split_args.push(args_[i].split("=")); padding = (split_args[i][0].length > padding) ? split_args[i][0].length : padding; } for (i = 0; i < split_args.length; i++) { output += "\\t" + Utils.pad_right(split_args[i][0], padding); if (split_args[i].length > 1 && split_args[i][1].length) output += " = " + split_args[i][1] + "\\n"; else output += "\\n"; } } return output; } return "Invalid URI"; }, /** * URL encodes additional special characters beyond the standard set. * * @private * @param {string} str * @returns {string} */ _encode_all_chars: function(str) { //TODO Do this programatically return encodeURIComponent(str) .replace(/!/g, "%21") .replace(/#/g, "%23") .replace(/'/g, "%27") .replace(/\\(/g, "%28") .replace(/\\)/g, "%29") .replace(/\\*/g, "%2A") .replace(/\\-/g, "%2D") .replace(/\\./g, "%2E") .replace(/_/g, "%5F") .replace(/~/g, "%7E"); }, }; × Search results Close "},"operations_UUID.js.html":{"id":"operations_UUID.js.html","title":"Source: operations/UUID.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/UUID.js /** * UUID operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var UUID = { /** * Generate UUID operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_generate_v4: function(input, args) { if (typeof(window.crypto) !== 'undefined' && typeof(window.crypto.getRandomValues) !== 'undefined') { var buf = new Uint32Array(4), i = 0; window.crypto.getRandomValues(buf); return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = (buf[i >> 3] >> ((i % 8) * 4)) & 0xf, v = c === "x" ? r : (r & 0x3 | 0x8); i++; return v.toString(16); }); } else { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c === "x" ? r : (r & 0x3 | 0x8); return v.toString(16); }); } }, }; × Search results Close "},"operations_Unicode.js.html":{"id":"operations_Unicode.js.html","title":"Source: operations/Unicode.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: operations/Unicode.js /** * Unicode operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @namespace */ var Unicode = { /** * @constant * @default */ PREFIXES: ["\\\\u", "%u", "U+"], /** * Unescape Unicode Characters operation. * * @param {string} input * @param {Object[]} args * @returns {string} */ run_unescape: function(input, args) { var prefix = Unicode._prefix_to_regex[args[0]], regex = new RegExp(prefix+"([a-f\\\\d]{4,6})", "ig"), output = "", m, i = 0; while (!!(m = regex.exec(input))) { // Add up to match output += input.slice(i, m.index); i = m.index; // Add match output += Utils.chr(parseInt(m[1], 16)); i = regex.lastIndex; } // Add all after final match output += input.slice(i, input.length); return output; }, /** * Lookup table to add prefixes to unicode delimiters so that they can be used in a regex. * * @private * @constant */ _prefix_to_regex: { "\\\\u": "\\\\\\\\u", "%u": "%u", "U+": "U\\\\+" }, }; × Search results Close "},"views_html_ControlsWaiter.js.html":{"id":"views_html_ControlsWaiter.js.html","title":"Source: views/html/ControlsWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/ControlsWaiter.js /** * Waiter to handle events related to the CyberChef controls (i.e. Bake, Step, Save, Load etc.) * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var ControlsWaiter = function(app, manager) { this.app = app; this.manager = manager; }; /** * Adjusts the display properties of the control buttons so that they fit within the current width * without wrapping or overflowing. */ ControlsWaiter.prototype.adjust_width = function() { var controls = document.getElementById("controls"), step = document.getElementById("step"), clr_breaks = document.getElementById("clr-breaks"), save_img = document.querySelector("#save img"), load_img = document.querySelector("#load img"), step_img = document.querySelector("#step img"), clr_recip_img = document.querySelector("#clr-recipe img"), clr_breaks_img = document.querySelector("#clr-breaks img"); if (controls.clientWidth < 470) { step.childNodes[1].nodeValue = " Step"; } else { step.childNodes[1].nodeValue = " Step through"; } if (controls.clientWidth < 400) { save_img.style.display = "none"; load_img.style.display = "none"; step_img.style.display = "none"; clr_recip_img.style.display = "none"; clr_breaks_img.style.display = "none"; } else { save_img.style.display = "inline"; load_img.style.display = "inline"; step_img.style.display = "inline"; clr_recip_img.style.display = "inline"; clr_breaks_img.style.display = "inline"; } if (controls.clientWidth < 330) { clr_breaks.childNodes[1].nodeValue = " Clear breaks"; } else { clr_breaks.childNodes[1].nodeValue = " Clear breakpoints"; } }; /** * Checks or unchecks the Auto Bake checkbox based on the given value. * * @param {boolean} value - The new value for Auto Bake. */ ControlsWaiter.prototype.set_auto_bake = function(value) { var auto_bake_checkbox = document.getElementById("auto-bake"); if (auto_bake_checkbox.checked != value) { auto_bake_checkbox.click(); } }; /** * Handler to trigger baking. */ ControlsWaiter.prototype.bake_click = function() { this.app.bake(); $("#output-text").selectRange(0); }; /** * Handler for the 'Step through' command. Executes the next step of the recipe. */ ControlsWaiter.prototype.step_click = function() { this.app.bake(true); $("#output-text").selectRange(0); }; /** * Handler for changes made to the Auto Bake checkbox. */ ControlsWaiter.prototype.auto_bake_change = function() { var auto_bake_label = document.getElementById("auto-bake-label"), auto_bake_checkbox = document.getElementById("auto-bake"); this.app.auto_bake_ = auto_bake_checkbox.checked; if (auto_bake_checkbox.checked) { auto_bake_label.classList.remove("btn-default"); auto_bake_label.classList.add("btn-success"); } else { auto_bake_label.classList.remove("btn-success"); auto_bake_label.classList.add("btn-default"); } }; /** * Handler for the 'Clear recipe' command. Removes all operations from the recipe. */ ControlsWaiter.prototype.clear_recipe_click = function() { this.manager.recipe.clear_recipe(); }; /** * Handler for the 'Clear breakpoints' command. Removes all breakpoints from operations in the * recipe. */ ControlsWaiter.prototype.clear_breaks_click = function() { var bps = document.querySelectorAll("#rec_list li.operation .breakpoint"); for (var i = 0; i < bps.length; i++) { bps[i].setAttribute("break", "false"); bps[i].classList.remove("breakpoint-selected"); } }; /** * Populates the save disalog box with a URL incorporating the recipe and input. * * @param {Object[]} [recipe_config] - The recipe configuration object array. */ ControlsWaiter.prototype.initialise_save_link = function(recipe_config) { recipe_config = recipe_config || this.app.get_recipe_config(); var recipe_str = JSON.stringify(recipe_config), input_str = Utils.to_base64(this.app.get_input()), include_recipe = document.getElementById("save-link-recipe-checkbox").checked, include_input = document.getElementById("save-link-input-checkbox").checked, save_link_el = document.getElementById("save-link"), save_link = this.generate_state_url(include_recipe, include_input, recipe_config); save_link_el.innerHTML = Utils.truncate(save_link, 120); save_link_el.setAttribute("href", save_link); }; /** * Generates a URL containing the current recipe and input state. * * @param {boolean} include_recipe - Whether to include the recipe in the URL. * @param {boolean} include_input - Whether to include the input in the URL. * @param {Object[]} [recipe_config] - The recipe configuration object array. * @returns {string} */ ControlsWaiter.prototype.generate_state_url = function(include_recipe, include_input, recipe_config) { recipe_config = recipe_config || this.app.get_recipe_config(); var link = window.location.protocol + "//" + window.location.host + window.location.pathname, recipe_str = JSON.stringify(recipe_config), input_str = Utils.to_base64(this.app.get_input(), "A-Za-z0-9+/"); // B64 alphabet with no padding include_recipe = include_recipe && (recipe_config.length > 0); include_input = include_input && (input_str.length > 0) && (input_str.length < 8000); if (include_recipe) { link += "?recipe=" + encodeURIComponent(recipe_str); } if (include_recipe && include_input) { link += "&input=" + encodeURIComponent(input_str); } else if (include_input) { link += "?input=" + encodeURIComponent(input_str); } return link; }; /** * Handler for changes made to the save dialog text area. Re-initialises the save link. */ ControlsWaiter.prototype.save_text_change = function() { try { var recipe_config = JSON.parse(document.getElementById("save-text").value); this.initialise_save_link(recipe_config); } catch(err) {} }; /** * Handler for the 'Save' command. Pops up the save dialog box. */ ControlsWaiter.prototype.save_click = function() { var recipe_config = this.app.get_recipe_config(); var recipe_str = JSON.stringify(recipe_config).replace(/},{/g, '},\\n{'); document.getElementById("save-text").value = recipe_str; this.initialise_save_link(recipe_config); $("#save-modal").modal(); }; /** * Handler for the save link recipe checkbox change event. */ ControlsWaiter.prototype.slr_check_change = function() { this.initialise_save_link(); }; /** * Handler for the save link input checkbox change event. */ ControlsWaiter.prototype.sli_check_change = function() { this.initialise_save_link(); }; /** * Handler for the 'Load' command. Pops up the load dialog box. */ ControlsWaiter.prototype.load_click = function() { this.populate_load_recipes_list(); $("#load-modal").modal(); }; /** * Saves the recipe specified in the save textarea to local storage. */ ControlsWaiter.prototype.save_button_click = function() { var recipe_name = document.getElementById("save-name").value, recipe_str = document.getElementById("save-text").value; if (!recipe_name) { this.app.alert("Please enter a recipe name", "danger", 2000); return; } var saved_recipes = localStorage.saved_recipes ? JSON.parse(localStorage.saved_recipes) : [], recipe_id = localStorage.recipe_id || 0; saved_recipes.push({ id: ++recipe_id, name: recipe_name, recipe: recipe_str }); localStorage.saved_recipes = JSON.stringify(saved_recipes); localStorage.recipe_id = recipe_id; this.app.alert("Recipe saved as \\"" + recipe_name + "\\".", "success", 2000); }; /** * Populates the list of saved recipes in the load dialog box from local storage. */ ControlsWaiter.prototype.populate_load_recipes_list = function() { var load_name_el = document.getElementById("load-name"); // Remove current recipes from select var i = load_name_el.options.length; while (i--) { load_name_el.remove(i); } // Add recipes to select var saved_recipes = localStorage.saved_recipes ? JSON.parse(localStorage.saved_recipes) : []; for (i = 0; i < saved_recipes.length; i++) { var opt = document.createElement("option"); opt.value = saved_recipes[i].id; opt.innerHTML = saved_recipes[i].name; load_name_el.appendChild(opt); } // Populate textarea with first recipe document.getElementById("load-text").value = saved_recipes.length ? saved_recipes[0].recipe : ""; }; /** * Removes the currently selected recipe from local storage. */ ControlsWaiter.prototype.load_delete_click = function() { var id = document.getElementById("load-name").value, saved_recipes = localStorage.saved_recipes ? JSON.parse(localStorage.saved_recipes) : []; saved_recipes = saved_recipes.filter(function(r) { return r.id != id; }); localStorage.saved_recipes = JSON.stringify(saved_recipes); this.populate_load_recipes_list(); }; /** * Displays the selected recipe in the load text box. */ ControlsWaiter.prototype.load_name_change = function(e) { var el = e.target, saved_recipes = localStorage.saved_recipes ? JSON.parse(localStorage.saved_recipes) : [], id = parseInt(el.value, 10); var recipe = saved_recipes.filter(function(r) { return r.id == id; })[0]; document.getElementById("load-text").value = recipe.recipe; }; /** * Loads the selected recipe and populates the Recipe with its operations. */ ControlsWaiter.prototype.load_button_click = function() { try { var recipe_config = JSON.parse(document.getElementById("load-text").value); this.app.set_recipe_config(recipe_config); $("#rec_list [data-toggle=popover]").popover(); } catch(e) { this.app.alert("Invalid recipe", "danger", 2000); } }; × Search results Close "},"views_html_HTMLApp.js.html":{"id":"views_html_HTMLApp.js.html","title":"Source: views/html/HTMLApp.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/HTMLApp.js /* globals Split */ /** * HTML view for CyberChef responsible for building the web page and dealing with all user * interactions. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {CatConf[]} categories - The list of categories and operations to be populated. * @param {Object.<string, OpConf>} operations - The list of operation configuration objects. * @param {String[]} default_favourites - A list of default favourite operations. * @param {Object} options - Default setting for app options. */ var HTMLApp = function(categories, operations, default_favourites, default_options) { this.categories = categories; this.operations = operations; this.dfavourites = default_favourites; this.doptions = default_options; this.options = Utils.extend({}, default_options); this.chef = new Chef(); this.manager = new Manager(this); this.auto_bake_ = false; this.progress = 0; this.ing_id = 0; window.chef = this.chef; }; /** * This function sets up the stage and creates listeners for all events. * * @fires Manager#appstart */ HTMLApp.prototype.setup = function() { document.dispatchEvent(this.manager.appstart); this.initialise_splitter(); this.load_local_storage(); this.populate_operations_list(); this.manager.setup(); this.reset_layout(); this.set_compile_message(); this.load_URI_params(); }; /** * An error handler for displaying the error to the user. * * @param {Error} err */ HTMLApp.prototype.handle_error = function(err) { console.error(err); var msg = err.display_str || err.toString(); this.alert(msg, "danger", this.options.error_timeout, !this.options.show_errors); }; /** * Calls the Chef to bake the current input using the current recipe. * * @param {boolean} [step] - Set to true if we should only execute one operation instead of the * whole recipe. */ HTMLApp.prototype.bake = function(step) { var response; try { response = this.chef.bake( this.get_input(), // The user's input this.get_recipe_config(), // The configuration of the recipe this.options, // Options set by the user this.progress, // The current position in the recipe step // Whether or not to take one step or execute the whole recipe ); } catch (err) { this.handle_error(err); } finally { if (!response) return; if (response.error) { this.handle_error(response.error); } this.options = response.options; this.dish_str = response.type == "html" ? Utils.strip_html_tags(response.result, true) : response.result; this.progress = response.progress; this.manager.recipe.update_breakpoint_indicator(response.progress); this.manager.output.set(response.result, response.type, response.duration); // If baking took too long, disable auto-bake if (response.duration > this.options.auto_bake_threshold && this.auto_bake_) { this.manager.controls.set_auto_bake(false); this.alert("Baking took longer than " + this.options.auto_bake_threshold + "ms, Auto Bake has been disabled.", "warning", 5000); } } }; /** * Runs Auto Bake if it is set. */ HTMLApp.prototype.auto_bake = function() { if (this.auto_bake_) { this.bake(); } }; /** * Runs a silent bake forcing the browser to load and cache all the relevant JavaScript code needed * to do a real bake. * * The output will not be modified (hence "silent" bake). This will only actually execute the * recipe if auto-bake is enabled, otherwise it will just load the recipe, ingredients and dish. * * @returns {number} - The number of miliseconds it took to run the silent bake. */ HTMLApp.prototype.silent_bake = function() { var start_time = new Date().getTime(), recipe_config = this.get_recipe_config(); if (this.auto_bake_) { this.chef.silent_bake(recipe_config); } return new Date().getTime() - start_time; }; /** * Gets the user's input data. * * @returns {string} */ HTMLApp.prototype.get_input = function() { var input = this.manager.input.get(); // Save to session storage in case we need to restore it later sessionStorage.setItem("input_length", input.length); sessionStorage.setItem("input", input); return input; }; /** * Sets the user's input data. * * @param {string} input - The string to set the input to */ HTMLApp.prototype.set_input = function(input) { sessionStorage.setItem("input_length", input.length); sessionStorage.setItem("input", input); this.manager.input.set(input); }; /** * Populates the operations accordion list with the categories and operations specified in the * view constructor. * * @fires Manager#oplistcreate */ HTMLApp.prototype.populate_operations_list = function() { // Move edit button away before we overwrite it document.body.appendChild(document.getElementById("edit-favourites")); var html = ""; for (var i = 0; i < this.categories.length; i++) { var cat_conf = this.categories[i], selected = i === 0, cat = new HTMLCategory(cat_conf.name, selected); for (var j = 0; j < cat_conf.ops.length; j++) { var op_name = cat_conf.ops[j], op = new HTMLOperation(op_name, this.operations[op_name], this, this.manager); cat.add_operation(op); } html += cat.to_html(); } document.getElementById("categories").innerHTML = html; var op_lists = document.querySelectorAll("#categories .op_list"); for (i = 0; i < op_lists.length; i++) { op_lists[i].dispatchEvent(this.manager.oplistcreate); } // Add edit button to first category (Favourites) document.querySelector("#categories a").appendChild(document.getElementById("edit-favourites")); }; /** * Sets up the adjustable splitter to allow the user to resize areas of the page. */ HTMLApp.prototype.initialise_splitter = function() { Split(["#operations", "#recipe", "#IO"], { sizes: [20, 30, 50], minSize: [240, 325, 500], gutterSize: 4, onDrag: this.manager.controls.adjust_width.bind(this.manager.controls) }); Split(["#input", "#output"], { direction: "vertical", gutterSize: 4, }); this.reset_layout(); }; /** * Loads the information previously saved to the HTML5 local storage object so that user options * and favourites can be restored. */ HTMLApp.prototype.load_local_storage = function() { // Load options var l_options; if (localStorage.options !== undefined) { l_options = JSON.parse(localStorage.options); } this.manager.options.load(l_options); // Load favourites this.load_favourites(); }; /** * Loads the user's favourite operations from the HTML5 local storage object and populates the * Favourites category with them. * If the user currently has no saved favourites, the defaults from the view constructor are used. */ HTMLApp.prototype.load_favourites = function() { var favourites = localStorage.favourites && localStorage.favourites.length > 2 ? JSON.parse(localStorage.favourites) : this.dfavourites; favourites = this.valid_favourites(favourites); this.save_favourites(favourites); var fav_cat = this.categories.filter(function(c) { return c.name == "Favourites"; })[0]; if (fav_cat) { fav_cat.ops = favourites; } else { this.categories.unshift({ name: "Favourites", ops: favourites }); } }; /** * Filters the list of favourite operations that the user had stored and removes any that are no * longer available. The user is notified if this is the case. * @param {string[]} favourites - A list of the user's favourite operations * @returns {string[]} A list of the valid favourites */ HTMLApp.prototype.valid_favourites = function(favourites) { var valid_favs = []; for (var i = 0; i < favourites.length; i++) { if (this.operations.hasOwnProperty(favourites[i])) { valid_favs.push(favourites[i]); } else { this.alert("The operation \\"" + favourites[i] + "\\" is no longer " + "available. It has been removed from your favourites.", "info"); } } return valid_favs; }; /** * Saves a list of favourite operations to the HTML5 local storage object. * * @param {string[]} favourites - A list of the user's favourite operations */ HTMLApp.prototype.save_favourites = function(favourites) { localStorage.setItem("favourites", JSON.stringify(this.valid_favourites(favourites))); }; /** * Resets favourite operations back to the default as specified in the view constructor and * refreshes the operation list. */ HTMLApp.prototype.reset_favourites = function() { this.save_favourites(this.dfavourites); this.load_favourites(); this.populate_operations_list(); this.manager.recipe.initialise_operation_drag_n_drop(); }; /** * Adds an operation to the user's favourites. * * @param {string} name - The name of the operation */ HTMLApp.prototype.add_favourite = function(name) { var favourites = JSON.parse(localStorage.favourites); if (favourites.indexOf(name) >= 0) { this.alert("'" + name + "' is already in your favourites", "info", 2000); return; } favourites.push(name); this.save_favourites(favourites); this.load_favourites(); this.populate_operations_list(); this.manager.recipe.initialise_operation_drag_n_drop(); }; /** * Checks for input and recipe in the URI parameters and loads them if present. */ HTMLApp.prototype.load_URI_params = function() { // Load query string from URI this.query_string = (function(a) { if (a === "") return {}; var b = {}; for (var i = 0; i < a.length; i++) { var p = a[i].split('='); if (p.length != 2) { b[a[i]] = true; } else { b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, " ")); } } return b; })(window.location.search.substr(1).split('&')); // Turn off auto-bake while loading var auto_bake_val = this.auto_bake_; this.auto_bake_ = false; // Read in recipe from query string if (this.query_string.recipe) { try { var recipe_config = JSON.parse(this.query_string.recipe); this.set_recipe_config(recipe_config); } catch(err) {} } else if (this.query_string.op) { // If there's no recipe, look for single operations this.manager.recipe.clear_recipe(); try { this.manager.recipe.add_operation(this.query_string.op); } catch(err) { // If no exact match, search for nearest match and add that var matched_ops = this.manager.ops.filter_operations(this.query_string.op, false); if (matched_ops.length) { this.manager.recipe.add_operation(matched_ops[0].name); } // Populate search with the string var search = document.getElementById("search"); search.value = this.query_string.op; search.dispatchEvent(new Event("search")); } } // Read in input data from query string if (this.query_string.input) { try { var input_data = Utils.from_base64(this.query_string.input); this.set_input(input_data); } catch(err) {} } // Restore auto-bake state this.auto_bake_ = auto_bake_val; this.auto_bake(); }; /** * Returns the next ingredient ID and increments it for next time. * * @returns {number} */ HTMLApp.prototype.next_ing_id = function() { return this.ing_id++; }; /** * Gets the current recipe configuration. * * @returns {Object[]} */ HTMLApp.prototype.get_recipe_config = function() { var recipe_config = this.manager.recipe.get_config(); sessionStorage.setItem("recipe_config", JSON.stringify(recipe_config)); return recipe_config; }; /** * Given a recipe configuration, sets the recipe to that configuration. * * @param {Object[]} recipe_config - The recipe configuration */ HTMLApp.prototype.set_recipe_config = function(recipe_config) { sessionStorage.setItem("recipe_config", JSON.stringify(recipe_config)); document.getElementById("rec_list").innerHTML = null; for (var i = 0; i < recipe_config.length; i++) { var item = this.manager.recipe.add_operation(recipe_config[i].op); // Populate arguments var args = item.querySelectorAll(".arg"); for (var j = 0; j < args.length; j++) { if (args[j].getAttribute("type") == "checkbox") { // checkbox args[j].checked = recipe_config[i].args[j]; } else if (args[j].classList.contains("toggle-string")) { // toggle_string args[j].value = recipe_config[i].args[j].string; args[j].previousSibling.children[0].innerHTML = recipe_config[i].args[j].option + " <span class='caret'></span>"; } else { // all others args[j].value = recipe_config[i].args[j]; } } // Set disabled and breakpoint if (recipe_config[i].disabled) { item.querySelector(".disable-icon").click(); } if (recipe_config[i].breakpoint) { item.querySelector(".breakpoint").click(); } this.progress = 0; } }; /** * Resets the splitter positions to default. */ HTMLApp.prototype.reset_layout = function() { document.getElementById("operations").style.width = "calc(20% - 2px)"; document.getElementById("recipe").style.width = "calc(30% - 4px)"; document.getElementById("IO").style.width = "calc(50% - 2px)"; document.getElementById("input").style.height = "calc(50% - 2px)"; document.getElementById("output").style.height = "calc(50% - 2px)"; this.manager.controls.adjust_width(); }; /** * Sets the compile message. */ HTMLApp.prototype.set_compile_message = function() { // Display time since last build and compile message var now = new Date(), time_since_compile = Utils.fuzzy_time(now.getTime() - window.compile_time), compile_info = "<span style=\\"font-weight: normal\\">Last build: " + time_since_compile.substr(0,1).toUpperCase() + time_since_compile.substr(1) + " ago"; if (window.compile_message !== "") { compile_info += " - " + window.compile_message; } compile_info += "</span>"; document.getElementById("notice").innerHTML = compile_info; }; /** * Pops up a message to the user and writes it to the console log. * * @param {string} str - The message to display (HTML supported) * @param {string} style - The colour of the popup * "danger" = red * "warning" = amber * "info" = blue * "success" = green * @param {number} timeout - The number of milliseconds before the popup closes automatically * 0 for never (until the user closes it) * @param {boolean} [silent=false] - Don't show the message in the popup, only print it to the * console * * @example * // Pops up a red box with the message "[current time] Error: Something has gone wrong!" * // that will need to be dismissed by the user. * this.alert("Error: Something has gone wrong!", "danger", 0); * * // Pops up a blue information box with the message "[current time] Happy Christmas!" * // that will disappear after 5 seconds. * this.alert("Happy Christmas!", "info", 5000); */ HTMLApp.prototype.alert = function(str, style, timeout, silent) { var time = new Date(); console.log("[" + time.toLocaleString() + "] " + str); if (silent) return; style = style || "danger"; timeout = timeout || 0; var alert_el = document.getElementById("alert"), alert_content = document.getElementById("alert-content"); alert_el.classList.remove("alert-danger"); alert_el.classList.remove("alert-warning"); alert_el.classList.remove("alert-info"); alert_el.classList.remove("alert-success"); alert_el.classList.add("alert-" + style); // If the box hasn't been closed, append to it rather than replacing if (alert_el.style.display == "block") { alert_content.innerHTML += "<br><br>[" + time.toLocaleTimeString() + "] " + str; } else { alert_content.innerHTML = "[" + time.toLocaleTimeString() + "] " + str; } // Stop the animation if it is in progress $("#alert").stop(); alert_el.style.display = "block"; alert_el.style.opacity = 1; if (timeout > 0) { clearTimeout(this.alert_timeout); this.alert_timeout = setTimeout(function(){ $("#alert").slideUp(100); }, timeout); } }; /** * Pops up a box asking the user a question and sending the answer to a specified callback function. * * @param {string} title - The title of the box * @param {string} body - The question (HTML supported) * @param {function} callback - A function accepting one boolean argument which handles the * response e.g. function(answer) {...} * @param {Object} [scope=this] - The object to bind to the callback function * * @example * // Pops up a box asking if the user would like a cookie. Prints the answer to the console. * this.confirm("Question", "Would you like a cookie?", function(answer) {console.log(answer);}); */ HTMLApp.prototype.confirm = function(title, body, callback, scope) { scope = scope || this; document.getElementById("confirm-title").innerHTML = title; document.getElementById("confirm-body").innerHTML = body; document.getElementById("confirm-modal").style.display = "block"; this.confirm_closed = false; $("#confirm-modal").modal() .one("show.bs.modal", function(e) { this.confirm_closed = false; }.bind(this)) .one("click", "#confirm-yes", function() { this.confirm_closed = true; callback.bind(scope)(true); $("#confirm-modal").modal("hide"); }.bind(this)) .one("hide.bs.modal", function(e) { if (!this.confirm_closed) callback.bind(scope)(false); this.confirm_closed = true; }.bind(this)); }; /** * Handler for the alert close button click event. * Closes the alert box. */ HTMLApp.prototype.alert_close_click = function() { document.getElementById("alert").style.display = "none"; }; /** * Handler for CyerChef statechange events. * Fires whenever the input or recipe changes in any way. * * @listens Manager#statechange * @param {event} e */ HTMLApp.prototype.state_change = function(e) { this.auto_bake(); // Update the current history state (not creating a new one) if (this.options.update_url) { this.last_state_url = this.manager.controls.generate_state_url(true, true); window.history.replaceState({}, "CyberChef", this.last_state_url); } }; /** * Handler for the history popstate event. * Reloads parameters from the URL. * * @param {event} e */ HTMLApp.prototype.pop_state = function(e) { if (window.location.href.split("#")[0] !== this.last_state_url) { this.load_URI_params(); } }; /** * Function to call an external API from this view. */ HTMLApp.prototype.call_api = function(url, type, data, data_type, content_type) { type = type || "POST"; data = data || {}; data_type = data_type || undefined; content_type = content_type || "application/json"; var response = null, success = false; $.ajax({ url: url, async: false, type: type, data: data, dataType: data_type, contentType: content_type, success: function(data) { success = true; response = data; }, error: function(data) { success = false; response = data; }, }); return { success: success, response: response }; }; × Search results Close "},"views_html_HTMLCategory.js.html":{"id":"views_html_HTMLCategory.js.html","title":"Source: views/html/HTMLCategory.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/HTMLCategory.js /** * Object to handle the creation of operation categories. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {string} name - The name of the category. * @param {boolean} selected - Whether this category is pre-selected or not. */ var HTMLCategory = function(name, selected) { this.name = name; this.selected = selected; this.op_list = []; }; /** * Adds an operation to this category. * * @param {HTMLOperation} operation - The operation to add. */ HTMLCategory.prototype.add_operation = function(operation) { this.op_list.push(operation); }; /** * Renders the category and all operations within it in HTML. * * @returns {string} */ HTMLCategory.prototype.to_html = function() { var cat_name = "cat" + this.name.replace(/[\\s/-:_]/g, ""); var html = "<div class='panel category'>\\ <a class='category-title' data-toggle='collapse'\\ data-parent='#categories' href='#" + cat_name + "'>\\ " + this.name + "\\ </a>\\ <div id='" + cat_name + "' class='panel-collapse collapse\\ " + (this.selected ? " in" : "") + "'><ul class='op_list'>"; for (var i = 0; i < this.op_list.length; i++) { html += this.op_list[i].to_stub_html(); } html += "</ul></div></div>"; return html; }; × Search results Close "},"views_html_HTMLIngredient.js.html":{"id":"views_html_HTMLIngredient.js.html","title":"Source: views/html/HTMLIngredient.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/HTMLIngredient.js /** * Object to handle the creation of operation ingredients. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {Object} config - The configuration object for this ingredient. * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var HTMLIngredient = function(config, app, manager) { this.app = app; this.manager = manager; this.name = config.name; this.type = config.type; this.value = config.value; this.disabled = config.disabled || false; this.disable_args = config.disable_args || false; this.placeholder = config.placeholder || false; this.target = config.target; this.toggle_values = config.toggle_values; this.id = "ing-" + this.app.next_ing_id(); }; /** * Renders the ingredient in HTML. * * @returns {string} */ HTMLIngredient.prototype.to_html = function() { var inline = (this.type == "boolean" || this.type == "number" || this.type == "option" || this.type == "short_string" || this.type == "binary_short_string"), html = inline ? "" : "<div class='clearfix'>&nbsp;</div>", i, m; html += "<div class='arg-group" + (inline ? " inline-args" : "") + (this.type == "text" ? " arg-group-text" : "") + "'><label class='arg-label' for='" + this.id + "'>" + this.name + "</label>"; switch (this.type) { case "string": case "binary_string": case "byte_array": html += "<input type='text' id='" + this.id + "' class='arg arg-input' arg_name='" + this.name + "' value='" + this.value + "'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + ">"; break; case "short_string": case "binary_short_string": html += "<input type='text' id='" + this.id + "'class='arg arg-input short-string' arg_name='" + this.name + "'value='" + this.value + "'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + ">"; break; case "toggle_string": html += "<div class='input-group'><div class='input-group-btn'>\\ <button type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown'\\ aria-haspopup='true' aria-expanded='false'" + (this.disabled ? " disabled='disabled'" : "") + ">" + this.toggle_values[0] + " <span class='caret'></span></button><ul class='dropdown-menu'>"; for (i = 0; i < this.toggle_values.length; i++) { html += "<li><a href='#'>" + this.toggle_values[i] + "</a></li>"; } html += "</ul></div><input type='text' class='arg arg-input toggle-string'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + "></div>"; break; case "number": html += "<input type='number' id='" + this.id + "'class='arg arg-input' arg_name='" + this.name + "'value='" + this.value + "'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + ">"; break; case "boolean": html += "<input type='checkbox' id='" + this.id + "'class='arg' arg_name='" + this.name + "'" + (this.value ? " checked='checked' " : "") + (this.disabled ? " disabled='disabled'" : "") + ">"; if (this.disable_args) { this.manager.add_dynamic_listener("#" + this.id, "click", this.toggle_disable_args, this); } break; case "option": html += "<select class='arg' id='" + this.id + "'arg_name='" + this.name + "'" + (this.disabled ? " disabled='disabled'" : "") + ">"; for (i = 0; i < this.value.length; i++) { if (!!(m = this.value[i].match(/\\[([a-z0-9 -()^]+)\\]/i))) { html += "<optgroup label='" + m[1] + "'>"; } else if (!!(m = this.value[i].match(/\\[\\/([a-z0-9 -()^]+)\\]/i))) { html += "</optgroup>"; } else { html += "<option>" + this.value[i] + "</option>"; } } html += "</select>"; break; case "populate_option": html += "<select class='arg' id='" + this.id + "'arg_name='" + this.name + "'" + (this.disabled ? " disabled='disabled'" : "") + ">"; for (i = 0; i < this.value.length; i++) { if (!!(m = this.value[i].name.match(/\\[([a-z0-9 -()^]+)\\]/i))) { html += "<optgroup label='" + m[1] + "'>"; } else if (!!(m = this.value[i].name.match(/\\[\\/([a-z0-9 -()^]+)\\]/i))) { html += "</optgroup>"; } else { html += "<option populate-value='" + this.value[i].value + "'>" + this.value[i].name + "</option>"; } } html += "</select>"; this.manager.add_dynamic_listener("#" + this.id, "change", this.populate_option_change, this); break; case "editable_option": html += "<div class='editable-option'>"; html += "<select class='editable-option-select' id='sel-" + this.id + "'" + (this.disabled ? " disabled='disabled'" : "") + ">"; for (i = 0; i < this.value.length; i++) { html += "<option value='" + this.value[i].value + "'>" + this.value[i].name + "</option>"; } html += "</select>"; html += "<input class='arg arg-input editable-option-input' id='" + this.id + "'arg_name='" + this.name + "'" + " value='" + this.value[0].value + "'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + ">"; html += "</div>"; this.manager.add_dynamic_listener("#sel-" + this.id, "change", this.editable_option_change, this); break; case "text": html += "<textarea id='" + this.id + "' class='arg' arg_name='" + this.name + "'" + (this.disabled ? " disabled='disabled'" : "") + (this.placeholder ? " placeholder='" + this.placeholder + "'" : "") + ">" + this.value + "</textarea>"; break; default: break; } html += "</div>"; return html; }; /** * Handler for argument disable toggle. * Toggles disabled state for all arguments in the disable_args list for this ingredient. * * @param {event} e */ HTMLIngredient.prototype.toggle_disable_args = function(e) { var el = e.target, op = el.parentNode.parentNode, args = op.querySelectorAll(".arg-group"), els; for (var i = 0; i < this.disable_args.length; i++) { els = args[this.disable_args[i]].querySelectorAll("input, select, button"); for (var j = 0; j < els.length; j++) { if (els[j].getAttribute("disabled")) { els[j].removeAttribute("disabled"); } else { els[j].setAttribute("disabled", "disabled"); } } } this.manager.recipe.ing_change(); }; /** * Handler for populate option changes. * Populates the relevant argument with the specified value. * * @param {event} e */ HTMLIngredient.prototype.populate_option_change = function(e) { var el = e.target, op = el.parentNode.parentNode, target = op.querySelectorAll(".arg-group")[this.target].querySelector("input, select, textarea"); target.value = el.childNodes[el.selectedIndex].getAttribute("populate-value"); this.manager.recipe.ing_change(); }; /** * Handler for editable option changes. * Populates the input box with the selected value. * * @param {event} e */ HTMLIngredient.prototype.editable_option_change = function(e) { var select = e.target, input = select.nextSibling; input.value = select.childNodes[select.selectedIndex].value; this.manager.recipe.ing_change(); }; × Search results Close "},"views_html_HTMLOperation.js.html":{"id":"views_html_HTMLOperation.js.html","title":"Source: views/html/HTMLOperation.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/HTMLOperation.js /** * Object to handle the creation of operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {string} name - The name of the operation. * @param {Object} config - The configuration object for this operation. * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var HTMLOperation = function(name, config, app, manager) { this.app = app; this.manager = manager; this.name = name; this.description = config.description; this.manual_bake = config.manual_bake || false; this.config = config; this.ing_list = []; for (var i = 0; i < config.args.length; i++) { var ing = new HTMLIngredient(config.args[i], this.app, this.manager); this.ing_list.push(ing); } }; /** * @constant */ HTMLOperation.INFO_ICON = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByElEQVR4XqVTzWoaYRQ9KZJmoVaS1J1QiYTIuOgqi9lEugguQhYhdGs3hTyAi0CWJTvJIks30ZBNsimUtlqkVLoQCuJsphRriyFjabWtEyf/Rv3iWcwwymTlgQuH851z5hu43wRGkEwmXwCIA4hiGAUAmUQikQbhEHwyGCWVSglVVUW73RYmyKnxjB56ncJ6NpsVxHGrI/ZLuniVb3DIqQmCHnrNkgcggNeSJPlisRgyJR2b737j/TcDsQUPwv6H5NR4BnroZcb6Z16N2PvyX6yna9Z8qp6JQ0Uf0ughmGHWBSAuyzJqrQ7eqKewY/dzE363C71e39LoWQq5wUwul4uzIBoIBHD01RgyrkZ8eDbvwUWnj623v2DHx4qB51IAzLIAXq8XP/7W0bUVVJtXWIk8wvlN364TA+/1IDMLwmWK/Hq3axmhaBdoGLeklm73ElaBYRgIzkyifHIOO4QQJKM3oJcZq6CgaVp0OTyHw9K/kQI4FiyHfdC0n2CWe5ApFosIPZ7C2tNpXpcDOehGyD/FIbd0euhlhllzFxRzC3fydbG4XRYbB9/tQ41n9m1U7l3lyp9LkfygiZeZCoecmtMqj/+Yxn7Od3v0j50qCO3zAAAAAElFTkSuQmCC"; /** * @constant */ HTMLOperation.REMOVE_ICON = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwklEQVR42qRTPU8CQRB9K2CCMRJ6NTQajOUaqfxIbLCRghhjQixosLAgFNBQ3l8wsabxLxBJbCyVUBiMCVQEQkOEKBbCnefM3p4eohWXzM3uvHlv52b2hG3bmOWZw4yPn1/XQkCQ9wFxcgZZ0QLKpifpN8Z1n1L13griBBjHhYK0nMT4b+wom53ClAAFQacZJ/m8rNfrSOZy0vxJjPP6IJ2WzWYTO6mUwiwtILiJJSHUKVSWkchkZK1WQzQaxU2pVGUglkjIbreLUCiEx0qlStlFCpfPiPstYDtVKJH9ZFI2Gw1FGA6H6LTbCAaDeGu1FJl6UuYjpwTGzucokZW1NfnS66kyfT4fXns9RaZmlgNcuhZQU+jowLzuOK/HgwEW3E5ZlhLXVWKk11P3wNYNWw+HZdA0sUgx1zjGmD05nckx0ilGjBJdUq3fr7K5e8bGf43RdL7fOPSQb4lI8SLbrUfkUIuY32VTI1bJn5BqDnh4Dodt9ryPUDzyD7aquWoKQohl2i9sAbubwPkTcHkP3FHsg+yT+7sN7G0AF3Xg6sHB3onbdgWWKBDQg/BcTuVt51dQA/JrnIcyIu6rmPV3/hJgACPc0BMEYTg+AAAAAElFTkSuQmCC"; /** * Renders the operation in HTML as a stub operation with no ingredients. * * @returns {string} */ HTMLOperation.prototype.to_stub_html = function(remove_icon) { var html = "<li class='operation'"; if (this.description) { html += " data-container='body' data-toggle='popover' data-placement='auto right'\\ data-content=\\"" + this.description + "\\" data-html='true' data-trigger='hover'"; } html += ">" + this.name; if (remove_icon) { html += "<img src='data:image/png;base64," + HTMLOperation.REMOVE_ICON + "' class='op-icon remove-icon'>"; } if (this.description) { html += "<img src='data:image/png;base64," + HTMLOperation.INFO_ICON + "' class='op-icon'>"; } html += "</li>"; return html; }; /** * Renders the operation in HTML as a full operation with ingredients. * * @returns {string} */ HTMLOperation.prototype.to_full_html = function() { var html = "<div class='arg-title'>" + this.name + "</div>"; for (var i = 0; i < this.ing_list.length; i++) { html += this.ing_list[i].to_html(); } html += "<div class='recip-icons'>\\ <div class='breakpoint' title='Set breakpoint' break='false'></div>\\ <div class='disable-icon recip-icon' title='Disable operation'\\ disabled='false'></div>"; html += "</div>\\ <div class='clearfix'>&nbsp;</div>"; return html; }; /** * Highlights the searched string in the name and description of the operation. * * @param {string} search_str * @param {number} name_pos - The position of the search string in the operation name * @param {number} desc_pos - The position of the search string in the operation description */ HTMLOperation.prototype.highlight_search_string = function(search_str, name_pos, desc_pos) { if (name_pos >= 0) { this.name = this.name.slice(0, name_pos) + "<b><u>" + this.name.slice(name_pos, name_pos + search_str.length) + "</u></b>" + this.name.slice(name_pos + search_str.length); } if (this.description && desc_pos >= 0) { this.description = this.description.slice(0, desc_pos) + "<b><u>" + this.description.slice(desc_pos, desc_pos + search_str.length) + "</u></b>" + this.description.slice(desc_pos + search_str.length); } }; × Search results Close "},"views_html_HighlighterWaiter.js.html":{"id":"views_html_HighlighterWaiter.js.html","title":"Source: views/html/HighlighterWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/HighlighterWaiter.js /** * Waiter to handle events related to highlighting in CyberChef. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. */ var HighlighterWaiter = function(app) { this.app = app; this.mouse_button_down = false; this.mouse_target = null; }; /** * HighlighterWaiter data type enum for the input. * @readonly * @enum */ HighlighterWaiter.INPUT = 0; /** * HighlighterWaiter data type enum for the output. * @readonly * @enum */ HighlighterWaiter.OUTPUT = 1; /** * Determines if the current text selection is running backwards or forwards. * StackOverflow answer id: 12652116 * * @private * @returns {boolean} */ HighlighterWaiter.prototype._is_selection_backwards = function() { var backwards = false, sel = window.getSelection(); if (!sel.isCollapsed) { var range = document.createRange(); range.setStart(sel.anchorNode, sel.anchorOffset); range.setEnd(sel.focusNode, sel.focusOffset); backwards = range.collapsed; range.detach(); } return backwards; }; /** * Calculates the text offset of a position in an HTML element, ignoring HTML tags. * * @private * @param {element} node - The parent HTML node. * @param {number} offset - The offset since the last HTML element. * @returns {number} */ HighlighterWaiter.prototype._get_output_html_offset = function(node, offset) { var sel = window.getSelection(), range = document.createRange(); range.selectNodeContents(document.getElementById("output-html")); range.setEnd(node, offset); sel.removeAllRanges(); sel.addRange(range); return sel.toString().length; }; /** * Gets the current selection offsets in the output HTML, ignoring HTML tags. * * @private * @returns {Object} pos * @returns {number} pos.start * @returns {number} pos.end */ HighlighterWaiter.prototype._get_output_html_selection_offsets = function() { var sel = window.getSelection(), range, start = 0, end = 0, backwards = false; if (sel.rangeCount) { range = sel.getRangeAt(sel.rangeCount - 1); backwards = this._is_selection_backwards(); start = this._get_output_html_offset(range.startContainer, range.startOffset); end = this._get_output_html_offset(range.endContainer, range.endOffset); sel.removeAllRanges(); sel.addRange(range); if (backwards) { // If selecting backwards, reverse the start and end offsets for the selection to // prevent deselecting as the drag continues. sel.collapseToEnd(); sel.extend(sel.anchorNode, range.startOffset); } } return { start: start, end: end }; }; /** * Handler for input scroll events. * Scrolls the highlighter pane to match the input textarea position. * * @param {event} e */ HighlighterWaiter.prototype.input_scroll = function(e) { var el = e.target; document.getElementById("input-highlighter").scrollTop = el.scrollTop; document.getElementById("input-highlighter").scrollLeft = el.scrollLeft; }; /** * Handler for output scroll events. * Scrolls the highlighter pane to match the output textarea position. * * @param {event} e */ HighlighterWaiter.prototype.output_scroll = function(e) { var el = e.target; document.getElementById("output-highlighter").scrollTop = el.scrollTop; document.getElementById("output-highlighter").scrollLeft = el.scrollLeft; }; /** * Handler for input mousedown events. * Calculates the current selection info, and highlights the corresponding data in the output. * * @param {event} e */ HighlighterWaiter.prototype.input_mousedown = function(e) { this.mouse_button_down = true; this.mouse_target = HighlighterWaiter.INPUT; this.remove_highlights(); var el = e.target, start = el.selectionStart, end = el.selectionEnd; if (start !== 0 || end !== 0) { document.getElementById("input-selection-info").innerHTML = this.selection_info(start, end); this.highlight_output([{start: start, end: end}]); } }; /** * Handler for output mousedown events. * Calculates the current selection info, and highlights the corresponding data in the input. * * @param {event} e */ HighlighterWaiter.prototype.output_mousedown = function(e) { this.mouse_button_down = true; this.mouse_target = HighlighterWaiter.OUTPUT; this.remove_highlights(); var el = e.target, start = el.selectionStart, end = el.selectionEnd; if (start !== 0 || end !== 0) { document.getElementById("output-selection-info").innerHTML = this.selection_info(start, end); this.highlight_input([{start: start, end: end}]); } }; /** * Handler for output HTML mousedown events. * Calculates the current selection info. * * @param {event} e */ HighlighterWaiter.prototype.output_html_mousedown = function(e) { this.mouse_button_down = true; this.mouse_target = HighlighterWaiter.OUTPUT; var sel = this._get_output_html_selection_offsets(); if (sel.start !== 0 || sel.end !== 0) { document.getElementById("output-selection-info").innerHTML = this.selection_info(sel.start, sel.end); } }; /** * Handler for input mouseup events. * * @param {event} e */ HighlighterWaiter.prototype.input_mouseup = function(e) { this.mouse_button_down = false; }; /** * Handler for output mouseup events. * * @param {event} e */ HighlighterWaiter.prototype.output_mouseup = function(e) { this.mouse_button_down = false; }; /** * Handler for output HTML mouseup events. * * @param {event} e */ HighlighterWaiter.prototype.output_html_mouseup = function(e) { this.mouse_button_down = false; }; /** * Handler for input mousemove events. * Calculates the current selection info, and highlights the corresponding data in the output. * * @param {event} e */ HighlighterWaiter.prototype.input_mousemove = function(e) { // Check that the left mouse button is pressed if (!this.mouse_button_down || e.which != 1 || this.mouse_target != HighlighterWaiter.INPUT) return; var el = e.target, start = el.selectionStart, end = el.selectionEnd; if (start !== 0 || end !== 0) { document.getElementById("input-selection-info").innerHTML = this.selection_info(start, end); this.highlight_output([{start: start, end: end}]); } }; /** * Handler for output mousemove events. * Calculates the current selection info, and highlights the corresponding data in the input. * * @param {event} e */ HighlighterWaiter.prototype.output_mousemove = function(e) { // Check that the left mouse button is pressed if (!this.mouse_button_down || e.which != 1 || this.mouse_target != HighlighterWaiter.OUTPUT) return; var el = e.target, start = el.selectionStart, end = el.selectionEnd; if (start !== 0 || end !== 0) { document.getElementById("output-selection-info").innerHTML = this.selection_info(start, end); this.highlight_input([{start: start, end: end}]); } }; /** * Handler for output HTML mousemove events. * Calculates the current selection info. * * @param {event} e */ HighlighterWaiter.prototype.output_html_mousemove = function(e) { // Check that the left mouse button is pressed if (!this.mouse_button_down || e.which != 1 || this.mouse_target != HighlighterWaiter.OUTPUT) return; var sel = this._get_output_html_selection_offsets(); if (sel.start !== 0 || sel.end !== 0) { document.getElementById("output-selection-info").innerHTML = this.selection_info(sel.start, sel.end); } }; /** * Given start and end offsets, writes the HTML for the selection info element with the correct * padding. * * @param {number} start - The start offset. * @param {number} end - The end offset. * @returns {string} */ HighlighterWaiter.prototype.selection_info = function(start, end) { var width = end.toString().length; width = width < 2 ? 2 : width; var start_str = Utils.pad(start.toString(), width, " ").replace(/ /g, "&nbsp;"), end_str = Utils.pad(end.toString(), width, " ").replace(/ /g, "&nbsp;"), len_str = Utils.pad((end-start).toString(), width, " ").replace(/ /g, "&nbsp;"); return "start: " + start_str + "<br>end: " + end_str + "<br>length: " + len_str; }; /** * Removes highlighting and selection information. */ HighlighterWaiter.prototype.remove_highlights = function() { document.getElementById("input-highlighter").innerHTML = ""; document.getElementById("output-highlighter").innerHTML = ""; document.getElementById("input-selection-info").innerHTML = ""; document.getElementById("output-selection-info").innerHTML = ""; }; /** * Generates a list of all the highlight functions assigned to operations in the recipe, if the * entire recipe supports highlighting. * * @returns {Object[]} highlights * @returns {function} highlights[].f * @returns {function} highlights[].b * @returns {Object[]} highlights[].args */ HighlighterWaiter.prototype.generate_highlight_list = function() { var recipe_config = this.app.get_recipe_config(), highlights = []; for (var i = 0; i < recipe_config.length; i++) { if (recipe_config[i].disabled) continue; // If any breakpoints are set, do not attempt to highlight if (recipe_config[i].breakpoint) return false; var op = this.app.operations[recipe_config[i].op]; // If any of the operations do not support highlighting, fail immediately. if (op.highlight === false || op.highlight === undefined) return false; highlights.push({ f: op.highlight, b: op.highlight_reverse, args: recipe_config[i].args }); } return highlights; }; /** * Highlights the given offsets in the output. * We will only highlight if: * - input hasn't changed since last bake * - last bake was a full bake * - all operations in the recipe support highlighting * * @param {Object} pos - The position object for the highlight. * @param {number} pos.start - The start offset. * @param {number} pos.end - The end offset. */ HighlighterWaiter.prototype.highlight_output = function(pos) { var highlights = this.generate_highlight_list(); if (!highlights || !this.app.auto_bake_) { return false; } for (var i = 0; i < highlights.length; i++) { // Remove multiple highlights before processing again pos = [pos[0]]; if (typeof highlights[i].f == "function") { pos = highlights[i].f(pos, highlights[i].args); } } document.getElementById("output-selection-info").innerHTML = this.selection_info(pos[0].start, pos[0].end); this.highlight( document.getElementById("output-text"), document.getElementById("output-highlighter"), pos); }; /** * Highlights the given offsets in the input. * We will only highlight if: * - input hasn't changed since last bake * - last bake was a full bake * - all operations in the recipe support highlighting * * @param {Object} pos - The position object for the highlight. * @param {number} pos.start - The start offset. * @param {number} pos.end - The end offset. */ HighlighterWaiter.prototype.highlight_input = function(pos) { var highlights = this.generate_highlight_list(); if (!highlights || !this.app.auto_bake_) { return false; } for (var i = 0; i < highlights.length; i++) { // Remove multiple highlights before processing again pos = [pos[0]]; if (typeof highlights[i].b == "function") { pos = highlights[i].b(pos, highlights[i].args); } } document.getElementById("input-selection-info").innerHTML = this.selection_info(pos[0].start, pos[0].end); this.highlight( document.getElementById("input-text"), document.getElementById("input-highlighter"), pos); }; /** * Adds the relevant HTML to the specified highlight element such that highlighting appears * underneath the correct offset. * * @param {element} textarea - The input or output textarea. * @param {element} highlighter - The input or output highlighter element. * @param {Object} pos - The position object for the highlight. * @param {number} pos.start - The start offset. * @param {number} pos.end - The end offset. */ HighlighterWaiter.prototype.highlight = function(textarea, highlighter, pos) { if (!this.app.options.show_highlighter) return false; if (!this.app.options.attempt_highlight) return false; // Check if there is a carriage return in the output dish as this will not // be displayed by the HTML textarea and will mess up highlighting offsets. if (!this.app.dish_str || this.app.dish_str.indexOf("\\r") >= 0) return false; var start_placeholder = "[start_highlight]", start_placeholder_regex = /\\[start_highlight\\]/g, end_placeholder = "[end_highlight]", end_placeholder_regex = /\\[end_highlight\\]/g, text = textarea.value; // Put placeholders in position // If there's only one value, select that // If there are multiple, ignore the first one and select all others if (pos.length == 1) { if (pos[0].end < pos[0].start) return; text = text.slice(0, pos[0].start) + start_placeholder + text.slice(pos[0].start, pos[0].end) + end_placeholder + text.slice(pos[0].end, text.length); } else { // O(n^2) - Can anyone improve this without overwriting placeholders? var result = "", end_placed = true; for (var i = 0; i < text.length; i++) { for (var j = 1; j < pos.length; j++) { if (pos[j].end < pos[j].start) continue; if (pos[j].start == i) { result += start_placeholder; end_placed = false; } if (pos[j].end == i) { result += end_placeholder; end_placed = true; } } result += text[i]; } if (!end_placed) result += end_placeholder; text = result; } var css_class = "hl1"; //if (colour) css_class += "-"+colour; // Remove HTML tags text = text.replace(/&/g, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;") .replace(/\\n/g, "&#10;") // Convert placeholders to tags .replace(start_placeholder_regex, "<span class=\\""+css_class+"\\">") .replace(end_placeholder_regex, "</span>") + "&nbsp;"; // Adjust width to allow for scrollbars highlighter.style.width = textarea.clientWidth + "px"; highlighter.innerHTML = text; highlighter.scrollTop = textarea.scrollTop; highlighter.scrollLeft = textarea.scrollLeft; }; × Search results Close "},"views_html_InputWaiter.js.html":{"id":"views_html_InputWaiter.js.html","title":"Source: views/html/InputWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/InputWaiter.js /** * Waiter to handle events related to the input. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var InputWaiter = function(app, manager) { this.app = app; this.manager = manager; // Define keys that don't change the input so we don't have to autobake when they are pressed this.bad_keys = [ 16, //Shift 17, //Ctrl 18, //Alt 19, //Pause 20, //Caps 27, //Esc 33,34,35,36, //PgUp, PgDn, End, Home 37,38,39,40, //Directional 44, //PrntScrn 91,92, //Win 93, //Context 112,113,114,115,116,117,118,119,120,121,122,123, //F1-12 144, //Num 145, //Scroll ]; }; /** * Gets the user's input from the input textarea. * * @returns {string} */ InputWaiter.prototype.get = function() { return document.getElementById("input-text").value; }; /** * Sets the input in the input textarea. * * @param {string} input * * @fires Manager#statechange */ InputWaiter.prototype.set = function(input) { document.getElementById("input-text").value = input; window.dispatchEvent(this.manager.statechange); }; /** * Displays information about the input. * * @param {number} length - The length of the current input string * @param {number} lines - The number of the lines in the current input string */ InputWaiter.prototype.set_input_info = function(length, lines) { var width = length.toString().length; width = width < 2 ? 2 : width; var length_str = Utils.pad(length.toString(), width, " ").replace(/ /g, "&nbsp;"); var lines_str = Utils.pad(lines.toString(), width, " ").replace(/ /g, "&nbsp;"); document.getElementById("input-info").innerHTML = "length: " + length_str + "<br>lines: " + lines_str; }; /** * Handler for input scroll events. * Scrolls the highlighter pane to match the input textarea position and updates history state. * * @param {event} e * * @fires Manager#statechange */ InputWaiter.prototype.input_change = function(e) { // Remove highlighting from input and output panes as the offsets might be different now this.manager.highlighter.remove_highlights(); // Reset recipe progress as any previous processing will be redundant now this.app.progress = 0; // Update the input metadata info var input_text = this.get(), lines = input_text.count("\\n") + 1; this.set_input_info(input_text.length, lines); if (this.bad_keys.indexOf(e.keyCode) < 0) { // Fire the statechange event as the input has been modified window.dispatchEvent(this.manager.statechange); } }; /** * Handler for input dragover events. * Gives the user a visual cue to show that items can be dropped here. * * @param {event} e */ InputWaiter.prototype.input_dragover = function(e) { // This will be set if we're dragging an operation if (e.dataTransfer.effectAllowed === "move") return false; e.stopPropagation(); e.preventDefault(); e.target.classList.add("dropping-file"); }; /** * Handler for input dragleave events. * Removes the visual cue. * * @param {event} e */ InputWaiter.prototype.input_dragleave = function(e) { e.stopPropagation(); e.preventDefault(); e.target.classList.remove("dropping-file"); }; /** * Handler for input drop events. * Loads the dragged data into the input textarea. * * @param {event} e */ InputWaiter.prototype.input_drop = function(e) { // This will be set if we're dragging an operation if (e.dataTransfer.effectAllowed === "move") return false; e.stopPropagation(); e.preventDefault(); var el = e.target, file = e.dataTransfer.files[0], text = e.dataTransfer.getData("Text"), reader = new FileReader(), input_charcode = "", offset = 0, CHUNK_SIZE = 20480; // 20KB var set_input = function() { if (input_charcode.length > 100000 && this.app.auto_bake_) { this.manager.controls.set_auto_bake(false); this.app.alert("Turned off Auto Bake as the input is large", "warning", 5000); } this.set(input_charcode); var recipe_config = this.app.get_recipe_config(); if (!recipe_config[0] || recipe_config[0].op != "From Hex") { recipe_config.unshift({op:"From Hex",args:["Space"]}); this.app.set_recipe_config(recipe_config); } el.classList.remove("loading_file"); }.bind(this); var seek = function() { if (offset >= file.size) { set_input(); return; } el.value = "Processing... " + Math.round(offset / file.size * 100) + "%"; var slice = file.slice(offset, offset + CHUNK_SIZE); reader.readAsArrayBuffer(slice); }.bind(this); reader.onload = function(e) { var data = new Uint8Array(reader.result); input_charcode += Utils.to_hex_fast(data); offset += CHUNK_SIZE; seek(); }.bind(this); el.classList.remove("dropping-file"); if (file) { el.classList.add("loading_file"); seek(); } else if (text) { this.set(text); } }; /** * Handler for clear IO events. * Resets the input, output and info areas. * * @fires Manager#statechange */ InputWaiter.prototype.clear_io_click = function() { this.manager.highlighter.remove_highlights(); document.getElementById("input-text").value = ""; document.getElementById("output-text").value = ""; document.getElementById("input-info").innerHTML = ""; document.getElementById("output-info").innerHTML = ""; document.getElementById("input-selection-info").innerHTML = ""; document.getElementById("output-selection-info").innerHTML = ""; window.dispatchEvent(this.manager.statechange); }; × Search results Close "},"views_html_Manager.js.html":{"id":"views_html_Manager.js.html","title":"Source: views/html/Manager.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/Manager.js /** * This object controls the Waiters responsible for handling events from all areas of the app. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. */ var Manager = function(app) { this.app = app; // Define custom events /** * @event Manager#appstart */ this.appstart = new CustomEvent("appstart", {bubbles: true}); /** * @event Manager#operationadd */ this.operationadd = new CustomEvent("operationadd", {bubbles: true}); /** * @event Manager#operationremove */ this.operationremove = new CustomEvent("operationremove", {bubbles: true}); /** * @event Manager#oplistcreate */ this.oplistcreate = new CustomEvent("oplistcreate", {bubbles: true}); /** * @event Manager#statechange */ this.statechange = new CustomEvent("statechange", {bubbles: true}); // Define Waiter objects to handle various areas this.window = new WindowWaiter(this.app); this.controls = new ControlsWaiter(this.app, this); this.recipe = new RecipeWaiter(this.app, this); this.ops = new OperationsWaiter(this.app, this); this.input = new InputWaiter(this.app, this); this.output = new OutputWaiter(this.app, this); this.options = new OptionsWaiter(this.app); this.highlighter = new HighlighterWaiter(this.app); this.seasonal = new SeasonalWaiter(this.app, this); // Object to store dynamic handlers to fire on elements that may not exist yet this.dynamic_handlers = {}; this.initialise_event_listeners(); }; /** * Sets up the various components and listeners. */ Manager.prototype.setup = function() { this.recipe.initialise_operation_drag_n_drop(); this.controls.auto_bake_change(); this.seasonal.load(); }; /** * Main function to handle the creation of the event listeners. */ Manager.prototype.initialise_event_listeners = function() { // Global window.addEventListener("resize", this.window.window_resize.bind(this.window)); window.addEventListener("blur", this.window.window_blur.bind(this.window)); window.addEventListener("focus", this.window.window_focus.bind(this.window)); window.addEventListener("statechange", this.app.state_change.bind(this.app)); window.addEventListener("popstate", this.app.pop_state.bind(this.app)); // Controls document.getElementById("bake").addEventListener("click", this.controls.bake_click.bind(this.controls)); document.getElementById("auto-bake").addEventListener("change", this.controls.auto_bake_change.bind(this.controls)); document.getElementById("step").addEventListener("click", this.controls.step_click.bind(this.controls)); document.getElementById("clr-recipe").addEventListener("click", this.controls.clear_recipe_click.bind(this.controls)); document.getElementById("clr-breaks").addEventListener("click", this.controls.clear_breaks_click.bind(this.controls)); document.getElementById("save").addEventListener("click", this.controls.save_click.bind(this.controls)); document.getElementById("save-button").addEventListener("click", this.controls.save_button_click.bind(this.controls)); document.getElementById("save-link-recipe-checkbox").addEventListener("change", this.controls.slr_check_change.bind(this.controls)); document.getElementById("save-link-input-checkbox").addEventListener("change", this.controls.sli_check_change.bind(this.controls)); document.getElementById("load").addEventListener("click", this.controls.load_click.bind(this.controls)); document.getElementById("load-delete-button").addEventListener("click", this.controls.load_delete_click.bind(this.controls)); document.getElementById("load-name").addEventListener("change", this.controls.load_name_change.bind(this.controls)); document.getElementById("load-button").addEventListener("click", this.controls.load_button_click.bind(this.controls)); this.add_multi_event_listener("#save-text", "keyup paste", this.controls.save_text_change, this.controls); // Operations this.add_multi_event_listener("#search", "keyup paste search", this.ops.search_operations, this.ops); this.add_dynamic_listener(".op_list li.operation", "dblclick", this.ops.operation_dblclick, this.ops); document.getElementById("edit-favourites").addEventListener("click", this.ops.edit_favourites_click.bind(this.ops)); document.getElementById("save-favourites").addEventListener("click", this.ops.save_favourites_click.bind(this.ops)); document.getElementById("reset-favourites").addEventListener("click", this.ops.reset_favourites_click.bind(this.ops)); this.add_dynamic_listener(".op_list .op-icon", "mouseover", this.ops.op_icon_mouseover, this.ops); this.add_dynamic_listener(".op_list .op-icon", "mouseleave", this.ops.op_icon_mouseleave, this.ops); this.add_dynamic_listener(".op_list", "oplistcreate", this.ops.op_list_create, this.ops); this.add_dynamic_listener("li.operation", "operationadd", this.recipe.op_add.bind(this.recipe)); // Recipe this.add_dynamic_listener(".arg", "keyup", this.recipe.ing_change, this.recipe); this.add_dynamic_listener(".arg", "change", this.recipe.ing_change, this.recipe); this.add_dynamic_listener(".disable-icon", "click", this.recipe.disable_click, this.recipe); this.add_dynamic_listener(".breakpoint", "click", this.recipe.breakpoint_click, this.recipe); this.add_dynamic_listener("#rec_list li.operation", "dblclick", this.recipe.operation_dblclick, this.recipe); this.add_dynamic_listener("#rec_list li.operation > div", "dblclick", this.recipe.operation_child_dblclick, this.recipe); this.add_dynamic_listener("#rec_list .input-group .dropdown-menu a", "click", this.recipe.dropdown_toggle_click, this.recipe); this.add_dynamic_listener("#rec_list", "operationremove", this.recipe.op_remove.bind(this.recipe)); // Input this.add_multi_event_listener("#input-text", "keyup paste", this.input.input_change, this.input); document.getElementById("reset-layout").addEventListener("click", this.app.reset_layout.bind(this.app)); document.getElementById("clr-io").addEventListener("click", this.input.clear_io_click.bind(this.input)); document.getElementById("input-text").addEventListener("dragover", this.input.input_dragover.bind(this.input)); document.getElementById("input-text").addEventListener("dragleave", this.input.input_dragleave.bind(this.input)); document.getElementById("input-text").addEventListener("drop", this.input.input_drop.bind(this.input)); document.getElementById("input-text").addEventListener("scroll", this.highlighter.input_scroll.bind(this.highlighter)); document.getElementById("input-text").addEventListener("mouseup", this.highlighter.input_mouseup.bind(this.highlighter)); document.getElementById("input-text").addEventListener("mousemove", this.highlighter.input_mousemove.bind(this.highlighter)); this.add_multi_event_listener("#input-text", "mousedown dblclick select", this.highlighter.input_mousedown, this.highlighter); // Output document.getElementById("save-to-file").addEventListener("click", this.output.save_click.bind(this.output)); document.getElementById("switch").addEventListener("click", this.output.switch_click.bind(this.output)); document.getElementById("undo-switch").addEventListener("click", this.output.undo_switch_click.bind(this.output)); document.getElementById("output-text").addEventListener("scroll", this.highlighter.output_scroll.bind(this.highlighter)); document.getElementById("output-text").addEventListener("mouseup", this.highlighter.output_mouseup.bind(this.highlighter)); document.getElementById("output-text").addEventListener("mousemove", this.highlighter.output_mousemove.bind(this.highlighter)); document.getElementById("output-html").addEventListener("mouseup", this.highlighter.output_html_mouseup.bind(this.highlighter)); document.getElementById("output-html").addEventListener("mousemove", this.highlighter.output_html_mousemove.bind(this.highlighter)); this.add_multi_event_listener("#output-text", "mousedown dblclick select", this.highlighter.output_mousedown, this.highlighter); this.add_multi_event_listener("#output-html", "mousedown dblclick select", this.highlighter.output_html_mousedown, this.highlighter); // Options document.getElementById("options").addEventListener("click", this.options.options_click.bind(this.options)); document.getElementById("reset-options").addEventListener("click", this.options.reset_options_click.bind(this.options)); $(".option-item input:checkbox").on("switchChange.bootstrapSwitch", this.options.switch_change.bind(this.options)); $(".option-item input:checkbox").on("switchChange.bootstrapSwitch", this.options.set_word_wrap.bind(this.options)); this.add_dynamic_listener(".option-item input[type=number]", "keyup", this.options.number_change, this.options); this.add_dynamic_listener(".option-item input[type=number]", "change", this.options.number_change, this.options); this.add_dynamic_listener(".option-item select", "change", this.options.select_change, this.options); // Misc document.getElementById("alert-close").addEventListener("click", this.app.alert_close_click.bind(this.app)); }; /** * Adds an event listener to each element in the specified group. * * @param {string} selector - A selector string for the element group to add the event to, see * this.get_all() * @param {string} event_type - The event to listen for * @param {function} callback - The function to execute when the event is triggered * @param {Object} [scope=this] - The object to bind to the callback function * * @example * // Calls the clickable function whenever any element with the .clickable class is clicked * this.add_listeners(".clickable", "click", this.clickable, this); */ Manager.prototype.add_listeners = function(selector, event_type, callback, scope) { scope = scope || this; [].forEach.call(document.querySelectorAll(selector), function(el) { el.addEventListener(event_type, callback.bind(scope)); }); }; /** * Adds multiple event listeners to the specified element. * * @param {string} selector - A selector string for the element to add the events to * @param {string} event_types - A space-separated string of all the event types to listen for * @param {function} callback - The function to execute when the events are triggered * @param {Object} [scope=this] - The object to bind to the callback function * * @example * // Calls the search function whenever the the keyup, paste or search events are triggered on the * // search element * this.add_multi_event_listener("search", "keyup paste search", this.search, this); */ Manager.prototype.add_multi_event_listener = function(selector, event_types, callback, scope) { var evs = event_types.split(" "); for (var i = 0; i < evs.length; i++) { document.querySelector(selector).addEventListener(evs[i], callback.bind(scope)); } }; /** * Adds multiple event listeners to each element in the specified group. * * @param {string} selector - A selector string for the element group to add the events to * @param {string} event_types - A space-separated string of all the event types to listen for * @param {function} callback - The function to execute when the events are triggered * @param {Object} [scope=this] - The object to bind to the callback function * * @example * // Calls the save function whenever the the keyup or paste events are triggered on any element * // with the .saveable class * this.add_multi_event_listener(".saveable", "keyup paste", this.save, this); */ Manager.prototype.add_multi_event_listeners = function(selector, event_types, callback, scope) { var evs = event_types.split(" "); for (var i = 0; i < evs.length; i++) { this.add_listeners(selector, evs[i], callback, scope); } }; /** * Adds an event listener to the global document object which will listen on dynamic elements which * may not exist in the DOM yet. * * @param {string} selector - A selector string for the element(s) to add the event to * @param {string} event_type - The event(s) to listen for * @param {function} callback - The function to execute when the event(s) is/are triggered * @param {Object} [scope=this] - The object to bind to the callback function * * @example * // Pops up an alert whenever any button is clicked, even if it is added to the DOM after this * // listener is created * this.add_dynamic_listener("button", "click", alert, this); */ Manager.prototype.add_dynamic_listener = function(selector, event_type, callback, scope) { var event_config = { selector: selector, callback: callback.bind(scope || this) }; if (this.dynamic_handlers.hasOwnProperty(event_type)) { // Listener already exists, add new handler to the appropriate list this.dynamic_handlers[event_type].push(event_config); } else { this.dynamic_handlers[event_type] = [event_config]; // Set up listener for this new type document.addEventListener(event_type, this.dynamic_listener_handler.bind(this)); } }; /** * Handler for dynamic events. This function is called for any dynamic event and decides which * callback(s) to execute based on the type and selector. * * @param {Event} e - The event to be handled */ Manager.prototype.dynamic_listener_handler = function(e) { var handlers = this.dynamic_handlers[e.type], matches = e.target.matches || e.target.webkitMatchesSelector || e.target.mozMatchesSelector || e.target.msMatchesSelector || e.target.oMatchesSelector; for (var i = 0; i < handlers.length; i++) { if (matches && e.target[matches.name](handlers[i].selector)) { handlers[i].callback(e); } } }; × Search results Close "},"views_html_OperationsWaiter.js.html":{"id":"views_html_OperationsWaiter.js.html","title":"Source: views/html/OperationsWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/OperationsWaiter.js /* globals Sortable */ /** * Waiter to handle events related to the operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var OperationsWaiter = function(app, manager) { this.app = app; this.manager = manager; this.options = {}; this.remove_intent = false; }; /** * Handler for search events. * Finds operations which match the given search term and displays them under the search box. * * @param {event} e */ OperationsWaiter.prototype.search_operations = function(e) { var ops, selected; if (e.type == "search") { // Search e.preventDefault(); ops = document.querySelectorAll("#search-results li"); if (ops.length) { selected = this.get_selected_op(ops); if (selected > -1) { this.manager.recipe.add_operation(ops[selected].innerHTML); this.app.auto_bake(); } } } if (e.keyCode == 13) { // Return e.preventDefault(); } else if (e.keyCode == 40) { // Down e.preventDefault(); ops = document.querySelectorAll("#search-results li"); if (ops.length) { selected = this.get_selected_op(ops); if (selected > -1) { ops[selected].classList.remove("selected-op"); } if (selected == ops.length-1) selected = -1; ops[selected+1].classList.add("selected-op"); } } else if (e.keyCode == 38) { // Up e.preventDefault(); ops = document.querySelectorAll("#search-results li"); if (ops.length) { selected = this.get_selected_op(ops); if (selected > -1) { ops[selected].classList.remove("selected-op"); } if (selected === 0) selected = ops.length; ops[selected-1].classList.add("selected-op"); } } else { var search_results_el = document.getElementById("search-results"), el = e.target, str = el.value; while (search_results_el.firstChild) { search_results_el.removeChild(search_results_el.firstChild); } $("#categories .in").collapse("hide"); if (str) { var matched_ops = this.filter_operations(str, true), matched_ops_html = ""; for (var i = 0; i < matched_ops.length; i++) { matched_ops_html += matched_ops[i].to_stub_html(); } search_results_el.innerHTML = matched_ops_html; search_results_el.dispatchEvent(this.manager.oplistcreate); } } }; /** * Filters operations based on the search string and returns the matching ones. * * @param {string} search_str * @param {boolean} highlight - Whether or not to highlight the matching string in the operation * name and description * @returns {string[]} */ OperationsWaiter.prototype.filter_operations = function(search_str, highlight) { var matched_ops = [], matched_descs = []; search_str = search_str.toLowerCase(); for (var op_name in this.app.operations) { var op = this.app.operations[op_name], name_pos = op_name.toLowerCase().indexOf(search_str), desc_pos = op.description.toLowerCase().indexOf(search_str); if (name_pos >= 0 || desc_pos >= 0) { var operation = new HTMLOperation(op_name, this.app.operations[op_name], this.app, this.manager); if (highlight) { operation.highlight_search_string(search_str, name_pos, desc_pos); } if (name_pos < 0) { matched_ops.push(operation); } else { matched_descs.push(operation); } } } return matched_descs.concat(matched_ops); }; /** * Finds the operation which has been selected using keyboard shortcuts. This will have the class * 'selected-op' set. Returns the index of the operation within the given list. * * @param {element[]} ops * @returns {number} */ OperationsWaiter.prototype.get_selected_op = function(ops) { for (var i = 0; i < ops.length; i++) { if (ops[i].classList.contains("selected-op")) { return i; } } return -1; }; /** * Handler for oplistcreate events. * * @listens Manager#oplistcreate * @param {event} e */ OperationsWaiter.prototype.op_list_create = function(e) { this.manager.recipe.create_sortable_seed_list(e.target); $("[data-toggle=popover]").popover(); }; /** * Handler for operation doubleclick events. * Adds the operation to the recipe and auto bakes. * * @param {event} e */ OperationsWaiter.prototype.operation_dblclick = function(e) { var li = e.target; this.manager.recipe.add_operation(li.textContent); this.app.auto_bake(); }; /** * Handler for edit favourites click events. * Sets up the 'Edit favourites' pane and displays it. * * @param {event} e */ OperationsWaiter.prototype.edit_favourites_click = function(e) { e.preventDefault(); e.stopPropagation(); // Add favourites to modal var fav_cat = this.app.categories.filter(function(c) { return c.name == "Favourites"; })[0]; var html = ""; for (var i = 0; i < fav_cat.ops.length; i++) { var op_name = fav_cat.ops[i]; var operation = new HTMLOperation(op_name, this.app.operations[op_name], this.app, this.manager); html += operation.to_stub_html(true); } var edit_favourites_list = document.getElementById("edit-favourites-list"); edit_favourites_list.innerHTML = html; this.remove_intent = false; var editable_list = Sortable.create(edit_favourites_list, { filter: '.remove-icon', onFilter: function (evt) { var el = editable_list.closest(evt.item); if (el) { $(el).popover("destroy"); el.parentNode.removeChild(el); } }, onEnd: function(evt) { if (this.remove_intent) evt.item.remove(); }.bind(this), }); Sortable.utils.on(edit_favourites_list, "dragleave", function() { this.remove_intent = true; }.bind(this)); Sortable.utils.on(edit_favourites_list, "dragover", function() { this.remove_intent = false; }.bind(this)); $("#edit-favourites-list [data-toggle=popover]").popover(); $("#favourites-modal").modal(); }; /** * Handler for save favourites click events. * Saves the selected favourites and reloads them. */ OperationsWaiter.prototype.save_favourites_click = function() { var favourites_list = [], favs = document.querySelectorAll("#edit-favourites-list li"); for (var i = 0; i < favs.length; i++) { favourites_list.push(favs[i].textContent); } this.app.save_favourites(favourites_list); this.app.load_favourites(); this.app.populate_operations_list(); this.manager.recipe.initialise_operation_drag_n_drop(); }; /** * Handler for reset favourites click events. * Resets favourites to their defaults. */ OperationsWaiter.prototype.reset_favourites_click = function() { this.app.reset_favourites(); }; /** * Handler for op_icon mouseover events. * Hides any popovers already showing on the operation so that there aren't two at once. * * @param {event} e */ OperationsWaiter.prototype.op_icon_mouseover = function(e) { var op_el = e.target.parentNode; if (e.target.getAttribute("data-toggle") == "popover") { $(op_el).popover("hide"); } }; /** * Handler for op_icon mouseleave events. * If this icon created a popover and we're moving back to the operation element, display the * operation popover again. * * @param {event} e */ OperationsWaiter.prototype.op_icon_mouseleave = function(e) { var op_el = e.target.parentNode, to_el = e.toElement || e.relatedElement; if (e.target.getAttribute("data-toggle") == "popover" && to_el === op_el) { $(op_el).popover("show"); } }; × Search results Close "},"views_html_OptionsWaiter.js.html":{"id":"views_html_OptionsWaiter.js.html","title":"Source: views/html/OptionsWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/OptionsWaiter.js /** * Waiter to handle events related to the CyberChef options. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. */ var OptionsWaiter = function(app) { this.app = app; }; /** * Loads options and sets values of switches and inputs to match them. * * @param {Object} options */ OptionsWaiter.prototype.load = function(options) { $(".option-item input:checkbox").bootstrapSwitch({ size: "small", animate: false, }); for (var option in options) { this.app.options[option] = options[option]; } // Set options to match object var cboxes = document.querySelectorAll("#options-body input[type=checkbox]"); for (var i = 0; i < cboxes.length; i++) { $(cboxes[i]).bootstrapSwitch("state", this.app.options[cboxes[i].getAttribute("option")]); } var nboxes = document.querySelectorAll("#options-body input[type=number]"); for (i = 0; i < nboxes.length; i++) { nboxes[i].value = this.app.options[nboxes[i].getAttribute("option")]; nboxes[i].dispatchEvent(new CustomEvent("change", {bubbles: true})); } var selects = document.querySelectorAll("#options-body select"); for (i = 0; i < selects.length; i++) { selects[i].value = this.app.options[selects[i].getAttribute("option")]; selects[i].dispatchEvent(new CustomEvent("change", {bubbles: true})); } }; /** * Handler for options click events. * Dispays the options pane. */ OptionsWaiter.prototype.options_click = function() { $("#options-modal").modal(); }; /** * Handler for reset options click events. * Resets options back to their default values. */ OptionsWaiter.prototype.reset_options_click = function() { this.load(this.app.doptions); }; /** * Handler for switch change events. * Modifies the option state and saves it to local storage. * * @param {event} e * @param {boolean} state */ OptionsWaiter.prototype.switch_change = function(e, state) { var el = e.target, option = el.getAttribute("option"); this.app.options[option] = state; localStorage.setItem("options", JSON.stringify(this.app.options)); }; /** * Handler for number change events. * Modifies the option value and saves it to local storage. * * @param {event} e */ OptionsWaiter.prototype.number_change = function(e) { var el = e.target, option = el.getAttribute("option"); this.app.options[option] = parseInt(el.value, 10); localStorage.setItem("options", JSON.stringify(this.app.options)); }; /** * Handler for select change events. * Modifies the option value and saves it to local storage. * * @param {event} e */ OptionsWaiter.prototype.select_change = function(e) { var el = e.target, option = el.getAttribute("option"); this.app.options[option] = el.value; localStorage.setItem("options", JSON.stringify(this.app.options)); }; /** * Sets or unsets word wrap on the input and output depending on the word_wrap option value. */ OptionsWaiter.prototype.set_word_wrap = function() { document.getElementById("input-text").classList.remove("word-wrap"); document.getElementById("output-text").classList.remove("word-wrap"); document.getElementById("output-html").classList.remove("word-wrap"); document.getElementById("input-highlighter").classList.remove("word-wrap"); document.getElementById("output-highlighter").classList.remove("word-wrap"); if (!this.app.options.word_wrap) { document.getElementById("input-text").classList.add("word-wrap"); document.getElementById("output-text").classList.add("word-wrap"); document.getElementById("output-html").classList.add("word-wrap"); document.getElementById("input-highlighter").classList.add("word-wrap"); document.getElementById("output-highlighter").classList.add("word-wrap"); } }; × Search results Close "},"views_html_OutputWaiter.js.html":{"id":"views_html_OutputWaiter.js.html","title":"Source: views/html/OutputWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/OutputWaiter.js /** * Waiter to handle events related to the output. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var OutputWaiter = function(app, manager) { this.app = app; this.manager = manager; }; /** * Gets the output string from the output textarea. * * @returns {string} */ OutputWaiter.prototype.get = function() { return document.getElementById("output-text").value; }; /** * Sets the output in the output textarea. * * @param {string} data_str - The output string/HTML * @param {string} type - The data type of the output * @param {number} duration - The length of time (ms) it took to generate the output */ OutputWaiter.prototype.set = function(data_str, type, duration) { var output_text = document.getElementById("output-text"), output_html = document.getElementById("output-html"), output_highlighter = document.getElementById("output-highlighter"), input_highlighter = document.getElementById("input-highlighter"); if (type == "html") { output_text.style.display = "none"; output_html.style.display = "block"; output_highlighter.display = "none"; input_highlighter.display = "none"; output_text.value = ""; output_html.innerHTML = data_str; // Execute script sections var script_elements = output_html.querySelectorAll("script"); for (var i = 0; i < script_elements.length; i++) { try { eval(script_elements[i].innerHTML); // jshint ignore:line } catch (err) { console.error(err); } } } else { output_text.style.display = "block"; output_html.style.display = "none"; output_highlighter.display = "block"; input_highlighter.display = "block"; output_text.value = Utils.printable(data_str, true); output_html.innerHTML = ""; } this.manager.highlighter.remove_highlights(); var lines = data_str.count("\\n") + 1; this.set_output_info(data_str.length, lines, duration); }; /** * Displays information about the output. * * @param {number} length - The length of the current output string * @param {number} lines - The number of the lines in the current output string * @param {number} duration - The length of time (ms) it took to generate the output */ OutputWaiter.prototype.set_output_info = function(length, lines, duration) { var width = length.toString().length; width = width < 4 ? 4 : width; var length_str = Utils.pad(length.toString(), width, " ").replace(/ /g, "&nbsp;"); var lines_str = Utils.pad(lines.toString(), width, " ").replace(/ /g, "&nbsp;"); var time_str = Utils.pad(duration.toString() + "ms", width, " ").replace(/ /g, "&nbsp;"); document.getElementById("output-info").innerHTML = "time: " + time_str + "<br>length: " + length_str + "<br>lines: " + lines_str; document.getElementById("input-selection-info").innerHTML = ""; document.getElementById("output-selection-info").innerHTML = ""; }; /** * Handler for save click events. * Saves the current output to a file, downloaded as a URL octet stream. */ OutputWaiter.prototype.save_click = function() { var data = Utils.to_base64(this.app.dish_str), filename = window.prompt("Please enter a filename:", "download.dat"); if (filename) { var el = document.createElement("a"); el.setAttribute("href", "data:application/octet-stream;base64;charset=utf-8," + data); el.setAttribute("download", filename); // Firefox requires that the element be added to the DOM before it can be clicked el.style.display = "none"; document.body.appendChild(el); el.click(); el.remove(); } }; /** * Handler for switch click events. * Moves the current output into the input textarea. */ OutputWaiter.prototype.switch_click = function() { this.switch_orig_data = this.manager.input.get(); document.getElementById("undo-switch").disabled = false; this.app.set_input(this.app.dish_str); }; /** * Handler for undo switch click events. * Removes the output from the input and replaces the input that was removed. */ OutputWaiter.prototype.undo_switch_click = function() { this.app.set_input(this.switch_orig_data); document.getElementById("undo-switch").disabled = true; }; × Search results Close "},"views_html_RecipeWaiter.js.html":{"id":"views_html_RecipeWaiter.js.html","title":"Source: views/html/RecipeWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/RecipeWaiter.js /* globals Sortable */ /** * Waiter to handle events related to the recipe. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var RecipeWaiter = function(app, manager) { this.app = app; this.manager = manager; this.remove_intent = false; }; /** * Sets up the drag and drop capability for operations in the operations and recipe areas. */ RecipeWaiter.prototype.initialise_operation_drag_n_drop = function() { var rec_list = document.getElementById("rec_list"), op_lists = document.querySelectorAll(".category .op_list"); // Recipe list Sortable.create(rec_list, { group: "recipe", sort: true, animation: 0, delay: 0, filter: ".arg-input,.arg", // Relies on commenting out a line in Sortable.js which calls evt.preventDefault() setData: function(dataTransfer, drag_el) { dataTransfer.setData("Text", drag_el.querySelector(".arg-title").textContent); }, onEnd: function(evt) { if (this.remove_intent) { evt.item.remove(); evt.target.dispatchEvent(this.manager.operationremove); } }.bind(this) }); Sortable.utils.on(rec_list, "dragover", function() { this.remove_intent = false; }.bind(this)); Sortable.utils.on(rec_list, "dragleave", function() { this.remove_intent = true; this.app.progress = 0; }.bind(this)); // Favourites category document.querySelector("#categories a").addEventListener("dragover", this.fav_dragover.bind(this)); document.querySelector("#categories a").addEventListener("dragleave", this.fav_dragleave.bind(this)); document.querySelector("#categories a").addEventListener("drop", this.fav_drop.bind(this)); }; /** * Creates a drag-n-droppable seed list of operations. * * @param {element} list_el - The list the initialise */ RecipeWaiter.prototype.create_sortable_seed_list = function(list_el) { Sortable.create(list_el, { group: { name: "recipe", pull: "clone", put: false }, sort: false, setData: function(dataTransfer, drag_el) { dataTransfer.setData("Text", drag_el.textContent); }, onStart: function(evt) { $(evt.item).popover("destroy"); evt.item.setAttribute("data-toggle", "popover-disabled"); }, onEnd: this.op_sort_end.bind(this) }); }; /** * Handler for operation sort end events. * Removes the operation from the list if it has been dropped outside. If not, adds it to the list * at the appropriate place and initialises it. * * @fires Manager#operationadd * @param {event} evt */ RecipeWaiter.prototype.op_sort_end = function(evt) { if (this.remove_intent) { if (evt.item.parentNode.id == "rec_list") { evt.item.remove(); } return; } // Reinitialise the popover on the original element in the ops list because for some reason it // gets destroyed and recreated. $(evt.clone).popover(); $(evt.clone).children("[data-toggle=popover]").popover(); if (evt.item.parentNode.id !== "rec_list") { return; } this.build_recipe_operation(evt.item); evt.item.dispatchEvent(this.manager.operationadd); }; /** * Handler for favourite dragover events. * If the element being dragged is an operation, displays a visual cue so that the user knows it can * be dropped here. * * @param {event} e */ RecipeWaiter.prototype.fav_dragover = function(e) { if (e.dataTransfer.effectAllowed !== "move") return false; e.stopPropagation(); e.preventDefault(); if (e.target.className && e.target.className.indexOf("category-title") > -1) { // Hovering over the a e.target.classList.add("favourites-hover"); } else if (e.target.parentNode.className && e.target.parentNode.className.indexOf("category-title") > -1) { // Hovering over the Edit button e.target.parentNode.classList.add("favourites-hover"); } else if (e.target.parentNode.parentNode.className && e.target.parentNode.parentNode.className.indexOf("category-title") > -1) { // Hovering over the image on the Edit button e.target.parentNode.parentNode.classList.add("favourites-hover"); } }; /** * Handler for favourite dragleave events. * Removes the visual cue. * * @param {event} e */ RecipeWaiter.prototype.fav_dragleave = function(e) { e.stopPropagation(); e.preventDefault(); document.querySelector("#categories a").classList.remove("favourites-hover"); }; /** * Handler for favourite drop events. * Adds the dragged operation to the favourites list. * * @param {event} e */ RecipeWaiter.prototype.fav_drop = function(e) { e.stopPropagation(); e.preventDefault(); e.target.classList.remove("favourites-hover"); var op_name = e.dataTransfer.getData("Text"); this.app.add_favourite(op_name); }; /** * Handler for ingredient change events. * * @fires Manager#statechange */ RecipeWaiter.prototype.ing_change = function() { window.dispatchEvent(this.manager.statechange); }; /** * Handler for disable click events. * Updates the icon status. * * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.disable_click = function(e) { var icon = e.target; if (icon.getAttribute("disabled") == "false") { icon.setAttribute("disabled", "true"); icon.classList.add("disable-icon-selected"); icon.parentNode.parentNode.classList.add("disabled"); } else { icon.setAttribute("disabled", "false"); icon.classList.remove("disable-icon-selected"); icon.parentNode.parentNode.classList.remove("disabled"); } this.app.progress = 0; window.dispatchEvent(this.manager.statechange); }; /** * Handler for breakpoint click events. * Updates the icon status. * * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.breakpoint_click = function(e) { var bp = e.target; if (bp.getAttribute("break") == "false") { bp.setAttribute("break", "true"); bp.classList.add("breakpoint-selected"); } else { bp.setAttribute("break", "false"); bp.classList.remove("breakpoint-selected"); } window.dispatchEvent(this.manager.statechange); }; /** * Handler for operation doubleclick events. * Removes the operation from the recipe and auto bakes. * * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.operation_dblclick = function(e) { e.target.remove(); window.dispatchEvent(this.manager.statechange); }; /** * Handler for operation child doubleclick events. * Removes the operation from the recipe. * * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.operation_child_dblclick = function(e) { e.target.parentNode.remove(); window.dispatchEvent(this.manager.statechange); }; /** * Generates a configuration object to represent the current recipe. * * @returns {recipe_config} */ RecipeWaiter.prototype.get_config = function() { var config = [], ingredients, ing_list, disabled, bp, item, operations = document.querySelectorAll("#rec_list li.operation"); for (var i = 0; i < operations.length; i++) { ingredients = []; disabled = operations[i].querySelector(".disable-icon"); bp = operations[i].querySelector(".breakpoint"); ing_list = operations[i].querySelectorAll(".arg"); for (var j = 0; j < ing_list.length; j++) { if (ing_list[j].getAttribute("type") == "checkbox") { // checkbox ingredients[j] = ing_list[j].checked; } else if (ing_list[j].classList.contains("toggle-string")) { // toggle_string ingredients[j] = { option: ing_list[j].previousSibling.children[0].textContent.slice(0, -1), string: ing_list[j].value }; } else { // all others ingredients[j] = ing_list[j].value; } } item = { op: operations[i].querySelector(".arg-title").textContent, args: ingredients }; if (disabled && disabled.getAttribute("disabled") == "true") { item.disabled = true; } if (bp && bp.getAttribute("break") == "true") { item.breakpoint = true; } config.push(item); } return config; }; /** * Moves or removes the breakpoint indicator in the recipe based on the position. * * @param {number} position */ RecipeWaiter.prototype.update_breakpoint_indicator = function(position) { var operations = document.querySelectorAll("#rec_list li.operation"); for (var i = 0; i < operations.length; i++) { if (i == position) { operations[i].classList.add("break"); } else { operations[i].classList.remove("break"); } } }; /** * Given an operation stub element, this function converts it into a full recipe element with * arguments. * * @param {element} el - The operation stub element from the operations pane */ RecipeWaiter.prototype.build_recipe_operation = function(el) { var op_name = el.textContent; var op = new HTMLOperation(op_name, this.app.operations[op_name], this.app, this.manager); el.innerHTML = op.to_full_html(); if (this.app.operations[op_name].flow_control) { el.classList.add("flow-control-op"); } // Disable auto-bake if this is a manual op - this should be moved to the 'operationadd' // handler after event restructuring if (op.manual_bake && this.app.auto_bake_) { this.manager.controls.set_auto_bake(false); this.app.alert("Auto-Bake is disabled by default when using this operation.", "info", 5000); } }; /** * Adds the specified operation to the recipe. * * @fires Manager#operationadd * @param {string} name - The name of the operation to add * @returns {element} */ RecipeWaiter.prototype.add_operation = function(name) { var item = document.createElement("li"); item.classList.add("operation"); item.innerHTML = name; this.build_recipe_operation(item); document.getElementById("rec_list").appendChild(item); item.dispatchEvent(this.manager.operationadd); return item; }; /** * Removes all operations from the recipe. * * @fires Manager#operationremove */ RecipeWaiter.prototype.clear_recipe = function() { var rec_list = document.getElementById("rec_list"); while (rec_list.firstChild) { rec_list.removeChild(rec_list.firstChild); } rec_list.dispatchEvent(this.manager.operationremove); }; /** * Handler for operation dropdown events from toggle_string arguments. * Sets the selected option as the name of the button. * * @param {event} e */ RecipeWaiter.prototype.dropdown_toggle_click = function(e) { var el = e.target, button = el.parentNode.parentNode.previousSibling; button.innerHTML = el.textContent + " <span class='caret'></span>"; this.ing_change(); }; /** * Handler for operationadd events. * * @listens Manager#operationadd * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.op_add = function(e) { window.dispatchEvent(this.manager.statechange); }; /** * Handler for operationremove events. * * @listens Manager#operationremove * @fires Manager#statechange * @param {event} e */ RecipeWaiter.prototype.op_remove = function(e) { window.dispatchEvent(this.manager.statechange); }; × Search results Close "},"views_html_SeasonalWaiter.js.html":{"id":"views_html_SeasonalWaiter.js.html","title":"Source: views/html/SeasonalWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/SeasonalWaiter.js /** * Waiter to handle seasonal events and easter eggs. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. * @param {Manager} manager - The CyberChef event manager. */ var SeasonalWaiter = function(app, manager) { this.app = app; this.manager = manager; }; /** * Loads all relevant items depending on the current date. */ SeasonalWaiter.prototype.load = function() { var now = new Date(); // Snowfall if (now.getMonth() == 11 && now.getDate() > 12) { // Dec 13 -> Dec 31 this.app.options.snow = false; this.create_snow_option(); this.manager.add_dynamic_listener(".option-item input:checkbox[option='snow']", "switchChange.bootstrapSwitch", this.let_it_snow, this); this.manager.add_window_listener("resize", this.let_it_snow, this); this.manager.add_listeners(".btn", "click", this.shake_off_snow, this); if (now.getDate() == 25) this.let_it_snow(); } // SpiderChef // if (now.getMonth() == 3 && now.getDate() == 1) { // Apr 1 // this.insert_spider_icons(); // this.insert_spider_text(); // } // Konami code this.kkeys = []; window.addEventListener("keydown", this.konami_code_listener.bind(this)); }; /** * Replaces chef icons with spider icons. * #spiderchef */ SeasonalWaiter.prototype.insert_spider_icons = function() { var spider16 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB3UlEQVQ4y2NgGJaAmYGBgVnf0oKJgYGBobWtXamqqoYTn2I4CI+LTzM2NTulpKbu+vPHz2dV5RWlluZmi3j5+KqFJSSEzpw8uQPdAEYYIzo5Kfjrl28rWFlZzjAzMYuEBQao3Lh+g+HGvbsMzExMDN++fWf4/PXLBzY2tqYNK1f2+4eHM2xcuRLigsT09Igf3384MTExbf767etBI319jU8fPsi+//jx/72HDxh5uLkZ7ty7y/Dz1687Avz8n2UUFR3Z2NjOySoqfmdhYGBg+PbtuwI7O8e5H79+8X379t357PnzYo+ePP7y6cuXc9++f69nYGRsvf/w4XdtLS2R799/bBUWFHr57sP7Jbs3b/ZkzswvUP3165fZ7z9//r988WIVAyPDr8tXr576+u3bpb9//7YwMjKeV1dV41NWVGoVEhDgPH761DJREeHaz1+/lqlpafUx6+jrRfz4+fPy+w8fTu/fsf3uw7t3L39+//4cv7DwGQYGhpdPbt9m4BcRFlNWVJC4fuvWASszs4C379792Ldt2xZBUdEdDP5hYSqQGIjDGa965uYKCalpZQwMDAxhMTG9DAwMDLaurhIkJY7A8IgGBgYGBgd3Dz2yUpeFo6O4rasrA9T24ZRxAAMTwMpgEJwLAAAAAElFTkSuQmCC", spider32 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACYVBMVEUAAAAcJSU2Pz85QkM9RUWEhIWMjI2MkJEcJSU2Pz85QkM9RUWWlpc9RUVXXl4cJSU2Pz85QkM8REU9RUVRWFh6ens9RUVCSkpNVFRdY2McJSU5QkM7REQ9RUVGTk5KUlJQVldcY2Rla2uTk5WampscJSVUWltZX2BrcHF1e3scJSUjLCw9RUVASEhFTU1HTk9bYWJeZGRma2xudHV1eHiZmZocJSUyOjpJUFFQVldSWlpTWVpXXl5YXl5rb3B9fX6RkZIcJSUmLy8tNTU9RUVFTU1IT1BOVldRV1hTWlp0enocJSUfKChJUFBWXV1hZ2hnbGwcJSVETExLUlJLU1NNVVVPVlZYXl9cY2RiaGlobW5rcXFyd3h0eHgcJSUpMTFDS0tQV1dRV1hSWFlWXF1bYWJma2tobW5uc3SsrK0cJSVJUFBMVFROVlZVW1xZX2BdYmNhZ2hjaGhla2tqcHBscHE4Pz9KUlJRWVlSWVlXXF1aYGFbYWFfZWZlampqbW4cJSUgKSkiKysuNjY0PD01PT07QkNES0tHTk5JUFBMUlNMU1NOU1ROVVVPVVZRVlZRV1dSWVlWXFxXXV5aX2BbYWFbYWJcYmJcYmNcY2RdYmNgZmZhZmdkaWpkampkamtlamtla2tma2tma2xnbG1obW5pbG1pb3Bqb3Brb3BtcXJudHVvcHFvcXJvc3NwcXNwdXVxc3RzeXl1eXp2eXl3ent6e3x+gYKAhISBg4SKi4yLi4yWlpeampudnZ6fn6CkpaanqKiur6+vr7C4uLm6urq6u7u8vLy9vb3Av8DR0dL2b74UAAAAgHRSTlMAEBAQEBAQECAgICAgMDBAQEBAQEBAUFBQUGBgYGBgYGBgYGBgcHBwcHCAgICAgICAgICAgICPj4+Pj4+Pj4+Pj5+fn5+fn5+fn5+vr6+vr6+/v7+/v7+/v7+/v7+/z8/Pz8/Pz8/Pz8/P39/f39/f39/f39/f7+/v7+/v7+/v78x6RlYAAAGBSURBVDjLY2AYWUCSgUGAk4GBTdlUhQebvP7yjIgCPQbWzBMnjx5wwJSX37Rwfm1isqj9/iPHTuxYlyeMJi+yunfptBkZOw/uWj9h3vatcycu8eRGlldb3Vsts3ph/cFTh7fN3bCoe2Vf8+TZoQhTvBa6REozVC7cuPvQnmULJm1e2z+308eyJieEBSLPXbKQIUqQIczk+N6eNaumtnZMaWhaHM89m8XVCqJA02Y5w0xmga6yfVsamtrN4xoXNzS0JTHkK3CXy4EVFMumcxUy2LbENTVkZfEzMDAudtJyTmNwS2XQreAFyvOlK9louDNVaXurmjkGgnTMkWDgXswtNouFISEX6Awv+RihQi5OcYY4DtVARpCCFCMGhiJ1hjwFBpagEAaWEpFoC0WQOCOjFMRRwXYMDB4BDLJ+QLYsg7GBGjtasLnEMjCIrWBgyAZ7058FI9x1SoFEnTCDsCyIhynPILYYSFgbYpUDA5bpQBluXzxpI1yYAbd2sCMYRhwAAHB9ZPztbuMUAAAAAElFTkSuQmCC", spider64 = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJZUlEQVR42u1ZaXMU1xXlJ+gHpFITOy5sAcnIYCi2aIL2bTSSZrSP1NpHK41kISQBHgFaQIJBCMwi4TFUGYcPzggwEMcxHVGxQaag5QR/np/QP+Hmnsdr0hpmtEACwulb9aq7p7d3zz333Pt61q2zzTbbbLPNNttss80222yzzTbbVmu7MzKcJRWVkXjntqam6jyURPeGQqeTpqbOqp+evxC5dGlam5m5rE3PzGi8Hzx/4aLzbXDe09HdYxwZHaPc4mLFXVoW9pRXGNv3pDngeHlNLfE2Ljjj4xPOUGjSYKfpq6/+TLdv36bbX39Nt27epGvXvqSLl6bp3LlPtdOnz7jWrPNZ7kLCKCovp5bOTmP/4EHq6vmYMtzuSKbbbQCAHE8Rxd47MjrmuHjxkjF3/z4tLCzQkyc6PX78mB49ekQPHjygub/P0d27f6FrX/6JpqbO0YkT48E1R/sCr9cYHZ+gqrp64mPq+riXcoqKKC0vP9q6VyV/fQOiH+LrsPVY7z82PBKZnb1Bd+7cpfn5eQbgCT1hAADC/MN5uj83R99881eanZ2lL5gN/nrxjihAXwvOJ7l9vuiBQ4dF9LEtLC0V+2rv/ijTX6luaCS3rxT57wADAMTBQ4c9PIIDg4PBwYOHaHhklM5MnSWkwLff/o0+v3qVHv34Iz344QEDc4d8VVXUEAhQXXMzVdQqzKweKq6oABARzOGNOZ+Wl6fD6T25ubQrPT0E5xF93o82tbdjkkZ+iZfAAgbD6fZ6o339A8S0p7HjJ2h4eIQOHf6EujlV9nX3UOj0JDXzfXje+KlTdOPGDeF0T1+fGHg+2JSen08tHZ0CiPySEoPn8vq1IaOgIAzneQK0UzjcQd6qaqrlCVfV1+tpubnRnv5+2p2ZqYMF/oZGPTh0xLhy5Sr9wLn9j++/p5nLn9FxBoLZQJ1dKrkys6iYNeTExEnx3PqWFuF4W9deKq2upkEGCyzyMBC709MFC7r391Fjayv9MSdHZyCU1xJ5FjrNdN6VnU1KS4CjU4Yoh/m8CsezCguFJgAMV05ueP+BfhF5OL+gL9A/f/qJ7t3TaPLMFB09eoy6mTkMGg2PjTELOsS20OcTACgMKqJugqA0NtE7ycn0202b6A+ZmYIVAAKApGZlgRHB/0lqQPAqFEVE9hntM0R0ZblTzeswWdCeU8HAtYW+Uu0AUx+0f/jwoXD+56c/073v7tHU2XMiFbrUfVTNAtfL10FIAQL2QftsBrOEnavld5kg7E7PoF+99x79ev162rJrV9RMi6a2dvKUlQsR5uAgII7/ivMsbEE4g2hggjzC7LQL1OftovoO0WJKUn0gYEAn2hmMXo4QHIXQIfLfsfOXPwuLvB86cpQqamooyEzg1BLMwv04RkoE+B3B4BBBMHEcCwIP0N+ByJdUVhpgBJ7j4WvdANDjeTUglOaWEChfJF7uJzPX2HEPaj1vg7EAbHO5QnAeIPgqKvUB7gtAdbBgcvKMqOnc/NAIVwCcq21qElFnCgvaI9cBBFKhlSPbPzBIbbzduGULpWzfLkDAdZs++sgEwSlZqoIJMg2CzFSNGzODwdBfOi26+w4YTCm9LhDQwQDzdzguFf4FALjciTws8/u1yyx2N2/dovPnL9DRY8PkZ204xtuhoSM0wI7V8DEiirQCCHD+99u2CUdx3Lmvmz7kfemoGDgPEDr4HNKAf1MlAC4wgMGLWFJXQUrklZSEX6rLE2rOyDIQGlhgBUAyYFEZkm2vAGVi4qQ+x83M0389pevXr6OToy07d4qcR+krr/KzqpeJ/IfjGO+npDx3FCKHVPjd1q2LAMBI3ryZ9vL7U56BEzLfD80ACFba876OlGCQV9dAcT0Pyw7PgWij6zPP5Xt9EYgg+n3LosdVzdfz5CI8KY1LH31+5Yro9KanZwjHmPzmHTsoOeVDemfDBuE8dGVnWpqx3unUrE4CDLCAG64XAHB88IFgQV5xMY7DFmc16A6CZvnNBYYVcW+yKj0A/VHTsQ8dwMPNc6X+Gg0VIGbVpzYGWundjRujmGQWi9Eol7+TJ0/R2Nhx2sNlM9YJRPDdDRsM5DGPJB4KHOIhngHhAwixAGAAuDZ2lsuiYnFWBQOYrdEYNochilyiV6YHoH+rRNJkAG+fUw31PzU7Z1EFKPD69CIuQ1Bm6URoh8tFmVym3nc6rZOPyi0cD8HxeHPg3x2InNrbS79JTsYzNXmPuBclsO3ZvKwAOJEGsmI5rT0M+gSf3y9K5LIA1LUEIlL1k0AhCYBH5r9TCqBqib4D+c/1PyInGOThkvuaHCYALhlpbQWBMGR/4IpzTqlpbKQyf0045vdoe0zATHagSYMeWFMkbscnHRYPZjoFJaIiUkz9EJy15j/X3qCsAIqMcFjSWrNE1Iygg0fEmrtLzEUTdT/OhBFht9fHDVCbEUt3LJxi08B8Xj6vTDESriq9lVWqBECgHujqiqAUmufb1X3cfRXoluhjZWiwkOnSUcUS6ZD8LUmmhks6b5j1ezkAkAKZBe5QvPPcNBnoCawMwT66Qxk0R2xwwRAui2iSDGuaPDcubzo3EJq8wcx/9Vmk3QryH42QBQCFF0UagIiJtjX6DskIXTLEucJSHIIIMuO0BOcjn3A3ybU/lu5RCUBc5qA0Ih0Q2EWiCPRk7VfMNhjLW1zETic1tLYZDMKyuSsdfh5l6bwho5+0il4kyA0VohlNcF5FP8DlWo/VB16HYB2hJ0pzgIe2mcXxP2IOumPRY17U0tll8KIkZNb+sppafOxYkQPSaYfchyYoL9GMqWYpTLRIq1QUcT4O3aPQgqVqPwIOIMwDhzX6mQUFIQAgo+9MzcrWrML3mj6+YIKiFCZyhL87RqVQKrEskF+P1BUvfLCAkfRwoPUtq6l5o5+lZb5SolJo6oT8avTCl+c9OTmat6pKW8mLkvBpGzlvsiGuQr4ZEEwA1EQgoR/gNtxIxKBluz+OtMJiF31jHxqXBiAqAUj4WRxpADFM0DCFlv1khvX7Wol4vF4AIldVVxdZqlrIfiCYQPHDy6bAGv7nKYRVY6JewExZVAP+ey5Rv+Ba97aaUHMW5NauLmMZFkegBb/EP14d6NoS9QLWFSzWBmuZza8CQmSpXsAqmGtVy14VALWuuYWWy+W3OteXa4jwceQX6+BKG6J1/8+2VCNkm2222WabbbbZZpttttlmm22rt38DCdA0vq3bcAkAAAAASUVORK5CYII="; // Favicon document.querySelector("link[rel=icon]").setAttribute("href", "data:image/png;base64," + spider16); // Bake button document.querySelector("#bake img").setAttribute("src", "data:image/png;base64," + spider32); // About box document.querySelector(".about-img-left").setAttribute("src", "data:image/png;base64," + spider64); }; /** * Replaces all instances of the word "cyber" with "spider". * #spiderchef */ SeasonalWaiter.prototype.insert_spider_text = function() { // Title document.title = document.title.replace(/Cyber/g, "Spider"); // Body SeasonalWaiter.tree_walk(document.body, function(node) { // process only text nodes if (node.nodeType == 3) { node.nodeValue = node.nodeValue.replace(/Cyber/g, "Spider"); } }, true); // Bake button SeasonalWaiter.tree_walk(document.getElementById("bake-group"), function(node) { // process only text nodes if (node.nodeType == 3) { node.nodeValue = node.nodeValue.replace(/Bake/g, "Spin"); } }, true); // Recipe title document.querySelector("#recipe .title").innerHTML = "Web"; }; /** * Adds an option to make it snow. * #letitsnow */ SeasonalWaiter.prototype.create_snow_option = function() { var options_body = document.getElementById("options-body"), option_item = document.createElement("div"); option_item.className = "option-item"; option_item.innerHTML = "<input type='checkbox' option='snow' checked />\\ Let it snow"; options_body.appendChild(option_item); this.manager.options.load(); }; /** * Initialises a snowstorm. * #letitsnow */ SeasonalWaiter.prototype.let_it_snow = function() { $(document).snowfall("clear"); if (!this.app.options.snow) return; var options = {}, firefox_version = navigator.userAgent.match(/Firefox\\/(\\d\\d?)/); if (firefox_version && parseInt(firefox_version[1], 10) < 30) { // Firefox < 30 options = { flakeCount : 10, flakeColor : '#fff', flakePosition: 'absolute', minSize : 1, maxSize : 2, minSpeed : 1, maxSpeed : 5, round : false, shadow : false, collection : false, collectionHeight : 20, deviceorientation : true }; } else { // All other browsers options = { flakeCount : 35, //35 flakeColor : '#fff', flakePosition: 'absolute', minSize : 5, maxSize : 8, minSpeed : 1, maxSpeed : 5, round : true, shadow : true, collection : ".btn", collectionHeight : 20, deviceorientation : true }; } $(document).snowfall(options); }; /** * When a button is clicked, shake the snow off that button. * #letitsnow */ SeasonalWaiter.prototype.shake_off_snow = function(e) { var el = e.target, rect = el.getBoundingClientRect(), canvases = document.querySelectorAll("canvas.snowfall-canvas"), canvas = null, remove_func = function() { ctx.clearRect(0, 0, canvas.width, canvas.height); $(this).fadeIn(); }; for (var i = 0; i < canvases.length; i++) { canvas = canvases[i]; if (canvas.style.left == rect.left + "px" && canvas.style.top == (rect.top - 20) + "px") { var ctx = canvas.getContext("2d"); $(canvas).fadeOut("slow", remove_func); break; } } }; /** * Listen for the Konami code sequence of keys. Turn the page upside down if they are all heard in * sequence. * #konamicode */ SeasonalWaiter.prototype.konami_code_listener = function(e) { this.kkeys.push(e.keyCode); var konami = [38,38,40,40,37,39,37,39,66,65]; for (var i = 0; i < this.kkeys.length; i++) { if (this.kkeys[i] != konami[i]) { this.kkeys = []; break; } if (i == konami.length - 1) { $("body").children().toggleClass("konami"); this.kkeys = []; } } }; /** * Walks through the entire DOM starting at the specified element and operates on each node. * * @static * @param {element} parent - The DOM node to start from * @param {Function} fn - The callback function to operate on each node * @param {booleam} all_nodes - Whether to operate on every node or not */ SeasonalWaiter.tree_walk = (function() { // Create closure for constants var skipTags = { "SCRIPT": true, "IFRAME": true, "OBJECT": true, "EMBED": true, "STYLE": true, "LINK": true, "META": true }; return function(parent, fn, all_nodes) { var node = parent.firstChild; while (node && node != parent) { if (all_nodes || node.nodeType === 1) { if (fn(node) === false) { return(false); } } // If it's an element && // has children && // has a tagname && is not in the skipTags list // then, we can enumerate children if (node.nodeType === 1 && node.firstChild && !(node.tagName && skipTags[node.tagName])) { node = node.firstChild; } else if (node.nextSibling) { node = node.nextSibling; } else { // No child and no nextsibling // Find parent that has a nextSibling while ((node = node.parentNode) != parent) { if (node.nextSibling) { node = node.nextSibling; break; } } } } }; })(); × Search results Close "},"views_html_WindowWaiter.js.html":{"id":"views_html_WindowWaiter.js.html","title":"Source: views/html/WindowWaiter.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/WindowWaiter.js /** * Waiter to handle events related to the window object. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 * * @constructor * @param {HTMLApp} app - The main view object for CyberChef. */ var WindowWaiter = function(app) { this.app = app; }; /** * Handler for window resize events. * Resets the layout of CyberChef's panes after 200ms (so that continuous resizing doesn't cause * continuous resetting). */ WindowWaiter.prototype.window_resize = function() { clearTimeout(this.reset_layout_timeout); this.reset_layout_timeout = setTimeout(this.app.reset_layout.bind(this.app), 200); }; /** * Handler for window blur events. * Saves the current time so that we can calculate how long the window was unfocussed for when * focus is returned. */ WindowWaiter.prototype.window_blur = function() { this.window_blur_time = new Date().getTime(); }; /** * Handler for window focus events. * * When a browser tab is unfocused and the browser has to run lots of dynamic content in other * tabs, it swaps out the memory for that tab. * If the CyberChef tab has been unfocused for more than a minute, we run a silent bake which will * force the browser to load and cache all the relevant JavaScript code needed to do a real bake. * This will stop baking taking a long time when the CyberChef browser tab has been unfocused for * a long time and the browser has swapped out all its memory. */ WindowWaiter.prototype.window_focus = function() { var unfocused_time = new Date().getTime() - this.window_blur_time; if (unfocused_time > 60000) { this.app.silent_bake(); } }; × Search results Close "},"views_html_main.js.html":{"id":"views_html_main.js.html","title":"Source: views/html/main.js","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Source: views/html/main.js /* globals moment */ /** * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 */ /** * Main function used to build the CyberChef web app. */ var main = function() { var default_favourites = [ "To Base64", "From Base64", "To Hex", "From Hex", "To Hexdump", "From Hexdump", "URL Decode", "Regular expression", "Entropy", "Fork" ]; var default_options = { update_url : true, show_highlighter : true, treat_as_utf8 : true, word_wrap : true, show_errors : true, error_timeout : 4000, auto_bake_threshold : 200, attempt_highlight : true, snow : false, }; document.removeEventListener("DOMContentLoaded", main, false); window.app = new HTMLApp(Categories, OperationConfig, default_favourites, default_options); window.app.setup(); }; // Fix issues with browsers that don't support console.log() window.console = console || {log: function() {}, error: function() {}}; window.compile_time = moment.tz("<%= grunt.template.today() %>", "ddd MMM D YYYY HH:mm:ss", "UTC").valueOf(); window.compile_message = "<%= compile_msg %>"; document.addEventListener("DOMContentLoaded", main, false); × Search results Close "},"global.html":{"id":"global.html","title":"Global","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Global Members <constant> Categories :Array.<CatConf> Categories of operations. Type: Array.<CatConf> Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: config/Categories.js, line 20 <constant> OperationConfig :Object.<string, OpConf> Operation configuration objects. Type: Object.<string, OpConf> Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: config/OperationConfig.js, line 48 Methods main() Main function used to build the CyberChef web app. Source: views/html/main.js, line 12 Type Definitions CatConf Type definition for a CatConf. Type: Object Properties: Name Type Description name string The display name for the category ops Array.<string> A list of the operations to be included in this category Source: config/Categories.js, line 1 OpConf Type definition for an OpConf. Type: Object Properties: Name Type Argument Description description html A description of the operation with optional HTML tags run function The function which can be called the run the operation input_type string output_type string highlight function | boolean <optional> A function to calculate the highlight offset, or true if the offset does not change highlight_reverse function | boolean <optional> A function to calculate the highlight offset in reverse, or true if the offset does not change flow_control boolean <optional> True if the operation is for Flow Control args Array.<ArgConf> <optional> A list of configuration objects for the arguments Source: config/OperationConfig.js, line 8 ArgConf Type definition for an ArgConf. Type: Object Properties: Name Type Argument Description name string The display name of the argument type string The data type of the argument value * disable_args Array.<number> <optional> A list of the indices of the operation's arguments which should be toggled on or off when this argument is changed disabled boolean <optional> Whether or not this argument starts off disabled Source: config/OperationConfig.js, line 25 × Search results Close "},"classes.list.html":{"id":"classes.list.html","title":"Classes","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Classes Classes Chef Dish Ingredient Operation Recipe ControlsWaiter HTMLApp HTMLCategory HTMLIngredient HTMLOperation HighlighterWaiter InputWaiter Manager OperationsWaiter OptionsWaiter OutputWaiter RecipeWaiter SeasonalWaiter WindowWaiter Namespaces FlowControl Utils Base Base64 BitwiseOp ByteRepr CharEnc Checksum Cipher Code Compress Convert DateTime Endian Entropy Extract FileType HTML HTTP Hash Hexdump IP JS MAC Numberwang OS PublicKey Punycode QuotedPrintable Rotate SeqUtils StrUtils Tidy URL_ UUID Unicode Events appstart Source: views/html/Manager.js, line 15 operationadd Source: views/html/Manager.js, line 19 Listeners of This Event: RecipeWaiter#op_add operationremove Source: views/html/Manager.js, line 23 Listeners of This Event: RecipeWaiter#op_remove oplistcreate Source: views/html/Manager.js, line 27 Listeners of This Event: OperationsWaiter#op_list_create statechange Source: views/html/Manager.js, line 31 Listeners of This Event: HTMLApp#state_change × Search results Close "},"namespaces.list.html":{"id":"namespaces.list.html","title":"Namespaces","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespaces Classes Chef Dish Ingredient Operation Recipe ControlsWaiter HTMLApp HTMLCategory HTMLIngredient HTMLOperation HighlighterWaiter InputWaiter Manager OperationsWaiter OptionsWaiter OutputWaiter RecipeWaiter SeasonalWaiter WindowWaiter Namespaces FlowControl Utils Base Base64 BitwiseOp ByteRepr CharEnc Checksum Cipher Code Compress Convert DateTime Endian Entropy Extract FileType HTML HTTP Hash Hexdump IP JS MAC Numberwang OS PublicKey Punycode QuotedPrintable Rotate SeqUtils StrUtils Tidy URL_ UUID Unicode Events appstart Source: views/html/Manager.js, line 15 operationadd Source: views/html/Manager.js, line 19 Listeners of This Event: RecipeWaiter#op_add operationremove Source: views/html/Manager.js, line 23 Listeners of This Event: RecipeWaiter#op_remove oplistcreate Source: views/html/Manager.js, line 27 Listeners of This Event: OperationsWaiter#op_list_create statechange Source: views/html/Manager.js, line 31 Listeners of This Event: HTMLApp#state_change × Search results Close "},"index.html":{"id":"index.html","title":"Index","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain CyberChef####The Cyber Swiss Army Knife CyberChef is a simple, intuitive web app for carrying out all manner of "cyber" operations within a web browser. These operations include creating hexdumps, simple encoding like XOR or Base64, more complex encryption like AES, DES and Blowfish, data compression and decompression, calculating hashes and checksums, IPv6 and X.509 parsing, and much more. The tool is designed to enable both technical and non-technical analysts to manipulate data in complex ways without having to deal with complex tools or algorithms. It was conceived, designed, built and incrementally improved by an analyst in their 10% innovation time over several years. Every effort has been made to structure the code in a readable and extendable format, however it should be noted that the analyst is not a professional developer and the code has not been peer-reviewed for compliance with a formal specification. Live demoCyberChef is still under active development. As a result, it shouldn't be considered a finished product. There is still testing and bug fixing to do, new features to be added and additional documentation to write. Please contribute! Cryptographic operations in CyberChef should not be relied upon to provide security in any situation. No guarantee is offered for their correctness. A live demo can be found here - have fun!Note: Use Chrome or Firefox, see the Browser Support section below for details. How it worksThere are four main areas in CyberChef: The input box in the top right, where you can paste, type or drag the data you want to operate on. The output box in the bottom right, where the outcome of the specified processing will be displayed. The operations list on the far left, where you can find all the operations that CyberChef is capable of in categorised lists, or by searching. The recipe area in the middle, where you drag the operations that you want to use and specify arguments and options. You can use as many operations as you like in simple or complex ways. Some examples are as follows: Decode a Base64-encoded string Convert a date and time to a different time zone Parse a Teredo IPv6 address Convert data from a hexdump, then decompress Display multiple timestamps as full dates Carry out different operations on data of different types Features Drag and drop Operations can be dragged in and out of the recipe list, or reorganised. Files can be dragged over the input box to load them directly. Auto Bake Whenever you modify the input or the recipe, CyberChef will automatically “bake” for you and produce the output immediately. This can be turned off and operated manually if it is affecting performance (if the input is very large, for instance). If any bake takes longer than 200 milliseconds, auto bake will be switched off automatically to prevent further performance issues. Breakpoints You can set breakpoints on any operation in your recipe to pause execution before running it. You can also step through the recipe one operation at a time to see what the data looks like at each stage. Save and load recipes If you come up with an awesome recipe that you know you’ll want to use again, just click save and add it to your local storage. It'll be waiting for you next time you visit CyberChef. You can also copy a URL which includes your recipe and input which can be shared with others. Search If you know the name of the operation you want or a word associated with it, start typing it into the search field and any matching operations will immediately be shown. Highlighting When you highlight text in the input or output, the offset and length values will be displayed and, if possible, the corresponding data will be highlighted in the output or input respectively (example: highlight the word 'question' in the input to see where it appears in the output). Save to file and load from file You can save the output to a file at any time or load a file by dragging and dropping it into the input field (note that files larger than about 500kb may cause your browser to hang or even crash due to the way that browsers handle large amounts of textual data). CyberChef is entirely client-side It should be noted that none of your input or recipe configuration is ever sent to the CyberChef web server - all processing is carried out within your browser, on your own computer. Due to this feature, CyberChef can be compiled into a single HTML file. You can download this file and drop it into a virtual machine, share it with other people, or use it independently on your desktop. Browser supportCyberChef works well in modern versions of Google Chrome and Mozilla Firefox. To aid in the efficient development of new features and operations, there has been no attempt to maintain support for any version of Microsoft Internet Explorer. Microsoft Edge is currently unsupported, but if anyone would like to contribute compatibility fixes, they would be appreciated. ContributingAn installation walkthrough, how-to guides for adding new operations, descriptions of the repository structure, available data types and coding conventions can all be found in the project wiki pages. Sign the GCHQ Contributor Licence Agreement Push your changes to your fork. Submit a pull request. × Search results Close "},"Chef.html":{"id":"Chef.html","title":"Class: Chef","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Chef Chef new Chef() The main controller for CyberChef. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Chef.js, line 10 Methods bake(input_text, recipe_config, options, progress [, step]) Runs the recipe over the input. Parameters: Name Type Argument Description input_text string The input data as a string recipe_config Array.<Object> The recipe configuration object options Object The options object storing various user choices Properties Name Type Description attemp_highlight boolean Whether or not to attempt highlighting progress number The position in the recipe to start from step number <optional> The number of operations to execute Source: core/Chef.js, line 33 Returns: response Type Object response.result - The output of the recipe Type string response.type - The data type of the result Type string response.progress - The position that we have got to in the recipe Type number response.options - The app options object (which may have been changed) Type number response.duration - The number of ms it took to execute the recipe Type number response.error - The error object thrown by a failed operation (false if no error) Type number silent_bake(recipe_config) When a browser tab is unfocused and the browser has to run lots of dynamic content in other tabs,it swaps out the memory for that tab. If the CyberChef tab has been unfocused for more than aminute, we run a silent bake which will force the browser to load and cache all the relevantJavaScript code needed to do a real bake. This will stop baking taking a long time when the CyberChef browser tab has been unfocused for along time and the browser has swapped out all its memory. The output will not be modified (hence "silent" bake). This will only actually execute the recipe if auto-bake is enabled, otherwise it will just loadthe recipe, ingredients and dish. Parameters: Name Type Description recipe_config Array.<Object> The recipe configuration object Source: core/Chef.js, line 109 Returns: The time it took to run the silent bake in milliseconds. Type number × Search results Close "},"Dish.html":{"id":"Dish.html","title":"Class: Dish","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Dish Dish new Dish(value, type) The data being operated on by each operation. Parameters: Name Type Description value byte_array | string | number The value of the input data. type number The data type of value, see Dish enums. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Dish.js, line 12 Members <static, readonly> BYTE_ARRAY Dish data type enum for byte arrays. Source: core/Dish.js, line 23 <static, readonly> STRING Dish data type enum for strings. Source: core/Dish.js, line 29 <static, readonly> NUMBER Dish data type enum for numbers. Source: core/Dish.js, line 35 <static, readonly> HTML Dish data type enum for HTML. Source: core/Dish.js, line 41 Methods <static> type_enum(type_str) Returns the data type enum for the given type string. Parameters: Name Type Description type_str string The name of the data type. Source: core/Dish.js, line 51 Returns: The data type enum value. Type number <static> enum_lookup(type_enum) Returns the data type string for the given type enum. Parameters: Name Type Description type_enum string The enum value of the data type. Source: core/Dish.js, line 78 Returns: The data type as a string. Type number set(value, type) Sets the data value and type and then validates them. Parameters: Name Type Description value byte_array | string | number The value of the input data. type number The data type of value, see Dish enums. Source: core/Dish.js, line 100 get(type) Returns the value of the data in the type format specified. Parameters: Name Type Description type number The data type of value, see Dish enums. Source: core/Dish.js, line 117 Returns: The value of the output data. Type byte_array | string | number translate(to_type) Translates the data to the given type format. Parameters: Name Type Description to_type number The data type of value, see Dish enums. Source: core/Dish.js, line 130 valid() Validates that the value is the type that has been specified.May have to disable parts of BYTE_ARRAY validation if it effects performance. Source: core/Dish.js, line 172 Returns: Whether the data is valid or not. Type boolean × Search results Close "},"FlowControl.html":{"id":"FlowControl.html","title":"Namespace: FlowControl","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: FlowControl FlowControl Flow Control operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/FlowControl.js, line 10 Members <static, constant> FORK_DELIM Default Value: \\n Source: core/FlowControl.js, line 16 <static, constant> MERGE_DELIM Default Value: \\n Source: core/FlowControl.js, line 21 <static, constant> JUMP_NUM Source: core/FlowControl.js, line 95 <static, constant> MAX_JUMPS Default Value: 10 Source: core/FlowControl.js, line 100 Methods <static> run_fork(state) Fork operation. Parameters: Name Type Description state Object The current state of the recipe. Properties Name Type Description progress number The current position in the recipe. dish Dish The Dish being operated on. op_list Array.<Operation> The list of operations in the recipe. Source: core/FlowControl.js, line 32 Returns: The updated state of the recipe. Type Object <static> run_merge(state) Merge operation. Parameters: Name Type Description state Object The current state of the recipe. Properties Name Type Description progress number The current position in the recipe. dish Dish The Dish being operated on. op_list Array.<Operation> The list of operations in the recipe. Source: core/FlowControl.js, line 84 Returns: The updated state of the recipe. Type Object <static> run_jump(state) Jump operation. Parameters: Name Type Description state Object The current state of the recipe. Properties Name Type Description progress number The current position in the recipe. dish Dish The Dish being operated on. op_list Array.<Operation> The list of operations in the recipe. num_jumps number The number of jumps taken so far. Source: core/FlowControl.js, line 112 Returns: The updated state of the recipe. Type Object <static> run_cond_jump(state) Conditional Jump operation. Parameters: Name Type Description state Object The current state of the recipe. Properties Name Type Description progress number The current position in the recipe. dish Dish The Dish being operated on. op_list Array.<Operation> The list of operations in the recipe. num_jumps number The number of jumps taken so far. Source: core/FlowControl.js, line 137 Returns: The updated state of the recipe. Type Object <static> run_return(state) Return operation. Parameters: Name Type Description state Object The current state of the recipe. Properties Name Type Description progress number The current position in the recipe. dish Dish The Dish being operated on. op_list Array.<Operation> The list of operations in the recipe. Source: core/FlowControl.js, line 166 Returns: The updated state of the recipe. Type Object × Search results Close "},"Ingredient.html":{"id":"Ingredient.html","title":"Class: Ingredient","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Ingredient Ingredient new Ingredient(ingredient_config) The arguments to operations. Parameters: Name Type Description ingredient_config Object Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Ingredient.js, line 11 Methods <private> _parse_config(ingredient_config) Reads and parses the given config. Parameters: Name Type Description ingredient_config Object Source: core/Ingredient.js, line 28 get_config() Returns the value of the Ingredient as it should be displayed in a recipe config. Source: core/Ingredient.js, line 39 Returns: Type * set_value(value) Sets the value of the Ingredient. Parameters: Name Type Description value * Source: core/Ingredient.js, line 49 <static> prepare(data, type) Most values will be strings when they are entered. This function converts them to the correcttype. Parameters: Name Type Description data * type string The name of the data type. Source: core/Ingredient.js, line 62 × Search results Close "},"Operation.html":{"id":"Operation.html","title":"Class: Operation","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Operation Operation new Operation(operation_name, operation_config) The Operation specified by the user to be run. Parameters: Name Type Description operation_name string operation_config Object Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Operation.js, line 12 Methods <private> _parse_config(operation_config) Reads and parses the given config. Parameters: Name Type Description operation_config Object Source: core/Operation.js, line 36 get_config() Returns the value of the Operation as it should be displayed in a recipe config. Source: core/Operation.js, line 58 Returns: Type Object add_ingredient(ingredient) Adds a new Ingredient to this Operation. Parameters: Name Type Description ingredient Ingredient Source: core/Operation.js, line 79 set_ing_values(ing_values) Set the Ingredient values for this Operation. Parameters: Name Type Description ing_values Array.<Object> Source: core/Operation.js, line 89 get_ing_values() Get the Ingredient values for this Operation. Source: core/Operation.js, line 101 Returns: Type Array.<Object> set_breakpoint(value) Set whether this Operation has a breakpoint. Parameters: Name Type Description value boolean Source: core/Operation.js, line 115 is_breakpoint() Returns true if this Operation has a breakpoint set. Source: core/Operation.js, line 125 Returns: Type boolean set_disabled(value) Set whether this Operation is disabled. Parameters: Name Type Description value boolean Source: core/Operation.js, line 135 is_disabled() Returns true if this Operation is disabled. Source: core/Operation.js, line 145 Returns: Type boolean is_flow_control() Returns true if this Operation is a flow control. Source: core/Operation.js, line 155 Returns: Type boolean × Search results Close "},"Recipe.html":{"id":"Recipe.html","title":"Class: Recipe","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Recipe Recipe new Recipe(recipe_config) The Recipe controls a list of Operations and the Dish they operate on. Parameters: Name Type Description recipe_config Object Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Recipe.js, line 11 Methods <private> _parse_config(recipe_config) Reads and parses the given config. Parameters: Name Type Description recipe_config Object Source: core/Recipe.js, line 26 get_config() Returns the value of the Recipe as it should be displayed in a recipe config. Source: core/Recipe.js, line 44 Returns: Type * add_operation(operation) Adds a new Operation to this Recipe. Parameters: Name Type Description operation Operation Source: core/Recipe.js, line 60 add_operations(operations) Adds a list of Operations to this Recipe. Parameters: Name Type Description operations Array.<Operation> Source: core/Recipe.js, line 70 set_breakpoint(position, value) Set a breakpoint on a specified Operation. Parameters: Name Type Description position number The index of the Operation value boolean Source: core/Recipe.js, line 81 remove_breaks_up_to(pos) Remove breakpoints on all Operations in the Recipe up to the specified position. Used by FlowControl Fork operation. Parameters: Name Type Description pos number Source: core/Recipe.js, line 96 contains_flow_control() Returns true if there is an Flow Control Operation in this Recipe. Source: core/Recipe.js, line 108 Returns: Type boolean last_op_index( [start_index]) Returns the index of the last Operation index that will be executed, taking into account disabledOperations and breakpoints. Parameters: Name Type Argument Default Description start_index number <optional> 0 The index to start searching from Source: core/Recipe.js, line 123 Returns: (number} execute(dish [, start_from]) Executes each operation in the recipe over the given Dish. Parameters: Name Type Argument Default Description dish Dish start_from number <optional> 0 The index of the Operation to start executing from Source: core/Recipe.js, line 144 Returns: The final progress through the recipe Type number to_string() Returns the recipe configuration in string format. Source: core/Recipe.js, line 202 Returns: Type string from_string(recipe_str) Creates a Recipe from a given configuration string. Parameters: Name Type Description recipe_str string Source: core/Recipe.js, line 212 × Search results Close "},"Utils.html":{"id":"Utils.html","title":"Namespace: Utils","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Utils Utils Utility functions for use in operations, the core framework and the stage. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: core/Utils.js, line 12 Members <private, static, constant> UNIC_WIN1251_MAP Mapping of Unicode code points to Windows-1251 Source: core/Utils.js, line 468 <private, static, constant> WIN1251_UNIC_MAP Mapping of Windows-1251 code points to Unicode Source: core/Utils.js, line 504 <static, constant> char_rep A mapping of names of delimiter characters to their symbols. Source: core/Utils.js, line 933 <static, constant> regex_rep A mapping of names of delimiter characters to regular expressions which can select them. Source: core/Utils.js, line 951 <static, constant> format A mapping of string formats to their classes in the CryptoJS library. Source: core/Utils.js, line 967 Methods <static> chr(o) Translates an ordinal into a character. Parameters: Name Type Description o number Source: core/Utils.js, line 24 Returns: Type char Example // returns 'a' Utils.chr(97); <static> ord(c) Translates a character into an ordinal. Parameters: Name Type Description c char Source: core/Utils.js, line 39 Returns: Type number Example // returns 97 Utils.ord('a'); <static> pad_left(str, max [, chr]) Adds leading zeros to strings Parameters: Name Type Argument Default Description str string String to add leading characters to. max number Maximum width of the string. chr char <optional> '0' The character to pad with. Source: core/Utils.js, line 65 Returns: Type string Example // returns "0a" Utils.pad_left("a", 2); // returns "000a" Utils.pad_left("a", 4); // returns "xxxa" Utils.pad_left("a", 4, "x"); // returns "bcabchello" Utils.pad_left("hello", 10, "abc"); <static> pad_right(str, max [, chr]) Adds trailing spaces to strings. Parameters: Name Type Argument Default Description str string String to add trailing characters to. max number Maximum width of the string. chr char <optional> '0' The character to pad with. Source: core/Utils.js, line 89 Returns: Type string Example // returns "a " Utils.pad_right("a", 4); // returns "axxx" Utils.pad_right("a", 4, "x"); <static> pad_left() Source: core/Utils.js, line 99 <static> truncate(str, max [, suffix]) Truncates a long string to max length and adds suffix. Parameters: Name Type Argument Default Description str string String to truncate max number Maximum length of the final string suffix string <optional> '...' The string to add to the end of the final string Source: core/Utils.js, line 119 Returns: Type string Example // returns "A long..." Utils.truncate("A long string", 9); // returns "A long s-" Utils.truncate("A long string", 9, "-"); <static> hex(c [, length]) Converts a character or number to its hex representation. Parameters: Name Type Argument Default Description c char | number length number <optional> 2 The width of the resulting hex number. Source: core/Utils.js, line 142 Returns: Type string Example // returns "6e" Utils.hex("n"); // returns "6e" Utils.hex(110); <static> bin(c [, length]) Converts a character or number to its binary representation. Parameters: Name Type Argument Default Description c char | number length number <optional> 8 The width of the resulting binary number. Source: core/Utils.js, line 163 Returns: Type string Example // returns "01101110" Utils.bin("n"); // returns "01101110" Utils.bin(110); <static> printable(str [, preserve_ws]) Returns a string with all non-printable chars as dots, optionally preserving whitespace. Parameters: Name Type Argument Default Description str string The input string to display. preserve_ws boolean <optional> false Whether or not to print whitespace. Source: core/Utils.js, line 177 Returns: Type string <static> parse_escaped_chars(str) Parse a string entered by a user and replace escaped chars with the bytes they represent. Parameters: Name Type Description str string Source: core/Utils.js, line 204 Returns: Type string Example // returns "\\x00" Utils.parse_escaped_chars("\\\\x00"); // returns "\\n" Utils.parse_escaped_chars("\\\\n"); <static> expand_alph_range(alph_str) Expand an alphabet range string into a list of the characters in that range. Parameters: Name Type Description alph_str string Source: core/Utils.js, line 241 Returns: Type Array.<char> Example // returns ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] Utils.expand_alph_range("0-9"); // returns ["a", "b", "c", "d", "0", "1", "2", "3", "+", "/"] Utils.expand_alph_range("a-d0-3+/"); // returns ["a", "b", "c", "d", "0", "-", "3"] Utils.expand_alph_range("a-d0\\\\-3") <static> hex_to_byte_array(hex_str) Translates a hex string into an array of bytes. Parameters: Name Type Description hex_str string Source: core/Utils.js, line 278 Returns: Type byte_array Example // returns [0xfe, 0x09, 0xa7] Utils.hex_to_byte_array("fe09a7"); <static> byte_array_to_hex(byte_array) Translates an array of bytes to a hex string. Parameters: Name Type Description byte_array byte_array Source: core/Utils.js, line 300 Returns: Type string Example // returns "fe09a7" Utils.byte_array_to_hex([0xfe, 0x09, 0xa7]); <static> str_to_byte_array(str) Converts a string to a byte array.Treats the string as UTF-8 if any values are over 255. Parameters: Name Type Description str string Source: core/Utils.js, line 324 Returns: Type byte_array Example // returns [72,101,108,108,111] Utils.str_to_byte_array("Hello"); // returns [228,189,160,229,165,189] Utils.str_to_byte_array("你好"); <static> str_to_utf8_byte_array(str) Converts a string to a UTF-8 byte array. Parameters: Name Type Description str string Source: core/Utils.js, line 350 Returns: Type byte_array Example // returns [72,101,108,108,111] Utils.str_to_utf8_byte_array("Hello"); // returns [228,189,160,229,165,189] Utils.str_to_utf8_byte_array("你好"); <static> str_to_charcode(str) Converts a string to a charcode array Parameters: Name Type Description str string Source: core/Utils.js, line 373 Returns: Type byte_array Example // returns [72,101,108,108,111] Utils.str_to_charcode("Hello"); // returns [20320,22909] Utils.str_to_charcode("你好"); <static> byte_array_to_utf8(byte_array) Attempts to convert a byte array to a UTF-8 string. Parameters: Name Type Description byte_array byte_array Source: core/Utils.js, line 396 Returns: Type string Example // returns "Hello" Utils.byte_array_to_utf8([72,101,108,108,111]); // returns "你好" Utils.byte_array_to_utf8([228,189,160,229,165,189]); <static> byte_array_to_chars(byte_array) Converts a charcode array to a string. Parameters: Name Type Description byte_array byte_array Source: core/Utils.js, line 429 Returns: Type string Example // returns "Hello" Utils.byte_array_to_chars([72,101,108,108,111]); // returns "你好" Utils.byte_array_to_chars([20320,22909]); <static> word_array_to_byte_array(word_array) Converts a CryptoJS.lib.WordArray to a byte_array. Parameters: Name Type Description word_array CryptoJS.lib.WordArray Source: core/Utils.js, line 449 Returns: Type byte_array Example // returns [84, 101, 115, 116] Utils.word_array_to_byte_array(CryptoJS.enc.Hex.parse("54657374")); <static> unicode_to_win1251(unic_str) Converts a Unicode string to Windows-1251 encoding Parameters: Name Type Description unic_str string Source: core/Utils.js, line 546 Returns: String encoded in Windows-1251 Type string Example // returns "îáíîâëåííàÿ òåõíè÷êà ïî Áîèíãó. îðèãèíàë ó ìåíÿ. çàáåðåòå êîãäà áóäåòå â ÊÈ" Utils.unicode_to_win1251("обновленная техничка по Боингу. оригинал у меня. заберете когда будете в КИ"); <static> win1251_to_unicode(win1251_str) Converts a Windows-1251 string to Unicode encoding Parameters: Name Type Description win1251_str string Source: core/Utils.js, line 570 Returns: String encoded in Unicode Type string Example // returns "обновленная техничка по Боингу. оригинал у меня. заберете когда будете в КИ" Utils.unicode_to_win1251("îáíîâëåííàÿ òåõíè÷êà ïî Áîèíãó. îðèãèíàë ó ìåíÿ. çàáåðåòå êîãäà áóäåòå â ÊÈ"); <static> to_base64(data [, alphabet]) Base64's the input byte array using the given alphabet, returning a string. Parameters: Name Type Argument Description data byte_array | string alphabet string <optional> Source: core/Utils.js, line 598 Returns: Type string Example // returns "SGVsbG8=" Utils.to_base64([72, 101, 108, 108, 111]); // returns "SGVsbG8=" Utils.to_base64("Hello"); <static> from_base64(data [, alphabet] [, return_type] [, remove_non_alph_chars]) UnBase64's the input string using the given alphabet, returning a byte array. Parameters: Name Type Argument Default Description data byte_array alphabet string <optional> return_type string <optional> "string" Either "string" or "byte_array" remove_non_alph_chars boolean <optional> true Source: core/Utils.js, line 652 Returns: Type byte_array Example // returns "Hello" Utils.from_base64("SGVsbG8="); // returns [72, 101, 108, 108, 111] Utils.from_base64("SGVsbG8=", null, "byte_array"); <static> to_hex(data [, delim] [, padding]) Convert a byte array into a hex string. Parameters: Name Type Argument Default Description data byte_array delim string <optional> " " padding number <optional> 2 Source: core/Utils.js, line 718 Returns: Type string Example // returns "0a 14 1e" Utils.to_hex([10,20,30]); // returns "0a:14:1e" Utils.to_hex([10,20,30], ":"); <static> to_hex_fast(data) Convert a byte array into a hex string as efficiently as possible with no options. Parameters: Name Type Description data byte_array Source: core/Utils.js, line 750 Returns: Type string Example // returns "0a141e" Utils.to_hex([10,20,30]); <static> from_hex(data [, delim] [, byte_len]) Convert a hex string into a byte array. Parameters: Name Type Argument Default Description data string delim string <optional> byte_len number <optional> 2 Source: core/Utils.js, line 779 Returns: Type byte_array Example // returns [10,20,30] Utils.from_hex("0a 14 1e"); // returns [10,20,30] Utils.from_hex("0a:14:1e", "Colon"); <static> parse_csv(data) Parses CSV data and returns it as a two dimensional array or strings. Parameters: Name Type Description data string Source: core/Utils.js, line 805 Returns: Type Array.<Array.<string>> Example // returns [["head1", "head2"], ["data1", "data2"]] Utils.parse_csv("head1,head2\\ndata1,data2"); <static> strip_html_tags(html_str, remove_script_and_style) Removes all HTML (or XML) tags from the input string. Parameters: Name Type Description html_str string remove_script_and_style boolean Flag to specify whether to remove entire script or style blocks Source: core/Utils.js, line 859 Returns: Type string Example // returns "Test" Utils.strip_html_tags("<div>Test</div>"); <static> escape_html(str) Escapes HTML tags in a string to stop them being rendered Parameters: Name Type Description str string Source: core/Utils.js, line 877 Returns: string Example // return "A &lt;script> tag" Utils.escape_html("A <script> tag"); <static> fuzzy_time(ms) Expresses a number of milliseconds in a human readable format. Range Sample Output 0 to 45 seconds a few seconds ago 45 to 90 seconds a minute ago 90 seconds to 45 minutes 2 minutes ago ... 45 minutes ago 45 to 90 minutes an hour ago 90 minutes to 22 hours 2 hours ago ... 22 hours ago 22 to 36 hours a day ago 36 hours to 25 days 2 days ago ... 25 days ago 25 to 45 days a month ago 45 to 345 days 2 months ago ... 11 months ago 345 to 545 days (1.5 years) a year ago 546 days+ 2 years ago ... 20 years ago Parameters: Name Type Description ms number Source: core/Utils.js, line 909 Returns: Type string Example // returns "3 minutes" Utils.fuzzy_time(152435); // returns "5 days" Utils.fuzzy_time(456851321); <static> extend(a, b) Adds the properties of one Object to another. Parameters: Name Type Description a Object b Object Source: core/Utils.js, line 921 Returns: Type Object × Search results Close "},"Base.html":{"id":"Base.html","title":"Namespace: Base","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Base Base Numerical base operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Base.js, line 10 Members <static, constant> DEFAULT_RADIX Default Value: 36 Source: operations/Base.js, line 16 Methods <static> run_to(input, args) To Base operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Base.js, line 25 Returns: Type string <static> run_from(input, args) From Base operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Base.js, line 44 Returns: Type number × Search results Close "},"Base64.html":{"id":"Base64.html","title":"Namespace: Base64","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Base64 Base64 Base64 operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Base64.js, line 10 Members <static, constant> ALPHABET Default Value: A-Za-z0-9+/= Source: operations/Base64.js, line 16 <static, constant> ALPHABET_OPTIONS Default Value: ["{\\"name\\":\\"Standard: A-Za-z0-9+/=\\",\\"value\\":\\"A-Za-z0-9+/=\\"}","{\\"name\\":\\"URL safe: A-Za-z0-9-_\\",\\"value\\":\\"A-Za-z0-9-_\\"}","{\\"name\\":\\"Filename safe: A-Za-z0-9+-=\\",\\"value\\":\\"A-Za-z0-9+\\\\\\\\-=\\"}","{\\"name\\":\\"itoa64: ./0-9A-Za-z=\\",\\"value\\":\\"./0-9A-Za-z=\\"}","{\\"name\\":\\"XML: A-Za-z0-9_.\\",\\"value\\":\\"A-Za-z0-9_.\\"}","{\\"name\\":\\"y64: A-Za-z0-9._-\\",\\"value\\":\\"A-Za-z0-9._-\\"}","{\\"name\\":\\"z64: 0-9a-zA-Z+/=\\",\\"value\\":\\"0-9a-zA-Z+/=\\"}","{\\"name\\":\\"Radix-64: 0-9A-Za-z+/=\\",\\"value\\":\\"0-9A-Za-z+/=\\"}","{\\"name\\":\\"Uuencoding: [space]-_\\",\\"value\\":\\" -_\\"}","{\\"name\\":\\"Xxencoding: +-0-9A-Za-z\\",\\"value\\":\\"+\\\\\\\\-0-9A-Za-z\\"}","{\\"name\\":\\"BinHex: !-,-0-689@A-NP-VX-Z[`a-fh-mp-r\\",\\"value\\":\\"!-,-0-689@A-NP-VX-Z[`a-fh-mp-r\\"}","{\\"name\\":\\"ROT13: N-ZA-Mn-za-m0-9+/=\\",\\"value\\":\\"N-ZA-Mn-za-m0-9+/=\\"}"] Source: operations/Base64.js, line 21 <static, constant> REMOVE_NON_ALPH_CHARS Default Value: true Source: operations/Base64.js, line 53 <static, constant> BASE32_ALPHABET Default Value: A-Z2-7= Source: operations/Base64.js, line 74 <static, constant> SHOW_IN_BINARY Source: operations/Base64.js, line 183 <static, constant> OFFSETS_SHOW_VARIABLE Default Value: true Source: operations/Base64.js, line 188 Methods <static> run_to(input, args) To Base64 operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Base64.js, line 43 Returns: Type string <static> run_from(input, args) From Base64 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Base64.js, line 62 Returns: Type byte_array <static> run_to_32(input, args) To Base32 operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Base64.js, line 83 Returns: Type string <static> run_from_32(input, args) From Base32 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Base64.js, line 135 Returns: Type byte_array <static> run_offsets(input, args) Show Base64 offsets operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Base64.js, line 197 Returns: Type html <static> highlight_to(pos, args) Highlight to Base64 Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/Base64.js, line 320 Returns: pos Type Array.<Object> <static> highlight_from(pos, args) Highlight from Base64 Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/Base64.js, line 335 Returns: pos Type Array.<Object> × Search results Close "},"BitwiseOp.html":{"id":"BitwiseOp.html","title":"Namespace: BitwiseOp","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: BitwiseOp BitwiseOp Bitwise operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/BitwiseOp.js, line 12 Members <static, constant> XOR_PRESERVE_NULLS Source: operations/BitwiseOp.js, line 50 <static, constant> XOR_DIFFERENTIAL Source: operations/BitwiseOp.js, line 55 <static, constant> KEY_FORMAT Default Value: ["Hex","Base64","UTF8","UTF16","UTF16LE","UTF16BE","Latin1"] Source: operations/BitwiseOp.js, line 60 <static, constant> XOR_BRUTE_KEY_LENGTH Default Value: ["1","2"] Source: operations/BitwiseOp.js, line 84 <static, constant> XOR_BRUTE_SAMPLE_LENGTH Default Value: 100 Source: operations/BitwiseOp.js, line 89 <static, constant> XOR_BRUTE_SAMPLE_OFFSET Source: operations/BitwiseOp.js, line 94 <static, constant> XOR_BRUTE_PRINT_KEY Default Value: true Source: operations/BitwiseOp.js, line 99 <static, constant> XOR_BRUTE_OUTPUT_HEX Source: operations/BitwiseOp.js, line 104 Methods <private, static> _bit_op(input, key, func, null_preserving, differential) Runs bitwise operations across the input data. Parameters: Name Type Description input byte_array key byte_array func function The bitwise calculation to carry out null_preserving boolean differential boolean Source: operations/BitwiseOp.js, line 25 Returns: Type byte_array <static> run_xor(input, args) XOR operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 69 Returns: Type byte_array <static> run_xor_brute(input, args) XOR Brute Force operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 113 Returns: Type string <static> run_not(input, args) NOT operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 157 Returns: Type byte_array <static> run_and(input, args) AND operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 169 Returns: Type byte_array <static> run_or(input, args) OR operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 184 Returns: Type byte_array <static> run_add(input, args) ADD operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 199 Returns: Type byte_array <static> run_sub(input, args) SUB operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/BitwiseOp.js, line 214 Returns: Type byte_array <private, static> _xor(operand, key) XOR bitwise calculation. Parameters: Name Type Description operand number key number Source: operations/BitwiseOp.js, line 230 Returns: Type number <private, static> _not(operand) NOT bitwise calculation. Parameters: Name Type Description operand number Source: operations/BitwiseOp.js, line 242 Returns: Type number <private, static> _and(operand, key) AND bitwise calculation. Parameters: Name Type Description operand number key number Source: operations/BitwiseOp.js, line 255 Returns: Type number <private, static> _or(operand, key) OR bitwise calculation. Parameters: Name Type Description operand number key number Source: operations/BitwiseOp.js, line 268 Returns: Type number <private, static> _add(operand, key) ADD bitwise calculation. Parameters: Name Type Description operand number key number Source: operations/BitwiseOp.js, line 281 Returns: Type number <private, static> _sub(operand, key) SUB bitwise calculation. Parameters: Name Type Description operand number key number Source: operations/BitwiseOp.js, line 294 Returns: Type number × Search results Close "},"ByteRepr.html":{"id":"ByteRepr.html","title":"Namespace: ByteRepr","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: ByteRepr ByteRepr Byte representation operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/ByteRepr.js, line 12 Members <static, constant> DELIM_OPTIONS Default Value: ["Space","Comma","Semi-colon","Colon","Line feed","CRLF"] Source: operations/ByteRepr.js, line 18 <static, constant> HEX_DELIM_OPTIONS Default Value: ["Space","Comma","Semi-colon","Colon","Line feed","CRLF","0x","\\\\x","None"] Source: operations/ByteRepr.js, line 23 <static, constant> BIN_DELIM_OPTIONS Default Value: ["Space","Comma","Semi-colon","Colon","Line feed","CRLF","None"] Source: operations/ByteRepr.js, line 28 <static, constant> CHARCODE_BASE Default Value: 16 Source: operations/ByteRepr.js, line 60 <static, constant> HEX_CONTENT_CONVERT_WHICH Default Value: ["Only special chars","Only special chars including spaces","All chars"] Source: operations/ByteRepr.js, line 311 <static, constant> HEX_CONTENT_SPACES_BETWEEN_BYTES Source: operations/ByteRepr.js, line 316 Methods <static> run_to_hex(input, args) To Hex operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/ByteRepr.js, line 37 Returns: Type string <static> run_from_hex(input, args) From Hex operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 50 Returns: Type byte_array <static> run_to_charcode(input, args) To Charcode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 69 Returns: Type string <static> run_from_charcode(input, args) From Charcode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 110 Returns: Type byte_array <static> highlight_to(pos, args) Highlight to hex Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/ByteRepr.js, line 150 Returns: pos Type Array.<Object> <static> highlight_from(pos, args) Highlight to hex Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/ByteRepr.js, line 175 Returns: pos Type Array.<Object> <static> run_to_decimal(input, args) To Decimal operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/ByteRepr.js, line 201 Returns: Type string <static> run_from_decimal(input, args) From Decimal operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 214 Returns: Type byte_array <static> run_to_binary(input, args) To Binary operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/ByteRepr.js, line 234 Returns: Type string <static> run_from_binary(input, args) From Binary operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 258 Returns: Type byte_array <static> highlight_to_binary(pos, args) Highlight to binary Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/ByteRepr.js, line 282 Returns: pos Type Array.<Object> <static> highlight_from_binary(pos, args) Highlight from binary Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/ByteRepr.js, line 299 Returns: pos Type Array.<Object> <static> run_to_hex_content(input, args) To Hex Content operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/ByteRepr.js, line 325 Returns: Type string <static> run_from_hex_content(input, args) From Hex Content operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/ByteRepr.js, line 366 Returns: Type byte_array × Search results Close "},"CharEnc.html":{"id":"CharEnc.html","title":"Namespace: CharEnc","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: CharEnc CharEnc Character encoding operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/CharEnc.js, line 12 Members <static, constant> IO_FORMAT Default Value: ["UTF8","UTF16","UTF16LE","UTF16BE","Latin1","Windows-1251","Hex","Base64"] Source: operations/CharEnc.js, line 18 Methods <static> run(input, args) Text encoding operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/CharEnc.js, line 27 Returns: Type string × Search results Close "},"Checksum.html":{"id":"Checksum.html","title":"Namespace: Checksum","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Checksum Checksum Checksum operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Checksum.js, line 10 Methods <static> run_fletcher16(input, args) Fletcher-16 Checksum operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Checksum.js, line 19 Returns: Type string <static> run_adler32(input, args) Adler-32 Checksum operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Checksum.js, line 39 Returns: Type string <static> run_crc32(input, args) CRC-32 Checksum operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Checksum.js, line 63 Returns: Type string <static> run_tcp_ip(input, args) TCP/IP Checksum operation. Parameters: Name Type Description input byte_array args Array.<Object> Author: <p>GCHQ Contributor [1]</p> Source: operations/Checksum.js, line 92 Returns: Type string Example // returns '3f2c' Checksum.run_tcp_ip([0x45,0x00,0x00,0x87,0xa3,0x1b,0x40,0x00,0x40,0x06, 0x00,0x00,0xac,0x11,0x00,0x04,0xac,0x11,0x00,0x03]) // returns 'a249' Checksum.run_tcp_ip([0x45,0x00,0x01,0x11,0x3f,0x74,0x40,0x00,0x40,0x06, 0x00,0x00,0xac,0x11,0x00,0x03,0xac,0x11,0x00,0x04]) <private, static> _gen_crc_table() Generates a CRC table for use with CRC checksums. Source: operations/Checksum.js, line 115 Returns: Type array × Search results Close "},"Cipher.html":{"id":"Cipher.html","title":"Namespace: Cipher","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Cipher Cipher Cipher operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Cipher.js, line 12 Members <static, constant> IO_FORMAT1 Default Value: ["Hex","Base64","UTF8","UTF16","UTF16LE","UTF16BE","Latin1"] Source: operations/Cipher.js, line 18 <static, constant> IO_FORMAT2 Default Value: ["UTF8","UTF16","UTF16LE","UTF16BE","Latin1","Hex","Base64"] Source: operations/Cipher.js, line 23 <static, constant> IO_FORMAT3 Default Value: ["Hex","Base64","UTF16","UTF16LE","UTF16BE","Latin1"] Source: operations/Cipher.js, line 28 <static, constant> IO_FORMAT4 Default Value: ["Latin1","UTF8","UTF16","UTF16LE","UTF16BE","Hex","Base64"] Source: operations/Cipher.js, line 33 <static, constant> MODES Default Value: ["CBC","CFB","CTR","OFB","ECB"] Source: operations/Cipher.js, line 38 <static, constant> PADDING Default Value: ["Pkcs7","Iso97971","AnsiX923","Iso10126","ZeroPadding","NoPadding"] Source: operations/Cipher.js, line 43 <static, constant> RESULT_TYPE Default Value: ["Show all","Ciphertext","Key","IV","Salt"] Source: operations/Cipher.js, line 48 <static, constant> BLOWFISH_MODES Default Value: ["ECB","CBC","PCBC","CFB","OFB","CTR"] Source: operations/Cipher.js, line 245 <static, constant> BLOWFISH_OUTPUT_TYPES Default Value: ["Base64","Hex","String","Raw"] Source: operations/Cipher.js, line 250 <static, constant> KDF_KEY_SIZE Default Value: 256 Source: operations/Cipher.js, line 303 <static, constant> KDF_ITERATIONS Default Value: 1 Source: operations/Cipher.js, line 308 <static, constant> RC4DROP_BYTES Default Value: 768 Source: operations/Cipher.js, line 370 Methods <private, static> _enc(algo, input, args) Runs encryption operations using the CryptoJS framework. Parameters: Name Type Description algo function The CryptoJS algorithm to use input byte_array args function Source: operations/Cipher.js, line 60 Returns: Type string <private, static> _dec(algo, input, args) Runs decryption operations using the CryptoJS framework. Parameters: Name Type Description algo function The CryptoJS algorithm to use input byte_array args function Source: operations/Cipher.js, line 104 Returns: Type string <static> run_aes_enc(input, args) AES Encrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 152 Returns: Type string <static> run_aes_dec(input, args) AES Decrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 164 Returns: Type string <static> run_des_enc(input, args) DES Encrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 176 Returns: Type string <static> run_des_dec(input, args) DES Decrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 188 Returns: Type string <static> run_triple_des_enc(input, args) Triple DES Encrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 200 Returns: Type string <static> run_triple_des_dec(input, args) Triple DES Decrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 212 Returns: Type string <static> run_rabbit_enc(input, args) Rabbit Encrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 224 Returns: Type string <static> run_rabbit_dec(input, args) Rabbit Decrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 236 Returns: Type string <static> run_blowfish_enc(input, args) Blowfish Encrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 259 Returns: Type string <static> run_blowfish_dec(input, args) Blowfish Decrypt operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 283 Returns: Type string <static> run_pbkdf2(input, args) Derive PBKDF2 key operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 317 Returns: Type string <static> run_evpkdf(input, args) Derive EVP key operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 337 Returns: Type string <static> run_rc4(input, args) RC4 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 357 Returns: Type string <static> run_rc4drop(input, args) RC4 Drop operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Cipher.js, line 379 Returns: Type string × Search results Close "},"Code.html":{"id":"Code.html","title":"Namespace: Code","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Code Code Code operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Code.js, line 12 Members <static, constant> LANGUAGES Default Value: ["default-code","default-markup","bash","bsh","c","cc","coffee","cpp","cs","csh","cv","cxx","cyc","htm","html","in.tag","java","javascript","js","json","m","mxml","perl","pl","pm","py","python","rb","rc","rs","ruby","rust","sh","uq.val","xhtml","xml","xsl"] Source: operations/Code.js, line 18 <static, constant> LINE_NUMS Source: operations/Code.js, line 23 <static, constant> BEAUTIFY_INDENT Default Value: \\t Source: operations/Code.js, line 43 <static, constant> PRESERVE_COMMENTS Source: operations/Code.js, line 101 Methods <static> run_syntax_highlight(input, args) Syntax highlighter operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 32 Returns: Type html <static> run_xml_beautify(input, args) XML Beautify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 52 Returns: Type string <static> run_json_beautify(input, args) JSON Beautify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 65 Returns: Type string <static> run_css_beautify(input, args) CSS Beautify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 78 Returns: Type string <static> run_sql_beautify(input, args) SQL Beautify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 91 Returns: Type string <static> run_xml_minify(input, args) XML Minify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 110 Returns: Type string <static> run_json_minify(input, args) JSON Minify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 123 Returns: Type string <static> run_css_minify(input, args) CSS Minify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 135 Returns: Type string <static> run_sql_minify(input, args) SQL Minify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Code.js, line 148 Returns: Type string <static> run_generic_beautify(input, args) Generic Code Beautify operation. Yeeeaaah... I'm not proud of this code, but seriously, try writing a generic lexer and parser thatcorrectly generates an AST for multiple different languages. I have tried, and I can tellyou it's pretty much impossible. This basically works. That'll have to be good enough. It's not meant to produce working code,just slightly more readable code. Things that don't work: For loop formatting Do-While loop formatting Switch/Case indentation Bit shift operators Parameters: Name Type Description input string args Array.<Object> Author: <p>n1474335 [n1474335@gmail.com]</p> Source: operations/Code.js, line 176 Returns: Type string × Search results Close "},"Compress.html":{"id":"Compress.html","title":"Namespace: Compress","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Compress Compress Compression operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Compress.js, line 12 Members <static, constant> COMPRESSION_TYPE Default Value: ["Dynamic Huffman Coding","Fixed Huffman Coding","None (Store)"] Source: operations/Compress.js, line 18 <static, constant> INFLATE_BUFFER_TYPE Default Value: ["Adaptive","Block"] Source: operations/Compress.js, line 23 <static, constant> COMPRESSION_METHOD Default Value: ["Deflate","None (Store)"] Source: operations/Compress.js, line 28 <static, constant> OS Default Value: ["MSDOS","Unix","Macintosh"] Source: operations/Compress.js, line 33 <static, constant> RAW_COMPRESSION_TYPE_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 38 <static, constant> INFLATE_INDEX Source: operations/Compress.js, line 63 <static, constant> INFLATE_BUFFER_SIZE Source: operations/Compress.js, line 68 <static, constant> INFLATE_RESIZE Source: operations/Compress.js, line 73 <static, constant> INFLATE_VERIFY Source: operations/Compress.js, line 78 <static, constant> RAW_BUFFER_TYPE_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 83 <static, constant> ZLIB_COMPRESSION_TYPE_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 134 <static, constant> ZLIB_BUFFER_TYPE_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 159 <static, constant> GZIP_CHECKSUM Source: operations/Compress.js, line 189 <static, constant> PKZIP_FILENAME Default Value: file.txt Source: operations/Compress.js, line 243 <static, constant> ZIP_COMPRESSION_METHOD_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 248 <static, constant> ZIP_OS_LOOKUP Default Value: {"undefined":""} Source: operations/Compress.js, line 256 <static, constant> PKUNZIP_VERIFY Source: operations/Compress.js, line 293 Methods <static> run_raw_deflate(input, args) Raw Deflate operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 51 Returns: Type byte_array <static> run_raw_inflate(input, args) Raw Inflate operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 95 Returns: Type byte_array <static> run_zlib_deflate(input, args) Zlib Deflate operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 147 Returns: Type byte_array <static> run_zlib_inflate(input, args) Zlib Inflate operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 171 Returns: Type byte_array <static> run_gzip(input, args) Gzip operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 198 Returns: Type byte_array <static> run_gunzip(input, args) Gunzip operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 231 Returns: Type byte_array <static> run_pkzip(input, args) Zip operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 269 Returns: Type byte_array <static> run_pkunzip(input, args) Unzip operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 302 Returns: Type string <static> run_bzip2_decompress(input, args) Bzip2 Decompress operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Compress.js, line 339 Returns: Type string × Search results Close "},"Convert.html":{"id":"Convert.html","title":"Namespace: Convert","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Convert Convert Unit conversion operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Convert.js, line 10 Members <static, constant> DISTANCE_UNITS Default Value: ["[Metric]","Nanometres (nm)","Micrometres (µm)","Millimetres (mm)","Centimetres (cm)","Metres (m)","Kilometers (km)","[/Metric]","[Imperial]","Thou (th)","Inches (in)","Feet (ft)","Yards (yd)","Chains (ch)","Furlongs (fur)","Miles (mi)","Leagues (lea)","[/Imperial]","[Maritime]","Fathoms (ftm)","Cables","Nautical miles","[/Maritime]","[Comparisons]","Cars (4m)","Buses (8.4m)","American football fields (91m)","Football pitches (105m)","[/Comparisons]","[Astronomical]","Earth-to-Moons","Earth's equators","Astronomical units (au)","Light-years (ly)","Parsecs (pc)","[/Astronomical]"] Source: operations/Convert.js, line 16 <static, constant> DISTANCE_FACTOR Default Value: {"undefined":30856776000000000} Source: operations/Convert.js, line 27 <static, constant> DATA_UNITS Default Value: ["Bits (b)","Nibbles","Octets","Bytes (B)","[Binary bits (2^n)]","Kibibits (Kib)","Mebibits (Mib)","Gibibits (Gib)","Tebibits (Tib)","Pebibits (Pib)","Exbibits (Eib)","Zebibits (Zib)","Yobibits (Yib)","[/Binary bits (2^n)]","[Decimal bits (10^n)]","Decabits","Hectobits","Kilobits (kb)","Megabits (Mb)","Gigabits (Gb)","Terabits (Tb)","Petabits (Pb)","Exabits (Eb)","Zettabits (Zb)","Yottabits (Yb)","[/Decimal bits (10^n)]","[Binary bytes (8 x 2^n)]","Kibibytes (KiB)","Mebibytes (MiB)","Gibibytes (GiB)","Tebibytes (TiB)","Pebibytes (PiB)","Exbibytes (EiB)","Zebibytes (ZiB)","Yobibytes (YiB)","[/Binary bytes (8 x 2^n)]","[Decimal bytes (8 x 10^n)]","Kilobytes (KB)","Megabytes (MB)","Gigabytes (GB)","Terabytes (TB)","Petabytes (PB)","Exabytes (EB)","Zettabytes (ZB)","Yottabytes (YB)","[/Decimal bytes (8 x 10^n)]"] Source: operations/Convert.js, line 81 <static, constant> DATA_FACTOR Default Value: {"undefined":8e+24} Source: operations/Convert.js, line 92 <static, constant> AREA_UNITS Default Value: ["[Metric]","Square metre (sq m)","Square kilometre (sq km)","Centiare (ca)","Deciare (da)","Are (a)","Decare (daa)","Hectare (ha)","[/Metric]","[Imperial]","Square inch (sq in)","Square foot (sq ft)","Square yard (sq yd)","Square mile (sq mi)","Perch (sq per)","Rood (ro)","International acre (ac)","[/Imperial]","[US customary units]","US survey acre (ac)","US survey square mile (sq mi)","US survey township","[/US customary units]","[Nuclear physics]","Yoctobarn (yb)","Zeptobarn (zb)","Attobarn (ab)","Femtobarn (fb)","Picobarn (pb)","Nanobarn (nb)","Microbarn (μb)","Millibarn (mb)","Barn (b)","Kilobarn (kb)","Megabarn (Mb)","Outhouse","Shed","Planck area","[/Nuclear physics]","[Comparisons]","Washington D.C.","Isle of Wight","Wales","Texas","[/Comparisons]"] Source: operations/Convert.js, line 161 <static, constant> AREA_FACTOR Default Value: {"undefined":696241000000} Source: operations/Convert.js, line 172 <static, constant> MASS_UNITS Default Value: ["[Metric]","Yoctogram (yg)","Zeptogram (zg)","Attogram (ag)","Femtogram (fg)","Picogram (pg)","Nanogram (ng)","Microgram (μg)","Milligram (mg)","Centigram (cg)","Decigram (dg)","Gram (g)","Decagram (dag)","Hectogram (hg)","Kilogram (kg)","Megagram (Mg)","Tonne (t)","Gigagram (Gg)","Teragram (Tg)","Petagram (Pg)","Exagram (Eg)","Zettagram (Zg)","Yottagram (Yg)","[/Metric]","[Imperial Avoirdupois]","Grain (gr)","Dram (dr)","Ounce (oz)","Pound (lb)","Nail","Stone (st)","Quarter (gr)","Tod","US hundredweight (cwt)","Imperial hundredweight (cwt)","US ton (t)","Imperial ton (t)","[/Imperial Avoirdupois]","[Imperial Troy]","Grain (gr)","Pennyweight (dwt)","Troy dram (dr t)","Troy ounce (oz t)","Troy pound (lb t)","Mark","[/Imperial Troy]","[Archaic]","Wey","Wool wey","Suffolk wey","Wool sack","Coal sack","Load","Last","Flax or feather last","Gunpowder last","Picul","Rice last","[/Archaic]","[Comparisons]","Big Ben (14 tonnes)","Blue whale (180 tonnes)","International Space Station (417 tonnes)","Space Shuttle (2,041 tonnes)","RMS Titanic (52,000 tonnes)","Great Pyramid of Giza (6,000,000 tonnes)","Earth's oceans (1.4 yottagrams)","[/Comparisons]","[Astronomical]","A teaspoon of neutron star (5,500 million tonnes)","Lunar mass (ML)","Earth mass (M⊕)","Jupiter mass (MJ)","Solar mass (M☉)","Sagittarius A* (7.5 x 10^36 kgs-ish)","Milky Way galaxy (1.2 x 10^42 kgs)","The observable universe (1.45 x 10^53 kgs)","[/Astronomical]"] Source: operations/Convert.js, line 241 <static, constant> MASS_FACTOR Default Value: {"undefined":1.45e+56} Source: operations/Convert.js, line 253 <static, constant> SPEED_UNITS Default Value: ["[Metric]","Metres per second (m/s)","Kilometres per hour (km/h)","[/Metric]","[Imperial]","Miles per hour (mph)","Knots (kn)","[/Imperial]","[Comparisons]","Human hair growth rate","Bamboo growth rate","World's fastest snail","Usain Bolt's top speed","Jet airliner cruising speed","Concorde","SR-71 Blackbird","Space Shuttle","International Space Station","[/Comparisons]","[Scientific]","Sound in standard atmosphere","Sound in water","Lunar escape velocity","Earth escape velocity","Earth's solar orbit","Solar system's Milky Way orbit","Milky Way relative to the cosmic microwave background","Solar escape velocity","Neutron star escape velocity (0.3c)","Light in a diamond (0.4136c)","Signal in an optical fibre (0.667c)","Light (c)","[/Scientific]"] Source: operations/Convert.js, line 352 <static, constant> SPEED_FACTOR Default Value: {"undefined":299792458} Source: operations/Convert.js, line 362 Methods <static> run_distance(input, args) Convert distance operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Convert.js, line 67 Returns: Type number <static> run_data_size(input, args) Convert data units operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Convert.js, line 148 Returns: Type number <static> run_area(input, args) Convert area operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Convert.js, line 228 Returns: Type number <static> run_mass(input, args) Convert mass operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Convert.js, line 339 Returns: Type number <static> run_speed(input, args) Convert speed operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/Convert.js, line 404 Returns: Type number × Search results Close "},"DateTime.html":{"id":"DateTime.html","title":"Namespace: DateTime","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: DateTime DateTime Date and time operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/DateTime.js, line 12 Members <static, constant> UNITS Default Value: ["Seconds (s)","Milliseconds (ms)","Microseconds (μs)","Nanoseconds (ns)"] Source: operations/DateTime.js, line 18 <static, constant> DATETIME_FORMATS Default Value: ["{\\"name\\":\\"Standard date and time\\",\\"value\\":\\"DD/MM/YYYY HH:mm:ss\\"}","{\\"name\\":\\"American-style date and time\\",\\"value\\":\\"MM/DD/YYYY HH:mm:ss\\"}","{\\"name\\":\\"International date and time\\",\\"value\\":\\"YYYY-MM-DD HH:mm:ss\\"}","{\\"name\\":\\"Verbose date and time\\",\\"value\\":\\"dddd Do MMMM YYYY HH:mm:ss Z z\\"}","{\\"name\\":\\"UNIX timestamp (seconds)\\",\\"value\\":\\"X\\"}","{\\"name\\":\\"UNIX timestamp offset (milliseconds)\\",\\"value\\":\\"x\\"}","{\\"name\\":\\"Automatic\\",\\"value\\":\\"\\"}"] Source: operations/DateTime.js, line 80 <static, constant> INPUT_FORMAT_STRING Default Value: DD/MM/YYYY HH:mm:ss Source: operations/DateTime.js, line 114 <static, constant> OUTPUT_FORMAT_STRING Default Value: dddd Do MMMM YYYY HH:mm:ss Z z Source: operations/DateTime.js, line 119 <static, constant> TIMEZONES Source: operations/DateTime.js, line 124 <static, constant> FORMAT_EXAMPLES Source: operations/DateTime.js, line 190 Methods <static> run_from_unix_timestamp(input, args) From UNIX Timestamp operation. Parameters: Name Type Description input number args Array.<Object> Source: operations/DateTime.js, line 27 Returns: Type string <static> run_to_unix_timestamp(input, args) To UNIX Timestamp operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/DateTime.js, line 58 Returns: Type number <static> run_translate_format(input, args) Translate DateTime Format operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/DateTime.js, line 133 Returns: Type html <static> run_parse(input, args) Parse DateTime operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/DateTime.js, line 158 Returns: Type html × Search results Close "},"Endian.html":{"id":"Endian.html","title":"Namespace: Endian","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Endian Endian Endian operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Endian.js, line 10 Members <static, constant> DATA_FORMAT Default Value: ["Hex","Raw"] Source: operations/Endian.js, line 16 <static, constant> WORD_LENGTH Default Value: 4 Source: operations/Endian.js, line 21 <static, constant> PAD_INCOMPLETE_WORDS Default Value: true Source: operations/Endian.js, line 26 Methods <static> run_swap_endianness(input, args) Swap endianness operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Endian.js, line 35 Returns: Type string × Search results Close "},"Entropy.html":{"id":"Entropy.html","title":"Namespace: Entropy","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Entropy Entropy Entropy operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Entropy.js, line 10 Members <static, constant> CHUNK_SIZE Default Value: 1000 Source: operations/Entropy.js, line 16 <static, constant> FREQ_ZEROS Source: operations/Entropy.js, line 76 Methods <static> run_entropy(input, args) Entropy operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Entropy.js, line 25 Returns: Type html <static> run_freq_distrib(input, args) Frequency distribution operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Entropy.js, line 85 Returns: Type html <private, static> _calc_entropy(data) Calculates the Shannon entropy for a given chunk of data. Parameters: Name Type Description data byte_array Source: operations/Entropy.js, line 146 Returns: Type number × Search results Close "},"Extract.html":{"id":"Extract.html","title":"Namespace: Extract","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Extract Extract Identifier extraction operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Extract.js, line 10 Members <static, constant> MIN_STRING_LEN Default Value: 3 Source: operations/Extract.js, line 46 <static, constant> DISPLAY_TOTAL Source: operations/Extract.js, line 51 <static, constant> INCLUDE_IPV4 Default Value: true Source: operations/Extract.js, line 74 <static, constant> INCLUDE_IPV6 Source: operations/Extract.js, line 79 <static, constant> REMOVE_LOCAL Source: operations/Extract.js, line 84 <static, constant> INCLUDE_WIN_PATH Default Value: true Source: operations/Extract.js, line 204 <static, constant> INCLUDE_UNIX_PATH Default Value: true Source: operations/Extract.js, line 209 Methods <private, static> _search(input, search_regex, remove_regex, include_total) Runs search operations across the input data using refular expressions. Parameters: Name Type Description input string search_regex RegExp remove_regex RegExp A regular expression defining results to remove from the final list include_total boolean Whether or not to include the total number of results Source: operations/Extract.js, line 23 Returns: Type string <static> run_strings(input, args) Strings operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 60 Returns: Type string <static> run_ip(input, args) Extract IP addresses operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 93 Returns: Type string <static> run_email(input, args) Extract email addresses operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 138 Returns: Type string <static> run_mac(input, args) Extract MAC addresses operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 153 Returns: Type string <static> run_urls(input, args) Extract URLs operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 168 Returns: Type string <static> run_domains(input, args) Extract domains operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 189 Returns: Type string <static> run_file_paths(input, args) Extract file paths operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 218 Returns: Type string <static> run_dates(input, args) Extract dates operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 254 Returns: Type string <static> run_all_idents(input, args) Extract all identifiers operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Extract.js, line 272 Returns: Type string × Search results Close "},"FileType.html":{"id":"FileType.html","title":"Namespace: FileType","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: FileType FileType File type operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/FileType.js, line 10 Members <static, constant> IGNORE_COMMON_BYTE_SEQUENCES Default Value: true Source: operations/FileType.js, line 41 Methods <static> run_detect(input, args) Detect File Type operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/FileType.js, line 19 Returns: Type string <static> run_scan_for_embedded_files(input, args) Scan for Embedded Files operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/FileType.js, line 50 Returns: Type string <private, static> _magic_type(buf) Given a buffer, detects magic byte sequences at specific positions and returns theextension and mime type. Parameters: Name Type Description buf byte_array Source: operations/FileType.js, line 103 Returns: type Type Object type.ext - File extension Type string type.mime - Mime type Type string [type.desc] - Description Type string × Search results Close "},"HTML.html":{"id":"HTML.html","title":"Namespace: HTML","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: HTML HTML HTML operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/HTML.js, line 10 Members <static, constant> CONVERT_ALL Source: operations/HTML.js, line 16 <static, constant> CONVERT_OPTIONS Default Value: ["Named entities where possible","Numeric entities","Hex entities"] Source: operations/HTML.js, line 21 <static, constant> REMOVE_INDENTATION Default Value: true Source: operations/HTML.js, line 119 <static, constant> REMOVE_LINE_BREAKS Default Value: true Source: operations/HTML.js, line 124 <private, static, constant> _byte_to_entity Lookup table to translate byte values to their HTML entity codes. Source: operations/HTML.js, line 330 <private, static, constant> _entity_to_byte Lookup table to translate HTML entity codes to their byte values. Source: operations/HTML.js, line 594 Methods <static> run_to_entity(input, args) To HTML Entity operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTML.js, line 30 Returns: Type string <static> run_from_entity(input, args) From HTML Entity operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTML.js, line 76 Returns: Type string <static> run_strip_tags(input, args) Strip HTML tags operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTML.js, line 133 Returns: Type string <static> run_parse_colour_code(input, args) Parse colour code operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTML.js, line 159 Returns: Type html <private, static> _hsl_to_rgb(h, s, l) Converts an HSL color value to RGB. Conversion formulaadapted from http://en.wikipedia.org/wiki/HSL_color_space.Assumes h, s, and l are contained in the set [0, 1] andreturns r, g, and b in the set [0, 255]. Parameters: Name Type Description h number The hue s number The saturation l number The lightness Author: Mohsen (http://stackoverflow.com/a/9493060) Source: operations/HTML.js, line 261 Returns: The RGB representation Type Array <private, static> _rgb_to_hsl(r, g, b) Converts an RGB color value to HSL. Conversion formulaadapted from http://en.wikipedia.org/wiki/HSL_color_space.Assumes r, g, and b are contained in the set [0, 255] andreturns h, s, and l in the set [0, 1]. Parameters: Name Type Description r number The red color value g number The green color value b number The blue color value Author: Mohsen (http://stackoverflow.com/a/9493060) Source: operations/HTML.js, line 301 Returns: The HSL representation Type Array × Search results Close "},"HTTP.html":{"id":"HTTP.html","title":"Namespace: HTTP","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: HTTP HTTP HTTP operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/HTTP.js, line 12 Methods <static> run_strip_headers(input, args) Strip HTTP headers operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTTP.js, line 21 Returns: Type string <static> run_parse_user_agent(input, args) Parse User Agent operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/HTTP.js, line 36 Returns: Type string × Search results Close "},"Hash.html":{"id":"Hash.html","title":"Namespace: Hash","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Hash Hash Hashing operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Hash.js, line 12 Members <static, constant> SHA3_LENGTH Default Value: ["512","384","256","224"] Source: operations/Hash.js, line 96 <static, constant> HMAC_FUNCTIONS Default Value: ["MD5","SHA1","SHA224","SHA256","SHA384","SHA512","SHA3","RIPEMD-160"] Source: operations/Hash.js, line 132 Methods <static> run_md5(input, args) MD5 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 21 Returns: Type string <static> run_sha1(input, args) SHA1 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 34 Returns: Type string <static> run_sha224(input, args) SHA224 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 47 Returns: Type string <static> run_sha256(input, args) SHA256 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 60 Returns: Type string <static> run_sha384(input, args) SHA384 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 73 Returns: Type string <static> run_sha512(input, args) SHA512 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 86 Returns: Type string <static> run_sha3(input, args) SHA3 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 105 Returns: Type string <static> run_ripemd160(input, args) RIPEMD-160 operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 122 Returns: Type string <static> run_hmac(input, args) HMAC operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 141 Returns: Type string <static> run_all(input, args) Generate all hashes operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 165 Returns: Type string <static> run_analyse(input, args) Analyse hash operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hash.js, line 194 Returns: Type string × Search results Close "},"Hexdump.html":{"id":"Hexdump.html","title":"Namespace: Hexdump","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Hexdump Hexdump Hexdump operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Hexdump.js, line 12 Members <static, constant> WIDTH Default Value: 16 Source: operations/Hexdump.js, line 18 <static, constant> UPPER_CASE Source: operations/Hexdump.js, line 23 <static, constant> INCLUDE_FINAL_LENGTH Source: operations/Hexdump.js, line 28 Methods <static> run_to(input, args) To Hexdump operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Hexdump.js, line 37 Returns: Type string <static> run_from(input, args) From Hexdump operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Hexdump.js, line 77 Returns: Type byte_array <static> highlight_to(pos, args) Highlight to hexdump Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/Hexdump.js, line 108 Returns: pos Type Array.<Object> <static> highlight_from(pos, args) Highlight from hexdump Parameters: Name Type Description pos Array.<Object> pos[].start number pos[].end number args Array.<Object> Source: operations/Hexdump.js, line 166 Returns: pos Type Array.<Object> × Search results Close "},"IP.html":{"id":"IP.html","title":"Namespace: IP","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: IP IP Internet Protocol address operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/IP.js, line 12 Members <static, constant> INCLUDE_NETWORK_INFO Default Value: true Source: operations/IP.js, line 18 <static, constant> ENUMERATE_ADDRESSES Default Value: true Source: operations/IP.js, line 23 <static, constant> ALLOW_LARGE_LIST Source: operations/IP.js, line 28 <static, constant> IPv4_REGEX Default Value: /^\\s*((?:\\d{1,3}\\.){3}\\d{1,3})\\s*$/ Source: operations/IP.js, line 67 <static, constant> IPv6_REGEX Default Value: /^\\s*(((?=.*::)(?!.*::.+::)(::)?([\\dA-F]{1,4}:(:|\\b)|){5}|([\\dA-F]{1,4}:){6})((([\\dA-F]{1,4}((?!\\4)::|:\\b|(?![\\dA-F])))|(?!\\3\\4)){2}|(((2[0-4]|1\\d|[1-9])?\\d|25[0-5])\\.?\\b){4}))\\s*$/i Source: operations/IP.js, line 72 <static, constant> IP_FORMAT_LIST Default Value: ["Dotted Decimal","Decimal","Hex"] Source: operations/IP.js, line 223 <static, constant> DELIM_OPTIONS Default Value: ["Line feed","CRLF","Space","Comma","Semi-colon"] Source: operations/IP.js, line 304 <static, constant> GROUP_CIDR Default Value: 24 Source: operations/IP.js, line 309 <static, constant> GROUP_ONLY_SUBNET Source: operations/IP.js, line 314 <private, static, constant> _LARGE_RANGE_ERROR Default Value: The specified range contains more than 65,536 addresses. Running this query could crash your browser. If you want to run it, select the "Allow large queries" option. You are advised to turn off "Auto Bake" whilst editing large ranges. Source: operations/IP.js, line 409 Methods <static> run_parse_ip_range(input, args) Parse IP range operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/IP.js, line 37 Returns: Type string <static> run_parse_ipv6(input, args) Parse IPv6 address operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/IP.js, line 81 Returns: Type string <static> run_change_ip_format(input, args) Change IP format operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/IP.js, line 232 Returns: Type string <static> run_group_ips(input, args) Group IP addresses operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/IP.js, line 323 Returns: Type string <private, static> _ipv4_cidr_range(cidr, include_network_info, enumerate_addresses, allow_large_list) Parses an IPv4 CIDR range (e.g. 192.168.0.0/24) and displays information about it. Parameters: Name Type Description cidr RegExp include_network_info boolean enumerate_addresses boolean allow_large_list boolean Source: operations/IP.js, line 421 Returns: Type string <private, static> _ipv6_cidr_range(cidr, include_network_info) Parses an IPv6 CIDR range (e.g. ff00::/48) and displays information about it. Parameters: Name Type Description cidr RegExp include_network_info boolean Source: operations/IP.js, line 461 Returns: Type string <private, static> _gen_ipv6_mask(cidr) Generates an IPv6 subnet mask given a CIDR value. Parameters: Name Type Description cidr number Source: operations/IP.js, line 508 Returns: Type Array.<number> <private, static> _ipv4_hyphenated_range(range, include_network_info, enumerate_addresses, allow_large_list) Parses an IPv4 hyphenated range (e.g. 192.168.0.0 - 192.168.0.255) and displays informationabout it. Parameters: Name Type Description range RegExp include_network_info boolean enumerate_addresses boolean allow_large_list boolean Source: operations/IP.js, line 537 Returns: Type string <private, static> _ipv6_hyphenated_range(range, include_network_info) Parses an IPv6 hyphenated range (e.g. ff00:: - ffff::) and displays information about it. Parameters: Name Type Description range RegExp include_network_info boolean Source: operations/IP.js, line 588 Returns: Type string <private, static> _str_to_ipv4(ip_str) Converts an IPv4 address from string format to numerical format. Parameters: Name Type Description ip_str string Source: operations/IP.js, line 630 Returns: Type number Example // returns 168427520 IP._str_to_ipv4("10.10.0.0"); <private, static> _ipv4_to_str(ip_int) Converts an IPv4 address from numerical format to string format. Parameters: Name Type Description ip_int number Source: operations/IP.js, line 668 Returns: Type string Example // returns "10.10.0.0" IP._ipv4_to_str(168427520); <private, static> _str_to_ipv6(ip_str) Converts an IPv6 address from string format to numerical array format. Parameters: Name Type Description ip_str string Source: operations/IP.js, line 689 Returns: Type Array.<number> Example // returns [65280, 0, 0, 0, 0, 0, 4369, 8738] IP._str_to_ipv6("ff00::1111:2222"); <private, static> _ipv6_to_str(ipv6, compact) Converts an IPv6 address from numerical array format to string format. Parameters: Name Type Description ipv6 Array.<number> compact boolean Whether or not to return the address in shorthand or not Source: operations/IP.js, line 735 Returns: Type string Example // returns "ff00::1111:2222" IP._ipv6_to_str([65280, 0, 0, 0, 0, 0, 4369, 8738], true); // returns "ff00:0000:0000:0000:0000:0000:1111:2222" IP._ipv6_to_str([65280, 0, 0, 0, 0, 0, 4369, 8738], false); <private, static> _generate_ipv4_range(ip, end_ip) Generates a list of IPv4 addresses in string format between two given numerical values. Parameters: Name Type Description ip number end_ip number Source: operations/IP.js, line 790 Returns: Type Array.<string> Example // returns ["0.0.0.1", "0.0.0.2", "0.0.0.3"] IP._generate_ipv4_range(1, 3); × Search results Close "},"JS.html":{"id":"JS.html","title":"Namespace: JS","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: JS JS JavaScript operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/JS.js, line 12 Members <static, constant> PARSE_LOC Source: operations/JS.js, line 18 <static, constant> PARSE_RANGE Source: operations/JS.js, line 23 <static, constant> PARSE_TOKENS Source: operations/JS.js, line 28 <static, constant> PARSE_COMMENT Source: operations/JS.js, line 33 <static, constant> PARSE_TOLERANT Source: operations/JS.js, line 38 <static, constant> BEAUTIFY_INDENT Default Value: \\t Source: operations/JS.js, line 71 <static, constant> BEAUTIFY_QUOTES Default Value: ["Auto","Single","Double"] Source: operations/JS.js, line 76 <static, constant> BEAUTIFY_SEMICOLONS Default Value: true Source: operations/JS.js, line 81 <static, constant> BEAUTIFY_COMMENT Default Value: true Source: operations/JS.js, line 86 Methods <static> run_parse(input, args) JavaScript Parser operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/JS.js, line 47 Returns: Type string <static> run_beautify(input, args) JavaScript Beautify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/JS.js, line 95 Returns: Type string <static> run_minify(input, args) JavaScript Minify operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/JS.js, line 140 Returns: Type string × Search results Close "},"MAC.html":{"id":"MAC.html","title":"Namespace: MAC","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: MAC MAC MAC address operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/MAC.js, line 10 Members <static, constant> OUTPUT_CASE Default Value: ["Both","Upper only","Lower only"] Source: operations/MAC.js, line 16 <static, constant> NO_DELIM Default Value: true Source: operations/MAC.js, line 21 <static, constant> DASH_DELIM Default Value: true Source: operations/MAC.js, line 26 <static, constant> COLON_DELIM Default Value: true Source: operations/MAC.js, line 31 <static, constant> CISCO_STYLE Source: operations/MAC.js, line 36 Methods <static> run_format(input, args) Format MAC addresses operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/MAC.js, line 45 Returns: Type string × Search results Close "},"Numberwang.html":{"id":"Numberwang.html","title":"Namespace: Numberwang","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Numberwang Numberwang Numberwang operations. Author: Unknown Male 282 Source: operations/Numberwang.js, line 7 Methods <static> run(input, args) Numberwang operation. Remain indoors. Parameters: Name Type Description input string args Array.<Object> Source: operations/Numberwang.js, line 16 Returns: Type string × Search results Close "},"OS.html":{"id":"OS.html","title":"Namespace: OS","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: OS OS Operating system operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/OS.js, line 10 Methods <static> run_parse_unix_perms(input, args) Parse UNIX file permissions operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/OS.js, line 19 Returns: Type string <private, static> _perms_to_str(perms) Given a permissions object dictionary, generates a textual permissions string. Parameters: Name Type Description perms Object Source: operations/OS.js, line 204 Returns: Type string <private, static> _perms_to_octal(perms) Given a permissions object dictionary, generates an octal permissions string. Parameters: Name Type Description perms Object Source: operations/OS.js, line 265 Returns: Type string <private, static> _ft_from_perms(perms) Given a permissions object dictionary, returns the file type. Parameters: Name Type Description perms Object Source: operations/OS.js, line 298 Returns: Type string × Search results Close "},"PublicKey.html":{"id":"PublicKey.html","title":"Namespace: PublicKey","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: PublicKey PublicKey Public Key operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/PublicKey.js, line 12 Members <static, constant> X509_INPUT_FORMAT Default Value: ["PEM","DER Hex","Base64","Raw"] Source: operations/PublicKey.js, line 18 <static, constant> PEM_HEADER_STRING Default Value: CERTIFICATE Source: operations/PublicKey.js, line 195 <static, constant> ASN1_TRUNCATE_LENGTH Default Value: 32 Source: operations/PublicKey.js, line 237 Methods <static> run_parse_x509(input, args) Parse X.509 certificate operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 27 Returns: Type string <static> run_pem_to_hex(input, args) PEM to Hex operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 178 Returns: Type string <static> run_hex_to_pem(input, args) Hex to PEM operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 204 Returns: Type string <static> run_hex_to_object_identifier(input, args) Hex to Object Identifier operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 216 Returns: Type string <static> run_object_identifier_to_hex(input, args) Object Identifier to Hex operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 228 Returns: Type string <static> run_parse_asn1_hex_string(input, args) Parse ASN.1 hex string operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/PublicKey.js, line 246 Returns: Type string <private, static> _format_dn_str(dn_str, indent) Formats Distinguished Name (DN) strings. Parameters: Name Type Description dn_str string indent number Source: operations/PublicKey.js, line 263 Returns: Type string <private, static> _format_byte_str(byte_str, length, indent) Formats byte strings by adding line breaks and delimiters. Parameters: Name Type Description byte_str string length number Line width indent number Source: operations/PublicKey.js, line 302 Returns: Type string <private, static> _format_date(date_str) Formats dates. Parameters: Name Type Description date_str string Source: operations/PublicKey.js, line 327 Returns: Type string × Search results Close "},"Punycode.html":{"id":"Punycode.html","title":"Namespace: Punycode","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Punycode Punycode Punycode operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Punycode.js, line 12 Members <static, constant> IDN Source: operations/Punycode.js, line 18 Methods <static> run_to_ascii(input, args) To Punycode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Punycode.js, line 27 Returns: Type string <static> run_to_unicode(input, args) From Punycode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Punycode.js, line 45 Returns: Type string × Search results Close "},"QuotedPrintable.html":{"id":"QuotedPrintable.html","title":"Namespace: QuotedPrintable","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: QuotedPrintable QuotedPrintable Quoted Printable operations.Some parts taken from mimelib (http://github.com/andris9/mimelib) Author: Andris Reinman <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/QuotedPrintable.js, line 33 Methods <static> run_to(input, args) To Quoted Printable operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/QuotedPrintable.js, line 42 Returns: Type string <static> run_from(input, args) From Quoted Printable operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/QuotedPrintable.js, line 63 Returns: Type byte_array <static> mimeDecode(str) Decodes mime-encoded data. Parameters: Name Type Description str string Source: operations/QuotedPrintable.js, line 75 Returns: Type byte_array <static> mimeEncode(buffer) Encodes mime data. Parameters: Name Type Description buffer byte_array Source: operations/QuotedPrintable.js, line 102 Returns: Type string <private, static> _checkRanges(nr, ranges) Checks if a given number falls within a given set of ranges. Parameters: Name Type Description nr number ranges Array.<byte_array> Source: operations/QuotedPrintable.js, line 136 Returns: Type bolean <private, static> _addSoftLinebreaks(str, encoding) Adds soft line breaks to a string.Lines can't be longer that 76 + = 78 byteshttp://tools.ietf.org/html/rfc2045#section-6.7 Parameters: Name Type Description str string encoding string Source: operations/QuotedPrintable.js, line 159 Returns: Type string <private, static> _addBase64SoftLinebreaks(base64EncodedStr, lineLengthMax) Adds soft line breaks to a base64 string. Parameters: Name Type Description base64EncodedStr string lineLengthMax number Source: operations/QuotedPrintable.js, line 180 Returns: Type string <private, static> _addQPSoftLinebreaks(mimeEncodedStr, lineLengthMax) Adds soft line breaks to a quoted printable string. Parameters: Name Type Description mimeEncodedStr string lineLengthMax number Source: operations/QuotedPrintable.js, line 194 Returns: Type string × Search results Close "},"Rotate.html":{"id":"Rotate.html","title":"Namespace: Rotate","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Rotate Rotate Bit rotation operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Rotate.js, line 12 To Do: Support for UTF16 Members <static, constant> ROTATE_AMOUNT Default Value: 1 Source: operations/Rotate.js, line 18 <static, constant> ROTATE_WHOLE Source: operations/Rotate.js, line 23 <static, constant> ROT13_AMOUNT Default Value: 13 Source: operations/Rotate.js, line 83 <static, constant> ROT13_LOWERCASE Default Value: true Source: operations/Rotate.js, line 88 <static, constant> ROT13_UPPERCASE Default Value: true Source: operations/Rotate.js, line 93 Methods <private, static> _rot(data, amount, algo) Runs rotation operations across the input data. Parameters: Name Type Description data byte_array amount number algo function The rotation operation to carry out Source: operations/Rotate.js, line 34 Returns: Type byte_array <static> run_rotr(input, args) Rotate right operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Rotate.js, line 54 Returns: Type byte_array <static> run_rotl(input, args) Rotate left operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Rotate.js, line 70 Returns: Type byte_array <static> run_rot13(input, args) ROT13 operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Rotate.js, line 102 Returns: Type byte_array <private, static> _rotr(b) Rotate right bitwise op. Parameters: Name Type Description b byte Source: operations/Rotate.js, line 136 Returns: Type byte <private, static> _rotl(b) Rotate left bitwise op. Parameters: Name Type Description b byte Source: operations/Rotate.js, line 149 Returns: Type byte <private, static> _rotr_whole(data, amount) Rotates a byte array to the right by a specific amount as a whole, so that bits are wrappedfrom the end of the array to the beginning. Parameters: Name Type Description data byte_array amount number Source: operations/Rotate.js, line 164 Returns: Type byte_array <private, static> _rotl_whole(data, amount) Rotates a byte array to the left by a specific amount as a whole, so that bits are wrappedfrom the beginning of the array to the end. Parameters: Name Type Description data byte_array amount number Source: operations/Rotate.js, line 190 Returns: Type byte_array × Search results Close "},"SeqUtils.html":{"id":"SeqUtils.html","title":"Namespace: SeqUtils","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: SeqUtils SeqUtils Sequence utility operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/SeqUtils.js, line 10 Members <static, constant> DELIMITER_OPTIONS Default Value: ["Line feed","CRLF","Space","Comma","Semi-colon","Colon","Nothing (separate chars)"] Source: operations/SeqUtils.js, line 16 <static, constant> SORT_REVERSE Source: operations/SeqUtils.js, line 21 <static, constant> SORT_ORDER Default Value: ["Alphabetical (case sensitive)","Alphabetical (case insensitive)","IP address"] Source: operations/SeqUtils.js, line 26 <static, constant> SEARCH_TYPE Default Value: ["Regex","Extended (\\\\n, \\\\t, \\\\x...)","Simple string"] Source: operations/SeqUtils.js, line 71 <static, constant> REVERSE_BY Default Value: ["Character","Line"] Source: operations/SeqUtils.js, line 107 Methods <static> run_sort(input, args) Sort operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 35 Returns: Type string <static> run_unique(input, args) Unique operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 61 Returns: Type string <static> run_count(input, args) Count occurrences operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 80 Returns: Type number <static> run_reverse(input, args) Reverse operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/SeqUtils.js, line 116 Returns: Type byte_array <static> run_add_line_numbers(input, args) Add line numbers operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 149 Returns: Type string <static> run_remove_line_numbers(input, args) Remove line numbers operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 168 Returns: Type string <static> run_expand_alph_range(input, args) Expand alphabet range operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/SeqUtils.js, line 180 Returns: Type string <private, static> _case_insensitive_sort(a, b) Comparison operation for sorting of strings ignoring case. Parameters: Name Type Description a string b string Source: operations/SeqUtils.js, line 193 Returns: Type number <private, static> _ip_sort(a, b) Comparison operation for sorting of IPv4 addresses. Parameters: Name Type Description a string b string Source: operations/SeqUtils.js, line 206 Returns: Type number × Search results Close "},"StrUtils.html":{"id":"StrUtils.html","title":"Namespace: StrUtils","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: StrUtils StrUtils String utility operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/StrUtils.js, line 12 Members <static, constant> REGEX_PRE_POPULATE Default Value: ["{\\"name\\":\\"User defined\\",\\"value\\":\\"\\"}","{\\"name\\":\\"IPv4 address\\",\\"value\\":\\"(?:(?:\\\\\\\\d|[01]?\\\\\\\\d\\\\\\\\d|2[0-4]\\\\\\\\d|25[0-5])\\\\\\\\.){3}(?:25[0-5]|2[0-4]\\\\\\\\d|[01]?\\\\\\\\d\\\\\\\\d|\\\\\\\\d)(?:\\\\\\\\/\\\\\\\\d{1,2})?\\"}","{\\"name\\":\\"IPv6 address\\",\\"value\\":\\"((?=.*::)(?!.*::.+::)(::)?([\\\\\\\\dA-Fa-f]{1,4}:(:|\\\\\\\\b)|){5}|([\\\\\\\\dA-Fa-f]{1,4}:){6})((([\\\\\\\\dA-Fa-f]{1,4}((?!\\\\\\\\3)::|:\\\\\\\\b|(?![\\\\\\\\dA-Fa-f])))|(?!\\\\\\\\2\\\\\\\\3)){2}|(((2[0-4]|1\\\\\\\\d|[1-9])?\\\\\\\\d|25[0-5])\\\\\\\\.?\\\\\\\\b){4})\\"}","{\\"name\\":\\"Email address\\",\\"value\\":\\"(\\\\\\\\w[-.\\\\\\\\w]*)@([-\\\\\\\\w]+(?:\\\\\\\\.[-\\\\\\\\w]+)*)\\\\\\\\.([A-Za-z]{2,4})\\"}","{\\"name\\":\\"URL\\",\\"value\\":\\"([A-Za-z]+://)([-\\\\\\\\w]+(?:\\\\\\\\.\\\\\\\\w[-\\\\\\\\w]*)+)(:\\\\\\\\d+)?(/[^.!,?;\\\\\\"\\\\\\\\x27<>()\\\\\\\\[\\\\\\\\]{}\\\\\\\\s\\\\\\\\x7F-\\\\\\\\xFF]*(?:[.!,?]+[^.!,?;\\\\\\"\\\\\\\\x27<>()\\\\\\\\[\\\\\\\\]{}\\\\\\\\s\\\\\\\\x7F-\\\\\\\\xFF]+)*)?\\"}","{\\"name\\":\\"Domain\\",\\"value\\":\\"(?:(https?):\\\\\\\\/\\\\\\\\/)?([-\\\\\\\\w.]+)\\\\\\\\.(com|net|org|biz|info|co|uk|onion|int|mobi|name|edu|gov|mil|eu|ac|ae|af|de|ca|ch|cn|cy|es|gb|hk|il|in|io|tv|me|nl|no|nz|ro|ru|tr|us|az|ir|kz|uz|pk)+\\"}","{\\"name\\":\\"Windows file path\\",\\"value\\":\\"([A-Za-z]):\\\\\\\\\\\\\\\\((?:[A-Za-z\\\\\\\\d][A-Za-z\\\\\\\\d\\\\\\\\- \\\\\\\\x27_\\\\\\\\(\\\\\\\\)]{0,61}\\\\\\\\\\\\\\\\?)*[A-Za-z\\\\\\\\d][A-Za-z\\\\\\\\d\\\\\\\\- \\\\\\\\x27_\\\\\\\\(\\\\\\\\)]{0,61})(\\\\\\\\.[A-Za-z\\\\\\\\d]{1,6})?\\"}","{\\"name\\":\\"UNIX file path\\",\\"value\\":\\"(?:/[A-Za-z\\\\\\\\d.][A-Za-z\\\\\\\\d\\\\\\\\-.]{0,61})+\\"}","{\\"name\\":\\"MAC address\\",\\"value\\":\\"[A-Fa-f\\\\\\\\d]{2}(?:[:-][A-Fa-f\\\\\\\\d]{2}){5}\\"}","{\\"name\\":\\"Date (yyyy-mm-dd)\\",\\"value\\":\\"((?:19|20)\\\\\\\\d\\\\\\\\d)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])\\"}","{\\"name\\":\\"Date (dd/mm/yyyy)\\",\\"value\\":\\"(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((?:19|20)\\\\\\\\d\\\\\\\\d)\\"}","{\\"name\\":\\"Date (mm/dd/yyyy)\\",\\"value\\":\\"(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]((?:19|20)\\\\\\\\d\\\\\\\\d)\\"}","{\\"name\\":\\"Strings\\",\\"value\\":\\"[A-Za-z\\\\\\\\d/\\\\\\\\-:.,_$%\\\\\\\\x27\\\\\\"()<>= !\\\\\\\\[\\\\\\\\]{}@]{4,}\\"}"] Source: operations/StrUtils.js, line 18 <static, constant> REGEX_CASE_INSENSITIVE Default Value: true Source: operations/StrUtils.js, line 76 <static, constant> REGEX_MULTILINE_MATCHING Default Value: true Source: operations/StrUtils.js, line 81 <static, constant> OUTPUT_FORMAT Default Value: ["Highlight matches","List matches","List capture groups","List matches with capture groups"] Source: operations/StrUtils.js, line 86 <static, constant> DISPLAY_TOTAL Source: operations/StrUtils.js, line 91 <static, constant> CASE_SCOPE Default Value: ["All","Word","Sentence","Paragraph"] Source: operations/StrUtils.js, line 140 <static, constant> SEARCH_TYPE Default Value: ["Regex","Extended (\\\\n, \\\\t, \\\\x...)","Simple string"] Source: operations/StrUtils.js, line 189 <static, constant> FIND_REPLACE_GLOBAL Default Value: true Source: operations/StrUtils.js, line 194 <static, constant> FIND_REPLACE_CASE Source: operations/StrUtils.js, line 199 <static, constant> FIND_REPLACE_MULTILINE Default Value: true Source: operations/StrUtils.js, line 204 <static, constant> SPLIT_DELIM Default Value: , Source: operations/StrUtils.js, line 243 <static, constant> DELIMITER_OPTIONS Default Value: ["Line feed","CRLF","Space","Comma","Semi-colon","Colon","Nothing (separate chars)"] Source: operations/StrUtils.js, line 248 <static, constant> DIFF_SAMPLE_DELIMITER Default Value: \\n\\n Source: operations/StrUtils.js, line 270 <static, constant> DIFF_BY Default Value: ["Character","Word","Line","Sentence","CSS","JSON"] Source: operations/StrUtils.js, line 275 <static, constant> OFF_CHK_SAMPLE_DELIMITER Default Value: \\n\\n Source: operations/StrUtils.js, line 347 Methods <static> run_regex(input, args) Regular expression operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 100 Returns: Type html <static> run_upper(input, args) To Upper case operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 149 Returns: Type string <static> run_lower(input, args) To Upper case operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 180 Returns: Type string <static> run_find_replace(input, args) Find / Replace operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 213 Returns: Type string <static> run_split(input, args) Split operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 257 Returns: Type string <static> run_diff(input, args) Diff operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 284 Returns: Type html <static> run_offset_checker(input, args) Offset checker operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 356 Returns: Type html <static> run_parse_escaped_string(input, args) Parse escaped string operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/StrUtils.js, line 430 Returns: Type string <private, static> _regex_highlight(input, regex, display_total) Adds HTML highlights to matches within a string. Parameters: Name Type Description input string regex RegExp display_total boolean Source: operations/StrUtils.js, line 444 Returns: Type string <private, static> _regex_list(input, regex, display_total, matches, capture_groups) Creates a string listing the matches within a string. Parameters: Name Type Description input string regex RegExp display_total boolean matches boolean Display full match capture_groups boolean Display each of the capture groups separately Source: operations/StrUtils.js, line 486 Returns: Type string × Search results Close "},"Tidy.html":{"id":"Tidy.html","title":"Namespace: Tidy","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Tidy Tidy Tidy operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Tidy.js, line 10 Members <static, constant> REMOVE_SPACES Default Value: true Source: operations/Tidy.js, line 16 <static, constant> REMOVE_CARIAGE_RETURNS Default Value: true Source: operations/Tidy.js, line 21 <static, constant> REMOVE_LINE_FEEDS Default Value: true Source: operations/Tidy.js, line 26 <static, constant> REMOVE_TABS Default Value: true Source: operations/Tidy.js, line 31 <static, constant> REMOVE_FORM_FEEDS Default Value: true Source: operations/Tidy.js, line 36 <static, constant> REMOVE_FULL_STOPS Source: operations/Tidy.js, line 41 <static, constant> APPLY_TO_EACH_LINE Source: operations/Tidy.js, line 89 <static, constant> DROP_START Source: operations/Tidy.js, line 94 <static, constant> DROP_LENGTH Default Value: 5 Source: operations/Tidy.js, line 99 <static, constant> TAKE_START Source: operations/Tidy.js, line 146 <static, constant> TAKE_LENGTH Default Value: 5 Source: operations/Tidy.js, line 151 <static, constant> PAD_POSITION Default Value: ["Start","End"] Source: operations/Tidy.js, line 198 <static, constant> PAD_LENGTH Default Value: 5 Source: operations/Tidy.js, line 203 <static, constant> PAD_CHAR Default Value: Source: operations/Tidy.js, line 208 Methods <static> run_remove_whitespace(input, args) Remove whitespace operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Tidy.js, line 50 Returns: Type string <static> run_remove_nulls(input, args) Remove null bytes operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Tidy.js, line 76 Returns: Type byte_array <static> run_drop_bytes(input, args) Drop bytes operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Tidy.js, line 108 Returns: Type byte_array <static> run_take_bytes(input, args) Take bytes operation. Parameters: Name Type Description input byte_array args Array.<Object> Source: operations/Tidy.js, line 160 Returns: Type byte_array <static> run_pad(input, args) Pad lines operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Tidy.js, line 217 Returns: Type string × Search results Close "},"URL_.html":{"id":"URL_.html","title":"Namespace: URL_","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: URL_ URL_ URL operations.Namespace is appended with an underscore to prevent overwriting the global URL object. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/URL.js, line 13 Members <static, constant> ENCODE_ALL Source: operations/URL.js, line 19 Methods <static> run_to(input, args) URL Encode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/URL.js, line 28 Returns: Type string <static> run_from(input, args) URL Decode operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/URL.js, line 41 Returns: Type string <static> run_parse(input, args) Parse URI operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/URL.js, line 58 Returns: Type string <private, static> _encode_all_chars(str) URL encodes additional special characters beyond the standard set. Parameters: Name Type Description str string Source: operations/URL.js, line 115 Returns: Type string × Search results Close "},"UUID.html":{"id":"UUID.html","title":"Namespace: UUID","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: UUID UUID UUID operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/UUID.js, line 10 Methods <static> run_generate_v4(input, args) Generate UUID operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/UUID.js, line 19 Returns: Type string × Search results Close "},"Unicode.html":{"id":"Unicode.html","title":"Namespace: Unicode","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Namespace: Unicode Unicode Unicode operations. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: operations/Unicode.js, line 10 Members <static, constant> PREFIXES Default Value: ["\\\\u","%u","U+"] Source: operations/Unicode.js, line 16 <private, static, constant> _prefix_to_regex Lookup table to add prefixes to unicode delimiters so that they can be used in a regex. Source: operations/Unicode.js, line 56 Methods <static> run_unescape(input, args) Unescape Unicode Characters operation. Parameters: Name Type Description input string args Array.<Object> Source: operations/Unicode.js, line 25 Returns: Type string × Search results Close "},"ControlsWaiter.html":{"id":"ControlsWaiter.html","title":"Class: ControlsWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: ControlsWaiter ControlsWaiter new ControlsWaiter(app, manager) Waiter to handle events related to the CyberChef controls (i.e. Bake, Step, Save, Load etc.) Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/ControlsWaiter.js, line 12 Methods adjust_width() Adjusts the display properties of the control buttons so that they fit within the current widthwithout wrapping or overflowing. Source: views/html/ControlsWaiter.js, line 22 set_auto_bake(value) Checks or unchecks the Auto Bake checkbox based on the given value. Parameters: Name Type Description value boolean The new value for Auto Bake. Source: views/html/ControlsWaiter.js, line 65 bake_click() Handler to trigger baking. Source: views/html/ControlsWaiter.js, line 77 step_click() Handler for the 'Step through' command. Executes the next step of the recipe. Source: views/html/ControlsWaiter.js, line 86 auto_bake_change() Handler for changes made to the Auto Bake checkbox. Source: views/html/ControlsWaiter.js, line 95 clear_recipe_click() Handler for the 'Clear recipe' command. Removes all operations from the recipe. Source: views/html/ControlsWaiter.js, line 114 clear_breaks_click() Handler for the 'Clear breakpoints' command. Removes all breakpoints from operations in therecipe. Source: views/html/ControlsWaiter.js, line 123 initialise_save_link( [recipe_config]) Populates the save disalog box with a URL incorporating the recipe and input. Parameters: Name Type Argument Description recipe_config Array.<Object> <optional> The recipe configuration object array. Source: views/html/ControlsWaiter.js, line 138 generate_state_url(include_recipe, include_input [, recipe_config]) Generates a URL containing the current recipe and input state. Parameters: Name Type Argument Description include_recipe boolean Whether to include the recipe in the URL. include_input boolean Whether to include the input in the URL. recipe_config Array.<Object> <optional> The recipe configuration object array. Source: views/html/ControlsWaiter.js, line 161 Returns: Type string save_text_change() Handler for changes made to the save dialog text area. Re-initialises the save link. Source: views/html/ControlsWaiter.js, line 190 save_click() Handler for the 'Save' command. Pops up the save dialog box. Source: views/html/ControlsWaiter.js, line 201 slr_check_change() Handler for the save link recipe checkbox change event. Source: views/html/ControlsWaiter.js, line 214 sli_check_change() Handler for the save link input checkbox change event. Source: views/html/ControlsWaiter.js, line 222 load_click() Handler for the 'Load' command. Pops up the load dialog box. Source: views/html/ControlsWaiter.js, line 230 save_button_click() Saves the recipe specified in the save textarea to local storage. Source: views/html/ControlsWaiter.js, line 239 populate_load_recipes_list() Populates the list of saved recipes in the load dialog box from local storage. Source: views/html/ControlsWaiter.js, line 268 load_delete_click() Removes the currently selected recipe from local storage. Source: views/html/ControlsWaiter.js, line 297 load_name_change() Displays the selected recipe in the load text box. Source: views/html/ControlsWaiter.js, line 314 load_button_click() Loads the selected recipe and populates the Recipe with its operations. Source: views/html/ControlsWaiter.js, line 331 × Search results Close "},"HTMLApp.html":{"id":"HTMLApp.html","title":"Class: HTMLApp","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: HTMLApp HTMLApp new HTMLApp(categories, operations, default_favourites, options) HTML view for CyberChef responsible for building the web page and dealing with all userinteractions. Parameters: Name Type Description categories Array.<CatConf> The list of categories and operations to be populated. operations Object.<string, OpConf> The list of operation configuration objects. default_favourites Array.<String> A list of default favourite operations. options Object Default setting for app options. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/HTMLApp.js, line 17 Methods setup() This function sets up the stage and creates listeners for all events. Source: views/html/HTMLApp.js, line 40 Fires: Manager#event:appstart handle_error(err) An error handler for displaying the error to the user. Parameters: Name Type Description err Error Source: views/html/HTMLApp.js, line 57 bake( [step]) Calls the Chef to bake the current input using the current recipe. Parameters: Name Type Argument Description step boolean <optional> Set to true if we should only execute one operation instead of the whole recipe. Source: views/html/HTMLApp.js, line 70 auto_bake() Runs Auto Bake if it is set. Source: views/html/HTMLApp.js, line 108 silent_bake() Runs a silent bake forcing the browser to load and cache all the relevant JavaScript code neededto do a real bake. The output will not be modified (hence "silent" bake). This will only actually execute therecipe if auto-bake is enabled, otherwise it will just load the recipe, ingredients and dish. Source: views/html/HTMLApp.js, line 124 Returns: The number of miliseconds it took to run the silent bake. Type number get_input() Gets the user's input data. Source: views/html/HTMLApp.js, line 141 Returns: Type string set_input(input) Sets the user's input data. Parameters: Name Type Description input string The string to set the input to Source: views/html/HTMLApp.js, line 157 populate_operations_list() Populates the operations accordion list with the categories and operations specified in theview constructor. Source: views/html/HTMLApp.js, line 170 Fires: Manager#event:oplistcreate initialise_splitter() Sets up the adjustable splitter to allow the user to resize areas of the page. Source: views/html/HTMLApp.js, line 206 load_local_storage() Loads the information previously saved to the HTML5 local storage object so that user optionsand favourites can be restored. Source: views/html/HTMLApp.js, line 227 load_favourites() Loads the user's favourite operations from the HTML5 local storage object and populates theFavourites category with them.If the user currently has no saved favourites, the defaults from the view constructor are used. Source: views/html/HTMLApp.js, line 245 valid_favourites(favourites) Filters the list of favourite operations that the user had stored and removes any that are nolonger available. The user is notified if this is the case. Parameters: Name Type Description favourites Array.<string> A list of the user's favourite operations Source: views/html/HTMLApp.js, line 276 Returns: A list of the valid favourites Type Array.<string> save_favourites(favourites) Saves a list of favourite operations to the HTML5 local storage object. Parameters: Name Type Description favourites Array.<string> A list of the user's favourite operations Source: views/html/HTMLApp.js, line 295 reset_favourites() Resets favourite operations back to the default as specified in the view constructor andrefreshes the operation list. Source: views/html/HTMLApp.js, line 304 add_favourite(name) Adds an operation to the user's favourites. Parameters: Name Type Description name string The name of the operation Source: views/html/HTMLApp.js, line 317 load_URI_params() Checks for input and recipe in the URI parameters and loads them if present. Source: views/html/HTMLApp.js, line 336 next_ing_id() Returns the next ingredient ID and increments it for next time. Source: views/html/HTMLApp.js, line 401 Returns: Type number get_recipe_config() Gets the current recipe configuration. Source: views/html/HTMLApp.js, line 411 Returns: Type Array.<Object> set_recipe_config(recipe_config) Given a recipe configuration, sets the recipe to that configuration. Parameters: Name Type Description recipe_config Array.<Object> The recipe configuration Source: views/html/HTMLApp.js, line 423 reset_layout() Resets the splitter positions to default. Source: views/html/HTMLApp.js, line 463 set_compile_message() Sets the compile message. Source: views/html/HTMLApp.js, line 477 alert(str, style, timeout [, silent]) Pops up a message to the user and writes it to the console log. Parameters: Name Type Argument Default Description str string The message to display (HTML supported) style string The colour of the popup "danger" = red "warning" = amber "info" = blue "success" = green timeout number The number of milliseconds before the popup closes automatically 0 for never (until the user closes it) silent boolean <optional> false Don't show the message in the popup, only print it to the console Source: views/html/HTMLApp.js, line 516 Example // Pops up a red box with the message "[current time] Error: Something has gone wrong!" // that will need to be dismissed by the user. this.alert("Error: Something has gone wrong!", "danger", 0); // Pops up a blue information box with the message "[current time] Happy Christmas!" // that will disappear after 5 seconds. this.alert("Happy Christmas!", "info", 5000); confirm(title, body, callback [, scope]) Pops up a box asking the user a question and sending the answer to a specified callback function. Parameters: Name Type Argument Default Description title string The title of the box body string The question (HTML supported) callback function A function accepting one boolean argument which handles the response e.g. function(answer) {...} scope Object <optional> this The object to bind to the callback function Source: views/html/HTMLApp.js, line 570 Example // Pops up a box asking if the user would like a cookie. Prints the answer to the console. this.confirm("Question", "Would you like a cookie?", function(answer) {console.log(answer);}); alert_close_click() Handler for the alert close button click event.Closes the alert box. Source: views/html/HTMLApp.js, line 598 state_change(e) Handler for CyerChef statechange events.Fires whenever the input or recipe changes in any way. Parameters: Name Type Description e event Source: views/html/HTMLApp.js, line 610 Listens to Events: Manager#event:statechange pop_state(e) Handler for the history popstate event.Reloads parameters from the URL. Parameters: Name Type Description e event Source: views/html/HTMLApp.js, line 627 call_api() Function to call an external API from this view. Source: views/html/HTMLApp.js, line 637 × Search results Close "},"HTMLCategory.html":{"id":"HTMLCategory.html","title":"Class: HTMLCategory","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: HTMLCategory HTMLCategory new HTMLCategory(name, selected) Object to handle the creation of operation categories. Parameters: Name Type Description name string The name of the category. selected boolean Whether this category is pre-selected or not. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/HTMLCategory.js, line 12 Methods add_operation(operation) Adds an operation to this category. Parameters: Name Type Description operation HTMLOperation The operation to add. Source: views/html/HTMLCategory.js, line 24 to_html() Renders the category and all operations within it in HTML. Source: views/html/HTMLCategory.js, line 34 Returns: Type string × Search results Close "},"HTMLIngredient.html":{"id":"HTMLIngredient.html","title":"Class: HTMLIngredient","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: HTMLIngredient HTMLIngredient new HTMLIngredient(config, app, manager) Object to handle the creation of operation ingredients. Parameters: Name Type Description config Object The configuration object for this ingredient. app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/HTMLIngredient.js, line 13 Methods to_html() Renders the ingredient in HTML. Source: views/html/HTMLIngredient.js, line 34 Returns: Type string toggle_disable_args(e) Handler for argument disable toggle.Toggles disabled state for all arguments in the disable_args list for this ingredient. Parameters: Name Type Description e event Source: views/html/HTMLIngredient.js, line 160 populate_option_change(e) Handler for populate option changes.Populates the relevant argument with the specified value. Parameters: Name Type Description e event Source: views/html/HTMLIngredient.js, line 188 editable_option_change(e) Handler for editable option changes.Populates the input box with the selected value. Parameters: Name Type Description e event Source: views/html/HTMLIngredient.js, line 205 × Search results Close "},"HTMLOperation.html":{"id":"HTMLOperation.html","title":"Class: HTMLOperation","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: HTMLOperation HTMLOperation new HTMLOperation(name, config, app, manager) Object to handle the creation of operations. Parameters: Name Type Description name string The name of the operation. config Object The configuration object for this operation. app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/HTMLOperation.js, line 14 Members <static, constant> INFO_ICON Source: views/html/HTMLOperation.js, line 34 <static, constant> REMOVE_ICON Source: views/html/HTMLOperation.js, line 38 Methods to_stub_html() Renders the operation in HTML as a stub operation with no ingredients. Source: views/html/HTMLOperation.js, line 46 Returns: Type string to_full_html() Renders the operation in HTML as a full operation with ingredients. Source: views/html/HTMLOperation.js, line 76 Returns: Type string highlight_search_string(search_str, name_pos, desc_pos) Highlights the searched string in the name and description of the operation. Parameters: Name Type Description search_str string name_pos number The position of the search string in the operation name desc_pos number The position of the search string in the operation description Source: views/html/HTMLOperation.js, line 102 × Search results Close "},"HighlighterWaiter.html":{"id":"HighlighterWaiter.html","title":"Class: HighlighterWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: HighlighterWaiter HighlighterWaiter new HighlighterWaiter(app) Waiter to handle events related to highlighting in CyberChef. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/HighlighterWaiter.js, line 11 Members <static, readonly> INPUT HighlighterWaiter data type enum for the input. Source: views/html/HighlighterWaiter.js, line 24 <static, readonly> OUTPUT HighlighterWaiter data type enum for the output. Source: views/html/HighlighterWaiter.js, line 30 Methods <private> _is_selection_backwards() Determines if the current text selection is running backwards or forwards.StackOverflow answer id: 12652116 Source: views/html/HighlighterWaiter.js, line 40 Returns: Type boolean <private> _get_output_html_offset(node, offset) Calculates the text offset of a position in an HTML element, ignoring HTML tags. Parameters: Name Type Description node element The parent HTML node. offset number The offset since the last HTML element. Source: views/html/HighlighterWaiter.js, line 63 Returns: Type number <private> _get_output_html_selection_offsets() Gets the current selection offsets in the output HTML, ignoring HTML tags. Source: views/html/HighlighterWaiter.js, line 84 Returns: pos Type Object pos.start Type number pos.end Type number input_scroll(e) Handler for input scroll events.Scrolls the highlighter pane to match the input textarea position. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 120 output_scroll(e) Handler for output scroll events.Scrolls the highlighter pane to match the output textarea position. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 133 input_mousedown(e) Handler for input mousedown events.Calculates the current selection info, and highlights the corresponding data in the output. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 146 output_mousedown(e) Handler for output mousedown events.Calculates the current selection info, and highlights the corresponding data in the input. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 168 output_html_mousedown(e) Handler for output HTML mousedown events.Calculates the current selection info. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 190 input_mouseup(e) Handler for input mouseup events. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 206 output_mouseup(e) Handler for output mouseup events. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 216 output_html_mouseup(e) Handler for output HTML mouseup events. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 226 input_mousemove(e) Handler for input mousemove events.Calculates the current selection info, and highlights the corresponding data in the output. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 237 output_mousemove(e) Handler for output mousemove events.Calculates the current selection info, and highlights the corresponding data in the input. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 261 output_html_mousemove(e) Handler for output HTML mousemove events.Calculates the current selection info. Parameters: Name Type Description e event Source: views/html/HighlighterWaiter.js, line 285 selection_info(start, end) Given start and end offsets, writes the HTML for the selection info element with the correctpadding. Parameters: Name Type Description start number The start offset. end number The end offset. Source: views/html/HighlighterWaiter.js, line 307 Returns: Type string remove_highlights() Removes highlighting and selection information. Source: views/html/HighlighterWaiter.js, line 321 generate_highlight_list() Generates a list of all the highlight functions assigned to operations in the recipe, if theentire recipe supports highlighting. Source: views/html/HighlighterWaiter.js, line 338 Returns: highlights Type Array.<Object> highlights[].f Type function highlights[].b Type function highlights[].args Type Array.<Object> highlight_output(pos) Highlights the given offsets in the output.We will only highlight if: - input hasn't changed since last bake - last bake was a full bake - all operations in the recipe support highlighting Parameters: Name Type Description pos Object The position object for the highlight. Properties Name Type Description start number The start offset. end number The end offset. Source: views/html/HighlighterWaiter.js, line 375 highlight_input(pos) Highlights the given offsets in the input.We will only highlight if: - input hasn't changed since last bake - last bake was a full bake - all operations in the recipe support highlighting Parameters: Name Type Description pos Object The position object for the highlight. Properties Name Type Description start number The start offset. end number The end offset. Source: views/html/HighlighterWaiter.js, line 410 highlight(textarea, highlighter, pos) Adds the relevant HTML to the specified highlight element such that highlighting appearsunderneath the correct offset. Parameters: Name Type Description textarea element The input or output textarea. highlighter element The input or output highlighter element. pos Object The position object for the highlight. Properties Name Type Description start number The start offset. end number The end offset. Source: views/html/HighlighterWaiter.js, line 444 × Search results Close "},"InputWaiter.html":{"id":"InputWaiter.html","title":"Class: InputWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: InputWaiter InputWaiter new InputWaiter(app, manager) Waiter to handle events related to the input. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/InputWaiter.js, line 12 Methods get() Gets the user's input from the input textarea. Source: views/html/InputWaiter.js, line 41 Returns: Type string set(input) Sets the input in the input textarea. Parameters: Name Type Description input string Source: views/html/InputWaiter.js, line 53 Fires: Manager#event:statechange set_input_info(length, lines) Displays information about the input. Parameters: Name Type Description length number The length of the current input string lines number The number of the lines in the current input string Source: views/html/InputWaiter.js, line 65 input_change(e) Handler for input scroll events.Scrolls the highlighter pane to match the input textarea position and updates history state. Parameters: Name Type Description e event Source: views/html/InputWaiter.js, line 84 Fires: Manager#event:statechange input_dragover(e) Handler for input dragover events.Gives the user a visual cue to show that items can be dropped here. Parameters: Name Type Description e event Source: views/html/InputWaiter.js, line 111 input_dragleave(e) Handler for input dragleave events.Removes the visual cue. Parameters: Name Type Description e event Source: views/html/InputWaiter.js, line 128 input_drop(e) Handler for input drop events.Loads the dragged data into the input textarea. Parameters: Name Type Description e event Source: views/html/InputWaiter.js, line 141 clear_io_click() Handler for clear IO events.Resets the input, output and info areas. Source: views/html/InputWaiter.js, line 208 Fires: Manager#event:statechange × Search results Close "},"Manager.html":{"id":"Manager.html","title":"Class: Manager","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: Manager Manager new Manager(app) This object controls the Waiters responsible for handling events from all areas of the app. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/Manager.js, line 11 Methods setup() Sets up the various components and listeners. Source: views/html/Manager.js, line 57 initialise_event_listeners() Main function to handle the creation of the event listeners. Source: views/html/Manager.js, line 67 add_listeners(selector, event_type, callback [, scope]) Adds an event listener to each element in the specified group. Parameters: Name Type Argument Default Description selector string A selector string for the element group to add the event to, see this.get_all() event_type string The event to listen for callback function The function to execute when the event is triggered scope Object <optional> this The object to bind to the callback function Source: views/html/Manager.js, line 163 Example // Calls the clickable function whenever any element with the .clickable class is clicked this.add_listeners(".clickable", "click", this.clickable, this); add_multi_event_listener(selector, event_types, callback [, scope]) Adds multiple event listeners to the specified element. Parameters: Name Type Argument Default Description selector string A selector string for the element to add the events to event_types string A space-separated string of all the event types to listen for callback function The function to execute when the events are triggered scope Object <optional> this The object to bind to the callback function Source: views/html/Manager.js, line 184 Example // Calls the search function whenever the the keyup, paste or search events are triggered on the // search element this.add_multi_event_listener("search", "keyup paste search", this.search, this); add_multi_event_listeners(selector, event_types, callback [, scope]) Adds multiple event listeners to each element in the specified group. Parameters: Name Type Argument Default Description selector string A selector string for the element group to add the events to event_types string A space-separated string of all the event types to listen for callback function The function to execute when the events are triggered scope Object <optional> this The object to bind to the callback function Source: views/html/Manager.js, line 205 Example // Calls the save function whenever the the keyup or paste events are triggered on any element // with the .saveable class this.add_multi_event_listener(".saveable", "keyup paste", this.save, this); add_dynamic_listener(selector, event_type, callback [, scope]) Adds an event listener to the global document object which will listen on dynamic elements whichmay not exist in the DOM yet. Parameters: Name Type Argument Default Description selector string A selector string for the element(s) to add the event to event_type string The event(s) to listen for callback function The function to execute when the event(s) is/are triggered scope Object <optional> this The object to bind to the callback function Source: views/html/Manager.js, line 227 Example // Pops up an alert whenever any button is clicked, even if it is added to the DOM after this // listener is created this.add_dynamic_listener("button", "click", alert, this); dynamic_listener_handler(e) Handler for dynamic events. This function is called for any dynamic event and decides whichcallback(s) to execute based on the type and selector. Parameters: Name Type Description e Event The event to be handled Source: views/html/Manager.js, line 250 Events appstart Source: views/html/Manager.js, line 15 operationadd Source: views/html/Manager.js, line 19 Listeners of This Event: RecipeWaiter#op_add operationremove Source: views/html/Manager.js, line 23 Listeners of This Event: RecipeWaiter#op_remove oplistcreate Source: views/html/Manager.js, line 27 Listeners of This Event: OperationsWaiter#op_list_create statechange Source: views/html/Manager.js, line 31 Listeners of This Event: HTMLApp#state_change × Search results Close "},"OperationsWaiter.html":{"id":"OperationsWaiter.html","title":"Class: OperationsWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: OperationsWaiter OperationsWaiter new OperationsWaiter(app, manager) Waiter to handle events related to the operations. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/OperationsWaiter.js, line 14 Methods search_operations(e) Handler for search events.Finds operations which match the given search term and displays them under the search box. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 29 filter_operations(search_str, highlight) Filters operations based on the search string and returns the matching ones. Parameters: Name Type Description search_str string highlight boolean Whether or not to highlight the matching string in the operation name and description Source: views/html/OperationsWaiter.js, line 101 Returns: Type Array.<string> get_selected_op(ops) Finds the operation which has been selected using keyboard shortcuts. This will have the class'selected-op' set. Returns the index of the operation within the given list. Parameters: Name Type Description ops Array.<element> Source: views/html/OperationsWaiter.js, line 137 Returns: Type number op_list_create(e) Handler for oplistcreate events. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 153 Listens to Events: Manager#event:oplistcreate operation_dblclick(e) Handler for operation doubleclick events.Adds the operation to the recipe and auto bakes. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 165 edit_favourites_click(e) Handler for edit favourites click events.Sets up the 'Edit favourites' pane and displays it. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 179 save_favourites_click() Handler for save favourites click events.Saves the selected favourites and reloads them. Source: views/html/OperationsWaiter.js, line 230 reset_favourites_click() Handler for reset favourites click events.Resets favourites to their defaults. Source: views/html/OperationsWaiter.js, line 249 op_icon_mouseover(e) Handler for op_icon mouseover events.Hides any popovers already showing on the operation so that there aren't two at once. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 260 op_icon_mouseleave(e) Handler for op_icon mouseleave events.If this icon created a popover and we're moving back to the operation element, display the operation popover again. Parameters: Name Type Description e event Source: views/html/OperationsWaiter.js, line 275 × Search results Close "},"OptionsWaiter.html":{"id":"OptionsWaiter.html","title":"Class: OptionsWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: OptionsWaiter OptionsWaiter new OptionsWaiter(app) Waiter to handle events related to the CyberChef options. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/OptionsWaiter.js, line 11 Methods load(options) Loads options and sets values of switches and inputs to match them. Parameters: Name Type Description options Object Source: views/html/OptionsWaiter.js, line 21 options_click() Handler for options click events.Dispays the options pane. Source: views/html/OptionsWaiter.js, line 55 reset_options_click() Handler for reset options click events.Resets options back to their default values. Source: views/html/OptionsWaiter.js, line 64 switch_change(e, state) Handler for switch change events.Modifies the option state and saves it to local storage. Parameters: Name Type Description e event state boolean Source: views/html/OptionsWaiter.js, line 76 number_change(e) Handler for number change events.Modifies the option value and saves it to local storage. Parameters: Name Type Description e event Source: views/html/OptionsWaiter.js, line 91 select_change(e) Handler for select change events.Modifies the option value and saves it to local storage. Parameters: Name Type Description e event Source: views/html/OptionsWaiter.js, line 106 set_word_wrap() Sets or unsets word wrap on the input and output depending on the word_wrap option value. Source: views/html/OptionsWaiter.js, line 118 × Search results Close "},"OutputWaiter.html":{"id":"OutputWaiter.html","title":"Class: OutputWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: OutputWaiter OutputWaiter new OutputWaiter(app, manager) Waiter to handle events related to the output. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/OutputWaiter.js, line 12 Methods get() Gets the output string from the output textarea. Source: views/html/OutputWaiter.js, line 23 Returns: Type string set(data_str, type, duration) Sets the output in the output textarea. Parameters: Name Type Description data_str string The output string/HTML type string The data type of the output duration number The length of time (ms) it took to generate the output Source: views/html/OutputWaiter.js, line 35 set_output_info(length, lines, duration) Displays information about the output. Parameters: Name Type Description length number The length of the current output string lines number The number of the lines in the current output string duration number The length of time (ms) it took to generate the output Source: views/html/OutputWaiter.js, line 82 save_click() Handler for save click events.Saves the current output to a file, downloaded as a URL octet stream. Source: views/html/OutputWaiter.js, line 102 switch_click() Handler for switch click events.Moves the current output into the input textarea. Source: views/html/OutputWaiter.js, line 125 undo_switch_click() Handler for undo switch click events.Removes the output from the input and replaces the input that was removed. Source: views/html/OutputWaiter.js, line 136 × Search results Close "},"RecipeWaiter.html":{"id":"RecipeWaiter.html","title":"Class: RecipeWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: RecipeWaiter RecipeWaiter new RecipeWaiter(app, manager) Waiter to handle events related to the recipe. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/RecipeWaiter.js, line 14 Methods initialise_operation_drag_n_drop() Sets up the drag and drop capability for operations in the operations and recipe areas. Source: views/html/RecipeWaiter.js, line 24 create_sortable_seed_list(list_el) Creates a drag-n-droppable seed list of operations. Parameters: Name Type Description list_el element The list the initialise Source: views/html/RecipeWaiter.js, line 68 op_sort_end(evt) Handler for operation sort end events.Removes the operation from the list if it has been dropped outside. If not, adds it to the listat the appropriate place and initialises it. Parameters: Name Type Description evt event Source: views/html/RecipeWaiter.js, line 96 Fires: Manager#event:operationadd fav_dragover(e) Handler for favourite dragover events.If the element being dragged is an operation, displays a visual cue so that the user knows it canbe dropped here. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 125 fav_dragleave(e) Handler for favourite dragleave events.Removes the visual cue. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 150 fav_drop(e) Handler for favourite drop events.Adds the dragged operation to the favourites list. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 163 ing_change() Handler for ingredient change events. Source: views/html/RecipeWaiter.js, line 178 Fires: Manager#event:statechange disable_click(e) Handler for disable click events.Updates the icon status. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 190 Fires: Manager#event:statechange breakpoint_click(e) Handler for breakpoint click events.Updates the icon status. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 215 Fires: Manager#event:statechange operation_dblclick(e) Handler for operation doubleclick events.Removes the operation from the recipe and auto bakes. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 237 Fires: Manager#event:statechange operation_child_dblclick(e) Handler for operation child doubleclick events.Removes the operation from the recipe. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 250 Fires: Manager#event:statechange get_config() Generates a configuration object to represent the current recipe. Source: views/html/RecipeWaiter.js, line 261 Returns: Type recipe_config update_breakpoint_indicator(position) Moves or removes the breakpoint indicator in the recipe based on the position. Parameters: Name Type Description position number Source: views/html/RecipeWaiter.js, line 312 build_recipe_operation(el) Given an operation stub element, this function converts it into a full recipe element witharguments. Parameters: Name Type Description el element The operation stub element from the operations pane Source: views/html/RecipeWaiter.js, line 330 add_operation(name) Adds the specified operation to the recipe. Parameters: Name Type Description name string The name of the operation to add Source: views/html/RecipeWaiter.js, line 354 Fires: Manager#event:operationadd Returns: Type element clear_recipe() Removes all operations from the recipe. Source: views/html/RecipeWaiter.js, line 371 Fires: Manager#event:operationremove dropdown_toggle_click(e) Handler for operation dropdown events from toggle_string arguments.Sets the selected option as the name of the button. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 386 op_add(e) Handler for operationadd events. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 402 Fires: Manager#event:statechange Listens to Events: Manager#event:operationadd op_remove(e) Handler for operationremove events. Parameters: Name Type Description e event Source: views/html/RecipeWaiter.js, line 414 Fires: Manager#event:statechange Listens to Events: Manager#event:operationremove × Search results Close "},"SeasonalWaiter.html":{"id":"SeasonalWaiter.html","title":"Class: SeasonalWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: SeasonalWaiter SeasonalWaiter new SeasonalWaiter(app, manager) Waiter to handle seasonal events and easter eggs. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. manager Manager The CyberChef event manager. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/SeasonalWaiter.js, line 12 Members <static> tree_walk Walks through the entire DOM starting at the specified element and operates on each node. Source: views/html/SeasonalWaiter.js, line 216 Methods load() Loads all relevant items depending on the current date. Source: views/html/SeasonalWaiter.js, line 21 insert_spider_icons() Replaces chef icons with spider icons. #spiderchef Source: views/html/SeasonalWaiter.js, line 50 insert_spider_text() Replaces all instances of the word "cyber" with "spider". #spiderchef Source: views/html/SeasonalWaiter.js, line 70 create_snow_option() Adds an option to make it snow. #letitsnow Source: views/html/SeasonalWaiter.js, line 99 let_it_snow() Initialises a snowstorm. #letitsnow Source: views/html/SeasonalWaiter.js, line 117 shake_off_snow() When a button is clicked, shake the snow off that button. #letitsnow Source: views/html/SeasonalWaiter.js, line 165 konami_code_listener() Listen for the Konami code sequence of keys. Turn the page upside down if they are all heard insequence. #konamicode Source: views/html/SeasonalWaiter.js, line 192 × Search results Close "},"WindowWaiter.html":{"id":"WindowWaiter.html","title":"Class: WindowWaiter","body":" CyberChef Namespaces FlowControlUtilsBaseBase64BitwiseOpByteReprCharEncChecksumCipherCodeCompressConvertDateTimeEndianEntropyExtractFileTypeHTMLHTTPHashHexdumpIPJSMACNumberwangOSPublicKeyPunycodeQuotedPrintableRotateSeqUtilsStrUtilsTidyURL_UUIDUnicode Classes ChefDishIngredientOperationRecipeControlsWaiterHTMLAppHTMLCategoryHTMLIngredientHTMLOperationHighlighterWaiterInputWaiterManagerOperationsWaiterOptionsWaiterOutputWaiterRecipeWaiterSeasonalWaiterWindowWaiter Events Manager#event:appstartManager#event:operationaddManager#event:operationremoveManager#event:oplistcreateManager#event:statechange Global CategoriesOperationConfigmain Class: WindowWaiter WindowWaiter new WindowWaiter(app) Waiter to handle events related to the window object. Parameters: Name Type Description app HTMLApp The main view object for CyberChef. Author: <p>n1474335 [n1474335@gmail.com]</p> Copyright: Crown Copyright 2016 License: Apache-2.0 Source: views/html/WindowWaiter.js, line 11 Methods window_resize() Handler for window resize events.Resets the layout of CyberChef's panes after 200ms (so that continuous resizing doesn't causecontinuous resetting). Source: views/html/WindowWaiter.js, line 21 window_blur() Handler for window blur events.Saves the current time so that we can calculate how long the window was unfocussed for whenfocus is returned. Source: views/html/WindowWaiter.js, line 32 window_focus() Handler for window focus events. When a browser tab is unfocused and the browser has to run lots of dynamic content in othertabs, it swaps out the memory for that tab.If the CyberChef tab has been unfocused for more than a minute, we run a silent bake which willforce the browser to load and cache all the relevant JavaScript code needed to do a real bake.This will stop baking taking a long time when the CyberChef browser tab has been unfocused fora long time and the browser has swapped out all its memory. Source: views/html/WindowWaiter.js, line 47 × Search results Close "}}
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
$(document).ready(function() {
|
||
Searcher.init();
|
||
});
|
||
|
||
$(window).on("message", function(msg) {
|
||
var msgData = msg.originalEvent.data;
|
||
|
||
if (msgData.msgid != "docstrap.quicksearch.start") {
|
||
return;
|
||
}
|
||
|
||
var results = Searcher.search(msgData.searchTerms);
|
||
|
||
window.parent.postMessage({"results": results, "msgid": "docstrap.quicksearch.done"}, "*");
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|