BIP459: Add FullAgg (DahLIAS) module #1754

pull fjahr wants to merge 8 commits into bitcoin-core:master from fjahr:dahlias changing 22 files +3711 −42
  1. fjahr commented at 11:02 PM on September 25, 2025: contributor

    This PR adds a FullAgg module implementing full aggregation of BIP 340 signatures using the interactive aggregate signature scheme (DahLIAS).

    The implementation follows the BIP459.

  2. fjahr force-pushed on Sep 25, 2025
  3. fjahr force-pushed on Sep 26, 2025
  4. fjahr force-pushed on Sep 26, 2025
  5. fjahr force-pushed on Dec 16, 2025
  6. w0xlt commented at 12:42 PM on May 8, 2026: contributor

    Concept ACK

  7. fjahr force-pushed on Jul 10, 2026
  8. fjahr renamed this:
    Add FullAgg module
    Add FullAgg (DahLIAS) module
    on Jul 10, 2026
  9. fjahr force-pushed on Jul 10, 2026
  10. fjahr force-pushed on Jul 11, 2026
  11. fjahr force-pushed on Jul 11, 2026
  12. fjahr commented at 12:30 PM on July 11, 2026: contributor

    The last commit here now is implementing the code sharing between the musig and the fullagg model. That is one of the first questions I have when reviewers will take a closer look here: Do we want to do it this way? And do we event want to do this at all? I think it's pretty good but also the amount of LOC saving has been a bit underwhelming at the end.

    A second thing that I changed and that I would be interested in high-level feedback on: I realized that the fullagg module really doesn't need any of the Schnorr module code, it just depends on extrakeys. I fixed this in the config where I still had the schnorr module as dependency of the fullagg module. However, in practical terms they will likely always be active together and it's also a bit awkward that I still have the module named schnorrsig_fullagg which I took over from the Halfagg PR where it's schnorrsig_halfagg. The most correct way would be to remove the schnorrsig part here but I am also unsatisfied with the asymmetry this would create 🙈 If anyone has opinions on this I am happy to hear them.

  13. fjahr marked this as ready for review on Jul 11, 2026
  14. fjahr renamed this:
    Add FullAgg (DahLIAS) module
    BIP459: Add FullAgg (DahLIAS) module
    on Jul 11, 2026
  15. fjahr force-pushed on Jul 11, 2026
  16. fjahr force-pushed on Aug 15, 2026
  17. fjahr commented at 11:10 AM on August 15, 2026: contributor

    The latest push is a rebase but also does a bunch of renaming and rewording in response to the naming discussion in the BIP, e.g. dropping the "FullAgg of Schnorr signatures" framing.

  18. fjahr commented at 11:24 AM on August 15, 2026: contributor

    Split out the first commit which is a pure refactor: https://github.com/bitcoin-core/secp256k1/pull/1915

  19. real-or-random added the label feature on Aug 15, 2026
  20. theStack referenced this in commit 86c7cbaf5a on Aug 19, 2026
  21. fjahr force-pushed on Aug 24, 2026
  22. fjahr commented at 8:32 PM on August 24, 2026: contributor

    Rebased after #1915 was merged

  23. fjahr force-pushed on Aug 26, 2026
  24. fjahr commented at 7:42 PM on August 26, 2026: contributor

    Pulled in additional test vectors added based on feedback on the BIP

  25. theStack commented at 1:48 PM on September 15, 2026: contributor

    Haven't had a deep look on the code yet (still catching up on BIP reading), but giving my two cents on the high-level questions:

    The last commit here now is implementing the code sharing between the musig and the fullagg model. That is one of the first questions I have when reviewers will take a closer look here: Do we want to do it this way? And do we event want to do this at all? I think it's pretty good but also the amount of LOC saving has been a bit underwhelming at the end.

    Good question, I think there could be made convincing arguments for both sharing and not sharing. One one hand deduplicating code is always nice (even if the overall LOC saving is not that large, the modules ideally become more readable overall), on the other hand this opens up a few questions regarding code organization, naming and scope (e.g. I wouldn't expect to find functions dealing with partial signatures in a module called "nonce_common"). Unless others strongly push back, I think a separate PR which creates the shared module (only moving from musig) could be already opened now for further discussion, in order to keep this PR focused on the new functionality.

    A second thing that I changed and that I would be interested in high-level feedback on: I realized that the fullagg module really doesn't need any of the Schnorr module code, it just depends on extrakeys. I fixed this in the config where I still had the schnorr module as dependency of the fullagg module. However, in practical terms they will likely always be active together and it's also a bit awkward that I still have the module named schnorrsig_fullagg which I took over from the Halfagg PR where it's schnorrsig_halfagg. The most correct way would be to remove the schnorrsig part here but I am also unsatisfied with the asymmetry this would create 🙈 If anyone has opinions on this I am happy to hear them.

    I'd slightly lean on keeping the schnorrsig_ prefix, to indicate the type of signature which is aggregated (even if the aggregation modules indeed don't depend on the regular schnorrsig module).

  26. apoelstra commented at 1:51 PM on September 15, 2026: contributor

    65e57481c4c5199c6beb1a0a6272ae739a22bf5a needs rebase

  27. fjahr force-pushed on Sep 15, 2026
  28. fjahr commented at 9:51 PM on September 15, 2026: contributor

    Unless others strongly push back, I think a separate PR which creates the shared module (only moving from musig) could be already opened now for further discussion, in order to keep this PR focused on the new functionality.

    Sounds good to me, I have dropped the commit here and instead opened #1938. That would be a good place for people to push back strongly if they feel like it :)

    I'd slightly lean on keeping the schnorrsig_ prefix, to indicate the type of signature which is aggregated (even if the aggregation modules indeed don't depend on the regular schnorrsig module).

    Thanks, I actually already removed the prefix in some push earlier but my comment didn't make that clear enough since I hadn't really made up my mind when I wrote it. I will wait for 1-2 more opinions before I put them back. My feeling is that @real-or-random might lean the other way :)

    needs rebase

    Done

  29. fullagg: Add module d1bf3236f5
  30. fullagg: Add include file d5276a2266
  31. fullagg: Add example 1e4959f8d0
  32. fullagg: Add to CI e7435ba849
  33. fullagg: Add to build system 59e68180a6
  34. fullagg: Add docs 613aeb691f
  35. fullagg: Add benchmarks 45a859a8b1
  36. fullagg: Add ctime tests 1af6f99027
  37. fjahr force-pushed on Sep 21, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/secp256k1. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-09-22 13:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me