У меня возникла проблема с сохранением сгенерированного закрытого ключа ecdsa в базе данных Hyperledger Fabric.
Я использую функцию ecdsa.GenerateKey(elliptic.P224(), rand.Reader), которую предоставляет ecdsa, и пытаюсь сохранить этот ключ в леджере с помощью функции 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. Кто-нибудь знает, почему я не могу сохранить это даже в виде строки? Кажется действительно странным, что даже в виде строки ее нельзя сохранить, хотя две другие переменные являются строками и 1 типами ecdsa.PublicKey. Я не могу найти какую-либо другую ошибку в журналах, которая указывает здесь на что-то большее.
Любая помощь или рекомендация будут оценены.
Спасибо