我正在尝试使用ibe软件包的Master接口中的Extract()生成私钥,这是该软件包的链接“https://godoc.org/v.io/x/lib/ibe#Master”。在程序包中,Extract的输入是id,并且由{0,1} *组成,因此我先将Mac id转换为二进制字符串,然后使用二进制字符串生成对应的私钥。
我的代码是这样的。
package main
import (
"fmt"
"v.io/x/lib/ibe"
)
var Macid = "00055DNEFF"
var id string
var PrivateKey string
func stringToBin(Macid string) (id string) {
for _, c := range Macid {
id = fmt.Sprintf("%s%b", id, c)
}
return
}
type Master string
func (master Master) Extract(id string) (PrivateKey, error) {
return PrivateKey
}
func main() {
fmt.Println("MacID is " + Macid + ", public key is" + stringToBin(Macid) + ", private key is" + ibe.Extract(id))
}
但是我总是出错
$去建立pkg.go
命令行参数
./pkg.go:27:私钥不是类型
./pkg.go:33:未定义:ibe在ibe.Extract中
我是新手,我已经阅读了围棋之旅,但我听不懂。
谁能帮我这个?谢谢。
最佳答案
ibe软件包(bb1和bb2)中提供了Master的2种实现。
可以使用ibe.SetupBB1()或ibe.SetupBB2()访问它们。
package main
import (
"fmt"
"log"
"v.io/x/lib/ibe"
)
var Macid = "00055DNEFF"
func stringToBin(Macid string) (id string) {
for _, c := range Macid {
id = fmt.Sprintf("%s%b", id, c)
}
return
}
func main() {
bb2Master, err := ibe.SetupBB2()
// or
// bb1Master, err := ibe.SetupBB1()
if err != nil {
log.Fatal(err)
}
id := stringToBin(Macid)
privateKey, err := bb2Master.Extract(id)
if err != nil {
log.Fatal(err)
}
fmt.Printf("MacID is %v, private key is %v", Macid, privateKey)
// etc...
// privateKey.Decrypt(C, m)
}