PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-cspr/test/unit/lib
Просмотр файла: util.ts
import assert from 'assert';
import * as should from 'should';
import * as Utils from '../../../src/lib/utils';
import { KeyPair } from '../../../src/lib/keyPair';
import { randomBytes } from 'crypto';
describe('CSPR util library', function () {
describe('validation', function () {
it('should fail to validate invalid private keys', function () {
const invalidPrvKeys = [
'xprv9s21ZrQH143K2J9hbmRNqDXo5aQ3RXvycz8VLchc4dus6r7QekaRWsPT6WPirE67Ps5jae2Ti3webhmFDarJG76h3jFqeg8u3WzeisjS2qwXYZ',
'xpub661MyMwAqRbcFjmMuHyjyZsQYGD6m8JZseFXpjAc1djoKvnMiJvqCeGu4cvxDNXstgPTsP1yeXewvUf6rUubvuG8mi9yPEb7hHVVCqRnhu7',
'02620C05D663B1585616C79A482B8F1F27ED9FC24719EEB358E6A085C285732632', // private key
'123',
];
for (const prv of invalidPrvKeys) {
should.doesNotThrow(() => Utils.isValidPrivateKey(prv));
Utils.isValidPrivateKey(prv).should.be.false();
}
});
it('should validate private keys', function () {
const validPrvKeys = [
'xprv9s21ZrQH143K2J9hbmRNqDXo5aQ3RXvycz8VLchc4dus6r7QekaRWsPT6WPirE67Ps5jae2Ti3webhmFDarJG76h3jFqeg8u3WzeisjS2qw',
'xprv9s21ZrQH143K2SDygJstGsPjHNztrAP6RxNH3YiBetww4WtA7hZxEaSFdkzjsE7kAik4c48Mp5q3Bgsaqv6wEyUZ6rB6odvw7Q2u1WF2RP9',
'1E7D588F5B3519FEE3B686E4A42E7275E4384DF807AE12165323B5FCEECB402A',
'DBDE50C2141EEE3B50F097DB4893BD20C42171813DF1B8B19ABA29A2028E3F51',
];
for (const prv of validPrvKeys) {
Utils.isValidPrivateKey(prv).should.be.true();
}
});
it('should fail to validate invalid public keys', function () {
const invalidPubKeys = [
'xpub661MyMwAqRbcFjmMuHyjyZsQYGD6m8JZseFXpjAc1djoKvnMiJvqCeGu4cvxDNXstgPTsP1yeXewvUf6rUubvuG8mi9yPEb7hHVVCqRnhu7XYZ',
'xprv9s21ZrQH143K2J9hbmRNqDXo5aQ3RXvycz8VLchc4dus6r7QekaRWsPT6WPirE67Ps5jae2Ti3webhmFDarJG76h3jFqeg8u3WzeisjS2qw',
'1E7D588F5B3519FEE3B686E4A42E7275E4384DF807AE12165323B5FCEECB402A', // private key
'123',
];
for (const pub of invalidPubKeys) {
should.doesNotThrow(() => Utils.isValidPublicKey(pub));
Utils.isValidPublicKey(pub).should.be.false();
}
});
it('should validate pub keys', function () {
const validPubKeys = [
'xpub661MyMwAqRbcGEkHtJzvg4PRy9i6YzYewjr6sqXhCU8gyrZtdH88BMrdzU3wo1Q3TodAyMU3aPaVAVTPvkgpA3aMvN9hQUu6x7xU2E68Drz',
'xpub661MyMwAqRbcFjmMuHyjyZsQYGD6m8JZseFXpjAc1djoKvnMiJvqCeGu4cvxDNXstgPTsP1yeXewvUf6rUubvuG8mi9yPEb7hHVVCqRnhu7',
'02620C05D663B1585616C79A482B8F1F27ED9FC24719EEB358E6A085C285732632',
'021E3BC1DE4255255BC799983F0A8384DAD84B3730BD95996AB95349C584B02B79',
];
for (const pub of validPubKeys) {
Utils.isValidPublicKey(pub).should.be.true();
}
});
it('should fail to validate invalid addresses', function () {
const invalidAddresses = [
'xpub661MyMwAqRbcFjmMuHyjyZsQYGD6m8JZseFXpjAc1djoKvnMiJvqCeGu4cvxDNXstgPTsP1yeXewvUf6rUubvuG8mi9yPEb7hHVVCqRnhu7',
'X03DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3',
'abc',
];
for (const address of invalidAddresses) {
should.doesNotThrow(() => Utils.isValidAddress(address));
Utils.isValidAddress(address).should.be.false();
}
});
it('should validate addresses', function () {
const validAddresses = [
'0203DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3',
'020385D724A9A3E7E32BADF40F3279AF5A190CB2CFCAB6639BF532A0069E0E3824D0',
'02029E23C8a1EDB0a0c5e78C086A4829611202A5cDEDF8aBeC45C72bA8e46f8A79e4',
'01513fa90c1a74c34a8958dd86055e9736edb1ead918bd4d4d750ca851946be7aa', // ed25519
];
for (const address of validAddresses) {
Utils.isValidAddress(address).should.be.true();
}
});
it('should fail to verify invalid message signature', function () {
const invalidSignature = '01d2e4736b8ff27a1d23be876950afb6991dad455ae351efcd036f95a1f7fe5a';
const data = '';
const publicKey = '018267d68f8d249b1430551ecc7b4c176d66f2ba2bf98d5547e7c3accc99375e53';
assert.throws(() => Utils.verifySignature(invalidSignature, data, publicKey));
});
it('should fail to verify invalid tx signature', function () {
const invalidSignature =
'0201d2e4736b8ff27a1d23be876950afb6991dad455ae351efcd036f95a1f7fe5a01d2e4736b8ff27a1d23be876950afb6991dad455ae351efcd036f95a1f7fe5a';
const data = '';
const publicKey = '018267d68f8d249b1430551ecc7b4c176d66f2ba2bf98d5547e7c3accc99375e53';
assert.throws(() => Utils.verifySignature(invalidSignature, data, publicKey));
});
it('should verify valid message signature', function () {
const keyPair = new KeyPair();
const messageToSign = Buffer.from(randomBytes(32)).toString('hex');
const { signature } = Utils.signMessage(keyPair, messageToSign);
should.doesNotThrow(() =>
Utils.verifySignature(Buffer.from(signature).toString('hex'), messageToSign, keyPair.getKeys().pub)
);
});
it('should fail to validate invalid address with payment id', function () {
const invalidAddresses = [
'0203DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3?transferId=x',
'0203DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3?memoId=1',
'X0203DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3?transferId=1',
];
for (const address of invalidAddresses) {
should.doesNotThrow(() => Utils.isValidAddress(address));
Utils.isValidAddressWithPaymentId(address).should.be.false();
}
});
it('should validate address with payment id', function () {
const validAddresses = [
'0203DC13CBBF29765C7745578D9E091280522F37684EF0E400B86B1C409BC454F1F3?transferId=0',
'020385D724A9A3E7E32BADF40F3279AF5A190CB2CFCAB6639BF532A0069E0E3824D0?transferId=1',
'01513fa90c1a74c34a8958dd86055e9736edb1ead918bd4d4d750ca851946be7aa?transferId=999999999', // ed25519
];
for (const address of validAddresses) {
Utils.isValidAddressWithPaymentId(address).should.be.true();
}
});
it('should validate hex strings', function () {
const validAddresses = [
'02029E23C8a1EDB0a0c5e78C086A4829611202A5cDEDF8aBeC45C72bA8e46f8A79e4', // mixed cased
'020385D724A9A3E7E32BADF40F3279AF5A190CB2CFCAB6639BF532A0069E0E3824D0', // uppercase
'020385d724a9a3e7e32badf40f3279af5a190cb2cfcab6639bf532a0069e0e3824d0', // lowercase
'01513fa90c1a74c34a8958dd86055e9736edb1ead918bd4d4d750ca851946be7aa', // ed25519
];
for (const address of validAddresses) {
Utils.isValidHex(address).should.be.true();
}
});
it('should fail to validate invalid hex strings', function () {
const validAddresses = [
'02029E23C8a1EDB0a0c5e78C086A48296112==G5cDEDF8aBeC45C72bA8e46f8A79e4',
'020385D724A9A3E7E32BADF40F3279AF5A190CB2HCFCAB6639BF532A0==9E0E3824D0',
'020385d724a9a3e7e32badf40f327tfcab6639bf532a0069e0e3824d0',
];
for (const address of validAddresses) {
Utils.isValidHex(address).should.be.false();
}
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!