问题描述
我尝试了以下方法:
var hash=sha256(sha256(msg)); // hash of the transaction
var priv_key= "...."; // the private key,64 char length,([a-z0-9])
//non-deterministic but not canonical
//********************************************
var crypto = require('crypto');
var KeyEncoder = require('key-encoder').default,keyEncoder = new KeyEncoder("secp256k1");
var pemPrivateKey = keyEncoder.encodePrivate(priv_key,'raw','pem')
const csign = crypto.createSign('SHA256');
csign.update(hash);
console.log(csign.sign(pemPrivateKey,'hex'));
//canonical but deterministic
//**********************************
var ec = new EC("secp256k1");
var mySign = ec.sign(Buffer.from(hash,"hex"),Buffer.from(priv_key,{canonical:true});
var sig=mySign.toDER();
var DER_sig="";
for(var si=0;si<sig.length;si++){
var si_int=sig[si]
DER_sig+=norm_l(si_int.toString(16));
}
console.log(DER_sig)
function norm_l(z){
if(z.length<2){
z="0"+z;
}
return z;
}
问题在于,我从来没有能够使第一个版本成为规范的,或者第二个版本是非确定性的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)