The secret-sharing package

[ Tags: cryptography, lgpl, library ] [ Propose Tags ]

Implementation of an (m,n)-threshold secret sharing scheme. A given ByteString b (the secret) is split into n shares, and any m shares are sufficient to reconstruct b. The scheme preserves information-theoretic perfect secrecy in the sense that the knowledge of up to m-1 shares does not reveal any information about the secret b.

Example in GHCi: Suppose that you want to split the string "my secret data" into n=5 shares such that at least m=3 shares are necessary to reconstruct the secret.

> :m + Data.ByteString.Lazy.Char8 Crypto.SecretSharing
> let secret = pack "my secret message!"
> shares <- encode 3 5 secret
> mapM_ (Prelude.putStrLn . show) shares -- each share should be deposited at a different site.
> let shares' = Prelude.drop 2 shares
> decode shares'
 "my secret message!"

The mathematics behind the secret sharing scheme is described in: "How to share a secret." by Adi Shamir. In Communications of the ACM 22 (11): 612–613, 1979.


Dependencies base (>=4.6 && <5), binary (>= && <0.10), bytestring (==0.10.*), dice-entropy-conduit (==1.0.*), finite-field (==0.8.*), polynomial (>=0.7.1 && <0.8), vector (>= && <0.13) [details]
License LGPL-2.1
Copyright Peter Robinson 2014
Author Peter Robinson <>
Category Cryptography
Home page
Uploaded Sun Oct 5 17:23:42 UTC 2014 by PeterRobinson
Updated Thu Mar 23 16:07:02 UTC 2017 by HerbertValerioRiedel to revision 1
Distributions NixOS:
Downloads 885 total (11 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI




Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees