2017-04-16 56 views
0

我試圖使用ibe包的Master接口中的Extract()生成私鑰,這裏是包的鏈接「https://godoc.org/v.io/x/lib/ibe#Master」。在包中,Extract的輸入是id,並且由{0,1} *組成,所以我先將Mac id轉換爲二進制串,然後使用二進制串生成相應的私鑰。我的代碼是這樣的。如何在golang的ibe包中使用Master接口

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:undefined:ibe.Extract

我都是新來的,我已經看過去了,但我無法得到它。 任何人都可以幫助我嗎?謝謝。

+0

這裏是我試圖在IBE使用的接口._ Master是用於提取任意身份的私鑰的接口。類型主接口\t提取(id字符串)(PrivateKey,錯誤) \t Params()Params }' –

回答

0

在ibe包(bb1和bb2)中提供了Master的兩種實現。 這些可以使用訪問要麼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) 
} 
+0

是的,謝謝你的回答,我明白了。但我發現,我每次提取的私鑰不一樣。這是令人沮喪的...我看了一下,發現在Setup()和Extract()中有幾個random()。我正在閱讀這篇文章(http://crypto.stanford.edu/~dabo/papers/bfibe.pdf),試圖找出這樣的鍵甚至可以如何工作... –

+0

嗨,約書亞,我嘗試按照你的代碼打印使用函數的密文和解密文本,但我總是無法得到它們。我檢查了原始的ibe圖書館,我認爲它不能打印這兩個文本,對吧? –

0

@Joshua威爾士

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)) 


} 

@