Noodles Practicing Medicine

    dashmachine-crypto

    1.0.0 • Public • Published

    Dashmachine crypto utility library

    Cryptographic helper functions for use in Dash Platform Web Dapp Sample Messaging.

    Note: this is an experimental library to support the web dapp sample investigation of Dash Platform usage - not for production use.

    Breaking Changes From v1.0.0 DashJS is required as an external dependency in both browser and node.js versions

    Prerequisites

    To utilise the encryption & decryption by username The library requires DashJS as an external dependency, so this must be referenced BEFORE the Dashmachine Crypto library. In Node.js:

    const Dash = require('dash');
    const DashmachineCrypto = require('dashmachine-crypto');
    

    In the browser:

    <script src="https://unpkg.com/dash"></script>
    <script src="dashmachine-crypto-lib.js" type="text/javascript"></script>
    

    Please see the examples below for sample usage

    Browser usage

    Include the dashmachine-crypto-lib.js script file available from the releases page.

    Nodejs usage

    npm i dashmachine-crypto
    

    Documentation

    Table of Contents

    DashmachineCrypto

    DashmachineCrypto performs ECIES encryption & decryption and Double SHA256 Hashing. Note the class contains only static methods so you do not have to call the contructor, i.e. use DashmachineCrypto.encrypt, not new DashmachineCrypto()

    Examples
    <!-- Usage in HTML file -->
    <script src="https://unpkg.com/dash"></script>
    <script src="dashmachine-crypto-lib.js" type="text/javascript"></script>
    <script>
    const vendorPrivateKey = '40148175614f062fb0b4e5c519be7b6f57b872ebb55ea719376322fd12547bff'
    const message = 'hello';
    const userPublicKey = 'A7GGInyvn7ExXkSVg+OFhbhVjEMhIFv0oyeJl03gFDRo'
    const userPrivateKey = '219c8a8f9376750cee9f06e0409718f2a1b88df4acc61bf9ed9cf252c8602768'
    const vendorPublicKey = 'A0/qSE6tis4l6BtQlTXB2PHW+WV+Iy0rpF5hAvX8hDRz'
    console.log(`Encrypting message "${message}"...`);
    const encrypted = DashmachineCrypto.encrypt(vendorPrivateKey, message, userPublicKey);
    console.dir(encrypted.data);
    console.log(`Decrypting result message "${message}"...`);
    const decrypted = DashmachineCrypto.decrypt(userPrivateKey, encrypted.data, vendorPublicKey);
    console.dir(decrypted);
    console.log(`Hashing message "${message}"...`);
    const digest = DashmachineCrypto.hash(message);
    console.dir(digest.data);
    console.log(`Verifying hash...`);
    const verifies = DashmachineCrypto.verify(message, digest.data);
    console.dir(verifies.success)
    const entropy = DashmachineCrypto.generateEntropy();
    console.log(`entropy: ${entropy}`);
     
    const senderName = 'alice';
    const senderMnemonic = 'uniform analyst paper father soldier toe lesson fetch exhaust jazz swim response';
    const recipientName = 'bob';
    const recipientMnemonic = 'liar fee island situate deal exotic flat direct save bag fiscal news';
    const userMessage = `Hello ${recipientName}!`;
    const dpnsContractId = '295xRRRMGYyAruG39XdAibaU9jMAzxhknkkAxFE7uVkW'
     
    async function testUsernameEncryption() {
    try {
    console.log(`send message \"${userMessage}\" to user: ${recipientName}`)
    const encrypted = await DashmachineCrypto.encryptForUsername(userMessage, senderName, recipientName, senderMnemonic, dpnsContractId);
    console.log('encrypted:', encrypted.data);
    const decrypted = await DashmachineCrypto.decryptForUsername(encrypted.data, recipientName, senderName, recipientMnemonic, dpnsContractId)
    console.log('decrypted:', decrypted.data);
    }
    catch (e) {
    console.log('error :', e);
     
    }
     
    }
     
    (async () => { await testUsernameEncryption() })()
    </script>
    //use in nodejs
    const Dash = require('dash');
    const DashmachineCrypto = require("dashmachine-crypto")
     
    const vendorPrivateKey = '40148175614f062fb0b4e5c519be7b6f57b872ebb55ea719376322fd12547bff'
    const message = 'hello';
    const userPublicKey = 'A7GGInyvn7ExXkSVg+OFhbhVjEMhIFv0oyeJl03gFDRo'
    const userPrivateKey = '219c8a8f9376750cee9f06e0409718f2a1b88df4acc61bf9ed9cf252c8602768'
    const vendorPublicKey = 'A0/qSE6tis4l6BtQlTXB2PHW+WV+Iy0rpF5hAvX8hDRz'
    console.log(`Encrypting message "${message}"...`);
    const encrypted = DashmachineCrypto.encrypt(vendorPrivateKey, message, userPublicKey);
    console.dir(encrypted.data);
    console.log(`Decrypting result message "${message}"...`);
    const decrypted = DashmachineCrypto.decrypt(userPrivateKey, encrypted.data, vendorPublicKey);
    console.dir(decrypted);
    console.log('decrypted', decrypted.data);
    const entropy = DashmachineCrypto.generateEntropy();
    console.log(`entropy: ${entropy}`);
     
    const senderName = 'alice';
    const senderMnemonic = 'uniform analyst paper father soldier toe lesson fetch exhaust jazz swim response';
    const recipientName = 'bob';
    const recipientMnemonic = 'liar fee island situate deal exotic flat direct save bag fiscal news';
    const userMessage = `Hello ${recipientName}!`;
    const dpnsContractId = '295xRRRMGYyAruG39XdAibaU9jMAzxhknkkAxFE7uVkW'
     
    async function testUsernameEncryption() {
    try {
    console.log(`send message \"${userMessage}\" to user: ${recipientName}`)
    const encrypted = await DashmachineCrypto.encryptForUsername(userMessage, senderName, recipientName, senderMnemonic, dpnsContractId);
    console.log('encrypted:', encrypted.data);
    const decrypted = await DashmachineCrypto.decryptForUsername(encrypted.data, recipientName, senderName, recipientMnemonic, dpnsContractId)
    console.log('decrypted:', decrypted.data);
    }
    catch (e) {
    console.log('error :', e);
     
    }
     
    }
     
    (async () => { await testUsernameEncryption() })()

    encrypt

    Parameters
    • senderPrivateKey string The base64 repesentation of the HD private key of the Dash User sending the message, the result of calling client.account.getIdentityHDKey(0, 'user').privateKey where client is an instance of Dash.Client
    • message string message to encrypt
    • recipientPublicKey object The base64 repesentation of the public key for the Identity of the Dash User receiveing the message

    Returns Object Either {success: true, data: [encrypted message]} or {error: true, message: [error message]}

    decrypt

    Parameters
    • recipientPrivateKey string The base64 repesentation of the HD private key of the Dash User receiving the message, the result of calling client.account.getIdentityHDKey(0, 'user').privateKey where client is an instance of Dash.Client
    • encryptedMessage string message to decrypt as a hex representation of the stringified JSON of the encryption result buffer
    • senderPublicKey object The base64 repesentation of the public key for the Identity of the Dash User sending the message

    Returns Object Either {success: true, data: [decrypted message]} or {error: true, message: [error message]}

    hash

    Parameters
    • message string full message to be hashed

    Returns Object Either {success: true, data: [digest]} or {error: true, message: [error message]}

    verify

    Parameters
    • message string full message to be hashed
    • digest string digest to compare

    generateEntropy

    Returns Object Either {success: true, data: [generated entropy]} or {error: true, message: [error message]}

    encryptForUsername

    Parameters
    • message string The message to encrypt
    • senderName string DPNS username of sender
    • recipientName string DPNS username of recipient
    • senderMnemonic string Account mnemonic of sender
    • dpnsContractId string contractId for DPNS contract

    Returns Object {success: true, data: encryptedMessage} | {Error}

    decryptForUsername

    Parameters
    • message string The message to decrypt
    • recipientName string DPNS username of recipient
    • senderName string DPNS username of sender
    • recipientMnemonic string Account mnemonic of recipient
    • dpnsContractId string contractId for DPNS contract

    Returns Object {success: true, data: encryptedMessage} or {Error}

    License

    MIT License

    Development

    To develop this library:

    The source file is src/crypto.service.js

    • build output

      npm run build

    • test with webpack dev server

      npm start

    • update documentation (requires npm documentation package installed globally: npm i -g documentation)

    Update the Documentation section of the README.md file

    npm run docs:readme
    

    Install

    npm i dashmachine-crypto

    DownloadsWeekly Downloads

    4

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    47.3 kB

    Total Files

    11

    Last publish

    Collaborators

    • cloudwheels