43 lines
931 B
Go
43 lines
931 B
Go
package ssss
|
|
|
|
/*
|
|
package ssss implements Shamir's Secret Sharing Scheme
|
|
|
|
Usage:
|
|
func TestSSSS() {
|
|
secret := make([]byte, 16)
|
|
// (3,5)门限
|
|
shares, err := Split(secret, 3, 5, 0, rand.Reader)
|
|
if err != nil {
|
|
//
|
|
}
|
|
|
|
// shares 是5份分片数据
|
|
|
|
// 收集至少3份分片数据
|
|
recoveryShares := shares[:3]
|
|
|
|
//
|
|
recoveredSecret, err := Restore(recoveryShares)
|
|
if err != nil {
|
|
//
|
|
}
|
|
|
|
if bytes.Compare(secret, recoveredSecret) != 0 {
|
|
fmt.Println("recoveredSecret and secret are different")
|
|
}
|
|
}
|
|
|
|
每个分片数据格式定义为:
|
|
SharedSlice ::= SEQUENCE {
|
|
Version INTEGER DEFAULT 0,-- default 0
|
|
Threshold INTEGER, -- 门限值
|
|
Length INTEGER, -- 原秘密值字节数
|
|
Degree INTEGER, -- 拉格朗日多项式系数域在F_2上的扩域次数
|
|
X INTEGER, -- x值
|
|
Y INTEGER, -- y=f(x)
|
|
Token [0]IMPLICIT OCTET STRING OPTINAL --随机字节,同一secret的n个分片应该一致
|
|
}
|
|
|
|
*/
|