Added support for hashing version 1994 and 2012. Added S-Box selection for 1994 version. Added length selection

This commit is contained in:
mshwed 2019-04-01 23:14:40 -04:00
parent aef65620da
commit 37389a62c1
6 changed files with 78 additions and 33 deletions

View File

@ -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}`);
}
}

View File

@ -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]
*/
/*

View File

@ -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
*
*/ // <editor-fold defaultstate="collapsed">
if (typeof exports === 'object') {
module.exports = factory(require('./gostCrypto'));
}
module.exports = factory(require('./gostCrypto'));
// </editor-fold>
}(this, function (gostCrypto) {

View File

@ -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 @@
*
*/ // <editor-fold defaultstate="collapsed">
module.exports = factory(require('./gostRandom'));
// </editor-fold>
}(this, function (GostRandom) {

View File

@ -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
*
*/ // <editor-fold defaultstate="collapsed">
if (typeof exports === 'object') {
module.exports = factory(require('./gostRandom'), require('./gostCipher'));
}
module.exports = factory(require('./gostRandom'), require('./gostCipher'));
// </editor-fold>
}(this, function (GostRandom, GostCipher) {

View File

@ -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
*
*/ // <editor-fold defaultstate="collapsed">
if (typeof exports === 'object') {
module.exports = factory();
}
module.exports = factory();
// </editor-fold>
}(this, function () {