PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-hbar/dist/src
Просмотр файла: seedValidator.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.SeedValidator = void 0;
const stellar = __importStar(require("stellar-sdk"));
const _ = __importStar(require("lodash"));
const statics_1 = require("@bitgo/statics");
const utils_1 = require("./lib/utils");
const sdk_coin_algo_1 = require("@bitgo/sdk-coin-algo");
/**
* This classes intention is to guess/verify what seeds come from where.
*/
class SeedValidator {
/**
* Try to guess what kind of seed this could be
* @param seed
* @returns {string} - returns undefined if the coin type is undetectable. returns
* the coin family otherwise.
*/
static getCoinFamilyFromSeed(seed) {
let coin = undefined;
// if this can be implemented in more than one competing seed format, that could be an issue
if (!SeedValidator.hasCompetingSeedFormats(seed)) {
// ordering generally matters here - hbar is the least permissive for seed checking, algo and
// stellar have checksums. coin is guaranteed to be mutually exclusive by the
// competing seed format check
if (sdk_coin_algo_1.AlgoLib.algoUtils.isValidSeed(seed))
coin = statics_1.CoinFamily.ALGO;
if (stellar.StrKey.isValidEd25519SecretSeed(seed))
coin = statics_1.CoinFamily.XLM;
if (SeedValidator.isValidHbarSeedFormat(seed))
coin = statics_1.CoinFamily.HBAR;
}
return coin;
}
/**
* Checks whether this is a valid seed for this coin family type.
* @param seed - seed
* @param coinFamily - the coinFamily of the coin we're working with
*/
static isValidEd25519SeedForCoin(seed, coinFamily) {
const guessedCoin = SeedValidator.getCoinFamilyFromSeed(seed);
return coinFamily === guessedCoin;
}
/**
* We need to ensure there is no overlap for any two seeds we put into this function. This functions
* intention is for gating whether this seed could possibly match two formats or is invalid itself.
* @param seed
*/
static hasCompetingSeedFormats(seed) {
const isAlgoSeed = sdk_coin_algo_1.AlgoLib.algoUtils.isValidSeed(seed);
const isStellarSeed = stellar.StrKey.isValidEd25519SecretSeed(seed);
const isHbarSeed = SeedValidator.isValidHbarSeedFormat(seed);
return _.sum([isAlgoSeed, isStellarSeed, isHbarSeed]) !== 1;
}
/**
* Checks if this is a valid Hbar prv. These can be encoded differently.
* @param seed
*/
static isValidHbarSeedFormat(seed) {
try {
(0, utils_1.createRawKey)(seed);
}
catch {
return false;
}
return true;
}
}
exports.SeedValidator = SeedValidator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VlZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWVkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUF1QztBQUN2QywwQ0FBNEI7QUFDNUIsNENBQTRDO0FBQzVDLHVDQUEyQztBQUMzQyx3REFBK0M7QUFDL0M7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDeEI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxJQUFJLElBQUksR0FBMkIsU0FBUyxDQUFDO1FBRTdDLDRGQUE0RjtRQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsNkZBQTZGO1lBQzdGLDZFQUE2RTtZQUM3RSw4QkFBOEI7WUFFOUIsSUFBSSx1QkFBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUFFLElBQUksR0FBRyxvQkFBVSxDQUFDLElBQUksQ0FBQztZQUNoRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO2dCQUFFLElBQUksR0FBRyxvQkFBVSxDQUFDLEdBQUcsQ0FBQztZQUN6RSxJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsSUFBSSxHQUFHLG9CQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3hFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHlCQUF5QixDQUFDLElBQVksRUFBRSxVQUFzQjtRQUNuRSxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsT0FBTyxVQUFVLEtBQUssV0FBVyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLElBQVk7UUFDekMsTUFBTSxVQUFVLEdBQUcsdUJBQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3ZDLElBQUksQ0FBQztZQUNILElBQUEsb0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUEzREQsc0NBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3RlbGxhciBmcm9tICdzdGVsbGFyLXNkayc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb2luRmFtaWx5IH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgY3JlYXRlUmF3S2V5IH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQWxnb0xpYiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1hbGdvJztcbi8qKlxuICogVGhpcyBjbGFzc2VzIGludGVudGlvbiBpcyB0byBndWVzcy92ZXJpZnkgd2hhdCBzZWVkcyBjb21lIGZyb20gd2hlcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWVkVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFRyeSB0byBndWVzcyB3aGF0IGtpbmQgb2Ygc2VlZCB0aGlzIGNvdWxkIGJlXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGNvaW4gdHlwZSBpcyB1bmRldGVjdGFibGUuIHJldHVybnNcbiAgICogdGhlIGNvaW4gZmFtaWx5IG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBnZXRDb2luRmFtaWx5RnJvbVNlZWQoc2VlZDogc3RyaW5nKTogQ29pbkZhbWlseSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNvaW46IENvaW5GYW1pbHkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGlzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBtb3JlIHRoYW4gb25lIGNvbXBldGluZyBzZWVkIGZvcm1hdCwgdGhhdCBjb3VsZCBiZSBhbiBpc3N1ZVxuICAgIGlmICghU2VlZFZhbGlkYXRvci5oYXNDb21wZXRpbmdTZWVkRm9ybWF0cyhzZWVkKSkge1xuICAgICAgLy8gb3JkZXJpbmcgZ2VuZXJhbGx5IG1hdHRlcnMgaGVyZSAtIGhiYXIgaXMgdGhlIGxlYXN0IHBlcm1pc3NpdmUgZm9yIHNlZWQgY2hlY2tpbmcsIGFsZ28gYW5kXG4gICAgICAvLyBzdGVsbGFyIGhhdmUgY2hlY2tzdW1zLiBjb2luIGlzIGd1YXJhbnRlZWQgdG8gYmUgbXV0dWFsbHkgZXhjbHVzaXZlIGJ5IHRoZVxuICAgICAgLy8gY29tcGV0aW5nIHNlZWQgZm9ybWF0IGNoZWNrXG5cbiAgICAgIGlmIChBbGdvTGliLmFsZ29VdGlscy5pc1ZhbGlkU2VlZChzZWVkKSkgY29pbiA9IENvaW5GYW1pbHkuQUxHTztcbiAgICAgIGlmIChzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVNlY3JldFNlZWQoc2VlZCkpIGNvaW4gPSBDb2luRmFtaWx5LlhMTTtcbiAgICAgIGlmIChTZWVkVmFsaWRhdG9yLmlzVmFsaWRIYmFyU2VlZEZvcm1hdChzZWVkKSkgY29pbiA9IENvaW5GYW1pbHkuSEJBUjtcbiAgICB9XG5cbiAgICByZXR1cm4gY29pbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGlzIGlzIGEgdmFsaWQgc2VlZCBmb3IgdGhpcyBjb2luIGZhbWlseSB0eXBlLlxuICAgKiBAcGFyYW0gc2VlZCAtIHNlZWRcbiAgICogQHBhcmFtIGNvaW5GYW1pbHkgLSB0aGUgY29pbkZhbWlseSBvZiB0aGUgY29pbiB3ZSdyZSB3b3JraW5nIHdpdGhcbiAgICovXG4gIHN0YXRpYyBpc1ZhbGlkRWQyNTUxOVNlZWRGb3JDb2luKHNlZWQ6IHN0cmluZywgY29pbkZhbWlseTogQ29pbkZhbWlseSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGd1ZXNzZWRDb2luID0gU2VlZFZhbGlkYXRvci5nZXRDb2luRmFtaWx5RnJvbVNlZWQoc2VlZCk7XG4gICAgcmV0dXJuIGNvaW5GYW1pbHkgPT09IGd1ZXNzZWRDb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIFdlIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIG92ZXJsYXAgZm9yIGFueSB0d28gc2VlZHMgd2UgcHV0IGludG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbnNcbiAgICogaW50ZW50aW9uIGlzIGZvciBnYXRpbmcgd2hldGhlciB0aGlzIHNlZWQgY291bGQgcG9zc2libHkgbWF0Y2ggdHdvIGZvcm1hdHMgb3IgaXMgaW52YWxpZCBpdHNlbGYuXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqL1xuICBzdGF0aWMgaGFzQ29tcGV0aW5nU2VlZEZvcm1hdHMoc2VlZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNBbGdvU2VlZCA9IEFsZ29MaWIuYWxnb1V0aWxzLmlzVmFsaWRTZWVkKHNlZWQpO1xuICAgIGNvbnN0IGlzU3RlbGxhclNlZWQgPSBzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVNlY3JldFNlZWQoc2VlZCk7XG4gICAgY29uc3QgaXNIYmFyU2VlZCA9IFNlZWRWYWxpZGF0b3IuaXNWYWxpZEhiYXJTZWVkRm9ybWF0KHNlZWQpO1xuXG4gICAgcmV0dXJuIF8uc3VtKFtpc0FsZ29TZWVkLCBpc1N0ZWxsYXJTZWVkLCBpc0hiYXJTZWVkXSkgIT09IDE7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaXMgYSB2YWxpZCBIYmFyIHBydi4gVGhlc2UgY2FuIGJlIGVuY29kZWQgZGlmZmVyZW50bHkuXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZEhiYXJTZWVkRm9ybWF0KHNlZWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjcmVhdGVSYXdLZXkoc2VlZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!