secret-sharing: Information-theoretic secure secret sharing

[ cryptography, lgpl, library ] [ Propose Tags ]
Dependencies base (==4.6.*), binary (>=, bytestring (==0.10.*), dice‑entropy‑conduit (>=, finite‑field (>=0.8.0), polynomial (>=0.7.1), vector (>= [details]
License LGPL-2.1-only
Copyright Peter Robinson 2014
Author Peter Robinson <>
Category Cryptography
Home page
Uploaded by PeterRobinson at Wed Sep 10 03:42:36 UTC 2014
Distributions NixOS:
Downloads 1463 total (12 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-12-13 [all 6 reports]
Hackage Matrix CI

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.


  • Crypto
    • Crypto.SecretSharing
      • Crypto.SecretSharing.Internal


Maintainer's Corner

For package maintainers and hackage trustees