Validate ECC public keys
This commit is contained in:
parent
d4d94c6fb7
commit
cb3f644708
|
@ -177,7 +177,14 @@ Curve.prototype.keyFromSecret = function (secret) { // Only for ed25519
|
|||
};
|
||||
|
||||
Curve.prototype.keyFromPublic = function (pub) {
|
||||
return new KeyPair(this, { pub: pub });
|
||||
const keyPair = new KeyPair(this, { pub: pub });
|
||||
if (
|
||||
this.keyType === enums.publicKey.ecdsa &&
|
||||
keyPair.keyPair.validate().result !== true
|
||||
) {
|
||||
throw new Error('Invalid elliptic public key');
|
||||
}
|
||||
return keyPair;
|
||||
};
|
||||
|
||||
Curve.prototype.genKeyPair = async function () {
|
||||
|
|
|
@ -223,7 +223,17 @@ describe('Elliptic Curve Cryptography', async function () {
|
|||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
]);
|
||||
const secp256k1_dummy_point = new Uint8Array([
|
||||
const secp256k1_point = new Uint8Array([
|
||||
0x04,
|
||||
0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC,
|
||||
0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07,
|
||||
0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
|
||||
0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
|
||||
0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65,
|
||||
0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08, 0xA8,
|
||||
0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19,
|
||||
0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4, 0xB8]);
|
||||
const secp256k1_invalid_point = new Uint8Array([
|
||||
0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
@ -233,7 +243,7 @@ describe('Elliptic Curve Cryptography', async function () {
|
|||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||
const secp256k1_invalid_point = new Uint8Array([
|
||||
const secp256k1_invalid_point_format = new Uint8Array([
|
||||
0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
@ -255,13 +265,18 @@ describe('Elliptic Curve Cryptography', async function () {
|
|||
'secp256k1', 8, [], [], [], []
|
||||
)).to.be.rejectedWith(Error, /Unknown point format/),
|
||||
expect(verify_signature(
|
||||
'secp256k1', 8, [], [], [], secp256k1_invalid_point
|
||||
'secp256k1', 8, [], [], [], secp256k1_invalid_point_format
|
||||
)).to.be.rejectedWith(Error, /Unknown point format/)
|
||||
]);
|
||||
});
|
||||
it('Invalid point', function (done) {
|
||||
expect(verify_signature(
|
||||
'secp256k1', 8, [], [], [], secp256k1_invalid_point
|
||||
)).to.be.rejectedWith(Error, /Invalid elliptic public key/).notify(done);
|
||||
});
|
||||
it('Invalid signature', function (done) {
|
||||
expect(verify_signature(
|
||||
'secp256k1', 8, [], [], [], secp256k1_dummy_point
|
||||
'secp256k1', 8, [], [], [], secp256k1_point
|
||||
)).to.eventually.be.false.notify(done);
|
||||
});
|
||||
|
||||
|
@ -331,11 +346,21 @@ describe('Elliptic Curve Cryptography', async function () {
|
|||
]);
|
||||
const secp256k1_point = new Uint8Array([
|
||||
0x04,
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC,
|
||||
0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07,
|
||||
0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
|
||||
0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
|
||||
0x48, 0x3A, 0xDA, 0x77, 0x26, 0xA3, 0xC4, 0x65,
|
||||
0x5D, 0xA4, 0xFB, 0xFC, 0x0E, 0x11, 0x08, 0xA8,
|
||||
0xFD, 0x17, 0xB4, 0x48, 0xA6, 0x85, 0x54, 0x19,
|
||||
0x9C, 0x47, 0xD0, 0x8F, 0xFB, 0x10, 0xD4, 0xB8]);
|
||||
const secp256k1_invalid_point = new Uint8Array([
|
||||
0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
||||
|
@ -354,6 +379,11 @@ describe('Elliptic Curve Cryptography', async function () {
|
|||
'secp256k1', 2, 7, [], [], [], []
|
||||
)).to.be.rejectedWith(Error, /Unknown point format/).notify(done);
|
||||
});
|
||||
it('Invalid elliptic public key', function (done) {
|
||||
expect(decrypt_message(
|
||||
'secp256k1', 2, 7, secp256k1_value, secp256k1_invalid_point, secp256k1_data, []
|
||||
)).to.be.rejectedWith(Error, /Invalid elliptic public key/).notify(done);
|
||||
});
|
||||
it('Invalid key data integrity', function (done) {
|
||||
expect(decrypt_message(
|
||||
'secp256k1', 2, 7, secp256k1_value, secp256k1_point, secp256k1_data, []
|
||||
|
|
Loading…
Reference in New Issue
Block a user