PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-trx/dist/src/lib
Просмотр файла: keyPair.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.KeyPair = void 0;
const secp256k1_1 = require("@bitgo/secp256k1");
const crypto_1 = require("crypto");
const sdk_core_1 = require("@bitgo/sdk-core");
const Utils = __importStar(require("./utils"));
const DEFAULT_SEED_SIZE_BYTES = 16;
/**
* Tron keys and address management.
*/
class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
/**
* Public constructor. By default, creates a key pair with a random master seed.
*
* @param {KeyPairOptions} source Either a master seed, a private key (extended or raw), or a public key
* (extended, compressed, or uncompressed)
*/
constructor(source) {
super(source);
if (!source) {
const seed = (0, crypto_1.randomBytes)(DEFAULT_SEED_SIZE_BYTES);
this.hdNode = secp256k1_1.bip32.fromSeed(seed);
}
else if ((0, sdk_core_1.isSeed)(source)) {
this.hdNode = secp256k1_1.bip32.fromSeed(source.seed);
}
else if ((0, sdk_core_1.isPrivateKey)(source)) {
super.recordKeysFromPrivateKey(source.prv);
}
else if ((0, sdk_core_1.isPublicKey)(source)) {
super.recordKeysFromPublicKey(source.pub);
}
else {
throw new Error('Invalid key pair options');
}
if (this.hdNode) {
this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
}
}
/**
* Tron default keys format is raw private and uncompressed public key
*
* @returns {DefaultKeys} The keys in the protocol default key format
*/
getKeys() {
return {
pub: this.getPublicKey({ compressed: false }).toString('hex').toUpperCase(),
prv: this.getPrivateKey()?.toString('hex').toUpperCase(),
};
}
/**
* Get a public address in the specified format, or in base58 if none is provided.
*
* @param {AddressFormat} format The address specified format
* @returns {string} The public address in the specified format
*/
getAddress(format) {
const { pub } = this.getKeys();
// These are custom Tron methods. They can probably be replaced with other methods or libraries
const addressBytes = Utils.getRawAddressFromPubKey(Buffer.from(pub, 'hex'));
if (!format || format === sdk_core_1.AddressFormat.base58) {
// Default address are in hex
return Utils.getBase58AddressFromByteArray(addressBytes);
}
else if (format === sdk_core_1.AddressFormat.hex) {
return Utils.getHexAddressFromByteArray(addressBytes);
}
throw new Error('Unsupported address format');
}
/**
* Generates a signature for an arbitrary string with the current private key using keccak256
* hashing algorithm. Throws if there is no private key.
*
* @param {string} message to produce a signature for
* @returns {Buffer} The signature as a buffer
*/
signMessage(message) {
const messageToSign = Buffer.from(message).toString('hex');
const { prv } = this.getKeys();
if (!prv) {
throw new Error('Missing private key');
}
const signature = Utils.signString(messageToSign, prv, true).replace(/^0x/, '');
return Buffer.from(signature, 'hex');
}
/**
* Verifies a message signature using the current public key.
*
* @param {string} message signed
* @param {Buffer} signature to verify
* @returns {boolean} True if the message was signed with the current key pair
*/
verifySignature(message, signature) {
const messageToVerify = Buffer.from(message).toString('hex');
const address = this.getAddress(sdk_core_1.AddressFormat.base58);
return Utils.verifySignature(messageToVerify, address, signature.toString('hex'), true);
}
}
exports.KeyPair = KeyPair;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBeUM7QUFDekMsbUNBQXFDO0FBQ3JDLDhDQVF5QjtBQUN6QiwrQ0FBaUM7QUFFakMsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFFbkM7O0dBRUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxtQ0FBd0I7SUFDbkQ7Ozs7O09BS0c7SUFDSCxZQUFZLE1BQXVCO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksSUFBQSxpQkFBTSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxJQUFBLHNCQUFXLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLG1DQUF3QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNMLE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDM0UsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsTUFBc0I7UUFDL0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQiwrRkFBK0Y7UUFDL0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssd0JBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQyw2QkFBNkI7WUFDN0IsT0FBTyxLQUFLLENBQUMsNkJBQTZCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksTUFBTSxLQUFLLHdCQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUMsMEJBQTBCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLE9BQWU7UUFDekIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxPQUFlLEVBQUUsU0FBaUI7UUFDaEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUYsQ0FBQztDQUNGO0FBeEZELDBCQXdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge1xuICBBZGRyZXNzRm9ybWF0LFxuICBEZWZhdWx0S2V5cyxcbiAgaXNQcml2YXRlS2V5LFxuICBpc1B1YmxpY0tleSxcbiAgaXNTZWVkLFxuICBLZXlQYWlyT3B0aW9ucyxcbiAgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTID0gMTY7XG5cbi8qKlxuICogVHJvbiBrZXlzIGFuZCBhZGRyZXNzIG1hbmFnZW1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyIHtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4gQnkgZGVmYXVsdCwgY3JlYXRlcyBhIGtleSBwYWlyIHdpdGggYSByYW5kb20gbWFzdGVyIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpck9wdGlvbnN9IHNvdXJjZSBFaXRoZXIgYSBtYXN0ZXIgc2VlZCwgYSBwcml2YXRlIGtleSAoZXh0ZW5kZWQgb3IgcmF3KSwgb3IgYSBwdWJsaWMga2V5XG4gICAqICAgICAoZXh0ZW5kZWQsIGNvbXByZXNzZWQsIG9yIHVuY29tcHJlc3NlZClcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgc3VwZXIucmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHNvdXJjZS5wcnYpO1xuICAgIH0gZWxzZSBpZiAoaXNQdWJsaWNLZXkoc291cmNlKSkge1xuICAgICAgc3VwZXIucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGROb2RlKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIudG9LZXlQYWlyKHRoaXMuaGROb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJvbiBkZWZhdWx0IGtleXMgZm9ybWF0IGlzIHJhdyBwcml2YXRlIGFuZCB1bmNvbXByZXNzZWQgcHVibGljIGtleVxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdEtleXN9IFRoZSBrZXlzIGluIHRoZSBwcm90b2NvbCBkZWZhdWx0IGtleSBmb3JtYXRcbiAgICovXG4gIGdldEtleXMoKTogRGVmYXVsdEtleXMge1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IHRoaXMuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZDogZmFsc2UgfSkudG9TdHJpbmcoJ2hleCcpLnRvVXBwZXJDYXNlKCksXG4gICAgICBwcnY6IHRoaXMuZ2V0UHJpdmF0ZUtleSgpPy50b1N0cmluZygnaGV4JykudG9VcHBlckNhc2UoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHB1YmxpYyBhZGRyZXNzIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0LCBvciBpbiBiYXNlNTggaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBZGRyZXNzRm9ybWF0fSBmb3JtYXQgVGhlIGFkZHJlc3Mgc3BlY2lmaWVkIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcHVibGljIGFkZHJlc3MgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXRcbiAgICovXG4gIGdldEFkZHJlc3MoZm9ybWF0PzogQWRkcmVzc0Zvcm1hdCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBwdWIgfSA9IHRoaXMuZ2V0S2V5cygpO1xuICAgIC8vIFRoZXNlIGFyZSBjdXN0b20gVHJvbiBtZXRob2RzLiBUaGV5IGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCB3aXRoIG90aGVyIG1ldGhvZHMgb3IgbGlicmFyaWVzXG4gICAgY29uc3QgYWRkcmVzc0J5dGVzID0gVXRpbHMuZ2V0UmF3QWRkcmVzc0Zyb21QdWJLZXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuXG4gICAgaWYgKCFmb3JtYXQgfHwgZm9ybWF0ID09PSBBZGRyZXNzRm9ybWF0LmJhc2U1OCkge1xuICAgICAgLy8gRGVmYXVsdCBhZGRyZXNzIGFyZSBpbiBoZXhcbiAgICAgIHJldHVybiBVdGlscy5nZXRCYXNlNThBZGRyZXNzRnJvbUJ5dGVBcnJheShhZGRyZXNzQnl0ZXMpO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBBZGRyZXNzRm9ybWF0LmhleCkge1xuICAgICAgcmV0dXJuIFV0aWxzLmdldEhleEFkZHJlc3NGcm9tQnl0ZUFycmF5KGFkZHJlc3NCeXRlcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYWRkcmVzcyBmb3JtYXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBzaWduYXR1cmUgZm9yIGFuIGFyYml0cmFyeSBzdHJpbmcgd2l0aCB0aGUgY3VycmVudCBwcml2YXRlIGtleSB1c2luZyBrZWNjYWsyNTZcbiAgICogaGFzaGluZyBhbGdvcml0aG0uIFRocm93cyBpZiB0aGVyZSBpcyBubyBwcml2YXRlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgdG8gcHJvZHVjZSBhIHNpZ25hdHVyZSBmb3JcbiAgICogQHJldHVybnMge0J1ZmZlcn0gVGhlIHNpZ25hdHVyZSBhcyBhIGJ1ZmZlclxuICAgKi9cbiAgc2lnbk1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBtZXNzYWdlVG9TaWduID0gQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHsgcHJ2IH0gPSB0aGlzLmdldEtleXMoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IFV0aWxzLnNpZ25TdHJpbmcobWVzc2FnZVRvU2lnbiwgcHJ2LCB0cnVlKS5yZXBsYWNlKC9eMHgvLCAnJyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgbWVzc2FnZSBzaWduYXR1cmUgdXNpbmcgdGhlIGN1cnJlbnQgcHVibGljIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Ugc2lnbmVkXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtZXNzYWdlIHdhcyBzaWduZWQgd2l0aCB0aGUgY3VycmVudCBrZXkgcGFpclxuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2U6IHN0cmluZywgc2lnbmF0dXJlOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBtZXNzYWdlVG9WZXJpZnkgPSBCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgYWRkcmVzcyA9IHRoaXMuZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LmJhc2U1OCk7XG4gICAgcmV0dXJuIFV0aWxzLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlVG9WZXJpZnksIGFkZHJlc3MsIHNpZ25hdHVyZS50b1N0cmluZygnaGV4JyksIHRydWUpO1xuICB9XG59XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!