The secret-sharing package

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.



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 data"
> shares <- encode 3 5 secret
> mapM_ (Prelude.putStrLn . show) shares
> 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.


Change logNone available
Dependenciesbase (==4.6.*), binary (>=, bytestring (==0.10.*), dice-entropy-conduit (>=, finite-field (>=0.8.0), polynomial (>=0.7.1), vector (>= [details]
CopyrightPeter Robinson 2014
AuthorPeter Robinson <>
Home page
UploadedWed Sep 3 16:08:59 UTC 2014 by PeterRobinson



Maintainers' corner

For package maintainers and hackage trustees