Skip to content
Snippets Groups Projects
secrets.js 1.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Sasha Ilieva's avatar
    Sasha Ilieva committed
    import { encryptMessage } from "./signingUtilities.js";
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    import secrets from "../lib/secrets";
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    /** Initialize
     */
    export const initSecrets = (bits, rngType) => secrets.init(bits, rngType);
    
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    /**
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
     * Function generates a random bits length string, and output it in hexadecimal format
     *
     * @param {number} bits
    
     * @returns {string} hex
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
     */
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    export const generateRecoveryKey = bits => secrets.random(bits);
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    
    /**
     * Divide a secret expressed in hexadecimal form into numShares number of shares, requiring that threshold number of shares be present for reconstructing the secret
     *
     * @param {string} secret
     * @param {number} numShares
     * @param {number} threshold
     * @param {number} [padLength=128]
    
     * @returns {array}
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
     */
    export const divideSecretToShares = (
      secret,
      numShares,
      threshold,
      padLength = 128
    ) => secrets.share(secret, numShares, threshold, padLength);
    
    /**
     * Reconstructs a secret from shares
     *
     * @param {array} shares
    
     * @returns {string}
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
     */
    export const combineSecret = shares => secrets.combine(shares);
    
    Sasha Ilieva's avatar
    Sasha Ilieva committed
    
    export const encryptShare = (share, publicKey) =>
      encryptMessage(share, publicKey, "secretPart");