-
Notifications
You must be signed in to change notification settings - Fork 7.8k
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
ext/gmp: add test for uses of gmp_pow with number sizes commonly used in cryptography #16896
Conversation
Thank you for the PR! Regarding the test name: it's okay as is, but might also be called gmp_pow_crypto.phpt or so. |
I don't care about the name, so if you really like the descriptive one, I'll simply rename it. |
@brainpower, I think we need to fix the actual issue first (very important wrt |
Hi, thanks you two for tackling this! I can help here add some unit cases of "real" crypto if this is still useful after the newest patch (and its tests) landed. Common operations would include additions and multiplications on the curves. Using a more applied perspective, one could add examples of signatures, committments and zero-knowledge proofs. |
@famoser, more test cases (especially if they are about real world usage) are certainly welcome! Not only to serve as regression tests, but also to explain/show-case some of the algorithms typically used for cryptographic purposes. |
A proposal for a test, which I would place in
Can be tested by executing |
I've updated the PR to include the posted test, with the small change of splitting the long description into a And decided to keep my test, too, since it had still failed on the master I had before rebasing (c84b7ed), |
Thank you for the cleanup with the
Yes you are right, I do not actually use It would therefore make sense to also either add elliptic curve operations, or try to test the different type of executed operations in such code (... which are not already tested in my testcase). For example, another function I never use is Another thing we might tackle is testing the overload operators: While |
The operator overloads seem to be defined here: Line 405 in 8ac8ec4
(the constants meaning around lines 2216 and 2095 of Line 2216 in 8ac8ec4
So the overloaded operators should be: |
To make some progress here, I propose:
Then, I see two future PRs:
Reasoning:
|
Makes sense. |
LGTM. So I guess you may now remove the draft status of the PR, so that @Girgias can take a look? |
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.
I think it would be good to add a similar test for the overloaded operators.
Would you do this now, and if so, for what operators? Or what do you think about the proposed approach here: #16896 (comment) |
That approach makes sense, adding more tests that cover most operators is best. |
So you would be OK with doing this in a future PR (by the reasoning of #16896 (comment)), and merge this PR in the state as it is now? |
Sure, does not need to all be in the same one. |
@brainpower if you also agree, could you please unset the draft / WIP state of the PR? |
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.
One question, but otherwise LGTM
ext/gmp/tests/gmp_cryptography.phpt
Outdated
var_dump((string) gmp_pow($big_128, 2)); | ||
var_dump((string) gmp_pow($big_128, 3)); | ||
#var_dump((string) gmp_pow($big_128, 65537)); | ||
|
||
var_dump((string) gmp_pow($big_256, 2)); | ||
var_dump((string) gmp_pow($big_256, 3)); | ||
#var_dump((string) gmp_pow($big_256, 65537)); | ||
|
||
var_dump((string) gmp_pow($big_384, 2)); | ||
var_dump((string) gmp_pow($big_384, 3)); | ||
#var_dump((string) gmp_pow($big_384, 65537)); | ||
|
||
var_dump((string) gmp_pow($big_521, 2)); | ||
var_dump((string) gmp_pow($big_521, 3)); | ||
#var_dump((string) gmp_pow($big_521, 65537)); |
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.
Normal that the 3rd call in each block is commented out?
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.
That was some experiment by me, that was not meant to be committed. Thought I had that stashed, but seems like I hadn't.
I've removed them.
with common number sizes used there
So GitHub is just being crap today, it somehow merged it as 47942be but does not close the PR.... |
… in cryptography (php#16896) With common number sizes used there --------- Co-authored-by: Florian Moser <[email protected]>
In #16870 I suggested testing common operations performed by crypto implementations,
since those are one of the primary use cases of "big numbers", thus probably GMP.
During my troubleshooting the issue I found that when doing Elyptic Curve calculations,
it seems squaring and cubing Keys or Points on the Curve is a common operation.
So test squaring and cubing numbers which are of typical ECC key sizes.
I'm no crypto expert, so I don't really know much which other common crypto operations could be added,
but this should be a start.
This test succeeds on versions without the new checks introduced with #16384 ,
but currently fails on master.
It succeeds when applying the proposed fix in #16884.