PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/utxo-core/dist/src/paygo
Просмотр файла: parsePayGoAttestation.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Prefix = void 0;
exports.parsePayGoAttestation = parsePayGoAttestation;
const assert_1 = __importDefault(require("assert"));
const utxo_lib_1 = require("@bitgo/utxo-lib");
// The signed address will always have the following structure:
// 0x18Bitcoin Signed Message:\n<varint_length><ENTROPY><ADDRESS><UUID>
exports.Prefix = Buffer.from('\u0018Bitcoin Signed Message:\n', 'utf-8');
// UUID has the structure 00000000-0000-0000-0000-000000000000, and after
// we Buffer.from and get it's length its 36.
const UuidBufferLength = 36;
// The entropy will always be 64 bytes
const EntropyLen = 64;
/**
* This function takes in the attestation proof of a PayGo address of the from
* <varint_length><ENTROPY><ADDRESS><UUID> and returns
* the address given its length. It is assumed that the ENTROPY is 64 bytes in the Buffer
* so if not given an address proof length we can still extract the address from the proof.
*
* @param message
* @param adressProofLength
*/
function parsePayGoAttestation(message) {
if (message.length <= EntropyLen + UuidBufferLength) {
throw new Error('PayGo attestation proof is too short to contain a valid address');
}
// This generates the first part before the varint length so that we can
// determine how many bytes this is and iterate through the Buffer.
let offset = 0;
if (message.toString('hex').startsWith(exports.Prefix.toString('hex'))) {
offset = exports.Prefix.length;
}
// we decode the varint of the message which is uint32
// https://en.bitcoin.it/wiki/Protocol_documentation
const varInt = utxo_lib_1.bufferutils.varuint.decode(message, offset);
(0, assert_1.default)(varInt);
offset += utxo_lib_1.bufferutils.varuint.decode.bytes;
const entropy = message.subarray(offset, offset + EntropyLen);
offset += EntropyLen;
const address = message.subarray(offset, message.length - UuidBufferLength);
offset += address.length;
const uuid = message.subarray(message.length - UuidBufferLength);
// we break up the original message and retuen the entropy, address and uuid in their buffers
return { entropy, address, uuid };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQYXlHb0F0dGVzdGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BheWdvL3BhcnNlUGF5R29BdHRlc3RhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1QkEsc0RBOEJDO0FBckRELG9EQUE0QjtBQUU1Qiw4Q0FBOEM7QUFFOUMsK0RBQStEO0FBQy9ELHVFQUF1RTtBQUMxRCxRQUFBLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTlFLHlFQUF5RTtBQUN6RSw2Q0FBNkM7QUFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDNUIsc0NBQXNDO0FBQ3RDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0Qjs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLHFCQUFxQixDQUFDLE9BQWU7SUFLbkQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLG1FQUFtRTtJQUNuRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9ELE1BQU0sR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsb0RBQW9EO0lBQ3BELE1BQU0sTUFBTSxHQUFHLHNCQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2YsTUFBTSxJQUFJLHNCQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFFM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzlELE1BQU0sSUFBSSxVQUFVLENBQUM7SUFDckIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRWpFLDZGQUE2RjtJQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBidWZmZXJ1dGlscyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbi8vIFRoZSBzaWduZWQgYWRkcmVzcyB3aWxsIGFsd2F5cyBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOlxuLy8gMHgxOEJpdGNvaW4gU2lnbmVkIE1lc3NhZ2U6XFxuPHZhcmludF9sZW5ndGg+PEVOVFJPUFk+PEFERFJFU1M+PFVVSUQ+XG5leHBvcnQgY29uc3QgUHJlZml4ID0gQnVmZmVyLmZyb20oJ1xcdTAwMThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsICd1dGYtOCcpO1xuXG4vLyBVVUlEIGhhcyB0aGUgc3RydWN0dXJlIDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCwgYW5kIGFmdGVyXG4vLyB3ZSBCdWZmZXIuZnJvbSBhbmQgZ2V0IGl0J3MgbGVuZ3RoIGl0cyAzNi5cbmNvbnN0IFV1aWRCdWZmZXJMZW5ndGggPSAzNjtcbi8vIFRoZSBlbnRyb3B5IHdpbGwgYWx3YXlzIGJlIDY0IGJ5dGVzXG5jb25zdCBFbnRyb3B5TGVuID0gNjQ7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiB0aGUgYXR0ZXN0YXRpb24gcHJvb2Ygb2YgYSBQYXlHbyBhZGRyZXNzIG9mIHRoZSBmcm9tXG4gKiA8dmFyaW50X2xlbmd0aD48RU5UUk9QWT48QUREUkVTUz48VVVJRD4gYW5kIHJldHVybnNcbiAqIHRoZSBhZGRyZXNzIGdpdmVuIGl0cyBsZW5ndGguIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgRU5UUk9QWSBpcyA2NCBieXRlcyBpbiB0aGUgQnVmZmVyXG4gKiBzbyBpZiBub3QgZ2l2ZW4gYW4gYWRkcmVzcyBwcm9vZiBsZW5ndGggd2UgY2FuIHN0aWxsIGV4dHJhY3QgdGhlIGFkZHJlc3MgZnJvbSB0aGUgcHJvb2YuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBhZHJlc3NQcm9vZkxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXlHb0F0dGVzdGF0aW9uKG1lc3NhZ2U6IEJ1ZmZlcik6IHtcbiAgZW50cm9weTogQnVmZmVyO1xuICBhZGRyZXNzOiBCdWZmZXI7XG4gIHV1aWQ6IEJ1ZmZlcjtcbn0ge1xuICBpZiAobWVzc2FnZS5sZW5ndGggPD0gRW50cm9weUxlbiArIFV1aWRCdWZmZXJMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BheUdvIGF0dGVzdGF0aW9uIHByb29mIGlzIHRvbyBzaG9ydCB0byBjb250YWluIGEgdmFsaWQgYWRkcmVzcycpO1xuICB9XG5cbiAgLy8gVGhpcyBnZW5lcmF0ZXMgdGhlIGZpcnN0IHBhcnQgYmVmb3JlIHRoZSB2YXJpbnQgbGVuZ3RoIHNvIHRoYXQgd2UgY2FuXG4gIC8vIGRldGVybWluZSBob3cgbWFueSBieXRlcyB0aGlzIGlzIGFuZCBpdGVyYXRlIHRocm91Z2ggdGhlIEJ1ZmZlci5cbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmIChtZXNzYWdlLnRvU3RyaW5nKCdoZXgnKS5zdGFydHNXaXRoKFByZWZpeC50b1N0cmluZygnaGV4JykpKSB7XG4gICAgb2Zmc2V0ID0gUHJlZml4Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIHdlIGRlY29kZSB0aGUgdmFyaW50IG9mIHRoZSBtZXNzYWdlIHdoaWNoIGlzIHVpbnQzMlxuICAvLyBodHRwczovL2VuLmJpdGNvaW4uaXQvd2lraS9Qcm90b2NvbF9kb2N1bWVudGF0aW9uXG4gIGNvbnN0IHZhckludCA9IGJ1ZmZlcnV0aWxzLnZhcnVpbnQuZGVjb2RlKG1lc3NhZ2UsIG9mZnNldCk7XG4gIGFzc2VydCh2YXJJbnQpO1xuICBvZmZzZXQgKz0gYnVmZmVydXRpbHMudmFydWludC5kZWNvZGUuYnl0ZXM7XG5cbiAgY29uc3QgZW50cm9weSA9IG1lc3NhZ2Uuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBFbnRyb3B5TGVuKTtcbiAgb2Zmc2V0ICs9IEVudHJvcHlMZW47XG4gIGNvbnN0IGFkZHJlc3MgPSBtZXNzYWdlLnN1YmFycmF5KG9mZnNldCwgbWVzc2FnZS5sZW5ndGggLSBVdWlkQnVmZmVyTGVuZ3RoKTtcbiAgb2Zmc2V0ICs9IGFkZHJlc3MubGVuZ3RoO1xuICBjb25zdCB1dWlkID0gbWVzc2FnZS5zdWJhcnJheShtZXNzYWdlLmxlbmd0aCAtIFV1aWRCdWZmZXJMZW5ndGgpO1xuXG4gIC8vIHdlIGJyZWFrIHVwIHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFuZCByZXR1ZW4gdGhlIGVudHJvcHksIGFkZHJlc3MgYW5kIHV1aWQgaW4gdGhlaXIgYnVmZmVyc1xuICByZXR1cm4geyBlbnRyb3B5LCBhZGRyZXNzLCB1dWlkIH07XG59XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!