我正在尝试使用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)
}

10-06 00:32