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.
}
}
——
Login to reply
Replies (1)
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 .