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个分片应该一致 } */