Context
bron-crypto already implements DKLS23 signing with two backends:
signing_softspoken
signing_bbot
In both flows, the message is only used in the last local signing step.
So part of the signing work can be done before the message is known.
Problem
Today the repo only exposes the full signing flow.
It does not expose a way to:
- precompute message-independent signing material ahead of time
- keep the result of that work
- finish the signature later once the message is known
So users who want presigning do not have a clear flow in the library. They have to use the full signing protocol even though the protocol already separates:
- work that does not depend on the message
- work that depends on the message
Suggested solution
Add a presigning flow next to the current signing flow.
This follows the direction described by Groth and Shoup for presignatures:
https://eprint.iacr.org/2021/1330.pdf
At a high level:
- each DKLS23 backend should expose a way to run all rounds that do not need the message yet
- that step should return a presignature
- the presignature should keep the secret values needed for the last step
- later, once the message is known, the caller should pass the presignature, the message, and a public randomizer to a finalize step. The finalize step should hash the message itself. It should not accept a pre-hashed digest. The finalize step should also rerandomize the presignature before producing the partial signature. The randomizer should be public and unpredictable at the time of finalization.
- that finalize step should return a normal DKLS23 partial signature, and delete the used presignature, so it can only be used once.
Aggregate should stay unchanged
Feedback
Please let me know if this looks like the right scope and direction for the presignature work.
Please also let me know which branch or commit would be the best starting point for this work.
Context
bron-cryptoalready implements DKLS23 signing with two backends:signing_softspokensigning_bbotIn both flows, the message is only used in the last local signing step.
So part of the signing work can be done before the message is known.
Problem
Today the repo only exposes the full signing flow.
It does not expose a way to:
So users who want presigning do not have a clear flow in the library. They have to use the full signing protocol even though the protocol already separates:
Suggested solution
Add a presigning flow next to the current signing flow.
This follows the direction described by Groth and Shoup for presignatures:
https://eprint.iacr.org/2021/1330.pdf
At a high level:
Aggregateshould stay unchangedFeedback
Please let me know if this looks like the right scope and direction for the presignature work.
Please also let me know which branch or commit would be the best starting point for this work.