diff --git a/src/core/operations/Streebog.mjs b/src/core/operations/Streebog.mjs
index 0c46f4f7..f24f2e06 100644
--- a/src/core/operations/Streebog.mjs
+++ b/src/core/operations/Streebog.mjs
@@ -26,7 +26,36 @@ class Streebog extends Operation {
this.infoURL = "https://en.wikipedia.org/wiki/Streebog";
this.inputType = "string";
this.outputType = "string";
- this.args = [];
+ this.args = [
+ {
+ "name": "Version",
+ "type": "option",
+ "value": ["2012", "1994"]
+ },
+ // Paramset sBox for GOST 28147-89. Used only if version = 1994
+ {
+ "name": "S-Box",
+ "type": "option",
+ "value": [
+ "D-A",
+ "D-SC",
+ "E-TEST",
+ "E-A",
+ "E-B",
+ "E-C",
+ "E-D",
+ "E-SC",
+ "E-Z",
+ "D-TEST"
+ ]
+ },
+ // 512 bits digest, valid only for algorithm "Streebog"
+ {
+ "name": "Length",
+ "type": "option",
+ "value": ["256", "512"]
+ }
+ ];
}
/**
@@ -36,16 +65,29 @@ class Streebog extends Operation {
*/
run(input, args) {
try {
- const gostDigest = new GostDigest({name: 'GOST R 34.11', version: 1994});
+ const version = parseInt(args[0], 10);
+ let sBox = args[1];
+ let length = parseInt(args[2], 10);
+
+ // 1994 old-style 256 bits digest based on GOST 28147-89
+ if (version === 1994) {
+ length = 256;
+ }
+
+ if (version === 2012) {
+ sBox = "";
+ }
+
+ const gostDigest = new GostDigest({name: "GOST R 34.11", version, sBox, length });
const gostCoding = new GostCoding();
- const decode = gostCoding.Chars.decode(input, 'utf8');
- let hexEncode = gostCoding.Hex.encode(gostDigest.digest(decode))
-
- return hexEncode.replace(/[^\-A-Fa-f0-9]/g, '').toLowerCase();;
+
+ const decode = gostCoding.Chars.decode(input);
+ const hexEncode = gostCoding.Hex.encode(gostDigest.digest(decode));
+
+ return hexEncode.replace(/[^\-A-Fa-f0-9]/g, "").toLowerCase();
} catch (err) {
- console.log(err)
- throw new OperationError("Test");
+ throw new OperationError(`Invalid Input, Details ${err.message}`);
}
}
diff --git a/src/core/vendor/streebog/gostCipher.js b/src/core/vendor/streebog/gostCipher.js
index b3ec0116..bf6b31b5 100644
--- a/src/core/vendor/streebog/gostCipher.js
+++ b/src/core/vendor/streebog/gostCipher.js
@@ -1,7 +1,9 @@
/**
- * @file GOST 28147-89/GOST R 34.12-2015/GOST R 32.13-2015 Encryption Algorithm
- * @version 1.76
- * @copyright 2014-2016, Rudolf Nickolaev. All rights reserved.
+ * GOST 28147-89/GOST R 34.12-2015/GOST R 32.13-2015 Encryption Algorithm
+ * 1.76
+ * 2014-2016, Rudolf Nickolaev. All rights reserved.
+ *
+ * Exported for CyberChef by mshwed [m@ttshwed.com]
*/
/*
diff --git a/src/core/vendor/streebog/gostCoding.js b/src/core/vendor/streebog/gostCoding.js
index cc909c12..c9514a79 100644
--- a/src/core/vendor/streebog/gostCoding.js
+++ b/src/core/vendor/streebog/gostCoding.js
@@ -1,7 +1,9 @@
/**
- * @file Coding algorithms: Base64, Hex, Int16, Chars, BER and PEM
- * @version 1.76
- * @copyright 2014-2016, Rudolf Nickolaev. All rights reserved.
+ * Coding algorithms: Base64, Hex, Int16, Chars, BER and PEM
+ * version 1.76
+ * 2014-2016, Rudolf Nickolaev. All rights reserved.
+ *
+ * Exported for CyberChef by mshwed [m@ttshwed.com]
*/
/*
@@ -36,9 +38,7 @@
* Module imports and exports
*
*/ //
- if (typeof exports === 'object') {
- module.exports = factory(require('./gostCrypto'));
- }
+ module.exports = factory(require('./gostCrypto'));
//
}(this, function (gostCrypto) {
diff --git a/src/core/vendor/streebog/gostCrypto.js b/src/core/vendor/streebog/gostCrypto.js
index fd6b19a2..f3e23895 100644
--- a/src/core/vendor/streebog/gostCrypto.js
+++ b/src/core/vendor/streebog/gostCrypto.js
@@ -1,7 +1,9 @@
/**
- * @file Implementation Web Crypto interfaces for GOST algorithms
- * @version 1.76
- * @copyright 2014-2016, Rudolf Nickolaev. All rights reserved.
+ * Implementation Web Crypto interfaces for GOST algorithms
+ * 1.76
+ * 2014-2016, Rudolf Nickolaev. All rights reserved.
+ *
+ * Exported for CyberChef by mshwed [m@ttshwed.com]
*/
/*
@@ -37,7 +39,6 @@
*
*/ //
module.exports = factory(require('./gostRandom'));
-
//
}(this, function (GostRandom) {
diff --git a/src/core/vendor/streebog/gostDigest.js b/src/core/vendor/streebog/gostDigest.js
index aa3ddb41..e6f5db33 100644
--- a/src/core/vendor/streebog/gostDigest.js
+++ b/src/core/vendor/streebog/gostDigest.js
@@ -1,7 +1,9 @@
/**
- * @file GOST R 34.11-94 / GOST R 34.11-12 implementation
- * @version 1.76
- * @copyright 2014-2016, Rudolf Nickolaev. All rights reserved.
+ * GOST R 34.11-94 / GOST R 34.11-12 implementation
+ * 1.76
+ * 2014-2016, Rudolf Nickolaev. All rights reserved.
+ *
+ * Exported for CyberChef by mshwed [m@ttshwed.com]
*/
/*
@@ -40,9 +42,7 @@
* Module imports and exports
*
*/ //
- if (typeof exports === 'object') {
- module.exports = factory(require('./gostRandom'), require('./gostCipher'));
- }
+ module.exports = factory(require('./gostRandom'), require('./gostCipher'));
//
}(this, function (GostRandom, GostCipher) {
diff --git a/src/core/vendor/streebog/gostRandom.js b/src/core/vendor/streebog/gostRandom.js
index 5282cf0d..93e0c845 100644
--- a/src/core/vendor/streebog/gostRandom.js
+++ b/src/core/vendor/streebog/gostRandom.js
@@ -1,7 +1,9 @@
/**
- * @file Implementation Web Crypto random generatore for GOST algorithms
- * @version 1.76
- * @copyright 2014-2016, Rudolf Nickolaev. All rights reserved.
+ * Implementation Web Crypto random generatore for GOST algorithms
+ * 1.76
+ * 2014-2016, Rudolf Nickolaev. All rights reserved.
+ *
+ * Exported for CyberChef by mshwed [m@ttshwed.com]
*/
/*
@@ -36,9 +38,7 @@
* Module imports and exports
*
*/ //
- if (typeof exports === 'object') {
- module.exports = factory();
- }
+ module.exports = factory();
//
}(this, function () {