poly1305

The Poly1305 message authentication code (docs.ppad.tech/poly1305).
git clone git://git.ppad.tech/poly1305.git
Log | Files | Refs | README | LICENSE

commit 1c50a555ab3e4077236aa4d480e4fb3e251e60e0
parent 9761d72bf0fd0bda80d48c1b3ce77b83f8c25dc6
Author: Jared Tobin <jared@jtobin.io>
Date:   Sun, 28 Dec 2025 16:24:14 -0330

release: v0.4.1

Diffstat:
MCHANGELOG | 3+++
MREADME.md | 25+++++++++++++------------
Mflake.lock | 36++++++++++++++++++------------------
Mflake.nix | 12+++++++++---
Mppad-poly1305.cabal | 6+++---
5 files changed, 46 insertions(+), 36 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,5 +1,8 @@ # Changelog +- 0.4.1 (2025-12-28) + * Bumps the ppad-fixed lower-bound version and tests with GHC 9.10.3. + - 0.4.0 (2025-12-27) * Switches from variable-size 'Integer' to fixed-width words and constant-time primitives supplied by ppad-fixed. The implementation now diff --git a/README.md b/README.md @@ -39,10 +39,10 @@ benchmark suite): ``` benchmarking ppad-poly1305/mac (big key) - time 131.8 ns (131.6 ns .. 132.0 ns) + time 125.1 ns (124.9 ns .. 125.4 ns) 1.000 R² (1.000 R² .. 1.000 R²) - mean 131.9 ns (131.8 ns .. 132.1 ns) - std dev 594.3 ps (464.5 ps .. 816.3 ps) + mean 125.4 ns (125.0 ns .. 126.2 ns) + std dev 1.530 ns (216.3 ps .. 2.693 ns) ``` ## Security @@ -62,22 +62,23 @@ constant-time execution: ``` benchmarking ppad-poly1305/mac (small key) - time 131.7 ns (131.6 ns .. 131.9 ns) + time 125.1 ns (124.9 ns .. 125.4 ns) 1.000 R² (1.000 R² .. 1.000 R²) - mean 131.6 ns (131.4 ns .. 131.9 ns) - std dev 689.1 ps (544.4 ps .. 1.022 ns) + mean 125.1 ns (125.0 ns .. 125.4 ns) + std dev 524.6 ps (180.6 ps .. 1.132 ns) benchmarking ppad-poly1305/mac (mid key) - time 132.4 ns (132.1 ns .. 132.6 ns) + time 125.2 ns (124.9 ns .. 125.4 ns) 1.000 R² (1.000 R² .. 1.000 R²) - mean 132.0 ns (131.8 ns .. 132.2 ns) - std dev 539.4 ps (450.7 ps .. 667.1 ps) + mean 125.1 ns (125.1 ns .. 125.3 ns) + std dev 441.3 ps (195.0 ps .. 755.1 ps) benchmarking ppad-poly1305/mac (big key) - time 131.8 ns (131.6 ns .. 132.0 ns) + time 125.1 ns (124.9 ns .. 125.4 ns) 1.000 R² (1.000 R² .. 1.000 R²) - mean 131.9 ns (131.8 ns .. 132.1 ns) - std dev 594.3 ps (464.5 ps .. 816.3 ps) + mean 125.4 ns (125.0 ns .. 126.2 ns) + std dev 1.530 ns (216.3 ps .. 2.693 ns) + variance introduced by outliers: 12% (moderately inflated) ``` If you discover any vulnerabilities, please disclose them via diff --git a/flake.lock b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1725910328, - "narHash": "sha256-n9pCtzGZ0httmTwMuEbi5E78UQ4ZbQMr1pzi5N0LAG8=", + "lastModified": 1766840161, + "narHash": "sha256-Ss/LHpJJsng8vz1Pe33RSGIWUOcqM1fjrehjUkdrWio=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5775c2583f1801df7b790bf7f7d710a19bac66f4", + "rev": "3edc4a30ed3903fdf6f90c837f961fa6b49582d1", "type": "github" }, "original": { @@ -51,11 +51,11 @@ ] }, "locked": { - "lastModified": 1741625558, - "narHash": "sha256-ZBDXRD5fsVqA5bGrAlcnhiu67Eo50q0M9614nR3NBwY=", + "lastModified": 1766934151, + "narHash": "sha256-BUFpuLfrGXE2xi3Wa9TYCEhhRhFp175Ghxnr0JRbG2I=", "ref": "master", - "rev": "fb63457f2e894eda28250dfe65d0fcd1d195ac2f", - "revCount": 24, + "rev": "58dfb7922401a60d5de76825fcd5f6ecbcd7afe0", + "revCount": 26, "type": "git", "url": "git://git.ppad.tech/base16.git" }, @@ -82,11 +82,11 @@ ] }, "locked": { - "lastModified": 1766845669, - "narHash": "sha256-aDfG7HX8zn0L/ZBABimeUHdvHBcYsiksAzN898QUa5I=", + "lastModified": 1766933347, + "narHash": "sha256-hwBsY4vyefW9qSj0MK0+wr9hIc0OcFuhQD11XGGcO/o=", "ref": "master", - "rev": "0213f7350fcda1c8d28bb9dae686205cf5983f88", - "revCount": 272, + "rev": "d7b03362f9d075c505b8c293524f577f7186a647", + "revCount": 289, "type": "git", "url": "git://git.ppad.tech/fixed.git" }, @@ -102,11 +102,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1737297101, - "narHash": "sha256-EnXnq+JLflbWt+DvaGGnY2gfAqsGNOm5vPgHh3hkfwQ=", + "lastModified": 1766932084, + "narHash": "sha256-GvVsbTfW+B7IQ9K/QP2xcXJAm1lhBin1jYZWNjOzT+o=", "ref": "master", - "rev": "f29823875250bc99b3891f7373535ccde9a29a44", - "revCount": 1, + "rev": "353e61763b959b960a55321a85423501e3e9ed7a", + "revCount": 2, "type": "git", "url": "git://git.ppad.tech/nixpkgs.git" }, diff --git a/flake.nix b/flake.nix @@ -32,7 +32,13 @@ pkgs = import nixpkgs { inherit system; }; hlib = pkgs.haskell.lib; - llvm = pkgs.llvmPackages_15.llvm; + llvm = pkgs.llvmPackages_19.llvm; + + base16 = ppad-base16.packages.${system}.default; + base16-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag base16 "llvm") + [ llvm ]; fixed = ppad-fixed.packages.${system}.default; fixed-llvm = @@ -40,8 +46,8 @@ (hlib.enableCabalFlag fixed "llvm") [ llvm ]; - hpkgs = pkgs.haskell.packages.ghc981.extend (new: old: { - ppad-base16 = ppad-base16.packages.${system}.default; + hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: { + ppad-base16 = base16-llvm; ppad-fixed = fixed-llvm; ${lib} = new.callCabal2nixWithOptions lib ./. "--enable-profiling" { ppad-fixed = new.ppad-fixed; diff --git a/ppad-poly1305.cabal b/ppad-poly1305.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: ppad-poly1305 -version: 0.4.0 +version: 0.4.1 synopsis: A pure Poly1305 MAC license: MIT license-file: LICENSE @@ -8,7 +8,7 @@ author: Jared Tobin maintainer: jared@ppad.tech category: Cryptography build-type: Simple -tested-with: GHC == 9.8.1 +tested-with: GHC == 9.10.3 extra-doc-files: CHANGELOG description: A pure Poly1305 message authentication code, per @@ -35,7 +35,7 @@ library build-depends: base >= 4.9 && < 5 , bytestring >= 0.9 && < 0.13 - , ppad-fixed >= 0.1.2 && < 0.2 + , ppad-fixed >= 0.1.3 && < 0.2 test-suite poly1305-tests type: exitcode-stdio-1.0