UNPKG

@coolwallet/ltc

Version:
56 lines (47 loc) 7.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toDER = toDER; exports.encodeDerSig = encodeDerSig; exports.bip66Encode = bip66Encode; var _core = require("@coolwallet/core"); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zdHJpbmdVdGlsLnRzIl0sIm5hbWVzIjpbIlpFUk8iLCJCdWZmZXIiLCJhbGxvYyIsInRvREVSIiwieCIsImkiLCJsZW5ndGgiLCJzbGljZSIsImNvbmNhdCIsImVuY29kZURlclNpZyIsInNpZ25hdHVyZSIsImhhc2hUeXBlIiwiciIsInMiLCJiaXA2NkVuY29kZSIsImxlblIiLCJsZW5TIiwiZXJyb3IiLCJTREtFcnJvciIsIm5hbWUiLCJhbGxvY1Vuc2FmZSIsImNvcHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLElBQU1BLElBQUksR0FBR0MsTUFBTSxDQUFDQyxLQUFQLENBQWEsQ0FBYixFQUFnQixDQUFoQixDQUFiOztBQUVPLFNBQVNDLEtBQVQsQ0FBZUMsQ0FBZixFQUFrQztBQUN2QyxNQUFJQyxDQUFDLEdBQUcsQ0FBUjs7QUFDQSxTQUFPRCxDQUFDLENBQUNDLENBQUQsQ0FBRCxLQUFTLENBQWhCO0FBQW1CLE1BQUVBLENBQUY7QUFBbkI7O0FBQ0EsTUFBSUEsQ0FBQyxLQUFLRCxDQUFDLENBQUNFLE1BQVosRUFBb0IsT0FBT04sSUFBUDtBQUNwQkksRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNHLEtBQUYsQ0FBUUYsQ0FBUixDQUFKO0FBQ0EsTUFBSUQsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLElBQVgsRUFBaUIsT0FBT0gsTUFBTSxDQUFDTyxNQUFQLENBQWMsQ0FBQ1IsSUFBRCxFQUFPSSxDQUFQLENBQWQsRUFBeUIsSUFBSUEsQ0FBQyxDQUFDRSxNQUEvQixDQUFQO0FBQ2pCLFNBQU9GLENBQVA7QUFDRDs7QUFFTSxTQUFTSyxZQUFULENBQXNCQyxTQUF0QixFQUF5Q0MsUUFBekMsRUFBbUU7QUFDeEUsTUFBTUMsQ0FBQyxHQUFHVCxLQUFLLENBQUNPLFNBQVMsQ0FBQ0gsS0FBVixDQUFnQixDQUFoQixFQUFtQixFQUFuQixDQUFELENBQWY7QUFDQSxNQUFNTSxDQUFDLEdBQUdWLEtB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dGVudCI6WyJpbXBvcnQgeyBlcnJvciB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUnO1xuXG5jb25zdCBaRVJPID0gQnVmZmVyLmFsbG9jKDEsIDApO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9ERVIoeDogQnVmZmVyKTogQnVmZmVyIHtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoeFtpXSA9PT0gMCkgKytpO1xuICBpZiAoaSA9PT0geC5sZW5ndGgpIHJldHVybiBaRVJPO1xuICB4ID0geC5zbGljZShpKTtcbiAgaWYgKHhbMF0gJiAweDgwKSByZXR1cm4gQnVmZmVyLmNvbmNhdChbWkVSTywgeF0sIDEgKyB4Lmxlbmd0aCk7XG4gIHJldHVybiB4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlRGVyU2lnKHNpZ25hdHVyZTogQnVmZmVyLCBoYXNoVHlwZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3QgciA9IHRvREVSKHNpZ25hdHVyZS5zbGljZSgwLCAzMikpO1xuICBjb25zdCBzID0gdG9ERVIoc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkpO1xuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbYmlwNjZFbmNvZGUociwgcyksIGhhc2hUeXBlXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaXA2NkVuY29kZShyOiBCdWZmZXIsIHM6IEJ1ZmZlcikge1xuICBjb25zdCBsZW5SID0gci5sZW5ndGg7XG4gIGNvbnN0IGxlblMgPSBzLmxlbmd0aDtcbiAgaWYgKGxlblIgPT09IDApIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgemVybycpO1xuICBpZiAobGVuUyA9PT0gMCkgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB6ZXJvJyk7XG4gIGlmIChsZW5SID4gMzMpIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiBsZW5ndGggaXMgdG9vIGxvbmcnKTtcbiAgaWYgKGxlblMgPiAzMykgdGhyb3cgbmV3IGVycm9yLlNES0Vycm9yKGJpcDY2RW5jb2RlLm5hbWUsICdTIGxlbmd0aCBpcyB0b28gbG9uZycpO1xuICBpZiAoclswXSAmIDB4ODApIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUiB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICBpZiAoc1swXSAmIDB4ODApIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICBpZiAobGVuUiA+IDEgJiYgKHJbMF0gPT09IDB4MDApICYmICEoclsxXSAmIDB4ODApKSB0aHJvdyBuZXcgZXJyb3IuU0RLRXJyb3IoYmlwNjZFbmNvZGUubmFtZSwgJ1IgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJyk7XG4gIGlmIChsZW5TID4gMSAmJiAoc1swXSA9PT0gMHgwMCkgJiYgIShzWzFdICYgMHg4MCkpIHRocm93IG5ldyBlcnJvci5TREtFcnJvcihiaXA2NkVuY29kZS5uYW1lLCAnUyB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKTtcblxuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNiArIGxlblIgKyBsZW5TKTtcblxuICAvLyAweDMwIFt0b3RhbC1sZW5ndGhdIDB4MDIgW1ItbGVuZ3RoXSBbUl0gMHgwMiBbUy1sZW5ndGhdIFtTXVxuICBzaWduYXR1cmVbMF0gPSAweDMwO1xuICBzaWduYXR1cmVbMV0gPSBzaWduYXR1cmUubGVuZ3RoIC0gMjtcbiAgc2lnbmF0dXJlWzJdID0gMHgwMjtcbiAgc2lnbmF0dXJlWzNdID0gci5sZW5ndGg7XG4gIHIuY29weShzaWduYXR1cmUsIDQpO1xuICBzaWduYXR1cmVbNCArIGxlblJdID0gMHgwMjtcbiAgc2lnbmF0dXJlWzUgKyBsZW5SXSA9IHMubGVuZ3RoO1xuICBzLmNvcHkoc2lnbmF0dXJlLCA2ICsgbGVuUik7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cbiJdfQ==