PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/test/bitgo
Просмотр файла: signatureModify.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTransactionWithHighS = getTransactionWithHighS;
exports.getPrevOutsWithInvalidOutputScript = getPrevOutsWithInvalidOutputScript;
/* eslint-disable no-redeclare */
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
const bitgo_1 = require("../../src/bitgo");
const secp256k1_1 = require("@noble/curves/secp256k1");
const n = BigInt(secp256k1_1.secp256k1.CURVE.n);
const nDiv2 = n / BigInt(2);
function bytesToBigInt(bytes) {
return BigInt(`0x${Buffer.from(bytes).toString('hex')}`);
}
function changeSignatureToHighS(signatureBuffer) {
if (!bitcoinjs_lib_1.script.isCanonicalScriptSignature(signatureBuffer)) {
throw new Error(`not canonical`);
}
const { signature, hashType } = bitcoinjs_lib_1.ScriptSignature.decode(signatureBuffer);
const r = signature.subarray(0, 32);
const s = signature.subarray(32);
if (r.length !== 32 || s.length !== 32) {
throw new Error(`invalid scalar length`);
}
let ss = bytesToBigInt(s);
if (ss > nDiv2) {
throw new Error(`signature already has high s value`);
}
// convert to high-S
ss = n - ss;
const newSig = bitcoinjs_lib_1.ScriptSignature.encode(Buffer.concat([r, Buffer.from(ss.toString(16).padStart(64, '0'), 'hex')]), hashType);
if (!bitcoinjs_lib_1.script.isCanonicalScriptSignature(newSig)) {
throw new Error(`newSig not canonical`);
}
return newSig;
}
function changeSignatureScriptToHighS(v, signature) {
const parts = Buffer.isBuffer(v) ? bitcoinjs_lib_1.script.decompile(v) : v;
if (!parts) {
throw new Error(`could not decompile input`);
}
const newParts = parts.map((p) => {
if (typeof p === 'number') {
return p;
}
return p.equals(signature) ? changeSignatureToHighS(p) : Buffer.from(p);
});
return Buffer.isBuffer(v) ? bitcoinjs_lib_1.script.compile(newParts) : newParts;
}
function getTransactionWithHighS(tx, inputIndex) {
const parsed = (0, bitgo_1.parseSignatureScript)(tx.ins[inputIndex]);
switch (parsed.scriptType) {
case 'p2sh':
case 'p2shP2wsh':
case 'p2wsh':
break;
default:
return [];
}
return parsed.signatures.flatMap((signature) => {
if ((0, bitgo_1.isPlaceholderSignature)(signature)) {
return [];
}
const cloned = tx.clone();
cloned.ins[inputIndex].script = changeSignatureScriptToHighS(cloned.ins[inputIndex].script, signature);
cloned.ins[inputIndex].witness = changeSignatureScriptToHighS(cloned.ins[inputIndex].witness, signature);
if ((0, bitgo_1.parseSignatureScript)(cloned.ins[inputIndex]).scriptType !== parsed.scriptType) {
throw new Error(`could not parse modified input`);
}
return [cloned];
});
}
/** Return transaction with script xored with 0xff for the given input */
function getPrevOutsWithInvalidOutputScript(prevOuts, inputIndex) {
return prevOuts.map((prevOut, i) => {
return i === inputIndex
? {
...prevOut,
script: prevOut.script.map((v) => v ^ 0xff),
}
: prevOut;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlTW9kaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9iaXRnby9zaWduYXR1cmVNb2RpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0REEsMERBeUJDO0FBR0QsZ0ZBWUM7QUFwR0QsaUNBQWlDO0FBQ2pDLGlEQUFrRTtBQUNsRSwyQ0FBZ0c7QUFDaEcsdURBQW9EO0FBRXBELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVCLFNBQVMsYUFBYSxDQUFDLEtBQWlCO0lBQ3RDLE9BQU8sTUFBTSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLGVBQXVCO0lBQ3JELElBQUksQ0FBQyxzQkFBTSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRywrQkFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUV4RSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksS0FB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RyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RyxJQUFJLElBQUEsNEJBQW9CLEVBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQWdCLGtDQUFrQyxDQUNoRCxRQUE2QixFQUM3QixVQUFrQjtJQUVsQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsT0FBTyxDQUFDLEtBQUssVUFBVTtZQUNyQixDQUFDLENBQUM7Z0JBQ0UsR0FBRyxPQUFPO2dCQUNWLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBMEI7YUFDckU7WUFDSCxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVkZWNsYXJlICovXG5pbXBvcnQgeyBzY3JpcHQsIFNjcmlwdFNpZ25hdHVyZSwgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGlzUGxhY2Vob2xkZXJTaWduYXR1cmUsIHBhcnNlU2lnbmF0dXJlU2NyaXB0LCBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvYml0Z28nO1xuaW1wb3J0IHsgc2VjcDI1NmsxIH0gZnJvbSAnQG5vYmxlL2N1cnZlcy9zZWNwMjU2azEnO1xuXG5jb25zdCBuID0gQmlnSW50KHNlY3AyNTZrMS5DVVJWRS5uKTtcbmNvbnN0IG5EaXYyID0gbiAvIEJpZ0ludCgyKTtcblxuZnVuY3Rpb24gYnl0ZXNUb0JpZ0ludChieXRlczogVWludDhBcnJheSk6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoYDB4JHtCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoJ2hleCcpfWApO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VTaWduYXR1cmVUb0hpZ2hTKHNpZ25hdHVyZUJ1ZmZlcjogQnVmZmVyKTogQnVmZmVyIHtcbiAgaWYgKCFzY3JpcHQuaXNDYW5vbmljYWxTY3JpcHRTaWduYXR1cmUoc2lnbmF0dXJlQnVmZmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm90IGNhbm9uaWNhbGApO1xuICB9XG4gIGNvbnN0IHsgc2lnbmF0dXJlLCBoYXNoVHlwZSB9ID0gU2NyaXB0U2lnbmF0dXJlLmRlY29kZShzaWduYXR1cmVCdWZmZXIpO1xuXG4gIGNvbnN0IHIgPSBzaWduYXR1cmUuc3ViYXJyYXkoMCwgMzIpO1xuICBjb25zdCBzID0gc2lnbmF0dXJlLnN1YmFycmF5KDMyKTtcblxuICBpZiAoci5sZW5ndGggIT09IDMyIHx8IHMubGVuZ3RoICE9PSAzMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY2FsYXIgbGVuZ3RoYCk7XG4gIH1cblxuICBsZXQgc3MgPSBieXRlc1RvQmlnSW50KHMpO1xuXG4gIGlmIChzcyA+IG5EaXYyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzaWduYXR1cmUgYWxyZWFkeSBoYXMgaGlnaCBzIHZhbHVlYCk7XG4gIH1cblxuICAvLyBjb252ZXJ0IHRvIGhpZ2gtU1xuICBzcyA9IG4gLSBzcztcblxuICBjb25zdCBuZXdTaWcgPSBTY3JpcHRTaWduYXR1cmUuZW5jb2RlKFxuICAgIEJ1ZmZlci5jb25jYXQoW3IsIEJ1ZmZlci5mcm9tKHNzLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSwgJ2hleCcpXSksXG4gICAgaGFzaFR5cGVcbiAgKTtcbiAgaWYgKCFzY3JpcHQuaXNDYW5vbmljYWxTY3JpcHRTaWduYXR1cmUobmV3U2lnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmV3U2lnIG5vdCBjYW5vbmljYWxgKTtcbiAgfVxuICByZXR1cm4gbmV3U2lnO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VTaWduYXR1cmVTY3JpcHRUb0hpZ2hTKHNjcmlwdDogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlcik6IEJ1ZmZlcjtcbmZ1bmN0aW9uIGNoYW5nZVNpZ25hdHVyZVNjcmlwdFRvSGlnaFMod2l0bmVzczogQnVmZmVyW10sIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyW107XG5mdW5jdGlvbiBjaGFuZ2VTaWduYXR1cmVTY3JpcHRUb0hpZ2hTKHY6IEJ1ZmZlciB8IEJ1ZmZlcltdLCBzaWduYXR1cmU6IEJ1ZmZlcik6IEJ1ZmZlciB8IEJ1ZmZlcltdIHtcbiAgY29uc3QgcGFydHMgPSBCdWZmZXIuaXNCdWZmZXIodikgPyBzY3JpcHQuZGVjb21waWxlKHYpIDogdjtcbiAgaWYgKCFwYXJ0cykge1xuICAgIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IGRlY29tcGlsZSBpbnB1dGApO1xuICB9XG4gIGNvbnN0IG5ld1BhcnRzID0gcGFydHMubWFwKChwKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIHJldHVybiBwLmVxdWFscyhzaWduYXR1cmUpID8gY2hhbmdlU2lnbmF0dXJlVG9IaWdoUyhwKSA6IEJ1ZmZlci5mcm9tKHApO1xuICB9KTtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih2KSA/IHNjcmlwdC5jb21waWxlKG5ld1BhcnRzKSA6IChuZXdQYXJ0cyBhcyBCdWZmZXJbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbldpdGhIaWdoUzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyXG4pOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj5bXSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KHR4Lmluc1tpbnB1dEluZGV4XSk7XG4gIHN3aXRjaCAocGFyc2VkLnNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHBhcnNlZC5zaWduYXR1cmVzLmZsYXRNYXAoKHNpZ25hdHVyZSkgPT4ge1xuICAgIGlmIChpc1BsYWNlaG9sZGVyU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgY2xvbmVkID0gdHguY2xvbmUoKTtcbiAgICBjbG9uZWQuaW5zW2lucHV0SW5kZXhdLnNjcmlwdCA9IGNoYW5nZVNpZ25hdHVyZVNjcmlwdFRvSGlnaFMoY2xvbmVkLmluc1tpbnB1dEluZGV4XS5zY3JpcHQsIHNpZ25hdHVyZSk7XG4gICAgY2xvbmVkLmluc1tpbnB1dEluZGV4XS53aXRuZXNzID0gY2hhbmdlU2lnbmF0dXJlU2NyaXB0VG9IaWdoUyhjbG9uZWQuaW5zW2lucHV0SW5kZXhdLndpdG5lc3MsIHNpZ25hdHVyZSk7XG4gICAgaWYgKHBhcnNlU2lnbmF0dXJlU2NyaXB0KGNsb25lZC5pbnNbaW5wdXRJbmRleF0pLnNjcmlwdFR5cGUgIT09IHBhcnNlZC5zY3JpcHRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBtb2RpZmllZCBpbnB1dGApO1xuICAgIH1cbiAgICByZXR1cm4gW2Nsb25lZF07XG4gIH0pO1xufVxuXG4vKiogUmV0dXJuIHRyYW5zYWN0aW9uIHdpdGggc2NyaXB0IHhvcmVkIHdpdGggMHhmZiBmb3IgdGhlIGdpdmVuIGlucHV0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldk91dHNXaXRoSW52YWxpZE91dHB1dFNjcmlwdDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgcHJldk91dHM6IFR4T3V0cHV0PFROdW1iZXI+W10sXG4gIGlucHV0SW5kZXg6IG51bWJlclxuKTogVHhPdXRwdXQ8VE51bWJlcj5bXSB7XG4gIHJldHVybiBwcmV2T3V0cy5tYXAoKHByZXZPdXQsIGkpID0+IHtcbiAgICByZXR1cm4gaSA9PT0gaW5wdXRJbmRleFxuICAgICAgPyB7XG4gICAgICAgICAgLi4ucHJldk91dCxcbiAgICAgICAgICBzY3JpcHQ6IHByZXZPdXQuc2NyaXB0Lm1hcCgodikgPT4gdiBeIDB4ZmYpIGFzIHR5cGVvZiBwcmV2T3V0LnNjcmlwdCxcbiAgICAgICAgfVxuICAgICAgOiBwcmV2T3V0O1xuICB9KTtcbn1cbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!