-
Notifications
You must be signed in to change notification settings - Fork 42
Perturbing/add msm bls #514
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
Perturbing/add msm bls #514
Conversation
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.
Haven't looked into ffi calls, just at the haskell portion of it.
I'll look into this in more depth once PR is out of draft
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
Thank you for taking a first look @lehins, much appreciated! The FFI is not working yet, I am getting some segmentation faults that I am trying to debug with valgrind. |
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 have quickly looked through the PR, but haven't spotted exactly what is wrong with this PR, but there is definitely something seriously wrong with memory management in this PR. All the non-deterministic test failures, which should not be the case with functionality that pretends to be "pure" serve as a good indicator that the functionality has a bug. Moreover, the fact that unrelated tests are affected is another strong indicator that something is seriously wrong!
I'll try to dig deeper into this functionality some time this week. Maybe I can help you get to the bottom of this.
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
e51ee19
to
53daf8e
Compare
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.
This looks OK, but there's a problem with inputs involving the zero point which needs to be fixed.
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
76dccab
to
368e488
Compare
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.
Hi, I am ready for another round of review (see also the PR description for an overview of the changes).
Thanks in advance, much appreciated.
I think it's best to not yet merge this PR, best to first let @kwxm implement it in plutus via an SRP stanza.
04f0f30
to
03c0c4e
Compare
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.
Looks mostly good to me.
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
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 had some questions and minor suggestions, but other than that it is looking good.
Needs a rebase on master
. Also could you please add all visible changes to the Changelog and bump minor version in both cabal file and in the latest section in the changlog file to 2.2.3.0
.
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
cardano-crypto-class/src/Cardano/Crypto/EllipticCurve/BLS12_381/Internal.hs
Outdated
Show resolved
Hide resolved
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.
This PR looks ready to go. Thank you for the hard work @perturbing!
@perturbing Could I ask you to cleanup the git commit history. Otherwise I am just gonna squash the whole 73 commits into one big one with very little info. |
* Remove cborg allow-newer stanza * Nix updates * Update haskellNix flake input --------- Co-authored-by: Neil Mayhew <[email protected]>
`cardano-binary-test` has been removed long time ago. It was converted to a `testlib` in `cardano-binary`
…1/Internal.hs Co-authored-by: Tobias Dammers <[email protected]>
…it length parameter
* Disable some C compiler warnings for basement on Windows * Use `ucrt64` for windows Co-Authored-By: Hamish Mackenzie <[email protected]>
db3815b
to
dc34187
Compare
I think the above is too messy, since the impact of this PR is small, I made a new PR here #536. Closing this one! |
Description
✨ PR: Add and Test Two MSM Implementations for BLS12-381
Summary
This PR introduces multi-scalar multiplication (MSM) for BLS12-381 elliptic curve points:
Changes
⚙️ Internal Module (
BLS12_381/Internal.hs
)blst_{p1s,p2s}_mult_pippenger
,blst_{p1s,p2s}_to_affine
, andc_blst_{p1s,p2s}_mult_pippenger_scratch_sizeof
withPointArray
,withScalarArray
,withAffineBlockArrayPtr
blsMSM
with filtering of points-at-infinity and zero scalars for safety and efficiency✅ Tests (
Test/EllipticCurve.hs
)blsMSM
against naive implementationsprop_randomFailsFinalVerify
to use group-based logic instead of point inequalityArbitrary
instance forPoint
blsZero
for better edge-case coverageChecklist
CHANGELOG.md
for the affected packages.New section is never added with the code changes. (See RELEASING.md)
.cabal
andCHANGELOG.md
files according to theversioning process.
.cabal
files for all affected packages are updated.If you change the bounds in a cabal file, that package itself must have a version increase. (See RELEASING.md)
.git-blame-ignore-revs