Skip to content

A simple implementation of Shamir's Secret Sharing configured to use a finite field in GF(2^8) with 128 bit padding

License

Notifications You must be signed in to change notification settings

jwerle/shamirs-secret-sharing

Repository files navigation

shamirs-secret-sharing

A simple implementation of Shamir's Secret Sharing configured to use a finite field in GF(2^8) with 128 bit padding.

Preface

Much of what you see in this module has been ported from or directly influenced by secrets.js, c-sss, and libgfshare

Installation

$ npm install shamirs-secret-sharing

Example Usage (Node.js)

import sss from 'shamirs-secret-sharing'

const secret = Buffer.from('secret key')
const shares = sss.split(secret, { shares: 10, threshold: 4 })
const recovered = sss.combine(shares.slice(3, 7))

console.log(recovered.toString()) // 'secret key'

Example Usage (Socket Runtime)

Configure the [build.copy-map] section in socket.ini:

[build.copy-map]
node_modules/shamirs-secret-sharing = shares-secret-sharing
import Buffer form 'socket:buffer'
import combine from 'npm:shares-secret-sharing/combine.js'
import split from 'npm:shares-secret-sharing/split.js'

const secret = Buffer.from('secret key')
const shares = sss.split(secret, { shares: 10, threshold: 4 })
const recovered = sss.combine(shares.slice(3, 7))

console.log(recovered.toString()) // 'secret key'

API

shares = sss.split(secret, opts)

Generate a set of unique and distinct shares for a secret with a configured threshold.

  • secret (required) - A Buffer instance or string that represents a secret for which shares are created for
  • opts (required) - An object of options for configuring how shares are created for a secret
    • opts.shares (required) - The number of n shares that should be created for this secret
    • opts.threshold (required) - The number of t of n distinct share that are required to reconstruct this secret
    • opts.random (optional) - An optional Pseudorandom number generator (PRNG) function that should generate a random value buffer based on some input. e.g opts.random = (size) => randomBytes(size)

secret = sss.combine(shares)

Reconstruct a secret from a distinct set of shares. This function will not throw an error for incorrect shares or if p(0) is not the correct secret for the given shares.

  • shares (required) - An array of shares, that is an array of equally sized and distinct Buffer instances, or strings

See Also

License

MIT

About

A simple implementation of Shamir's Secret Sharing configured to use a finite field in GF(2^8) with 128 bit padding

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published