123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585 |
- /* eslint no-console: 0 */
- /**
- * nodeApi.js
- *
- * Test node api operations
- *
- * Aim of these tests is to ensure each arg type is
- * handled correctly by the wrapper.
- *
- * @author d98762625 [d98762625@gmail.com]
- * @copyright Crown Copyright 2018
- * @license Apache-2.0
- */
- import assert from "assert";
- import it from "../assertionHandler";
- import {
- addLineNumbers,
- adler32Checksum,
- AESDecrypt,
- affineCipherDecode,
- affineCipherEncode,
- bifidCipherEncode,
- bitShiftRight,
- cartesianProduct,
- CSSMinify,
- toBase64,
- toHex,
- } from "../../../src/node/index";
- import chef from "../../../src/node/index";
- import TestRegister from "../../TestRegister";
- TestRegister.addApiTests([
- it("ADD: toggleString argument", () => {
- const result = chef.ADD("sample input", {
- key: {
- string: "some key",
- option: "Hex"
- }
- });
- assert.equal(result.toString(), "aO[^ZS\u000eW\\^cb");
- }),
- it("addLineNumbers: No arguments", () => {
- const result = addLineNumbers("sample input");
- assert.equal(result.toString(), "1 sample input");
- }),
- it("adler32Checksum: No args", () => {
- const result = adler32Checksum("sample input");
- assert.equal(result.toString(), "1f2304d3");
- }),
- it("AES decrypt: toggleString and option", () => {
- const result = AESDecrypt("812c34ae6af353244a63c6ce23b7c34286b60be28ea4645523d4494700e7", {
- key: {
- string: "some longer key1",
- option: "utf8",
- },
- iv: {
- string: "some iv",
- option: "utf8",
- },
- mode: "OFB",
- });
- assert.equal(result.toString(), "a slightly longer sampleinput?");
- }),
- it("AffineCipherDecode: number input", () => {
- const result = affineCipherDecode("some input", {
- a: 7,
- b: 4
- });
- assert.strictEqual(result.toString(), "cuqa ifjgr");
- }),
- it("affineCipherEncode: number input", () => {
- const result = affineCipherEncode("some input", {
- a: 11,
- b: 6
- });
- assert.strictEqual(result.toString(), "weiy qtpsh");
- }),
- it("analyzeHash", () => {
- const result = chef.analyseHash(chef.MD5("some input"));
- const expected = `Hash length: 32
- Byte length: 16
- Bit length: 128
- Based on the length, this hash could have been generated by one of the following hashing functions:
- MD5
- MD4
- MD2
- HAVAL-128
- RIPEMD-128
- Snefru
- Tiger-128`;
- assert.strictEqual(result.toString(), expected);
- }),
- it("AND", () => {
- const result = chef.AND("Scot-free", {
- key: "Raining Cats and Dogs",
- });
- assert.strictEqual(result.toString(), ".\"M$(D E.");
- }),
- it("atBash Cipher", () => {
- const result = chef.atbashCipher("Happy as a Clam");
- assert.strictEqual(result.toString(), "Szkkb zh z Xozn");
- }),
- it("Bcrypt", () => {
- const result = chef.bcrypt("Put a Sock In It");
- assert.strictEqual(result.toString(), "$2a$10$ODeP1.6fMsb.ENk2ngPUCO7qTGVPyHA9TqDVcyupyed8FjsiF65L6");
- }),
- it("bcryptCompare", () => {
- const result = chef.bcryptCompare("Put a Sock In It", {
- hash: "$2a$10$2rT4a3XnIecBsd1H33dMTuyYE1HJ1n9F.V2rjQtAH73rh1qvOf/ae",
- });
- assert.strictEqual(result.toString(), "Match: Put a Sock In It");
- }),
- it("Bcrypt Parse", () => {
- const result = chef.bcryptParse("$2a$10$ODeP1.6fMsb.ENk2ngPUCO7qTGVPyHA9TqDVcyupyed8FjsiF65L6");
- const expected = `Rounds: 10
- Salt: $2a$10$ODeP1.6fMsb.ENk2ngPUCO
- Password hash: 7qTGVPyHA9TqDVcyupyed8FjsiF65L6
- Full hash: $2a$10$ODeP1.6fMsb.ENk2ngPUCO7qTGVPyHA9TqDVcyupyed8FjsiF65L6`;
- assert.strictEqual(result.toString(), expected);
- }),
- it("bifid cipher decode", () => {
- const result = chef.bifidCipherDecode("Vhef Qnte Ke Xfhz Mxon Bmgf", {
- keyword: "Alpha",
- });
- assert.strictEqual(result.toString(), "What Goes Up Must Come Down");
- }),
- it("bifid cipher encode: string option", () => {
- const result = bifidCipherEncode("some input", {
- keyword: "mykeyword",
- });
- assert.strictEqual(result.toString(), "nmhs zmsdo");
- }),
- it("bit shift left", () => {
- const result = chef.bitShiftLeft("Keep Your Eyes Peeled");
- assert.strictEqual(result.toString(), ".ÊÊà@²Þêä@.òÊæ@ ÊÊØÊÈ");
- }),
- it("bitShiftRight: number and option", () => {
- const result = bitShiftRight("some bits to shift", {
- type: "Arithmetic shift",
- amount: 1,
- });
- assert.strictEqual(result.toString(), "9762\u001014:9\u0010:7\u00109443:");
- }),
- it("Blowfish encrypt", () => {
- const result = chef.blowfishEncrypt("Fool's Gold", {
- key: {
- string: "One",
- option: "hex",
- },
- iv: {
- string: "Two",
- option: "utf8"
- }
- });
- assert.strictEqual(result.toString(), "8999b513bf2ff064b2977dea7e05f1b5");
- }),
- it("Blowfish decrypt", () => {
- const result = chef.blowfishDecrypt("8999b513bf2ff064b2977dea7e05f1b5", {
- key: {
- string: "One",
- option: "hex",
- },
- iv: {
- string: "Two",
- option: "utf8",
- }
- });
- assert.strictEqual(result.toString(), "Fool's Gold");
- }),
- it("BSON Deserialise", () => {
- const result = chef.BSONDeserialise("....phrase.....Mouth-watering..");
- assert.strictEqual(result.toString(), "{\"phrase\": \"Mouth-watering\"}");
- }),
- it("BSON Serialise", () => {
- const result = chef.BSONSerialise({"phrase": "Mouth-watering"});
- assert.strictEqual(result.toString(), " ....phrase.....Mouth-watering..");
- }),
- it("Bzip2 Decompress", () => {
- const result = chef.bzip2Decompress(chef.fromBase64("QlpoOTFBWSZTWUdQlt0AAAIVgEAAAQAmJAwAIAAxBkxA0A2pTL6U2CozxdyRThQkEdQlt0A="));
- assert.strictEqual(result.toString(), "Fit as a Fiddle");
- }),
- it("cartesianProduct: binary string", () => {
- const result = cartesianProduct("1:2\\n\\n3:4", {
- itemDelimiter: ":",
- });
- assert.strictEqual(result.toString(), "(1,3):(1,4):(2,3):(2,4)");
- }),
- it("Change IP format", () => {
- const result = chef.changeIPFormat("172.20.23.54", {
- inputFormat: "Dotted Decimal",
- outputFormat: "Hex",
- });
- assert.strictEqual(result.toString(), "ac141736");
- }),
- it("Chi square", () => {
- const result = chef.chiSquare("Burst Your Bubble");
- assert.strictEqual(result.toString(), "433.55399816176475");
- }),
- it("Compare CTPH Hashes", () => {
- const result = chef.compareCTPHHashes("1234\n3456");
- assert.strictEqual(result.toString(), "0");
- }),
- it("Compare SSDEEPHashes", () => {
- const result = chef.compareCTPHHashes("1234\n3456");
- assert.strictEqual(result.toString(), "0");
- }),
- it("Convert area", () => {
- const result = chef.convertArea("12345", {
- inputUnits: "Square metre (sq m)",
- outputUnits: "Isle of Wight"
- });
- assert.strictEqual(result.toString(), "0.00003248684210526316");
- }),
- it("Convert data units", () => {
- const result = chef.convertDataUnits("12345", {
- inputUnits: "Bits (b)",
- outputUnits: "Kilobytes (KB)",
- });
- assert.strictEqual(result.toString(), "1.543125");
- }),
- it("Convert distance", () => {
- const result = chef.convertDistance("1234567", {
- inputUnits: "Nanometres (nm)",
- outputUnits: "Furlongs (fur)",
- });
- assert.strictEqual(result.toString(), "0.00000613699494949495");
- }),
- it("Convert mass", () => {
- const result = chef.convertMass("123", {
- inputUnits: "Earth mass (M⊕)",
- outputUnits: "Great Pyramid of Giza (6,000,000 tonnes)",
- });
- assert.strictEqual(result.toString(), "122429895000000000");
- }),
- it("Convert speed", () => {
- const result = chef.convertSpeed("123", {
- inputUnits: "Lunar escape velocity",
- outputUnits: "Jet airliner cruising speed",
- });
- assert.strictEqual(result.toString(), "1168.5");
- }),
- it("Count occurrences", () => {
- const result = chef.countOccurrences("Talk the Talk", {
- searchString: {
- string: "Tal",
- option: "Simple string",
- }
- });
- assert.strictEqual(result.toString(), "2");
- }),
- it("CRC16 Checksum", () => {
- const result = chef.CRC16Checksum("Rain on Your Parade");
- assert.strictEqual(result.toString(), "db1c");
- }),
- it("CRC32 Checksum", () => {
- const result = chef.CRC32Checksum("Rain on Your Parade");
- assert.strictEqual(result.toString(), "e902f76c");
- }),
- it("CSS Beautify", () => {
- const result = chef.CSSBeautify("header {color:black;padding:3rem;}");
- const expected = `header {
- \\tcolor:black;
- \\tpadding:3rem;
- }
- `;
- assert.strictEqual(result.toString(), expected);
- }),
- it("CSS minify: boolean", () => {
- const input = `header {
- // comment
- width: 100%;
- color: white;
- }`;
- const result = CSSMinify(input, {
- preserveComments: true,
- });
- assert.strictEqual(result.toString(), "header {// comment width: 100%;color: white;}");
- }),
- it("CSS Selector", () => {
- const result = chef.CSSSelector("<html><header><h1>Hello</h1></header></html>", {
- cssSelector: "h1",
- });
- assert.strictEqual(result.toString(), "<h1>Hello</h1>");
- }),
- it("CTPH", () => {
- const result = chef.CTPH("If You Can't Stand the Heat, Get Out of the Kitchen");
- assert.strictEqual(result.toString(), "A:+EgFgBKAA0V0UFfClEs6:+Qk0gUFse");
- }),
- it("Decode NetBIOS Name", () => {
- assert.strictEqual(chef.decodeNetBIOSName("EBGMGMCAEHHCGFGFGLCAFEGPCAENGFCA").toString(), "All Greek To Me");
- }),
- it("Decode text", () => {
- const encoded = chef.encodeText("Ugly Duckling", {
- encoding: "UTF16LE (1200)",
- });
- const result = chef.decodeText(encoded, {
- encoding: "UTF16LE (1200)",
- });
- assert.strictEqual(result.toString(), "Ugly Duckling");
- }),
- it("Derive EVP Key", () => {
- const result = chef.deriveEVPKey("", {
- passphrase: {
- string: "46 6c 65 61 20 4d 61 72 6b 65 74",
- option: "Hex",
- },
- salt: {
- string: "Market",
- option: "Hex",
- },
- });
- assert.strictEqual(result.toString(), "7c21a9f5063a4d62fb1050068245c181");
- }),
- it("Derive PBKDF2 Key", () => {
- const result = chef.derivePBKDF2Key("", {
- passphrase: {
- string: "Jack of All Trades Master of None",
- option: "utf8",
- },
- keySize: 256,
- iterations: 2,
- hashingFunction: "md5",
- salt: {
- string: "fruit",
- option: "utf8"
- }
- });
- assert.strictEqual(result.toString(), "728a885b209e8b19cbd7430ca32608ff09190f7ccb7ded204e1d4c50f87c47bf");
- }),
- it("DES Decrypt", () => {
- const result = chef.DESDecrypt("713081c66db781c323965ba8f166fd8c230c3bb48504a913", {
- key: {
- string: "onetwoth",
- option: "utf8",
- },
- iv: {
- string: "threetwo",
- option: "Hex",
- },
- mode: "ECB",
- });
- assert.strictEqual(result.toString(), "Put a Sock In It");
- }),
- it("DES Encrypt", () => {
- const result = chef.DESEncrypt("Put a Sock In It", {
- key: {
- string: "onetwoth",
- option: "utf8",
- },
- iv: {
- string: "threetwo",
- option: "Hex",
- },
- mode: "ECB",
- });
- assert.strictEqual(result.toString(), "713081c66db781c323965ba8f166fd8c230c3bb48504a913");
- }),
- it("Diff", () => {
- const result = chef.diff("one two\\n\\none two three");
- assert.strictEqual(result.toString(), "one two three");
- }),
- it("Disassemble x86", () => {
- const result = chef.disassembleX86(chef.toBase64("one two three"));
- const expected = `0000000000000000 0000 ADD BYTE PTR [RAX],AL\r
- 0000000000000002 0B250000000B OR ESP,DWORD PTR [000000000B000008]\r
- `;
- assert.strictEqual(result.toString(), expected);
- }),
- it("Divide", () => {
- assert.strictEqual(chef.divide("4\n7").toString(), "0.57142857142857142857");
- }),
- it("Drop bytes", () => {
- assert.strictEqual(chef.dropBytes("There's No I in Team").toString(), "'s No I in Team");
- }),
- it("Entropy", () => {
- const result = chef.entropy("Ride Him, Cowboy!");
- assert.strictEqual(result.toString(), "3.734521664779752");
- }),
- it("Escape string", () => {
- const result = chef.escapeString("Know the Ropes", {
- escapeLevel: "Everything",
- JSONCompatible: false,
- ES6Compatible: true,
- uppercaseHex: true,
- });
- assert.strictEqual(result.toString(), "\\x4B\\x6E\\x6F\\x77\\x20\\x74\\x68\\x65\\x20\\x52\\x6F\\x70\\x65\\x73");
- }),
- it("Escape unicode characters", () => {
- assert.strictEqual(chef.escapeUnicodeCharacters("σου").toString(), "\\u03C3\\u03BF\\u03C5");
- }),
- it("Expand alphabet range", () => {
- assert.strictEqual(
- chef.expandAlphabetRange("Fight Fire With Fire", {delimiter: "t"}).toString(),
- "Ftitgthttt tFtitrtet tWtitttht tFtitrte");
- }),
- it("Extract dates", () => {
- assert.strictEqual(chef.extractDates("Don't Look a Gift Horse In The Mouth 01/02/1992").toString(), "01/02/1992\n");
- }),
- it("Filter", () => {
- const result = chef.filter(
- `I Smell a Rat
- Every Cloud Has a Silver Lining
- Top Drawer`, {
- regex: "Every",
- });
- const expected = "Every Cloud Has a Silver Lining";
- assert.strictEqual(result.toString(), expected);
- }),
- it("Find / Replace", () => {
- assert.strictEqual(
- chef.findReplace(
- "Curiosity Killed The Cat",
- {
- find: {
- string: "l",
- option: "Regex",
- },
- replace: "s",
- }).toString(),
- "Curiosity Kissed The Cat");
- }),
- it("Fletcher8 Checksum", () => {
- assert.strictEqual(chef.fletcher8Checksum("Keep Your Eyes Peeled").toString(), "48");
- }),
- it("Format MAC addresses", () => {
- const result = chef.formatMACAddresses("00-01-02-03-04-05");
- const expected = `000102030405
- 000102030405
- 00-01-02-03-04-05
- 00-01-02-03-04-05
- 00:01:02:03:04:05
- 00:01:02:03:04:05
- `;
- assert.strictEqual(result.toString(), expected);
- }),
- it("Frequency distribution", () => {
- const result = chef.frequencyDistribution("Don't Count Your Chickens Before They Hatch");
- const expected = "{\"dataLength\":43,\"percentages\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13.953488372093023,0,0,0,0,0,0,2.3255813953488373,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2.3255813953488373,4.651162790697675,2.3255813953488373,0,0,0,2.3255813953488373,0,0,0,0,0,0,0,0,0,0,0,2.3255813953488373,0,0,0,0,2.3255813953488373,0,0,0,0,0,0,0,2.3255813953488373,0,4.651162790697675,0,9.30232558139535,2.3255813953488373,0,6.976744186046512,2.3255813953488373,0,2.3255813953488373,0,0,6.976744186046512,9.30232558139535,0,0,4.651162790697675,2.3255813953488373,6.976744186046512,4.651162790697675,0,0,0,2.3255813953488373,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"distribution\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,4,1,0,3,1,0,1,0,0,3,4,0,0,2,1,3,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"bytesRepresented\":22}";
- assert.strictEqual(result.toString(), expected);
- }),
-
- it("From base", () => {
- assert.strictEqual(chef.fromBase("11", {radix: 13}).toString(), "14");
- }),
- it("From BCD", () => {
- assert.strictEqual(chef.fromBCD("1143", { inputFormat: "Raw", scheme: "7 4 2 1"}).toString(), "31313433");
- }),
- it("From binary", () => {
- assert.strictEqual(chef.fromBinary("010101011100101101011010").toString(), "UËZ");
- }),
- it("From Charcode", () => {
- assert.strictEqual(chef.fromCharcode("4c 6f 6e 67 20 49 6e 20 54 68 65 20 54 6f 6f 74 68 0a").toString(), "Long In The Tooth\n");
- }),
- it("From decimal", () => {
- assert.strictEqual(chef.fromDecimal("72 101 108 108 111").toString(), "Hello");
- }),
- it("From hex", () => {
- assert.strictEqual(chef.fromHex("52 69 6e 67 20 41 6e 79 20 42 65 6c 6c 73 3f").toString(), "Ring Any Bells?");
- }),
- it("From hex content", () => {
- assert.strictEqual(chef.fromHexContent("foo|3d|bar").toString(), "foo=bar");
- }),
- it("To and From hex dump", () => {
- assert.strictEqual(chef.fromHexdump(chef.toHexdump("Elephant in the Room")).toString(), "Elephant in the Room");
- }),
- it("From HTML entity", () => {
- assert.strictEqual(chef.fromHTMLEntity("&").toString(), "&");
- }),
- it("To and From morse code", () => {
- assert.strictEqual(chef.fromMorseCode(chef.toMorseCode("Put a Sock In It")).toString(), "PUT A SOCK IN IT");
- }),
- it("From octal", () => {
- assert.strictEqual(chef.fromOctal("113 156 157 167 40 164 150 145 40 122 157 160 145 163").toString(), "Know the Ropes");
- }),
- it("To, From punycode", () => {
- assert.strictEqual(chef.fromPunycode(chef.toPunycode("münchen")).toString(), "münchen");
- }),
- it("From unix timestamp", () => {
- assert.strictEqual(chef.fromUNIXTimestamp("978346800").toString(), "Mon 1 January 2001 11:00:00 UTC");
- }),
- it("toBase64: editableOption", () => {
- const result = toBase64("some input", {
- alphabet: {
- value: "0-9A-W"
- },
- });
- assert.strictEqual(result.toString(), "SPI1R1T0");
- }),
- it("toBase64: editableOptions key is value", () => {
- const result = toBase64("some input", {
- alphabet: "0-9A-W",
- });
- assert.strictEqual(result.toString(), "SPI1R1T0");
- }),
- it("toBase64: editableOptions default", () => {
- const result = toBase64("some input");
- assert.strictEqual(result.toString(), "c29tZSBpbnB1dA==");
- }),
- it("toHex: accepts args", () => {
- const result = toHex("some input", {
- delimiter: "Colon",
- });
- assert.strictEqual(result.toString(), "73:6f:6d:65:20:69:6e:70:75:74");
- }),
- ]);
|