Skip to content

kraynel/js-rijndael

Repository files navigation

JS-Rijndael

CircleCI Coverage Status Known Vulnerabilities

JS-Rijndael is a port of F. Doering and B. Poettering implementation of Rijndael algorithm. It has no external dependencies and is fully compatible with mcrypt.

How to use

Add the dependency to your project: npm install --save js-rijndael. Require it in your file.

var mcrypt = require('js-rijndael');

mcrypt.listAlgorithms() lists the available ciphers:

  • rijndael-128
  • rijndael-196
  • rijndael-256

mcrypt.listModes() lists the available modes:

  • ecb
  • cbc
  • cfb
  • ncfb
  • nofb
  • ctr

Two methods are exposed: encrypt and decrypt. They take byte arrays as inputs (regular arrays).

Encrypt

encryptedByteArray = mcrypt.encrypt(clearMessage, iv, key, cipherName, mode);

Decrypt

clearByteArray = mcrypt.decrypt(encryptedMessage, iv, key, cipherName, mode);

Example

var base64 = require('base64-js');

var key = [].slice.call(base64.toByteArray("IkhCeiVpeE44RUliVmJDL1FnVltWNVomJn44RSZ4UWU="));
var iv = [].slice.call(base64.toByteArray("5DeaRfj4iHhBluFfyGDbPA=="));
var message = [].slice.call(base64.toByteArray("8N6UX4G5c\/DCtELUOEE5jAdlkLvjBpFQGvo\/7fv3lrOfBUY\/Ze545d5k1C\/lA4zQ88rt52TB3Gz4egWJzerxZy41+sVSOrtLHrQR+Tv7NGfi+vSlZdmAsYVtHOHEPvImmkr+8k9hkKLlZELdY\/mq2t5INTqtmPwxufJB\/3LC+HPnnC0BGYxjvKIJ3jEBfzwcmOiyZG7iea\/BLIZwoH9lUzRe8cR+eVjlTig9NW\/tNMdkYBrxCXoK8XlNAXzjkgtq6c2Sd8keckHvEkYdSkie+ZaZvSwngCQgOKsiTs3jUJkedVnHM9VXLeUCocV17IldQxxghCK14hvLZ4WRCbtDHxMreCR3Rpwv11rWURpvmz0="));
var clearText = String.fromCharCode.apply(this, mcrypt.decrypt(message, iv, key, cipher.cipher, cipher.mode));

console.log(clearText);

Tests

Generate test data

Two solutions:

  • With php and mcrypt, run php generateTests.php > ../test-data.js
  • With docker, run ./generateTests.sh

Run tests

With the test data generated, run npm test.