UNPKG

zeronet-crypto

Version:

Various cryptographic functions for ZeroNet

65 lines (57 loc) 2.1 kB
'use strict' /* eslint-disable camelcase */ const {ECPair} = require('bitcoinjs-lib') const btcMessage = require('bitcoinjs-message') /** Verifies a bitcoin signature * @param {string} address - Bitcoin address of the signer * @param {string} data - Data that was signed * @param {string} signature - Signature of the data * @return {boolean} - Returns wether the signature was valid and signed with the key */ function verify (address, data, signature) { return btcMessage.verify(data, address, signature, '\x18Bitcoin Signed Message:\n') } /** Signs data with a bitcoin signature * @param {string} privateKey - Bitcoin private key in WIF formate * @param {string} data - Data to sign * @return {string} - Base64 encoded signature */ function sign (privateKey, data) { const pair = ECPair.fromWIF(privateKey) return btcMessage.sign(data, pair.d.toBuffer(32), pair.compressed).toString('base64') } /** Gets the valid signers for a file based on it's path and address Will be soon deperacted in favor of zeronet-auth * @param {string} address - The address of the zie * @param {string} inner_path - The path of the content.json file * @param {object} data - The content.json contents as object * @return {array} - Array of valid signers */ function constructValidSigners (address, inner_path, data) { let valid_signers = [] if (inner_path === 'content.json') { if (data.signers) valid_signers = Object.keys(data.signers) } else { // TODO: multi-user } if (valid_signers.indexOf(address) === -1) valid_signers.push(address) // Address is always a valid signer return valid_signers } /** Returns the signers_sign based on the array of valid signers and singers_required * @param {array} valid_signers - Valid signers array * @param {number} signers_required - The signers required * @return {string} - signers_sign data field */ function GetSigners (valid_signers, signers_required) { return signers_required + ':' + valid_signers.join(',') } module.exports = { verify, sign, constructValidSigners, GetSigners }