本文整理匯總了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)
//.........這裏部分代碼省略.........