【发布时间】:2020-12-30 22:54:51
【问题描述】:
我们已经使用 Hyperledger Fabric 的 API 在 Hyperledger Fabric 中生成了公钥和私钥,它们存储在 crypto_material 文件夹中。
现在,我们想在一台机器上使用私钥对消息进行签名,并在另一台机器上使用相应的公钥验证其有效性。为了完成这个任务,我们编写了如下代码。
var crypto = require("crypto");
var secp256k1 = require("secp256k1");
var fs = require("fs");
var sha256 = require('sha256')
let pub_key_file = "./keyfiles/4d4a0d669d507ff05c73c9e1ca40fb5f909f9806df138a82767a739e9de31240-pub"
fs.access(pub_key_file, fs.F_OK, (err) => {
if (err) {
console.log("readfile error : ", err);
return;
}
})
var public_key = fs.readFileSync(pub_key_file);
// Reading private key from file system.
let priv_key_file = "./keyfiles/4d4a0d669d507ff05c73c9e1ca40fb5f909f9806df138a82767a739e9de31240-priv"
fs.access(priv_key_file, fs.F_OK, (err) => {
if (err) {
console.log("readfile error : ", err);
return;
}
})
var private_key = fs.readFileSync(priv_key_file);
var privKey = new Uint8Array(sha256(private_Key).match(/.{1,2}/g).map(byte => parseInt(byte, 16)));
var pubKey = new Uint8Array(sha256(public_Key).match(/.{1,2}/g).map(byte => parseInt(byte, 16)));
console.log(pubKey instanceof Uint8Array) //returning true here
console.log("value : ", secp256k1.privateKeyVerify(privKey)); //returning true here
console.log("value : ", secp256k1.publicKeyVerify(pubKey)); // Getting error like expected public key to be an Uint8Array with length [33, 65] hyperledger fabric
为什么 secp256k1 模块可以成功验证 privateKey,但使用 publicKey 失败。
【问题讨论】:
-
你用什么来生成密钥对?
-
使用 caClient.register(enrollmentID:username, affiliation:userOrg.toLowercase(), Type:user, attrs:[{name:"role", value:attr, ecert:true}]},管理员用户对象);方法调用公钥和私钥已生成并存储在 crypto_material 文件夹中。
标签: certificate hyperledger-fabric