Not as a daily driver, but we've been testing it out in Bitcoin Core to make CI and dev environments more reproducible. A few tools were migrated to nix recently.
Discussion
Iβm a big fan of using Nix as a package manger (and via Home Manager) on Debian and macOS (aka Darwin) You donβt need to use NixOS β although I do that, too.
Does that π― mean that you can easily run `nix shell` with the latest `nixpkgs-unstable`?
Yes :)
Cool. I will post some instructions for you soon.
To run the Schnorr Signature example with JVM:
nix run github:msgilligan/secp256k1-jdk-flake#secp256k1-jdk
To run it the natively-compiled version:
nix run github:msgilligan/secp256k1-jdk-flake#secp256k1-jdk-native
If you want to play with source, do:
nix shell nixpkgs#jbang
enter the below code into a file named SecpEcdsa.java and then `jbang SecpEcdsa.java`.
(Schnorr sig is little trickier to run in JBang because you need libsecp256k installed, but the flakes above handle it.)
ββ
///usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 17+
//REPOS mavencentral, secpjdk=https://gitlab.com/api/v4/projects/55956336/packages/maven
//DEPS org.bitcoinj.secp:secp-bouncy:0.2
import org.bitcoinj.secp.*;
byte[] message = sha256("Hello World!");
void main() {
IO.println("secp256k1-jdk ECDSA Sample");
try (Secp256k1 secp = Secp256k1.getById("bouncy-castle")) {
var pair = secp.ecKeyPairCreate();
var sig = secp.ecdsaSign(message, pair).get();
var isValid = secp.ecdsaVerify(sig, message, pair.publicKey()).get();
IO.println("Valid ECDSA signature = " + isValid);
}
}
byte[] sha256(String message) {
try {
return MessageDigest.getInstance("SHA-256").digest(message.getBytes());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e); // Can't happen.
}
}
ββ
That's some nice tooling, had to slightly tweak your example to include the correct imports, but ran all of them. Nix is magic in the sense that this would have been really annoying to setup by myself and now it just works .
What did you have to tweak? I thought I had tested everything.
Adjust the java version and add imports for the java crypto stuff.
In the JBang script? You change from Java 17 to what version? And I wouldnβt think the `import` statement would have to change? I must be missing something.
can't imagine not using nixos. it's completely changed the way I manage software on all my machines. no more system instability.