Documentation ¶
Overview ¶
Package sharedsecret is implementation of Shamir's Secret Sharing algorithm.
Shamir's Secret Sharing is an algorithm in cryptography created by Adi Shamir. It is a form of secret sharing, where a secret is divided into parts, giving each participant its own unique part. To reconstruct the original secret, a minimum number of parts is required. In the threshold scheme this number is less than the total number of parts. Otherwise all participants are needed to reconstruct the original secret. See (wiki page) https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing.
Example (Distribute) ¶
With the `Distribute` function, a given secret can be distributed to shares.
secret := big.NewInt(120398491412912873) // Create 5 shares that 3 or more of them can recover the secret. shares := Distribute(secret, 5, 3) // We can recover from only 3 (or more) shares: recovered := Recover(shares[1], shares[3], shares[0]) fmt.Println(recovered)
Output: 120398491412912873
Example (New) ¶
With the `New` function, a random secret is generated and distributed into shares. Both the secret and the shares are returned.
// Create 5 shares that 3 or more of them can recover the secret. shares, secret := New(5, 3) // Now we should distribute the shares to different parties and forget about the shares and // secret. Once the original secret is needed, at least 3 shares should be used in order to // recover it: // We can't recover from only 2 shares: wrong := Recover(shares[1], shares[3]) // We can recover from only 3 (or more) shares: correct := Recover(shares[1], shares[3], shares[0]) fmt.Println(secret.Cmp(wrong) != 0, secret.Cmp(correct) == 0)
Output: true true
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Share ¶
type Share struct {
// contains filtered or unexported fields
}
Share is a part of a secret.
func Distribute ¶
Distribute creates n Shares for a given secret. k defines the minimum number of shares that should be collected in order to recover the secret. Recovering the secret can be done by calling Recover with more than k Share objects.
func New ¶
New creates n Shares and a secret. k defines the minimum number of shares that should be collected in order to recover the secret. Recovering the secret can be done by calling Recover with more than k Share objects.
func (Share) MarshalText ¶
MarshalText implements the encoding.TextMarshaler interface.
func (*Share) UnmarshalText ¶
UnmarshalText implements the encoding.TextUnmarshaler interface.