UNPKG

@bcpros/crypto-wallet-core

Version:

A multi-currency support library for address derivation, private key creation, and transaction creation

50 lines 1.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.XrpValidation = void 0; const bitcore_lib_1 = __importDefault(require("@bcpros/bitcore-lib")); const base_x_1 = __importDefault(require("base-x")); const RIPPLE_ALPHABET = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'; class XrpValidation { validateAddress(_network, address) { const RippleAddressRegex = new RegExp(/^r[rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz]{27,35}$/); if (!address.match(RippleAddressRegex)) { return false; } const base58 = (0, base_x_1.default)(RIPPLE_ALPHABET); const buffer = new Buffer(base58.decode(address)); let prefix = buffer.slice(0, 1); let data = buffer.slice(1, -4); let hash = Buffer.concat([prefix, data]); hash = bitcore_lib_1.default.crypto.Hash.sha256(hash); hash = bitcore_lib_1.default.crypto.Hash.sha256(hash); let checksum = buffer.slice(-4).reduce((acc, check, index) => { if (check !== hash[index]) { return 0; } else return acc || 1; }); if (checksum === 0) { return false; } return true; } validateUri(addressUri) { if (!addressUri) { return false; } const address = this.extractAddress(addressUri); const ripplePrefix = /ripple/i.exec(addressUri); return !!ripplePrefix && this.validateAddress('livenet', address); } extractAddress(data) { const prefix = /^[a-z]+:/i; const params = /([\?\&](amount|dt)=(\d+([\,\.]\d+)?))+/i; return data.replace(prefix, '').replace(params, ''); } } exports.XrpValidation = XrpValidation; //# sourceMappingURL=index.js.map