1.0.0 • Published 1 year ago

jesuscrypt v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

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);