如何在golang的ibe包中使用Master接口

时间:2017-04-16 16:14:55

标签: go packages

我尝试使用ibe包的主界面中的Extract()来生成私钥,这里是包的链接," https://godoc.org/v.io/x/lib/ibe#Master&#34 ;。在包中,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))

}

但我总是有错误

  

$ go build pkg.go

     

命令行-参数

     

./ pkg.go:27:PrivateKey不是类型

     

./ pkg.go:33:undefined:ibe in ibe.Extract

我是新生儿,我已经阅读过去的旅行,但我无法得到它。 谁能帮我这个?谢谢。

2 个答案:

答案 0 :(得分:0)

ibe包中提供了2种Master实现(bb1和bb2)。 这些可以使用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)
}

答案 1 :(得分:0)

@Joshua Wales

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() {
bb1Master, err := ibe.SetupBB1()

if err != nil {
    log.Fatal(err)
}

id := stringToBin(Macid)
privateKey, err := bb1Master.Extract(id)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("MacID is %v, private key is %v", Macid, privateKey)

m := []byte("HelloAuthentication")
overhead := bb1Master.Params().CiphertextOverhead()
C := make([]byte, len(m)+overhead)

if err := bb1Master.Params().Encrypt(Macid, m, C); err != nil {
    log.Fatal(err)
}

fmt.Printf("Ciphertext is : ", bb1Master.Params().Encrypt(Macid, m, C))

if err := privateKey.Decrypt(C, m); err != nil {
    log.Fatal(err)
}

fmt.Printf("Decrypted text is : ", privateKey.Decrypt(C, m))


}

@