Now handles encrypted private key.
This commit is contained in:
parent
b95798d271
commit
6c85cffb20
2 changed files with 33 additions and 12 deletions
|
|
@ -109,6 +109,7 @@
|
||||||
amount: '',
|
amount: '',
|
||||||
coin: '',
|
coin: '',
|
||||||
copayInvitation: '',
|
copayInvitation: '',
|
||||||
|
encryptedPrivateKey: '',
|
||||||
isValid: false,
|
isValid: false,
|
||||||
label: '',
|
label: '',
|
||||||
legacyAddress: '',
|
legacyAddress: '',
|
||||||
|
|
@ -250,13 +251,14 @@
|
||||||
var addressLowerCase = address.toLowerCase();
|
var addressLowerCase = address.toLowerCase();
|
||||||
// Just a rough validation to exclude half-pasted addresses, or things obviously not bitcoin addresses
|
// Just a rough validation to exclude half-pasted addresses, or things obviously not bitcoin addresses
|
||||||
//var cashAddrRe = /^((?:q|p)[a-z0-9]{41})|((?:Q|P)[A-Z0-9]{41})$/;
|
//var cashAddrRe = /^((?:q|p)[a-z0-9]{41})|((?:Q|P)[A-Z0-9]{41})$/;
|
||||||
var copayRe = /^[0-9A-HJ-NP-Za-km-z]{70,80}$/;
|
var copayInvitationRe = /^[0-9A-HJ-NP-Za-km-z]{70,80}$/;
|
||||||
//var legacyRe = /^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$/;
|
//var legacyRe = /^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$/;
|
||||||
//var legacyTestnetRe = /^[mn][a-km-zA-HJ-NP-Z1-9]{25,34}$/;
|
//var legacyTestnetRe = /^[mn][a-km-zA-HJ-NP-Z1-9]{25,34}$/;
|
||||||
var privateKeyUncompressedRe = /^5[1-9A-HJ-NP-Za-km-z]{50}$/;
|
var privateKeyEncryptedRe = /^6P[1-9A-HJ-NP-Za-km-z]{56}$/;
|
||||||
var privateKeyUncompressedTestnetRe = /^9[1-9A-HJ-NP-Za-km-z]{50}$/;
|
var privateKeyForUncompressedPublicKeyRe = /^5[1-9A-HJ-NP-Za-km-z]{50}$/;
|
||||||
var privateKeyCompressedRe = /^[KL][1-9A-HJ-NP-Za-km-z]{51}$/;
|
var privateKeyForUncompressedPublicKeyTestnetRe = /^9[1-9A-HJ-NP-Za-km-z]{50}$/;
|
||||||
var privateKeyCompressedTestnetRe = /^[c][1-9A-HJ-NP-Za-km-z]{51}$/;
|
var privateKeyForCompressedPublicKeyRe = /^[KL][1-9A-HJ-NP-Za-km-z]{51}$/;
|
||||||
|
var privateKeyForCompressedPublicKeyTestnetRe = /^[c][1-9A-HJ-NP-Za-km-z]{51}$/;
|
||||||
|
|
||||||
var bitpayAddrMainnet = bitpayAddrOnMainnet(address);
|
var bitpayAddrMainnet = bitpayAddrOnMainnet(address);
|
||||||
var cashAddrTestnet = cashAddrOnTestnet(addressLowerCase);
|
var cashAddrTestnet = cashAddrOnTestnet(addressLowerCase);
|
||||||
|
|
@ -267,54 +269,65 @@
|
||||||
parsed.address = addressLowerCase;
|
parsed.address = addressLowerCase;
|
||||||
parsed.coin = 'bch';
|
parsed.coin = 'bch';
|
||||||
parsed.legacyAddress = cashAddrTestnet.toString();
|
parsed.legacyAddress = cashAddrTestnet.toString();
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (cashAddrMainnet) {
|
} else if (cashAddrMainnet) {
|
||||||
parsed.address = addressLowerCase;
|
parsed.address = addressLowerCase;
|
||||||
parsed.coin = 'bch';
|
parsed.coin = 'bch';
|
||||||
parsed.legacyAddress = cashAddrMainnet.toString();
|
parsed.legacyAddress = cashAddrMainnet.toString();
|
||||||
parsed.testnet = false;
|
parsed.testnet = false;
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (bitcore.Address.isValid(address, 'livenet')) {
|
} else if (bitcore.Address.isValid(address, 'livenet')) {
|
||||||
parsed.address = address;
|
parsed.address = address;
|
||||||
parsed.legacyAddress = address;
|
parsed.legacyAddress = address;
|
||||||
parsed.testnet = false;
|
parsed.testnet = false;
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (bitcore.Address.isValid(address, 'testnet')) {
|
} else if (bitcore.Address.isValid(address, 'testnet')) {
|
||||||
parsed.address = address;
|
parsed.address = address;
|
||||||
parsed.legacyAddress = address;
|
parsed.legacyAddress = address;
|
||||||
parsed.testnet = true;
|
parsed.testnet = true;
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (bitpayAddrMainnet) {
|
} else if (bitpayAddrMainnet) {
|
||||||
parsed.address = address;
|
parsed.address = address;
|
||||||
parsed.coin = 'bch';
|
parsed.coin = 'bch';
|
||||||
parsed.legacyAddress = bitpayAddrMainnet.toString();
|
parsed.legacyAddress = bitpayAddrMainnet.toString();
|
||||||
parsed.testnet = false;
|
parsed.testnet = false;
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (copayRe.test(address) ) {
|
} else if (copayInvitationRe.test(address) ) {
|
||||||
parsed.copayInvitation = address;
|
parsed.copayInvitation = address;
|
||||||
|
parsed.isValid = true;
|
||||||
|
|
||||||
} else if (privateKeyUncompressedRe.test(address) || privateKeyCompressedRe.test(address)) {
|
} else if (privateKeyForUncompressedPublicKeyRe.test(address) || privateKeyForCompressedPublicKeyRe.test(address)) {
|
||||||
privateKey = address;
|
privateKey = address;
|
||||||
try {
|
try {
|
||||||
new bitcore.PrivateKey(privateKey, 'livenet');
|
new bitcore.PrivateKey(privateKey, 'livenet');
|
||||||
parsed.wifPrivateKey = privateKey;
|
parsed.wifPrivateKey = privateKey;
|
||||||
parsed.testnet = false;
|
parsed.testnet = false;
|
||||||
|
parsed.isValid = true;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
} else if (privateKeyUncompressedTestnetRe.test(address) || privateKeyCompressedTestnetRe.test(address)) {
|
} else if (privateKeyForUncompressedPublicKeyTestnetRe.test(address) || privateKeyForCompressedPublicKeyTestnetRe.test(address)) {
|
||||||
privateKey = address;
|
privateKey = address;
|
||||||
try {
|
try {
|
||||||
new bitcore.PrivateKey(privateKey, 'testnet');
|
new bitcore.PrivateKey(privateKey, 'testnet');
|
||||||
parsed.wifPrivateKey = privateKey;
|
parsed.wifPrivateKey = privateKey;
|
||||||
parsed.testnet = true;
|
parsed.testnet = true;
|
||||||
|
parsed.isValid = true;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
|
} else if (privateKeyEncryptedRe.test(address)) {
|
||||||
|
parsed.encryptedPrivateKey = address;
|
||||||
|
parsed.isValid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
parsed.isValid = !!parsed.url; // BIP72
|
||||||
}
|
}
|
||||||
|
|
||||||
// If has no address, must have Url.
|
|
||||||
parsed.isValid = !!(parsed.address || parsed.url || parsed.copayInvitation || parsed.wifPrivateKey);
|
|
||||||
|
|
||||||
return parsed;
|
return parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,14 @@ fdescribe('bitcoinUriService', function() {
|
||||||
expect(parsed.isValid).toBe(false);
|
expect(parsed.isValid).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('private key encrypted with BIP38', function() {
|
||||||
|
|
||||||
|
var parsed = bitcoinUriService.parse('6PRN5nEDmX842gsBzJryPu8Tw5kcsaQq1GPLcjVQPcEStvbFAtz11JX9pX');
|
||||||
|
|
||||||
|
expect(parsed.isValid).toBe(true);
|
||||||
|
expect(parsed.encryptedPrivateKey).toBe('6PRN5nEDmX842gsBzJryPu8Tw5kcsaQq1GPLcjVQPcEStvbFAtz11JX9pX');
|
||||||
|
});
|
||||||
|
|
||||||
it('private key for compressed pubkey mainnet', function() {
|
it('private key for compressed pubkey mainnet', function() {
|
||||||
|
|
||||||
var parsed = bitcoinUriService.parse('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ');
|
var parsed = bitcoinUriService.parse('5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue