-
Notifications
You must be signed in to change notification settings - Fork 12.4k
Add missing tests to ECSDA #1248
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
6db5d6e
654b90b
9f6170e
1be1641
4f5abbb
2b3ab7c
c7373ef
22a38de
1ccf496
f2d2528
0d0df73
d83f04b
25a5823
fde2719
f5c8298
35907fa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,54 +14,54 @@ contract('ECDSA', function ([_, anyone]) { | |
| this.mock = await ECDSAMock.new(); | ||
| }); | ||
|
|
||
| context('recover with valid signature', function() { | ||
| context('with v0 signature', function() { | ||
| context('recover with valid signature', function () { | ||
| context('with v0 signature', function () { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't we have a case for v0 (and v1) signatures, where the version is incorrect?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think so. We check the version first, and if it's not 0/1/27/28, we return 0. It doesn't matter if the rest of the signature makes sense or not.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That's an internal detail though π I wanted to include that
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. alright. I kind-of thing that's a myth that you can (and should) keep your tests totally independent from the implementation. But I'll follow your advice here. One less magic number anyway. |
||
| // Signature generated outside ganache with method web3.eth.sign(signer, message) | ||
| const signer = '0x2cc1166f6212628a0deef2b33befb2187d35b86c'; | ||
| // eslint-disable-next-line max-len | ||
| const signature_without_version = '0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be892'; | ||
| context('with 00 as version value', function() { | ||
| const signatureWithoutVersion = '0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be892'; | ||
| context('with 00 as version value', function () { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please add an empty line before this
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. done |
||
| it('works', async function () { | ||
| // Signature generated outside ganache with method web3.eth.sign(signer, message) | ||
|
||
| const version = '00'; | ||
| const signature = signature_without_version + version; | ||
| const signature = signatureWithoutVersion + version; | ||
| (await this.mock.recover(TEST_MESSAGE, signature)).should.equal(signer); | ||
|
||
| }); | ||
| }); | ||
|
|
||
| context('with 27 as version value', function() { | ||
| context('with 27 as version value', function () { | ||
| it('works', async function () { | ||
| const version = '1b'; // 27 = 1b. | ||
| const signature = signature_without_version + version; | ||
| const version = '1b'; // 27 = 1b. | ||
| const signature = signatureWithoutVersion + version; | ||
| (await this.mock.recover(TEST_MESSAGE, signature)).should.equal(signer); | ||
| }); | ||
| }); | ||
| }); | ||
|
|
||
| context('with v1 signature', function() { | ||
| context('with v1 signature', function () { | ||
| const signer = '0x1e318623ab09fe6de3c9b8672098464aeda9100e'; | ||
| // eslint-disable-next-line max-len | ||
| const signature_without_version = '0x331fe75a821c982f9127538858900d87d3ec1f9f737338ad67cad133fa48feff48e6fa0c18abc62e42820f05943e47af3e9fbe306ce74d64094bdf1691ee53e0'; | ||
| const signatureWithoutVersion = '0x331fe75a821c982f9127538858900d87d3ec1f9f737338ad67cad133fa48feff48e6fa0c18abc62e42820f05943e47af3e9fbe306ce74d64094bdf1691ee53e0'; | ||
|
|
||
| context('with 01 as version value', function() { | ||
| context('with 01 as version value', function () { | ||
| it('works', async function () { | ||
| const version = '01'; | ||
| const signature = signature_without_version + version; | ||
| const signature = signatureWithoutVersion + version; | ||
| (await this.mock.recover(TEST_MESSAGE, signature)).should.equal(signer); | ||
| }); | ||
| }); | ||
|
|
||
| context('with 28 signature', function() { | ||
| context('with 28 signature', function () { | ||
| it('works', async function () { | ||
| const version = '1c'; // 28 = 1c. | ||
| const signature = signature_without_version + version; | ||
| const version = '1c'; // 28 = 1c. | ||
| const signature = signatureWithoutVersion + version; | ||
| (await this.mock.recover(TEST_MESSAGE, signature)).should.equal(signer); | ||
| }); | ||
| }); | ||
| }); | ||
|
|
||
| context('using web3.eth.sign', function() { | ||
| context('with correct signature', function() { | ||
| context('using web3.eth.sign', function () { | ||
| context('with correct signature', function () { | ||
| it('returns signer address', async function () { | ||
| // Create the signature | ||
| const signature = signMessage(anyone, TEST_MESSAGE); | ||
|
|
@@ -74,7 +74,7 @@ contract('ECDSA', function ([_, anyone]) { | |
| }); | ||
| }); | ||
|
|
||
| context('with wrong signature', function() { | ||
| context('with wrong signature', function () { | ||
| it('does not return signer address', async function () { | ||
| // Create the signature | ||
| const signature = signMessage(anyone, TEST_MESSAGE); | ||
|
|
@@ -86,20 +86,20 @@ contract('ECDSA', function ([_, anyone]) { | |
| }); | ||
| }); | ||
|
|
||
| context('recover with invalid signature', function() { | ||
| context('with wrong version', function() { | ||
| context('recover with invalid signature', function () { | ||
| context('with wrong version', function () { | ||
| it('returns 0', async function () { | ||
| // The last two hex digits are the signature version. | ||
| // The only valid values are 0, 1, 27 and 28. | ||
| // eslint-disable-next-line max-len | ||
| const dummy_signature_without_version = '0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be892'; | ||
| const signature = dummy_signature_without_version + '02'; | ||
| const dummySignatureWithoutVersion = '0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be892'; | ||
| const signature = dummySignatureWithoutVersion + '02'; | ||
| (await this.mock.recover(TEST_MESSAGE, signature)).should.equal( | ||
| '0x0000000000000000000000000000000000000000'); | ||
| }); | ||
| }); | ||
|
|
||
| context('with small hash', function() { | ||
| context('with small hash', function () { | ||
| // @TODO - remove `skip` once we upgrade to solc^0.5 | ||
| it.skip('reverts', async function () { | ||
| // Create the signature | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While we're at it, can you rename this to
this.ecdsaor something more descriptive?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done.