JSPM

jesuscrypt

1.0.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 1
    • Score
      100M100P100Q12184F
    • License ISC

    AES and RSA with node:crypto

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