PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-algo/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 lib_1 = require("./lib");
const cryptography_1 = require("@hashgraph/cryptography");
/**
 * 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 (lib_1.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 = lib_1.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 {
            cryptography_1.PrivateKey.fromString(seed);
        }
        catch {
            return false;
        }
        return true;
    }
}
exports.SeedValidator = SeedValidator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VlZFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWVkVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUF1QztBQUN2QywwQ0FBNEI7QUFDNUIsNENBQTRDO0FBQzVDLCtCQUFrQztBQUNsQywwREFBcUQ7QUFDckQ7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDeEI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBWTtRQUN2QyxJQUFJLElBQUksR0FBMkIsU0FBUyxDQUFDO1FBRTdDLDRGQUE0RjtRQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsNkZBQTZGO1lBQzdGLDZFQUE2RTtZQUM3RSw4QkFBOEI7WUFFOUIsSUFBSSxlQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFBRSxJQUFJLEdBQUcsb0JBQVUsQ0FBQyxJQUFJLENBQUM7WUFDeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztnQkFBRSxJQUFJLEdBQUcsb0JBQVUsQ0FBQyxHQUFHLENBQUM7WUFDekUsSUFBSSxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO2dCQUFFLElBQUksR0FBRyxvQkFBVSxDQUFDLElBQUksQ0FBQztRQUN4RSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxJQUFZLEVBQUUsVUFBc0I7UUFDbkUsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sVUFBVSxLQUFLLFdBQVcsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFZO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLGVBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQVk7UUFDdkMsSUFBSSxDQUFDO1lBQ0gseUJBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBM0RELHNDQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGFsZ29VdGlscyB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IFByaXZhdGVLZXkgfSBmcm9tICdAaGFzaGdyYXBoL2NyeXB0b2dyYXBoeSc7XG4vKipcbiAqIFRoaXMgY2xhc3NlcyBpbnRlbnRpb24gaXMgdG8gZ3Vlc3MvdmVyaWZ5IHdoYXQgc2VlZHMgY29tZSBmcm9tIHdoZXJlLlxuICovXG5leHBvcnQgY2xhc3MgU2VlZFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBUcnkgdG8gZ3Vlc3Mgd2hhdCBraW5kIG9mIHNlZWQgdGhpcyBjb3VsZCBiZVxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBjb2luIHR5cGUgaXMgdW5kZXRlY3RhYmxlLiByZXR1cm5zXG4gICAqIHRoZSBjb2luIGZhbWlseSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29pbkZhbWlseUZyb21TZWVkKHNlZWQ6IHN0cmluZyk6IENvaW5GYW1pbHkgfCB1bmRlZmluZWQge1xuICAgIGxldCBjb2luOiBDb2luRmFtaWx5IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gbW9yZSB0aGFuIG9uZSBjb21wZXRpbmcgc2VlZCBmb3JtYXQsIHRoYXQgY291bGQgYmUgYW4gaXNzdWVcbiAgICBpZiAoIVNlZWRWYWxpZGF0b3IuaGFzQ29tcGV0aW5nU2VlZEZvcm1hdHMoc2VlZCkpIHtcbiAgICAgIC8vIG9yZGVyaW5nIGdlbmVyYWxseSBtYXR0ZXJzIGhlcmUgLSBoYmFyIGlzIHRoZSBsZWFzdCBwZXJtaXNzaXZlIGZvciBzZWVkIGNoZWNraW5nLCBhbGdvIGFuZFxuICAgICAgLy8gc3RlbGxhciBoYXZlIGNoZWNrc3Vtcy4gY29pbiBpcyBndWFyYW50ZWVkIHRvIGJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBieSB0aGVcbiAgICAgIC8vIGNvbXBldGluZyBzZWVkIGZvcm1hdCBjaGVja1xuXG4gICAgICBpZiAoYWxnb1V0aWxzLmlzVmFsaWRTZWVkKHNlZWQpKSBjb2luID0gQ29pbkZhbWlseS5BTEdPO1xuICAgICAgaWYgKHN0ZWxsYXIuU3RyS2V5LmlzVmFsaWRFZDI1NTE5U2VjcmV0U2VlZChzZWVkKSkgY29pbiA9IENvaW5GYW1pbHkuWExNO1xuICAgICAgaWYgKFNlZWRWYWxpZGF0b3IuaXNWYWxpZEhiYXJTZWVkRm9ybWF0KHNlZWQpKSBjb2luID0gQ29pbkZhbWlseS5IQkFSO1xuICAgIH1cblxuICAgIHJldHVybiBjb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgaXMgYSB2YWxpZCBzZWVkIGZvciB0aGlzIGNvaW4gZmFtaWx5IHR5cGUuXG4gICAqIEBwYXJhbSBzZWVkIC0gc2VlZFxuICAgKiBAcGFyYW0gY29pbkZhbWlseSAtIHRoZSBjb2luRmFtaWx5IG9mIHRoZSBjb2luIHdlJ3JlIHdvcmtpbmcgd2l0aFxuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRFZDI1NTE5U2VlZEZvckNvaW4oc2VlZDogc3RyaW5nLCBjb2luRmFtaWx5OiBDb2luRmFtaWx5KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3Vlc3NlZENvaW4gPSBTZWVkVmFsaWRhdG9yLmdldENvaW5GYW1pbHlGcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4gY29pbkZhbWlseSA9PT0gZ3Vlc3NlZENvaW47XG4gIH1cblxuICAvKipcbiAgICogV2UgbmVlZCB0byBlbnN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcCBmb3IgYW55IHR3byBzZWVkcyB3ZSBwdXQgaW50byB0aGlzIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uc1xuICAgKiBpbnRlbnRpb24gaXMgZm9yIGdhdGluZyB3aGV0aGVyIHRoaXMgc2VlZCBjb3VsZCBwb3NzaWJseSBtYXRjaCB0d28gZm9ybWF0cyBvciBpcyBpbnZhbGlkIGl0c2VsZi5cbiAgICogQHBhcmFtIHNlZWRcbiAgICovXG4gIHN0YXRpYyBoYXNDb21wZXRpbmdTZWVkRm9ybWF0cyhzZWVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FsZ29TZWVkID0gYWxnb1V0aWxzLmlzVmFsaWRTZWVkKHNlZWQpO1xuICAgIGNvbnN0IGlzU3RlbGxhclNlZWQgPSBzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVNlY3JldFNlZWQoc2VlZCk7XG4gICAgY29uc3QgaXNIYmFyU2VlZCA9IFNlZWRWYWxpZGF0b3IuaXNWYWxpZEhiYXJTZWVkRm9ybWF0KHNlZWQpO1xuXG4gICAgcmV0dXJuIF8uc3VtKFtpc0FsZ29TZWVkLCBpc1N0ZWxsYXJTZWVkLCBpc0hiYXJTZWVkXSkgIT09IDE7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaXMgYSB2YWxpZCBIYmFyIHBydi4gVGhlc2UgY2FuIGJlIGVuY29kZWQgZGlmZmVyZW50bHkuXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqL1xuICBzdGF0aWMgaXNWYWxpZEhiYXJTZWVkRm9ybWF0KHNlZWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBQcml2YXRlS2V5LmZyb21TdHJpbmcoc2VlZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!