jesuscrypt
v1.0.0
Published
AES and RSA with node:crypto
Downloads
1
Maintainers
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);