PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-hbar/src
Просмотр файла: seedValidator.ts
import * as stellar from 'stellar-sdk';
import * as _ from 'lodash';
import { CoinFamily } from '@bitgo/statics';
import { createRawKey } from './lib/utils';
import { AlgoLib } from '@bitgo/sdk-coin-algo';
/**
* This classes intention is to guess/verify what seeds come from where.
*/
export 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: string): CoinFamily | undefined {
let coin: CoinFamily | undefined = 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 (AlgoLib.algoUtils.isValidSeed(seed)) coin = CoinFamily.ALGO;
if (stellar.StrKey.isValidEd25519SecretSeed(seed)) coin = CoinFamily.XLM;
if (SeedValidator.isValidHbarSeedFormat(seed)) coin = 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: string, coinFamily: CoinFamily): boolean {
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: string): boolean {
const isAlgoSeed = 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: string): boolean {
try {
createRawKey(seed);
} catch {
return false;
}
return true;
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!