Package Exports
- jesuscrypt
- jesuscrypt/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jesuscrypt) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
JesusCrypt
AES and RSA with node:crypto
This module is in Javascript. It doesn't support Typescript (yet).
Installation
npm install --save jesuscrypt
You can find the following and few more examples in the ./examples folder.
AES-256
// Import AES from jesuscript
const { AES } = require('jesuscript');
// Let create a plain text string
let plaintext = [...new Array(10)].map(k=>'test').join('');
/**
* Init AES
*
* Default params:
{
algorithm='aes-256-cbc', key=crypto.randomBytes(32), iv=crypto.randomBytes(16)
}
*/
let aes = new AES();
/** Encrypt data */
let encrypted = aes.encrypt({
message: plaintext,
key: aes.key, // optional. Default is aes.key
iv: aes.iv // optional. Default is aes.iv
});
/** Decrypt data */
let decrypted = aes.decrypt({
message: encrypted.message,
key: aes.key, // optional. Default is aes.key
iv: encrypted.iv // optional. Default is aes.iv
});
/** Show something in console */
[
plaintext,
aes.key.toString('hex'),
aes.iv.toString('hex'),
encrypted,
decrypted
].map(v=>console.log(v));AES-256 Promises
// Import AES from jesuscript
const { AES } = require('jesuscrypt');
// Let create a plain text string
let plaintext = [...new Array(10)].map(k=>'test').join('');
/**
* Init AES and convert methods as promises
*
* Default params:
{
algorithm='aes-256-cbc', key=crypto.randomBytes(32), iv=crypto.randomBytes(16)
}
*/
let aes = new AES().promises;
// Show something in console
console.log(plaintext);
console.log(aes.key.toString('hex'));
console.log(aes.iv.toString('hex'));
// Encrypt message
aes.encrypt({
message: plaintext,
key: aes.key, // optional. Default is aes.key
iv: aes.iv // optional. Default is aes.iv
})
.then(encrypted=>{
// Show something in console
console.log(encrypted);
// Decrypt message
return aes.decrypt({
message: encrypted.message,
key: aes.key, // optional. Default is aes.key
iv: encrypted.iv // optional. Default is aes.iv
});
})
.then(decrypted=>{
// Show something in console
return console.log(decrypted);
})
.catch(console.error);RSA
// Import RSA
const { RSA } = require('jesuscrypt');
// Get a plain text string
let plaintext = [...new Array(10)].map(k=>'test').join('');
/**
* Init RSA
*
* default params:
* { algorithm: 'rsa', length: 4096 }
*/
let rsa = new RSA({
algorithm: 'rsa',
length: 2048 // 1024, 2048, 4096
});
// Generate Key pair (with optional passphrase)
let passphrase; // 'any secret passphrase';
rsa.generateKeyPair({ format: 'pem', passphrase })
.then(keyPairAndPassphrase=>{
// Show key pair and passphrase in console
console.log(keyPairAndPassphrase);
// Verify key pair + passphrase
return rsa.verifyKeyPair(keyPairAndPassphrase)
})
.then(keyPair=>{
if (keyPair) {
// Convert plain text utf8 string into Buffer
let buffer = Buffer.from(plaintext, 'utf-8');
// Encrypt data
let encrypted = rsa.encrypt({ publicKey: keyPair.publicKey, buffer, encoding: 'buffer' }); // buffer
/* As alternative, if plaintext is already in hex or base64:
ecncrypted = rsa.encrypt({ publicKey: keyPair.publicKey, buffer: plaintext, encoding: 'hex' }); // hex, base64
*/
// Decrypt data
let decrypted = rsa.decrypt({ privateKey: keyPair.privateKey, buffer: encrypted, passphrase });
return decrypted;
}
// Throw error for non-valid key pair
throw Error('Key pair is not valid');
})
// Show decrypted data (Buffer) in utf-8 format string
.then(decrypted=>console.log(decrypted.toString('utf-8')))
// Show error
.catch(console.err);