Damus
sedited · 15w
Yes :)
M. Sean Gilligan profile picture
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.
}
}
——