本文整理汇总了Golang中github.com/dedis/crypto/abstract.Secret.UnmarshalBinary方法的典型用法代码示例。如果您正苦于以下问题:Golang Secret.UnmarshalBinary方法的具体用法?Golang Secret.UnmarshalBinary怎么用?Golang Secret.UnmarshalBinary使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/dedis/crypto/abstract.Secret
的用法示例。
在下文中一共展示了Secret.UnmarshalBinary方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: SecretUnmarshalFrom
// SecretDecodeFrom provides a generic implementation of Secret.DecodeFrom,
// based on Secret.Decode, or Secret.Pick if r is a Cipher or cipher.Stream.
// The returned byte-count is valid only when decoding from a normal Reader,
// not when picking from a pseudorandom source.
func SecretUnmarshalFrom(s abstract.Secret, r io.Reader) (int, error) {
if strm, ok := r.(cipher.Stream); ok {
s.Pick(strm)
return -1, nil // no byte-count when picking randomly
}
buf := make([]byte, s.MarshalSize())
n, err := io.ReadFull(r, buf)
if err != nil {
return n, err
}
return n, s.UnmarshalBinary(buf)
}
示例2: ConstructTree
// ConstructTree does a depth-first construction of the tree specified in the
// config file. ConstructTree must be called AFTER populating the HostConfig with
// ALL the possible hosts.
func ConstructTree(
n *Node,
hc *HostConfig,
parent string,
suite abstract.Suite,
rand cipher.Stream,
hosts map[string]coconet.Host,
nameToAddr map[string]string,
opts ConfigOptions) (int, error) {
// passes up its X_hat, and/or an error
// get the name associated with this address
name, ok := nameToAddr[n.Name]
if !ok {
fmt.Println("unknown name in address book:", n.Name)
return 0, errors.New("unknown name in address book")
}
// generate indicates whether we should generate the signing
// node for this hostname
generate := opts.Host == "" || opts.Host == name
// check to make sure the this hostname is in the tree
// it can be backed by a nil pointer
h, ok := hosts[name]
if !ok {
fmt.Println("unknown host in tree:", name)
return 0, errors.New("unknown host in tree")
}
var prikey abstract.Secret
var pubkey abstract.Point
var sn *sign.Node
// if the JSON holds the fields field is set load from there
if len(n.PubKey) != 0 {
// log.Println("decoding point")
encoded, err := hex.DecodeString(string(n.PubKey))
if err != nil {
log.Print("failed to decode hex from encoded")
return 0, err
}
pubkey = suite.Point()
err = pubkey.UnmarshalBinary(encoded)
if err != nil {
log.Print("failed to decode point from hex")
return 0, err
}
// log.Println("decoding point")
encoded, err = hex.DecodeString(string(n.PriKey))
if err != nil {
log.Print("failed to decode hex from encoded")
return 0, err
}
prikey = suite.Secret()
err = prikey.UnmarshalBinary(encoded)
if err != nil {
log.Print("failed to decode point from hex")
return 0, err
}
}
if generate {
if prikey != nil {
// if we have been given a private key load that
aux := sign.NewKeyedNode(h, suite, prikey)
aux.GenSetPool()
hc.SNodes = append(hc.SNodes, aux)
h.SetPubKey(pubkey)
} else {
// otherwise generate a random new one
sn := sign.NewNode(h, suite, rand)
sn.GenSetPool()
hc.SNodes = append(hc.SNodes, sn)
h.SetPubKey(sn.PubKey)
}
sn = hc.SNodes[len(hc.SNodes)-1]
hc.Hosts[name] = sn
if prikey == nil {
prikey = sn.PrivKey
pubkey = sn.PubKey
}
// log.Println("pubkey:", sn.PubKey)
// log.Println("given: ", pubkey)
}
// if the parent of this call is empty then this must be the root node
if parent != "" && generate {
h.AddParent(0, parent)
}
// log.Println("name: ", n.Name)
// log.Println("prikey: ", prikey)
// log.Println("pubkey: ", pubkey)
height := 0
for _, c := range n.Children {
// connect this node to its children
cname, ok := nameToAddr[c.Name]
if !ok {
fmt.Println("unknown name in address book:", n.Name)
//.........这里部分代码省略.........