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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...