我在 Hyperledger Fabric 的数据库中存储生成的 ecdsa 私钥时遇到问题。
我正在做的是使用 ecdsa 提供的 ecdsa.GenerateKey(elliptic.P224(), rand.Reader) 函数,并尝试使用 shim 的 PutState() 函数将该密钥存储在分类帐中。结构中的变量类型是 ecdsa.PrivateKey 但是当我尝试链码似乎停止并出现以下错误时:
错误:无法组装交易:ProposalResponsePayloads 不匹配 - 提案响应:版本:1 响应:
当然,这表明链码没有安装在两个组织对等点中。但是我有。然后我尝试将 ecdsa.PrivateKey 转换为字节,然后转换为字符串,但似乎没有任何效果。我将附上下面的代码。
type UserDetails struct {
ObjectType string `json:"docType"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
PublicKey ecdsa.PublicKey `json:"publicKey"`
PrivateKey []byte `json:"privateKey"`
}
以上是我的结构
priv, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
if err != nil {
fmt.Println(err)
}
enc_key := priv.D.Bytes()
fmt.Println(enc_key)
bytesPrivK := string(enc_key)
objectType := "userDetails"
userDetailsReg := &UserDetails{objectType, firstName, lastName, *ecdsaPublicKey, enc_key}
userDetailsJSONasBytes, err := json.Marshal(userDetailsReg)
if err != nil {
return shim.Error(err.Error())
}
fmt.Println(userDetailsReg)
// === Save userDetails to state ===
err = stub.PutState(lastName, userDetailsJSONasBytes)
if err != nil {
return shim.Error(err.Error())
}
我还尝试使用 ecies 包生成一个 ecies 私钥,然后将其转换为 ecdsa 并存储它,但仍然是同样的错误。我使用了 ecies 因为我需要使用 ecies 加密来加密消息。
prv, err := ecies.GenerateKey(rand.Reader, ecies.DefaultCurve, nil)
if err != nil {
fmt.Println(err.Error())
}
eciesPrivatePem, err1 := ecies.MarshalPrivate(prv)
if err1 != nil {
fmt.Println(err1)
}
encodedToStr := string(eciesPrivatePem)
ecdsaPrivate := prv.ExportECDSA()
在这里,我尝试存储在 ecies.PrivateKey 类型或字符串甚至 ecdsa.PrivateKey 但总是得到相同的错误。
为此,我正在使用 Hyperledger Fabric 和 CouchDB。有谁知道为什么我不能将它存储为字符串?尽管其他 2 个变量是字符串和 1 个 ecdsa.PublicKey 类型,但即使作为字符串也不能存储它,这似乎真的很奇怪。我在日志中找不到任何其他指示此处更多内容的错误。
任何帮助或建议将不胜感激。
谢谢