如何使用 node.js 获得 DER 编码的非确定性规范 ecdsa 签名?

问题描述

我尝试了以下方法

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 (将#修改为@)