@bcpros/crypto-wallet-core
Version:
A multi-currency support library for address derivation, private key creation, and transaction creation
50 lines • 1.97 kB
JavaScript
;
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