Yes :)

Reply to this note

Please Login to reply.

Discussion

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.

Oh, I see one mistake 🤦‍♂️. Yeah, that script requires JDK 25+.

And you must mean MessageDigest and NoSuchAlgorithmException. Ai yai, I thought I tested that.

Yes, that's it :)