UNPKG

@coolwallet/zen

Version:
78 lines (59 loc) 8.51 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdHJpbmdVdGlsLnRzIl0sIm5hbWVzIjpbImJzNThjaGVjayIsInJlcXVpcmUiLCJ6ZW5jYXNoanMiLCJaRVJPIiwiQnVmZmVyIiwiYWxsb2MiLCJ0b0RFUiIsIngiLCJpIiwibGVuZ3RoIiwic2xpY2UiLCJjb25jYXQiLCJlbmNvZGVEZXJTaWciLCJzaWduYXR1cmUiLCJoYXNoVHlwZSIsInIiLCJzIiwiYmlwNjZFbmNvZGUiLCJsZW5SIiwibGVuUyIsImVycm9yIiwiU0RLRXJyb3IiLCJuYW1lIiwiYWxsb2NVbnNhZmUiLCJjb3B5Il0sIm1hcHBpbmdzIjoiOztBQUNBOztBQUVBLElBQU1BLFNBQVMsR0FBR0MsT0FBTyxDQUFDLFdBQUQsQ0FBekI7O0FBQ0EsSUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF6Qjs7QUFHQSxJQUFNRSxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsQ0FBYjs7QUFFQSxTQUFTQyxLQUFULENBQWVDLENBQWYsRUFBa0M7QUFDaEMsTUFBSUMsQ0FBQyxHQUFHLENBQVI7O0FBQ0EsU0FBT0QsQ0FBQyxDQUFDQyxDQUFELENBQUQsS0FBUyxDQUFoQjtBQUFtQixNQUFFQSxDQUFGO0FBQW5COztBQUNBLE1BQUlBLENBQUMsS0FBS0QsQ0FBQyxDQUFDRSxNQUFaLEVBQW9CLE9BQU9OLElBQVA7QUFDcEJJLEVBQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDRyxLQUFGLENBQVFGLENBQVIsQ0FBSjtBQUNBLE1BQUlELENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxJQUFYLEVBQWlCLE9BQU9ILE1BQU0sQ0FBQ08sTUFBUCxDQUFjLENBQUNSLElBQUQsRUFBT0ksQ0FBUCxDQUFkLEVBQXlCLElBQUlBLENBQUMsQ0FBQ0UsTUFBL0IsQ0FBUDtBQUNqQixTQUFPRixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0ssWUFBVCxDQUFzQkMsU0FBdEIsRUFBeUNDLFFBQXpDLEVBQW1FO0FBQ2pFLE1BQU1DLENBQUMsR0FBR1QsS0FBSyxDQUFDTyxTQUFTLENBQUNILEtBQVYsQ0FBZ0IsQ0FBaEIsRUFBbUIsRUFBbkIsQ0FBRCxDQUFmO0FBQ0EsTUFBTU0sQ0FBQyxHQUFHVixLQUFLLENBQUNPLFNBQVMsQ0FBQ0gsS0FBVixDQUFnQixFQUFoQixFQUFvQixFQUFwQixDQUFELENBQWY7QUFDQSxTQUFPTixNQUFNLENBQUNPLE1BQVAsQ0FBYyxDQUFDTSxXQUFXLENBQUNGLENBQUQsRUFBSUMsQ0FBSixDQUFaLEVBQW9CRixRQUFwQixDQUFkLENBQVA7QUFDRDs7QUFFRCxTQUFTRyxXQUFULENBQXFCRixDQUFyQixFQUFnQ0MsQ0FBaEMsRUFBMkM7QUFDekMsTUFBTUUsSUFBSSxHQUFHSCxDQUFDLENBQUNOLE1BQWY7QUFDQSxNQUFNVSxJQUFJLEdBQUdILENBQUMsQ0FBQ1AsTUFBZjs7QUFDQSxNQUFJUyxJQUFJLEtBQUssQ0FBYixFQUFnQjtBQUNkLFVBQU0sSUFBSUUsWUFBTUMsUUFBVixDQUFtQkosV0FBVyxDQUFDSyxJQUEvQixFQUFxQyxrQkFBckMsQ0FBTjtBQUNEOztBQUNELE1BQUlILElBQUksS0FBSyxDQUFiLEVBQWdCO0FBQ2QsVUFBTSxJQUFJQyxZQUFNQyxRQUFWLENBQW1CSixXQUFXLENBQUNLLElBQS9CLEVBQXFDLGtCQUFyQyxDQUFOO0FBQ0Q7O0FBQ0QsTUFBSUosSUFBSSxHQUFHLEVBQVgsRUFBZTtBQUNiLFVBQU0sSUFBSUUsWUFBTUMsUUFBVixDQUFtQkosV0FBVyxDQUFDSyxJQUEvQixFQUFxQyxzQkFBckMsQ0FBTjtBQUNEOztBQUNELE1BQUlILElBQUksR0FBRyxFQUFYLEVBQWU7QUFDYixVQUFNLElBQUlDLFlBQU1DLFFBQVYsQ0FBbUJKLFdBQVcsQ0FBQ0ssSUFBL0IsRUFBcUMsc0JBQXJDLENBQU47QUFDRDs7QUFDRCxNQUFJUCxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sSUFBWCxFQUFpQjtBQUNmLFVBQU0sSUFBSUssWUFBTUMsUUFBVixDQUFtQkosV0FBVyxDQUFDSyxJQUEvQixFQUFxQyxxQkFBckMsQ0FBTjtBQUNEOztBQUNELE1BQUlOLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxJQUFYLEVBQWlCO0FBQ2YsVUFBTSxJQUFJSSxZQUFNQyxRQUFWLENBQW1CSixXQUFXLENBQUNLLElBQS9CLEVBQXFDLHFCQUFyQyxDQUFOO0FBQ0Q7O0FBQ0QsTUFBSUosSUFBSSxHQUFHLENBQVAsSUFBYUgsQ0FBQyxDQUFDLENBQUQsQ0FBRCxLQUFTLElBQXRCLElBQStCLEVBQUVBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxJQUFULENBQW5DLEVBQW1EO0FBQ2pELFVBQU0sSUFBSUssWUFBTUMsUUFBVixDQUFtQkosV0FBVyxDQUFDSyxJQUEvQixFQUFxQyw0QkFBckMsQ0FBTjtBQUNEOztBQUNELE1BQUlILElBQUksR0FBRyxDQUFQLElBQWFILENBQUMsQ0FBQyxDQUFELENBQUQsS0FBUyxJQUF0QixJQUErQixFQUFFQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sSUFBVCxDQUFuQyxFQUFtRDtBQUNqRCxVQUFNLElBQUlJLFlBQU1DLFFBQVYsQ0FBbUJKLFdBQVcsQ0FBQ0ssSUFBL0IsRUFBcUMsNEJBQXJDLENBQU47QUFDRDs7QUFFRCxNQUFNVCxTQUFTLEdBQUdULE1BQU0sQ0FBQ21CLFdBQVAsQ0FBbUIsSUFBSUwsSUFBSixHQUFXQyxJQUE5QixDQUFsQixDQTVCeUMsQ0E4QnpDOztBQUNBTixFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWUsSUFBZjtBQUNBQSxFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWVBLFNBQVMsQ0FBQ0osTUFBVixHQUFtQixDQUFsQztBQUNBSSxFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWUsSUFBZjtBQUNBQSxFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWVFLENBQUMsQ0FBQ04sTUFBakI7QUFDQU0sRUFBQUEsQ0FBQyxDQUFDUyxJQUFGLENBQU9YLFNBQVAsRUFBa0IsQ0FBbEI7QUFDQUEsRUFBQUEsU0FBUyxDQUFDLElBQUlLLElBQUwsQ0FBVCxHQUFzQixJQUF0QjtBQUNBTCxFQUFBQSxTQUFTLENBQUMsSUFBSUssSUFBTCxDQUFULEdBQXNCRixDQUFDLENBQUNQLE1BQXhCO0FBQ0FPLEVBQUFBLENBQUMsQ0FBQ1EsSUFBRixDQUFPWCxTQUFQLEVBQWtCLElBQUlLLElBQXRCO0FBRUEsU0FBT0wsU0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi4vY29uZmlnL3R5cGVzJztcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpXG5jb25zdCB6ZW5jYXNoanMgPSByZXF1aXJlKCd6ZW5jYXNoanMnKVxuXG5cbmNvbnN0IFpFUk8gPSBCdWZmZXIuYWxsb2MoMSwgMCk7XG5cbmZ1bmN0aW9uIHRvREVSKHg6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHhbaV0gPT09IDApICsraTtcbiAgaWYgKGkgPT09IHgubGVuZ3RoKSByZXR1cm4gWkVSTztcbiAgeCA9IHguc2xpY2UoaSk7XG4gIGlmICh4WzBdICYgMHg4MCkgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1pFUk8sIHhdLCAxICsgeC5sZW5ndGgpO1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlRGVyU2lnKHNpZ25hdHVyZTogQnVmZmVyLCBoYXNoVHlwZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgciA9IHRvREVSKHNpZ25hdHVyZS5zbGljZSgwLCAzMikpO1xuICBjb25zdCBzID0gdG9ERVIoc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYmlwNjZFbmNvZGUociwgcyksIGhhc2hUeXBlXSk7XG59XG5cbmZ1bmN0aW9uIGJpcDY2RW5jb2RlKHI6IEJ1ZmZlciwgczogQnVmZmVyKSB7XG4gIGNvbnN0IGxlblIgPSByLmxlbmd0aDtcbiAgY29uc3QgbGVuUyA9IHMubGVuZ3RoO1xuICBpZiAobGVuUiA9PT0gMCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgemVybycpO1xuICB9XG4gIGlmIChsZW5TID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB6ZXJvJyk7XG4gIH1cbiAgaWYgKGxlblIgPiAzMykge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgdG9vIGxvbmcnKTtcbiAgfVxuICBpZiAobGVuUyA+IDMzKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB0b28gbG9uZycpO1xuICB9XG4gIGlmIChyWzBdICYgMHg4MCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICB9XG4gIGlmIChzWzBdICYgMHg4MCkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICB9XG4gIGlmIChsZW5SID4gMSAmJiAoclswXSA9PT0gMHgwMCkgJiYgIShyWzFdICYgMHg4MCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3IuU0RLRXJyb3IoYmlwNjZFbmNvZGUubmFtZSwgJ1IgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJyk7XG4gIH1cbiAgaWYgKGxlblMgPiAxICYmIChzWzBdID09PSAweDAwKSAmJiAhKHNbMV0gJiAweDgwKSkge1xuICAgIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg2ICsgbGVuUiArIGxlblMpO1xuXG4gIC8vIDB4MzAgW3RvdGFsLWxlbmd0aF0gMHgwMiBbUi1sZW5ndGhdIFtSXSAweDAyIFtTLWxlbmd0aF0gW1NdXG4gIHNpZ25hdHVyZVswXSA9IDB4MzA7XG4gIHNpZ25hdHVyZVsxXSA9IHNpZ25hdHVyZS5sZW5ndGggLSAyO1xuICBzaWduYXR1cmVbMl0gPSAweDAyO1xuICBzaWduYXR1cmVbM10gPSByLmxlbmd0aDtcbiAgci5jb3B5KHNpZ25hdHVyZSwgNCk7XG4gIHNpZ25hdHVyZVs0ICsgbGVuUl0gPSAweDAyO1xuICBzaWduYXR1cmVbNSArIGxlblJdID0gcy5sZW5ndGg7XG4gIHMuY29weShzaWduYXR1cmUsIDYgKyBsZW5SKTtcblxuICByZXR1cm4gc2lnbmF0dXJlO1xufVxuIl19