multichain-address-validator 0.7.4 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/chain-validators.d.ts +2 -0
- package/dist/cjs/chain-validators.js +124 -0
- package/dist/cjs/crypto/base32.d.ts +5 -0
- package/dist/cjs/crypto/base32.js +66 -0
- package/dist/cjs/crypto/base58.d.ts +4 -0
- package/dist/cjs/crypto/base58.js +44 -0
- package/dist/cjs/crypto/bech32.d.ts +17 -0
- package/dist/cjs/crypto/bech32.js +126 -0
- package/dist/cjs/crypto/biginteger.d.ts +57 -0
- package/dist/cjs/crypto/biginteger.js +1313 -0
- package/dist/cjs/crypto/blake256.d.ts +22 -0
- package/dist/cjs/crypto/blake256.js +171 -0
- package/dist/cjs/crypto/blake2b.d.ts +13 -0
- package/dist/cjs/crypto/blake2b.js +243 -0
- package/dist/cjs/crypto/cnBase58.d.ts +7 -0
- package/dist/cjs/crypto/cnBase58.js +211 -0
- package/dist/cjs/crypto/segwit_addr.d.ts +12 -0
- package/dist/cjs/crypto/segwit_addr.js +107 -0
- package/dist/cjs/crypto/utils.d.ts +26 -0
- package/dist/cjs/crypto/utils.js +128 -0
- package/dist/cjs/helpers.d.ts +2 -0
- package/dist/cjs/helpers.js +8 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +17 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types.d.ts +15 -0
- package/dist/cjs/types.js +8 -0
- package/dist/cjs/validators/algorand_validator.d.ts +5 -0
- package/dist/cjs/validators/algorand_validator.js +28 -0
- package/dist/cjs/validators/base58_validator.d.ts +4 -0
- package/dist/cjs/validators/base58_validator.js +36 -0
- package/dist/cjs/validators/bch_validator.d.ts +13 -0
- package/dist/cjs/validators/bch_validator.js +55 -0
- package/dist/cjs/validators/bip173_validator.d.ts +7 -0
- package/dist/cjs/validators/bip173_validator.js +17 -0
- package/dist/cjs/validators/bitcoin_validator.d.ts +12 -0
- package/dist/cjs/validators/bitcoin_validator.js +73 -0
- package/dist/cjs/validators/cardano_validator.d.ts +5 -0
- package/dist/cjs/validators/cardano_validator.js +46 -0
- package/dist/cjs/validators/eos_validator.d.ts +5 -0
- package/dist/cjs/validators/eos_validator.js +12 -0
- package/dist/cjs/validators/ethereum_validator.d.ts +6 -0
- package/dist/cjs/validators/ethereum_validator.js +35 -0
- package/dist/cjs/validators/hedera_validator.d.ts +5 -0
- package/dist/cjs/validators/hedera_validator.js +10 -0
- package/dist/cjs/validators/index.d.ts +18 -0
- package/dist/cjs/validators/index.js +42 -0
- package/dist/cjs/validators/monero_validator.d.ts +5 -0
- package/dist/cjs/validators/monero_validator.js +63 -0
- package/dist/cjs/validators/move_validator.d.ts +5 -0
- package/dist/cjs/validators/move_validator.js +10 -0
- package/dist/cjs/validators/nano_validator.d.ts +6 -0
- package/dist/cjs/validators/nano_validator.js +28 -0
- package/dist/cjs/validators/nem_validator.d.ts +5 -0
- package/dist/cjs/validators/nem_validator.js +19 -0
- package/dist/cjs/validators/polkadot_validator.d.ts +5 -0
- package/dist/cjs/validators/polkadot_validator.js +54 -0
- package/dist/cjs/validators/ripple_validator.d.ts +10 -0
- package/dist/cjs/validators/ripple_validator.js +35 -0
- package/dist/cjs/validators/sia_validator.d.ts +5 -0
- package/dist/cjs/validators/sia_validator.js +32 -0
- package/dist/cjs/validators/solana_validator.d.ts +5 -0
- package/dist/cjs/validators/solana_validator.js +15 -0
- package/dist/cjs/validators/tezos_validator.d.ts +5 -0
- package/dist/cjs/validators/tezos_validator.js +35 -0
- package/dist/cjs/validators/tron_validator.d.ts +8 -0
- package/dist/cjs/validators/tron_validator.js +50 -0
- package/dist/cjs/validators/xlm_validator.d.ts +7 -0
- package/dist/cjs/validators/xlm_validator.js +43 -0
- package/dist/esm/chain-validators.d.ts +2 -0
- package/dist/esm/chain-validators.js +121 -0
- package/dist/esm/crypto/base32.d.ts +5 -0
- package/dist/esm/crypto/base32.js +64 -0
- package/dist/esm/crypto/base58.d.ts +4 -0
- package/dist/esm/crypto/base58.js +42 -0
- package/dist/esm/crypto/bech32.d.ts +17 -0
- package/dist/esm/crypto/bech32.js +124 -0
- package/dist/esm/crypto/biginteger.d.ts +57 -0
- package/dist/esm/crypto/biginteger.js +1311 -0
- package/dist/esm/crypto/blake256.d.ts +22 -0
- package/dist/esm/crypto/blake256.js +169 -0
- package/dist/esm/crypto/blake2b.d.ts +13 -0
- package/dist/esm/crypto/blake2b.js +242 -0
- package/dist/esm/crypto/cnBase58.d.ts +7 -0
- package/dist/esm/crypto/cnBase58.js +209 -0
- package/dist/esm/crypto/segwit_addr.d.ts +12 -0
- package/dist/esm/crypto/segwit_addr.js +102 -0
- package/dist/esm/crypto/utils.d.ts +26 -0
- package/dist/esm/crypto/utils.js +123 -0
- package/dist/esm/helpers.d.ts +2 -0
- package/dist/esm/helpers.js +5 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/types.d.ts +15 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/validators/algorand_validator.d.ts +5 -0
- package/dist/esm/validators/algorand_validator.js +23 -0
- package/dist/esm/validators/base58_validator.d.ts +4 -0
- package/dist/esm/validators/base58_validator.js +31 -0
- package/dist/esm/validators/bch_validator.d.ts +13 -0
- package/dist/esm/validators/bch_validator.js +50 -0
- package/dist/esm/validators/bip173_validator.d.ts +7 -0
- package/dist/esm/validators/bip173_validator.js +12 -0
- package/dist/esm/validators/bitcoin_validator.d.ts +12 -0
- package/dist/esm/validators/bitcoin_validator.js +68 -0
- package/dist/esm/validators/cardano_validator.d.ts +5 -0
- package/dist/esm/validators/cardano_validator.js +41 -0
- package/dist/esm/validators/eos_validator.d.ts +5 -0
- package/dist/esm/validators/eos_validator.js +10 -0
- package/dist/esm/validators/ethereum_validator.d.ts +6 -0
- package/dist/esm/validators/ethereum_validator.js +30 -0
- package/dist/esm/validators/hedera_validator.d.ts +5 -0
- package/dist/esm/validators/hedera_validator.js +8 -0
- package/dist/esm/validators/index.d.ts +18 -0
- package/dist/esm/validators/index.js +18 -0
- package/dist/esm/validators/monero_validator.d.ts +5 -0
- package/dist/esm/validators/monero_validator.js +58 -0
- package/dist/esm/validators/move_validator.d.ts +5 -0
- package/dist/esm/validators/move_validator.js +8 -0
- package/dist/esm/validators/nano_validator.d.ts +6 -0
- package/dist/esm/validators/nano_validator.js +23 -0
- package/dist/esm/validators/nem_validator.d.ts +5 -0
- package/dist/esm/validators/nem_validator.js +14 -0
- package/dist/esm/validators/polkadot_validator.d.ts +5 -0
- package/dist/esm/validators/polkadot_validator.js +49 -0
- package/dist/esm/validators/ripple_validator.d.ts +10 -0
- package/dist/esm/validators/ripple_validator.js +30 -0
- package/dist/esm/validators/sia_validator.d.ts +5 -0
- package/dist/esm/validators/sia_validator.js +27 -0
- package/dist/esm/validators/solana_validator.d.ts +5 -0
- package/dist/esm/validators/solana_validator.js +10 -0
- package/dist/esm/validators/tezos_validator.d.ts +5 -0
- package/dist/esm/validators/tezos_validator.js +30 -0
- package/dist/esm/validators/tron_validator.d.ts +8 -0
- package/dist/esm/validators/tron_validator.js +45 -0
- package/dist/esm/validators/xlm_validator.d.ts +7 -0
- package/dist/esm/validators/xlm_validator.js +38 -0
- package/package.json +1 -1
- package/package-lock.json +0 -1704
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
7
|
+
const helpers_js_1 = require("../helpers.js");
|
|
8
|
+
exports.default = {
|
|
9
|
+
isValidAddress: function (address) {
|
|
10
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
11
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(addr)) {
|
|
12
|
+
// Check if it has the basic requirements of an address
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (/^0x[0-9a-f]{40}$/.test(addr) || /^0x?[0-9A-F]{40}$/.test(addr)) {
|
|
16
|
+
// If it's all small caps or all caps, return true
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// Otherwise check each case
|
|
20
|
+
return this.verifyChecksum(addr);
|
|
21
|
+
},
|
|
22
|
+
verifyChecksum: function (address) {
|
|
23
|
+
// Check each case
|
|
24
|
+
address = address.replace('0x', '');
|
|
25
|
+
const addressHash = utils_js_1.default.keccak256(address.toLowerCase());
|
|
26
|
+
for (let i = 0; i < 40; i++) {
|
|
27
|
+
// The nth letter should be uppercase if the nth digit of casemap is 1
|
|
28
|
+
if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) ||
|
|
29
|
+
(parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpers_js_1 = require("../helpers.js");
|
|
4
|
+
exports.default = {
|
|
5
|
+
isValidAddress(address) {
|
|
6
|
+
// Regex to validate the format "shard.realm.account"
|
|
7
|
+
const regex = /^\d+\.\d+\.\d+$/;
|
|
8
|
+
return regex.test((0, helpers_js_1.getAddress)(address));
|
|
9
|
+
}
|
|
10
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { default as AlgorandValidator } from "./algorand_validator.js";
|
|
2
|
+
export { default as BCHValidator } from "./bch_validator.js";
|
|
3
|
+
export { default as BTCValidator } from "./bitcoin_validator.js";
|
|
4
|
+
export { default as CardanoValidator } from "./cardano_validator.js";
|
|
5
|
+
export { default as EOSValidator } from "./eos_validator.js";
|
|
6
|
+
export { default as ETHValidator } from "./ethereum_validator.js";
|
|
7
|
+
export { default as HederaValidator } from "./hedera_validator.js";
|
|
8
|
+
export { default as MoneroValidator } from "./monero_validator.js";
|
|
9
|
+
export { default as MoveValidator } from "./move_validator.js";
|
|
10
|
+
export { default as NemValidator } from "./nem_validator.js";
|
|
11
|
+
export { default as NanoValidator } from "./nano_validator.js";
|
|
12
|
+
export { default as PolkadotValidator } from "./polkadot_validator.js";
|
|
13
|
+
export { default as RippleValidator } from "./ripple_validator.js";
|
|
14
|
+
export { default as SiaValidator } from "./sia_validator.js";
|
|
15
|
+
export { default as SolanaValidator } from "./solana_validator.js";
|
|
16
|
+
export { default as TezosValidator } from "./tezos_validator.js";
|
|
17
|
+
export { default as TronValidator } from "./tron_validator.js";
|
|
18
|
+
export { default as XLMValidator } from "./xlm_validator.js";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.XLMValidator = exports.TronValidator = exports.TezosValidator = exports.SolanaValidator = exports.SiaValidator = exports.RippleValidator = exports.PolkadotValidator = exports.NanoValidator = exports.NemValidator = exports.MoveValidator = exports.MoneroValidator = exports.HederaValidator = exports.ETHValidator = exports.EOSValidator = exports.CardanoValidator = exports.BTCValidator = exports.BCHValidator = exports.AlgorandValidator = void 0;
|
|
7
|
+
var algorand_validator_js_1 = require("./algorand_validator.js");
|
|
8
|
+
Object.defineProperty(exports, "AlgorandValidator", { enumerable: true, get: function () { return __importDefault(algorand_validator_js_1).default; } });
|
|
9
|
+
var bch_validator_js_1 = require("./bch_validator.js");
|
|
10
|
+
Object.defineProperty(exports, "BCHValidator", { enumerable: true, get: function () { return __importDefault(bch_validator_js_1).default; } });
|
|
11
|
+
var bitcoin_validator_js_1 = require("./bitcoin_validator.js");
|
|
12
|
+
Object.defineProperty(exports, "BTCValidator", { enumerable: true, get: function () { return __importDefault(bitcoin_validator_js_1).default; } });
|
|
13
|
+
var cardano_validator_js_1 = require("./cardano_validator.js");
|
|
14
|
+
Object.defineProperty(exports, "CardanoValidator", { enumerable: true, get: function () { return __importDefault(cardano_validator_js_1).default; } });
|
|
15
|
+
var eos_validator_js_1 = require("./eos_validator.js");
|
|
16
|
+
Object.defineProperty(exports, "EOSValidator", { enumerable: true, get: function () { return __importDefault(eos_validator_js_1).default; } });
|
|
17
|
+
var ethereum_validator_js_1 = require("./ethereum_validator.js");
|
|
18
|
+
Object.defineProperty(exports, "ETHValidator", { enumerable: true, get: function () { return __importDefault(ethereum_validator_js_1).default; } });
|
|
19
|
+
var hedera_validator_js_1 = require("./hedera_validator.js");
|
|
20
|
+
Object.defineProperty(exports, "HederaValidator", { enumerable: true, get: function () { return __importDefault(hedera_validator_js_1).default; } });
|
|
21
|
+
var monero_validator_js_1 = require("./monero_validator.js");
|
|
22
|
+
Object.defineProperty(exports, "MoneroValidator", { enumerable: true, get: function () { return __importDefault(monero_validator_js_1).default; } });
|
|
23
|
+
var move_validator_js_1 = require("./move_validator.js");
|
|
24
|
+
Object.defineProperty(exports, "MoveValidator", { enumerable: true, get: function () { return __importDefault(move_validator_js_1).default; } });
|
|
25
|
+
var nem_validator_js_1 = require("./nem_validator.js");
|
|
26
|
+
Object.defineProperty(exports, "NemValidator", { enumerable: true, get: function () { return __importDefault(nem_validator_js_1).default; } });
|
|
27
|
+
var nano_validator_js_1 = require("./nano_validator.js");
|
|
28
|
+
Object.defineProperty(exports, "NanoValidator", { enumerable: true, get: function () { return __importDefault(nano_validator_js_1).default; } });
|
|
29
|
+
var polkadot_validator_js_1 = require("./polkadot_validator.js");
|
|
30
|
+
Object.defineProperty(exports, "PolkadotValidator", { enumerable: true, get: function () { return __importDefault(polkadot_validator_js_1).default; } });
|
|
31
|
+
var ripple_validator_js_1 = require("./ripple_validator.js");
|
|
32
|
+
Object.defineProperty(exports, "RippleValidator", { enumerable: true, get: function () { return __importDefault(ripple_validator_js_1).default; } });
|
|
33
|
+
var sia_validator_js_1 = require("./sia_validator.js");
|
|
34
|
+
Object.defineProperty(exports, "SiaValidator", { enumerable: true, get: function () { return __importDefault(sia_validator_js_1).default; } });
|
|
35
|
+
var solana_validator_js_1 = require("./solana_validator.js");
|
|
36
|
+
Object.defineProperty(exports, "SolanaValidator", { enumerable: true, get: function () { return __importDefault(solana_validator_js_1).default; } });
|
|
37
|
+
var tezos_validator_js_1 = require("./tezos_validator.js");
|
|
38
|
+
Object.defineProperty(exports, "TezosValidator", { enumerable: true, get: function () { return __importDefault(tezos_validator_js_1).default; } });
|
|
39
|
+
var tron_validator_js_1 = require("./tron_validator.js");
|
|
40
|
+
Object.defineProperty(exports, "TronValidator", { enumerable: true, get: function () { return __importDefault(tron_validator_js_1).default; } });
|
|
41
|
+
var xlm_validator_js_1 = require("./xlm_validator.js");
|
|
42
|
+
Object.defineProperty(exports, "XLMValidator", { enumerable: true, get: function () { return __importDefault(xlm_validator_js_1).default; } });
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
7
|
+
const helpers_js_1 = require("../helpers.js");
|
|
8
|
+
const cnBase58_js_1 = __importDefault(require("../crypto/cnBase58.js"));
|
|
9
|
+
const addressRegTest = new RegExp('^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{95}$');
|
|
10
|
+
const integratedAddressRegTest = new RegExp('^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{106}$');
|
|
11
|
+
const types = {
|
|
12
|
+
addressTypes: { mainnet: ['18', '42'], testnet: ['53', '63'], stagenet: ['24'] },
|
|
13
|
+
iAddressTypes: { mainnet: ['19'], testnet: ['54'], stagenet: ['25'] },
|
|
14
|
+
};
|
|
15
|
+
function validateNetwork(decoded, networkType, addressType) {
|
|
16
|
+
const addressTypes = addressType === 'integrated'
|
|
17
|
+
? types.iAddressTypes[networkType]
|
|
18
|
+
: types.addressTypes[networkType];
|
|
19
|
+
const at = parseInt(decoded.substr(0, 2), 16).toString();
|
|
20
|
+
switch (networkType) {
|
|
21
|
+
case 'mainnet':
|
|
22
|
+
return addressTypes.indexOf(at) >= 0;
|
|
23
|
+
case 'testnet':
|
|
24
|
+
return addressTypes.indexOf(at) >= 0;
|
|
25
|
+
// case 'stagenet':
|
|
26
|
+
// return network.stagenet.indexOf(at) >= 0
|
|
27
|
+
// case 'both':
|
|
28
|
+
// return network.prod.indexOf(at) >= 0 || network.testnet.indexOf(at) >= 0 || network.stagenet.indexOf(at) >= 0
|
|
29
|
+
default:
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function hextobin(hex) {
|
|
34
|
+
if (hex.length % 2 !== 0)
|
|
35
|
+
return null;
|
|
36
|
+
const res = new Uint8Array(hex.length / 2);
|
|
37
|
+
for (let i = 0; i < hex.length / 2; ++i) {
|
|
38
|
+
res[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
39
|
+
}
|
|
40
|
+
return res;
|
|
41
|
+
}
|
|
42
|
+
exports.default = (networkType) => ({
|
|
43
|
+
isValidAddress(address) {
|
|
44
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
45
|
+
let addressType = 'standard';
|
|
46
|
+
if (!addressRegTest.test(addr)) {
|
|
47
|
+
if (integratedAddressRegTest.test(addr)) {
|
|
48
|
+
addressType = 'integrated';
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const decodedAddrStr = cnBase58_js_1.default.decode(addr);
|
|
55
|
+
if (!decodedAddrStr)
|
|
56
|
+
return false;
|
|
57
|
+
if (!validateNetwork(decodedAddrStr, networkType, addressType))
|
|
58
|
+
return false;
|
|
59
|
+
const addrChecksum = decodedAddrStr.slice(-8);
|
|
60
|
+
const hashChecksum = utils_js_1.default.keccak256Checksum(hextobin(decodedAddrStr.slice(0, -8)));
|
|
61
|
+
return addrChecksum === hashChecksum;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const helpers_js_1 = require("../helpers.js");
|
|
4
|
+
const regexp = new RegExp('^0x[0-9a-fA-F]{64}$');
|
|
5
|
+
exports.default = {
|
|
6
|
+
isValidAddress(address) {
|
|
7
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
8
|
+
return regexp.test(addr);
|
|
9
|
+
},
|
|
10
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base_x_1 = __importDefault(require("base-x"));
|
|
7
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
8
|
+
const helpers_js_1 = require("../helpers.js");
|
|
9
|
+
const ALLOWED_CHARS = '13456789abcdefghijkmnopqrstuwxyz';
|
|
10
|
+
const codec = (0, base_x_1.default)(ALLOWED_CHARS);
|
|
11
|
+
// https://github.com/nanocurrency/raiblocks/wiki/Accounts,-Keys,-Seeds,-and-Wallet-Identifiers
|
|
12
|
+
const regexp = new RegExp('^(xrb|nano)_([' + ALLOWED_CHARS + ']{60})$');
|
|
13
|
+
exports.default = {
|
|
14
|
+
isValidAddress(address) {
|
|
15
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
16
|
+
if (regexp.test(addr)) {
|
|
17
|
+
return this.verifyChecksum(addr);
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
},
|
|
21
|
+
verifyChecksum: function (address) {
|
|
22
|
+
const bytes = codec.decode(regexp.exec(address)[2]).slice(-37);
|
|
23
|
+
// https://github.com/nanocurrency/raiblocks/blob/master/rai/lib/numbers.cpp#L73
|
|
24
|
+
const computedChecksum = utils_js_1.default.blake2b(utils_js_1.default.toHex(bytes.slice(0, -5)), 5);
|
|
25
|
+
const checksum = utils_js_1.default.toHex(bytes.slice(-5).reverse());
|
|
26
|
+
return computedChecksum === checksum;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const buffer_1 = require("buffer");
|
|
7
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
8
|
+
const helpers_js_1 = require("../helpers.js");
|
|
9
|
+
exports.default = {
|
|
10
|
+
isValidAddress(address) {
|
|
11
|
+
const addr = (0, helpers_js_1.getAddress)(address).toString().toUpperCase().replace(/-/g, '');
|
|
12
|
+
if (!address || addr.length !== 40) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const decoded = utils_js_1.default.toHex(utils_js_1.default.base32.b32decode(addr));
|
|
16
|
+
const stepThreeChecksum = utils_js_1.default.keccak256Checksum(buffer_1.Buffer.from(decoded.slice(0, 42), 'hex'));
|
|
17
|
+
return stepThreeChecksum === decoded.slice(42);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
7
|
+
const helpers_js_1 = require("../helpers.js");
|
|
8
|
+
// from https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)
|
|
9
|
+
const addressFormats = [
|
|
10
|
+
{ addressLength: 3, accountIndexLength: 1, checkSumLength: 1 },
|
|
11
|
+
{ addressLength: 4, accountIndexLength: 2, checkSumLength: 1 },
|
|
12
|
+
{ addressLength: 5, accountIndexLength: 2, checkSumLength: 2 },
|
|
13
|
+
{ addressLength: 6, accountIndexLength: 4, checkSumLength: 1 },
|
|
14
|
+
{ addressLength: 7, accountIndexLength: 4, checkSumLength: 2 },
|
|
15
|
+
{ addressLength: 8, accountIndexLength: 4, checkSumLength: 3 },
|
|
16
|
+
{ addressLength: 9, accountIndexLength: 4, checkSumLength: 4 },
|
|
17
|
+
{ addressLength: 10, accountIndexLength: 8, checkSumLength: 1 },
|
|
18
|
+
{ addressLength: 11, accountIndexLength: 8, checkSumLength: 2 },
|
|
19
|
+
{ addressLength: 12, accountIndexLength: 8, checkSumLength: 3 },
|
|
20
|
+
{ addressLength: 13, accountIndexLength: 8, checkSumLength: 4 },
|
|
21
|
+
{ addressLength: 14, accountIndexLength: 8, checkSumLength: 5 },
|
|
22
|
+
{ addressLength: 15, accountIndexLength: 8, checkSumLength: 6 },
|
|
23
|
+
{ addressLength: 16, accountIndexLength: 8, checkSumLength: 7 },
|
|
24
|
+
{ addressLength: 17, accountIndexLength: 8, checkSumLength: 8 },
|
|
25
|
+
{ addressLength: 34, accountIndexLength: 32, checkSumLength: 2 },
|
|
26
|
+
];
|
|
27
|
+
function verifyChecksum(address) {
|
|
28
|
+
try {
|
|
29
|
+
const preImage = '53533538505245';
|
|
30
|
+
const decoded = utils_js_1.default.base58(address);
|
|
31
|
+
const addressType = utils_js_1.default.byteArray2hexStr(decoded.slice(0, 1));
|
|
32
|
+
const addressAndChecksum = decoded.slice(1);
|
|
33
|
+
// get the address format
|
|
34
|
+
const addressFormat = addressFormats.find(af => af.addressLength === addressAndChecksum.length);
|
|
35
|
+
if (!addressFormat) {
|
|
36
|
+
throw new Error('Invalid address length');
|
|
37
|
+
}
|
|
38
|
+
const decodedAddress = utils_js_1.default.byteArray2hexStr(addressAndChecksum.slice(0, addressFormat.accountIndexLength));
|
|
39
|
+
const checksum = utils_js_1.default.byteArray2hexStr(addressAndChecksum.slice(-addressFormat.checkSumLength));
|
|
40
|
+
const calculatedHash = utils_js_1.default
|
|
41
|
+
.blake2b(preImage + addressType + decodedAddress, 64)
|
|
42
|
+
.substr(0, addressFormat.checkSumLength * 2)
|
|
43
|
+
.toUpperCase();
|
|
44
|
+
return calculatedHash == checksum;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = {
|
|
51
|
+
isValidAddress(address) {
|
|
52
|
+
return verifyChecksum((0, helpers_js_1.getAddress)(address));
|
|
53
|
+
},
|
|
54
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Address } from '../types.js';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
/**
|
|
4
|
+
* ripple address validation
|
|
5
|
+
*/
|
|
6
|
+
isValidAddress: (address: Address) => any;
|
|
7
|
+
verifyMemo(destinationTag: string | null): boolean;
|
|
8
|
+
verifyChecksum: (address: string) => boolean;
|
|
9
|
+
};
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base_x_1 = __importDefault(require("base-x"));
|
|
7
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
8
|
+
const helpers_js_1 = require("../helpers.js");
|
|
9
|
+
const ALLOWED_CHARS = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';
|
|
10
|
+
const codec = (0, base_x_1.default)(ALLOWED_CHARS);
|
|
11
|
+
const regexp = new RegExp('^r[' + ALLOWED_CHARS + ']{27,35}$');
|
|
12
|
+
exports.default = {
|
|
13
|
+
/**
|
|
14
|
+
* ripple address validation
|
|
15
|
+
*/
|
|
16
|
+
isValidAddress: function (address) {
|
|
17
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
18
|
+
const destinationTag = address.destinationTag;
|
|
19
|
+
const validAddress = regexp.test(addr) && this.verifyChecksum(addr);
|
|
20
|
+
return validAddress && this.verifyMemo(destinationTag);
|
|
21
|
+
},
|
|
22
|
+
verifyMemo(destinationTag) {
|
|
23
|
+
if (!destinationTag)
|
|
24
|
+
return true; // Optional
|
|
25
|
+
const tagNumber = Number(destinationTag);
|
|
26
|
+
// A destination tag is a 32-bit unsigned integer.
|
|
27
|
+
return /^[0-9]+$/.test(destinationTag) && tagNumber >= 0 && tagNumber <= 4294967295;
|
|
28
|
+
},
|
|
29
|
+
verifyChecksum: function (address) {
|
|
30
|
+
const bytes = codec.decode(address);
|
|
31
|
+
const computedChecksum = utils_js_1.default.sha256Checksum(utils_js_1.default.toHex(bytes.slice(0, -4)));
|
|
32
|
+
const checksum = utils_js_1.default.toHex(bytes.slice(-4));
|
|
33
|
+
return computedChecksum === checksum;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const lodash_isequal_1 = __importDefault(require("lodash.isequal"));
|
|
7
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
8
|
+
const helpers_js_1 = require("../helpers.js");
|
|
9
|
+
function hexToBytes(hex) {
|
|
10
|
+
const bytes = [];
|
|
11
|
+
for (let c = 0; c < hex.length; c += 2) {
|
|
12
|
+
bytes.push(parseInt(hex.substr(c, 2), 16));
|
|
13
|
+
}
|
|
14
|
+
return bytes;
|
|
15
|
+
}
|
|
16
|
+
function verifyChecksum(address) {
|
|
17
|
+
const checksumBytes = address.slice(0, 32 * 2);
|
|
18
|
+
const check = address.slice(32 * 2, 38 * 2);
|
|
19
|
+
const blakeHash = utils_js_1.default.blake2b(checksumBytes, 32).slice(0, 6 * 2);
|
|
20
|
+
return !!(0, lodash_isequal_1.default)(blakeHash, check);
|
|
21
|
+
}
|
|
22
|
+
exports.default = {
|
|
23
|
+
isValidAddress: function (address) {
|
|
24
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
25
|
+
if (addr.length !== 76) {
|
|
26
|
+
// Check if it has the basic requirements of an address
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
// Otherwise check each case
|
|
30
|
+
return verifyChecksum(addr);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base58_validator_js_1 = __importDefault(require("./base58_validator.js"));
|
|
7
|
+
const helpers_js_1 = require("../helpers.js");
|
|
8
|
+
exports.default = {
|
|
9
|
+
isValidAddress: function (address) {
|
|
10
|
+
return base58_validator_js_1.default.isValidAddress((0, helpers_js_1.getAddress)(address), {
|
|
11
|
+
maxLength: 44,
|
|
12
|
+
minLength: 43,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base58_js_1 = __importDefault(require("../crypto/base58.js"));
|
|
7
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
8
|
+
const helpers_js_1 = require("../helpers.js");
|
|
9
|
+
const prefix = new Uint8Array([6, 161, 159]);
|
|
10
|
+
function decodeRaw(buffer) {
|
|
11
|
+
let payload = buffer.slice(0, -4);
|
|
12
|
+
let checksum = buffer.slice(-4);
|
|
13
|
+
let newChecksum = utils_js_1.default.hexStr2byteArray(utils_js_1.default.sha256x2(utils_js_1.default.byteArray2hexStr(payload)));
|
|
14
|
+
if (checksum[0] ^ newChecksum[0] |
|
|
15
|
+
checksum[1] ^ newChecksum[1] |
|
|
16
|
+
checksum[2] ^ newChecksum[2] |
|
|
17
|
+
checksum[3] ^ newChecksum[3])
|
|
18
|
+
return;
|
|
19
|
+
return payload;
|
|
20
|
+
}
|
|
21
|
+
exports.default = {
|
|
22
|
+
isValidAddress(address) {
|
|
23
|
+
try {
|
|
24
|
+
let buffer = base58_js_1.default.decode((0, helpers_js_1.getAddress)(address));
|
|
25
|
+
let payload = decodeRaw(buffer);
|
|
26
|
+
if (!payload)
|
|
27
|
+
return false;
|
|
28
|
+
payload.slice(prefix.length);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
7
|
+
const helpers_js_1 = require("../helpers.js");
|
|
8
|
+
function decodeBase58Address(base58String) {
|
|
9
|
+
if (typeof (base58String) !== 'string') {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (base58String.length !== 34) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
let address;
|
|
16
|
+
try {
|
|
17
|
+
address = utils_js_1.default.base58(base58String);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const len = address.length;
|
|
23
|
+
const offset = len - 4;
|
|
24
|
+
const checkSum = address.slice(offset);
|
|
25
|
+
address = address.slice(0, offset);
|
|
26
|
+
const hash0 = utils_js_1.default.sha256(utils_js_1.default.byteArray2hexStr(address));
|
|
27
|
+
const hash1 = utils_js_1.default.hexStr2byteArray(utils_js_1.default.sha256(hash0));
|
|
28
|
+
const checkSum1 = hash1.slice(0, 4);
|
|
29
|
+
if (checkSum[0] === checkSum1[0] && checkSum[1] === checkSum1[1] && checkSum[2]
|
|
30
|
+
=== checkSum1[2] && checkSum[3] === checkSum1[3]) {
|
|
31
|
+
return address;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
const DefaultTronValidatorOpts = {
|
|
36
|
+
addressTypes: ['65']
|
|
37
|
+
};
|
|
38
|
+
exports.default = (opts) => ({
|
|
39
|
+
isValidAddress: function (address) {
|
|
40
|
+
const _opts = { ...DefaultTronValidatorOpts, ...opts };
|
|
41
|
+
const addr = decodeBase58Address((0, helpers_js_1.getAddress)(address));
|
|
42
|
+
if (!addr) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
if (addr.length !== 21) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return _opts.addressTypes.includes(addr[0].toString());
|
|
49
|
+
}
|
|
50
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const base_x_1 = __importDefault(require("base-x"));
|
|
7
|
+
const crc_1 = __importDefault(require("crc"));
|
|
8
|
+
const utils_js_1 = __importDefault(require("../crypto/utils.js"));
|
|
9
|
+
const helpers_js_1 = require("../helpers.js");
|
|
10
|
+
const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
11
|
+
const base32 = (0, base_x_1.default)(ALPHABET);
|
|
12
|
+
const regexp = new RegExp('^[' + ALPHABET + ']{56}$');
|
|
13
|
+
const ed25519PublicKeyVersionByte = (6 << 3);
|
|
14
|
+
function swap16(number) {
|
|
15
|
+
const lower = number & 0xFF;
|
|
16
|
+
const upper = (number >> 8) & 0xFF;
|
|
17
|
+
return (lower << 8) | upper;
|
|
18
|
+
}
|
|
19
|
+
exports.default = {
|
|
20
|
+
isValidAddress: function (address) {
|
|
21
|
+
const addr = (0, helpers_js_1.getAddress)(address);
|
|
22
|
+
const destinationTag = address.destinationTag;
|
|
23
|
+
const validAddress = regexp.test(addr) && this.verifyChecksum(addr);
|
|
24
|
+
return validAddress && this.verifyMemo(destinationTag);
|
|
25
|
+
},
|
|
26
|
+
verifyMemo(memo) {
|
|
27
|
+
if (!memo)
|
|
28
|
+
return true; // Optional
|
|
29
|
+
// Ensure it's a valid UTF-8 string and does not exceed 28 bytes
|
|
30
|
+
const encoder = new TextEncoder();
|
|
31
|
+
return encoder.encode(memo).length <= 28;
|
|
32
|
+
},
|
|
33
|
+
verifyChecksum: function (address) {
|
|
34
|
+
// based on https://github.com/stellar/js-stellar-base/blob/master/src/strkey.js#L126
|
|
35
|
+
var bytes = base32.decode(address);
|
|
36
|
+
if (bytes[0] !== ed25519PublicKeyVersionByte) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
const computedChecksum = utils_js_1.default.numberToHex(swap16(crc_1.default.crc16xmodem(bytes.slice(0, -2))), 4);
|
|
40
|
+
const checksum = utils_js_1.default.toHex(bytes.slice(-2));
|
|
41
|
+
return computedChecksum === checksum;
|
|
42
|
+
}
|
|
43
|
+
};
|