secp256k1

Pure Haskell Schnorr, ECDSA on the elliptic curve secp256k1 (docs.ppad.tech/secp256k1).
git clone git://git.ppad.tech/secp256k1.git
Log | Files | Refs | README | LICENSE

flake.nix (4105B)


      1 {
      2   description = "Pure Haskell Schnorr, ECDSA on secp256k1";
      3 
      4   inputs = {
      5     ppad-nixpkgs = {
      6       type = "git";
      7       url  = "git://git.ppad.tech/nixpkgs.git";
      8       ref  = "master";
      9     };
     10     ppad-base16 = {
     11       type = "git";
     12       url  = "git://git.ppad.tech/base16.git";
     13       ref  = "master";
     14       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     15     };
     16     ppad-sha256 = {
     17       type = "git";
     18       url  = "git://git.ppad.tech/sha256.git";
     19       ref  = "master";
     20       inputs.ppad-base16.follows = "ppad-base16";
     21       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     22     };
     23     # transitive dependency via ppad-hmac-drbg
     24     ppad-sha512 = {
     25       type = "git";
     26       url  = "git://git.ppad.tech/sha512.git";
     27       ref  = "master";
     28       inputs.ppad-base16.follows = "ppad-base16";
     29       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     30     };
     31     ppad-hmac-drbg = {
     32       type = "github";
     33       owner = "ppad-tech";
     34       repo = "hmac-drbg";
     35       # XX temporarily using github mirror
     36       # url  = "git://git.ppad.tech/hmac-drbg.git";
     37       # ref  = "master";
     38       inputs.ppad-base16.follows = "ppad-base16";
     39       inputs.ppad-sha256.follows = "ppad-sha256";
     40       inputs.ppad-sha512.follows = "ppad-sha512";
     41       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     42     };
     43     ppad-fixed = {
     44       type = "git";
     45       url  = "git://git.ppad.tech/fixed.git";
     46       ref  = "master";
     47       inputs.ppad-nixpkgs.follows = "ppad-nixpkgs";
     48     };
     49     flake-utils.follows = "ppad-nixpkgs/flake-utils";
     50     nixpkgs.follows = "ppad-nixpkgs/nixpkgs";
     51   };
     52 
     53   outputs = { self, nixpkgs, flake-utils, ppad-nixpkgs
     54             , ppad-base16
     55             , ppad-sha256, ppad-sha512
     56             , ppad-hmac-drbg
     57             , ppad-fixed
     58             }:
     59     flake-utils.lib.eachDefaultSystem (system:
     60       let
     61         lib = "ppad-secp256k1";
     62 
     63         pkgs = import nixpkgs { inherit system; };
     64         hlib  = pkgs.haskell.lib;
     65         llvm  = pkgs.llvmPackages_19.llvm;
     66         clang = pkgs.llvmPackages_19.clang;
     67 
     68         base16 = ppad-base16.packages.${system}.default;
     69         base16-llvm =
     70           hlib.addBuildTools
     71             (hlib.enableCabalFlag base16 "llvm")
     72             [ llvm clang ];
     73 
     74         fixed = ppad-fixed.packages.${system}.default;
     75         fixed-llvm =
     76           hlib.addBuildTools
     77             (hlib.enableCabalFlag fixed "llvm")
     78             [ llvm clang ];
     79 
     80         sha256 = ppad-sha256.packages.${system}.default;
     81         sha256-llvm =
     82           hlib.addBuildTools
     83             (hlib.enableCabalFlag sha256 "llvm")
     84             [ llvm clang ];
     85 
     86         hmac-drbg = ppad-hmac-drbg.packages.${system}.default;
     87         hmac-drbg-llvm =
     88           hlib.addBuildTools
     89             (hlib.enableCabalFlag hmac-drbg "llvm")
     90             [ llvm clang ];
     91 
     92         hpkgs = pkgs.haskell.packages.ghc910.extend (new: old: {
     93           ppad-base16 = base16-llvm;
     94           ppad-sha256 = sha256-llvm;
     95           ppad-hmac-drbg = hmac-drbg-llvm;
     96           ppad-fixed = fixed-llvm;
     97           ${lib} = new.callCabal2nix lib ./. {
     98             ppad-base16 = new.ppad-base16;
     99             ppad-sha256 = new.ppad-sha256;
    100             ppad-hmac-drbg = new.ppad-hmac-drbg;
    101             ppad-fixed = new.ppad-fixed;
    102           };
    103         });
    104 
    105         cabal = hpkgs.cabal-install;
    106         cc    = pkgs.stdenv.cc;
    107         ghc   = hpkgs.ghc;
    108       in
    109         {
    110           packages.default = hpkgs.${lib};
    111 
    112           packages.haddock = hpkgs.${lib}.doc;
    113 
    114           devShells.default = hpkgs.shellFor {
    115             packages = p: [
    116               (hlib.doBenchmark p.${lib})
    117             ];
    118 
    119             buildInputs = [
    120               cabal
    121               cc
    122               llvm
    123             ];
    124 
    125             doBenchmark = true;
    126 
    127             shellHook = ''
    128               PS1="[${lib}] \w$ "
    129               echo "entering ${system} shell, using"
    130               echo "cabal: $(${cabal}/bin/cabal --version)"
    131               echo "cc:    $(${cc}/bin/cc --version)"
    132               echo "ghc:   $(${ghc}/bin/ghc --version)"
    133               echo "llc:   $(${llvm}/bin/llc --version | head -2 | tail -1)"
    134             '';
    135           };
    136         }
    137       );
    138 }
    139