2018-05-23 18:31:26 +01:00
/**
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*/
import Operation from "../Operation" ;
import Utils from "../Utils" ;
import forge from "node-forge/dist/forge.min.js" ;
/**
* RC2 Encrypt operation
*/
class RC2Encrypt extends Operation {
/**
* RC2Encrypt constructor
*/
constructor () {
super ();
this . name = "RC2 Encrypt" ;
this . module = "Ciphers" ;
this . description = "RC2 (also known as ARC2) is a symmetric-key block cipher designed by Ron Rivest in 1987. 'RC' stands for 'Rivest Cipher'.<br><br><b>Key:</b> RC2 uses a variable size key.<br><br>You can generate a password-based key using one of the KDF operations.<br><br><b>IV:</b> To run the cipher in CBC mode, the Initialization Vector should be 8 bytes long. If the IV is left blank, the cipher will run in ECB mode.<br><br><b>Padding:</b> In both CBC and ECB mode, PKCS#7 padding will be used." ;
2018-08-21 19:07:13 +01:00
this . infoURL = "https://wikipedia.org/wiki/RC2" ;
2018-05-23 18:31:26 +01:00
this . inputType = "string" ;
this . outputType = "string" ;
this . args = [
{
"name" : "Key" ,
"type" : "toggleString" ,
"value" : "" ,
"toggleValues" : [ "Hex" , "UTF8" , "Latin1" , "Base64" ]
},
{
"name" : "IV" ,
"type" : "toggleString" ,
"value" : "" ,
"toggleValues" : [ "Hex" , "UTF8" , "Latin1" , "Base64" ]
},
{
"name" : "Input" ,
"type" : "option" ,
"value" : [ "Raw" , "Hex" ]
},
{
"name" : "Output" ,
"type" : "option" ,
"value" : [ "Hex" , "Raw" ]
}
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
run ( input , args ) {
const key = Utils . convertToByteString ( args [ 0 ]. string , args [ 0 ]. option ),
iv = Utils . convertToByteString ( args [ 1 ]. string , args [ 1 ]. option ),
2018-05-23 20:36:29 +01:00
[,, inputType , outputType ] = args ,
2018-05-23 18:31:26 +01:00
cipher = forge . rc2 . createEncryptionCipher ( key );
input = Utils . convertToByteString ( input , inputType );
cipher . start ( iv || null );
cipher . update ( forge . util . createBuffer ( input ));
cipher . finish ();
return outputType === "Hex" ? cipher . output . toHex () : cipher . output . getBytes ();
}
}
export default RC2Encrypt ;