@coolwallet/zen
Version:
Coolwallet Horizen sdk
78 lines (59 loc) • 8.51 kB
JavaScript
;
var _core = require("@coolwallet/core");
var bs58check = require('bs58check');
var zencashjs = require('zencashjs');
var ZERO = Buffer.alloc(1, 0);
function toDER(x) {
var i = 0;
while (x[i] === 0) {
++i;
}
if (i === x.length) return ZERO;
x = x.slice(i);
if (x[0] & 0x80) return Buffer.concat([ZERO, x], 1 + x.length);
return x;
}
function encodeDerSig(signature, hashType) {
var r = toDER(signature.slice(0, 32));
var s = toDER(signature.slice(32, 64));
return Buffer.concat([bip66Encode(r, s), hashType]);
}
function bip66Encode(r, s) {
var lenR = r.length;
var lenS = s.length;
if (lenR === 0) {
throw new _core.error.SDKError(bip66Encode.name, 'R length is zero');
}
if (lenS === 0) {
throw new _core.error.SDKError(bip66Encode.name, 'S length is zero');
}
if (lenR > 33) {
throw new _core.error.SDKError(bip66Encode.name, 'R length is too long');
}
if (lenS > 33) {
throw new _core.error.SDKError(bip66Encode.name, 'S length is too long');
}
if (r[0] & 0x80) {
throw new _core.error.SDKError(bip66Encode.name, 'R value is negative');
}
if (s[0] & 0x80) {
throw new _core.error.SDKError(bip66Encode.name, 'S value is negative');
}
if (lenR > 1 && r[0] === 0x00 && !(r[1] & 0x80)) {
throw new _core.error.SDKError(bip66Encode.name, 'R value excessively padded');
}
if (lenS > 1 && s[0] === 0x00 && !(s[1] & 0x80)) {
throw new _core.error.SDKError(bip66Encode.name, 'S value excessively padded');
}
var signature = Buffer.allocUnsafe(6 + lenR + lenS); // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
signature[0] = 0x30;
signature[1] = signature.length - 2;
signature[2] = 0x02;
signature[3] = r.length;
r.copy(signature, 4);
signature[4 + lenR] = 0x02;
signature[5 + lenR] = s.length;
s.copy(signature, 6 + lenR);
return signature;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdHJpbmdVdGlsLnRzIl0sIm5hbWVzIjpbImJzNThjaGVjayIsInJlcXVpcmUiLCJ6ZW5jYXNoanMiLCJaRVJPIiwiQnVmZmVyIiwiYWxsb2MiLCJ0b0RFUiIsIngiLCJpIiwibGVuZ3RoIiwic2xpY2UiLCJjb25jYXQiLCJlbmNvZGVEZXJTaWciLCJzaWduYXR1cmUiLCJoYXNoVHlwZSIsInIiLCJzIiwiYmlwNjZFbmNvZGUiLCJsZW5SIiwibGVuUyIsImVycm9yIiwiU0RLRXJyb3IiLCJuYW1lIiwiYWxsb2NVbnNhZmUiLCJjb3B5Il0sIm1hcHBpbmdzIjoiOztBQUNBOztBQUVBLElBQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLFdBQUQsQ0FBekI7O0FBQ0EsSUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF6Qjs7QUFHQSxJQUFNRSxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsQ0FBYjs7QUFFQSxTQUFTQyxLQUFULENBQWVDLENBQWYsRUFBa0M7QUFDaEMsTUFBSUMsQ0FBQyxHQUFHLENBQVI7O0FBQ0EsU0FBT0QsQ0FBQyxDQUFDQyxDQUFELENBQUQsS0FBUyxDQUFoQjtBQUFtQixNQUFFQSxDQUFGO0FBQW5COztBQUNBLE1BQUlBLENBQUMsS0FBS0QsQ0FBQyxDQUFDRSxNQUFaLEVBQW9CLE9BQU9OLElBQVA7QUFDcEJJLEVBQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDRyxLQUFGLENBQVFGLENBQVIsQ0FBSjtBQUNBLE1BQUlELENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxJQUFYLEVBQWlCLE9BQU9ILE1BQU0sQ0FBQ08sTUFBUCxDQUFjLENBQUNSLElBQUQsRUFBT0ksQ0FBUCxDQUFkLEVBQXlCLElBQUlBLENBQUMsQ0FBQ0UsTUFBL0IsQ0FBUDtBQUNqQixTQUFPRixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0ssWUFBVCxDQUFzQkMsU0FBdEIsRUFBeUNDLFFBQXpD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QUFDQUEsRUFBQUEsU0FBUyxDQUFDLElBQUlLLElBQUwsQ0FBVCxHQUFzQixJQUF0QjtBQUNBTCxFQUFBQSxTQUFTLENBQUMsSUFBSUssSUFBTCxDQUFULEdBQXNCRixDQUFDLENBQUNQLE1BQXhCO0FBQ0FPLEVBQUFBLENBQUMsQ0FBQ1EsSUFBRixDQUFPWCxTQUFQLEVBQWtCLElBQUlLLElBQXRCO0FBRUEsU0FBT0wsU0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi4vY29uZmlnL3R5cGVzJztcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpXG5jb25zdCB6ZW5jYXNoanMgPSByZXF1aXJlKCd6ZW5jYXNoanMnKVxuXG5cbmNvbnN0IFpFUk8gPSBCdWZmZXIuYWxsb2MoMSwgMCk7XG5cbmZ1bmN0aW9uIHRvREVSKHg6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHhbaV0gPT09IDApICsraTtcbiAgaWYgKGkgPT09IHgubGVuZ3RoKSByZXR1cm4gWkVSTztcbiAgeCA9IHguc2xpY2UoaSk7XG4gIGlmICh4WzBdICYgMHg4MCkgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1pFUk8sIHhdLCAxICsgeC5sZW5ndGgpO1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlRGVyU2lnKHNpZ25hdHVyZTogQnVmZmVyLCBoYXNoVHlwZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgciA9IHRvREVSKHNpZ25hdHVyZS5zbGljZSgwLCAzMikpO1xuICBjb25zdCBzID0gdG9ERVIoc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYmlwNjZFbmNvZGUociwgcyksIGhhc2hUeXBlXSk7XG59XG5cbmZ1bmN0aW9uIGJpcDY2RW5jb2RlKHI6IEJ1ZmZlciwgczogQnVmZmVyKSB7XG4gIGNvbnN0IGxlblIgPSByLmxlbmd0aDtcbiAgY29uc3QgbGVuUyA9IHMubGVuZ3RoO1xuICBpZiAobGVuUiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgemVybycpO1xuICB9XG4gIGlmIChsZW5TID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB6ZXJvJyk7XG4gIH1cbiAgaWYgKGxlblIgPiAzMykge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgdG9vIGxvbmcnKTtcbiAgfVxuICBpZiAobGVuUyA+IDMzKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB0b28gbG9uZycpO1xuICB9XG4gIGlmIChyWzBdICYgMHg4MCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICB9XG4gIGlmIChzWzBdICYgMHg4MCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICB9XG4gIGlmIChsZW5SID4gMSAmJiAoclswXSA9PT0gMHgwMCkgJiYgIShyWzFdICYgMHg4MCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3IuU0RLRXJyb3IoYmlwNjZFbmNvZGUubmFtZSwgJ1IgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJyk7XG4gIH1cbiAgaWYgKGxlblMgPiAxICYmIChzWzBdID09PSAweDAwKSAmJiAhKHNbMV0gJiAweDgwKSkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg2ICsgbGVuUiArIGxlblMpO1xuXG4gIC8vIDB4MzAgW3RvdGFsLWxlbmd0aF0gMHgwMiBbUi1sZW5ndGhdIFtSXSAweDAyIFtTLWxlbmd0aF0gW1NdXG4gIHNpZ25hdHVyZVswXSA9IDB4MzA7XG4gIHNpZ25hdHVyZVsxXSA9IHNpZ25hdHVyZS5sZW5ndGggLSAyO1xuICBzaWduYXR1cmVbMl0gPSAweDAyO1xuICBzaWduYXR1cmVbM10gPSByLmxlbmd0aDtcbiAgci5jb3B5KHNpZ25hdHVyZSwgNCk7XG4gIHNpZ25hdHVyZVs0ICsgbGVuUl0gPSAweDAyO1xuICBzaWduYXR1cmVbNSArIGxlblJdID0gcy5sZW5ndGg7XG4gIHMuY29weShzaWduYXR1cmUsIDYgKyBsZW5SKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuIl19