{"_id":"@aftership/mcrypt","_rev":"7-4ee71c031b16f0aaeb4c8cc3ad6aa4c1","name":"@aftership/mcrypt","description":"MCrypt bindings","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.3":{"name":"@aftership/mcrypt","version":"0.1.3","description":"MCrypt bindings","keywords":["mcrypt","crypto"],"homepage":"https://github.com/tugrul/node-mcrypt","author":{"name":"Tuğrul Topuz","email":"tugrultopuz@gmail.com"},"bugs":{"url":"https://github.com/AfterShip/node-mcrypt/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AfterShip/node-mcrypt.git"},"scripts":{"install":"node-gyp rebuild --release","preuninstall":"rm -rf build/*"},"engines":{"node":">=4.2.0"},"dependencies":{"nan":"^2.1.0"},"devDependencies":{"node-gyp":"*"},"main":"./build/Release/mcrypt","gitHead":"5d473a2314428acef790bb39ddacc3df27e39a73","_id":"@aftership/mcrypt@0.1.3","_shasum":"bd9d3ac207bdb8a437d9a76a71c44ab6c018acb6","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.0","_npmUser":{"name":"aftership","email":"support@aftership.com"},"dist":{"shasum":"bd9d3ac207bdb8a437d9a76a71c44ab6c018acb6","tarball":"https://registry.npmjs.org/@aftership/mcrypt/-/mcrypt-0.1.3.tgz","integrity":"sha512-4BPoNCPrBneMFtXulsbMKbcVUI7STbWxcnmEuMcpnj90bge32Kmcj1bri/+HknziGVAc7akTQEpRcuPpPHFtUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBOpzQBywzmE/e9f4gFPRcBrTQSU2p2KZ1Q7rIvcuzXPAiADnL86b0C01Y4kFHFlmC51GGDmcCuh33skBHjA7HS4Yg=="}]},"maintainers":[{"name":"aftership","email":"support@aftership.com"}]}},"readme":"# node-mcrypt\n\nMCrypt bindings for Node.js\n\n## Install\n\n```\nnpm install @aftership/mcrypt\n```\n\n## Introduction\n\nAlright! There is already OpenSSL extension bundled with Node.js but there are something wrong with some traditional encryption algorithms on OpenSSL.\n\nI tried to decrypt ciphertext of AES and DES algorithms using OpenSSL but i get the garbage outputs. There are some reasons with OpenSSL like null padding.\n\nAlso i saw same issues on the stackoverflow.com. Some people encountered with same problems.\n\nThis extension provide the cipher and decipher operations via `libmcrypt` and compatible with Java Crypto and PHP MCrypt consequently.\n\nYou should start with import the package like\n\n```javascript\nvar mcrypt = require('mcrypt');\n```\n\nThere are 3 exposed common functions in the package. These functions are `getAlgorithmNames()`, `getModeNames()` and `MCrypt()` constructor function. Also there are some functions under the prototype of `MCrypt()` constructor function.\n\n### getAlgorithmNames([path]) : Array\n\n`getAlgorithmNames()` returns an array that contains available algorithm names. `path` parameter to specify special algorithm directory. `path` parameter is not required.\n\n```javascript\nvar mcrypt = require('mcrypt');\n\nvar algos = mcrypt.getAlgorithmNames();\nconsole.log(algos);\n```\n\nExpected result like that\n\n```\n[ 'cast-128', 'gost', 'rijndael-128', 'twofish', 'arcfour', 'cast-256', 'loki97', 'rijndael-192', 'saferplus', 'wake', 'blowfish-compat', 'des', 'rijndael-256', 'serpent', 'xtea', 'blowfish', 'enigma', 'rc2', 'tripledes' ]\n```\n\n### getModeNames([path]) : Array\n\n`getModeNames()` returns an array that contains available mode names. `path` parameter to specify special mode directory. `path` parameter is not required.\n\n```javascript\nvar mcrypt = require('mcrypt');\n\nvar algos = mcrypt.getModeNames();\nconsole.log(algos);\n```\n\nExpected result like that\n```\n[ 'cbc', 'cfb', 'ctr', 'ecb', 'ncfb', 'nofb', 'ofb', 'stream' ]\n```\n\n### MCrypt(algorithm, mode [, algorithmDir] [, modeDir]) : Object\n\n`MCrypt(algorithm, mode)` is a constructor function to create object for cipher and decipher operations. \n`algorithm` is a required parameter and one of the values of array returned by `getAlgorithmNames()`. \n`mode` is required parameter and one of the values of array returned by `getModeNames()`.\n`algorithmDir` and `modeDir` are optional parameters to specify algorithm and mode directories.\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar desEcb = new MCrypt('des', 'ecb');\n```\n\nThere are some prototype functions to make cipher decipher operations and to identify algorithm properties.\n\n#### open(key [, iv])\n\nWe are need to `open()` with a key for `decrypt()` and `encrypt()` operations also we should set an iv if required by algorithm in other case `iv` is optional parameter.\n`key` and `iv` should be string or Buffer\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar desEcb = new MCrypt('des', 'ecb');\ndesEcb.open('madepass'); // we are set the key\n```\n\n#### encrypt(plaintext) : Buffer\n\n`encrypt()` returns a Buffer object that contains ciphertext of `plaintext` parameter. `plaintext` parameter should be `string` or `Buffer`\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar desEcb = new MCrypt('des', 'ecb');\ndesEcb.open('madepass'); // we are set the key\n\nvar ciphertext = desEcb.encrypt('this is top secret message!');\nconsole.log(ciphertext.toString('base64'));\n```\n\nExpected result like that\n\n```\nfkJnIgtiH8nsGDryyuIsmyf5vABMGStlpACfKCTifvA=\n```\n\n#### decrypt(ciphertext) : Buffer\n\n`decrypt()` returns a Buffer object that contains plaintext of `ciphertext` parameter. `ciphertext` parameter should be `Buffer`\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar desEcb = new MCrypt('des', 'ecb');\ndesEcb.open('madepass'); // we are set the key\n\nvar plaintext = desEcb.decrypt(new Buffer('fkJnIgtiH8nsGDryyuIsmyf5vABMGStlpACfKCTifvA=', 'base64'));\nconsole.log(plaintext.toString());\n```\n\nExpected result like that\n\n```\nthis is top secret message!\n```\n\n#### generateIv() : Buffer\n\n`generateIv()` function generates IV randomly.\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nvar iv = blowfishCfb.generateIv();\n\nblowfishCfb.open('somekey', iv);\n\nvar ciphertext = blowfishCfb.encrypt('sometext');\n\nconsole.log(Buffer.concat([iv, ciphertext]).toString('base64'));\n```\n\n#### validateKeySize(Boolean)\n`validateKeySize()` is a function to disable or enable key size validation on `open()`\n\n```javascript\nvar mc = new MCrypt('blowfish', 'ecb');\nmc.validateKeySize(false); // disable key size checking\nmc.open('typeconfig.sys^_-');\n```\n\n#### validateIvSize(Boolean)\n`validateIvSize()` is a function to disable or enable iv size validation on `open()`\n\n```javascript\nvar mc = new MCrypt('rijndael-256', 'cbc');\nmc.validateIvSize(false); // disable iv size checking\nmc.open('$verysec$retkey$', 'foobar');\n```\n\n#### selfTest() : Boolean\n\n`selfTest()` is an utility function to make test algorithm internally and returns boolean value of status\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.selfTest());\n```\n\n#### isBlockAlgorithmMode() : Boolean\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.isBlockAlgorithmMode());\n```\n\n#### isBlockAlgorithm() : Boolean\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.isBlockAlgorithm());\n```\n\n#### isBlockMode() : Boolean\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.isBlockMode());\n```\n\n#### getBlockSize() : Number\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getBlockSize());\n```\n\n#### getKeySize() : Number\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getKeySize());\n```\n\n#### getSupportedKeySizes() : Array\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getSupportedKeySizes());\n```\n\n#### getIvSize() : Number\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getIvSize());\n```\n\n#### hasIv() : Boolean\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.hasIv());\n```\n\n#### getAlgorithmName() : String\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getAlgorithmName());\n```\n\n#### getModeName() : String\n\n```javascript\nvar MCrypt = require('mcrypt').MCrypt;\n\nvar blowfishCfb = new MCrypt('blowfish', 'cfb');\nconsole.log(blowfishCfb.getModeName());\n```\n\n","maintainers":[{"name":"aftership","email":"support@aftership.com"}],"time":{"modified":"2022-06-12T14:20:46.192Z","created":"2015-10-23T09:08:38.596Z","0.1.3":"2015-10-23T09:08:38.596Z"},"homepage":"https://github.com/tugrul/node-mcrypt","keywords":["mcrypt","crypto"],"repository":{"type":"git","url":"git+https://github.com/AfterShip/node-mcrypt.git"},"author":{"name":"Tuğrul Topuz","email":"tugrultopuz@gmail.com"},"bugs":{"url":"https://github.com/AfterShip/node-mcrypt/issues"},"license":"MIT","readmeFilename":"README.md"}