Skip to content

Instantly share code, notes, and snippets.

@nemo83
Created August 5, 2021 14:02
Show Gist options
  • Save nemo83/84b356b8510e4d71607e3859e7e18ce0 to your computer and use it in GitHub Desktop.
Save nemo83/84b356b8510e4d71607e3859e7e18ce0 to your computer and use it in GitHub Desktop.
Sign a transaction with Cardano wallet keys.
// implementation group: 'net.java.dev.jna', name: 'jna', version: '5.8.0'
// implementation group: 'net.java.dev.jna', name: 'jna-platform', version: '5.8.0'
// implementation group: 'org.bouncycastle', name: 'bcprov-jdk15to18', version: '1.68'
@Test
public void testThree() throws CborException {
var skeyCBORHex = "582004927daa27b227b379e0a7c8bc431200dde599e76793931082c37b3ecb8a6031";
var vkeyCBORHex = "58203b90cdc93baa2a51689e6ae747dcc9ec6e3bf8f11963bcba50036a2443c09b0b";
var skeyBytesActual = (ByteString) CborDecoder.decode(Hex.decode(skeyCBORHex)).get(0);
var vkeyBytesActual = (ByteString) CborDecoder.decode(Hex.decode(vkeyCBORHex)).get(0);
// This can be used as intermediary with cbor.me
// var skeyHex = "";
// var vkeyHex = "";
// var skeyBytes = Hex.decode(skeyHex);
// var vkeyBytes = Hex.decode(vkeyHex);
// assertArrayEquals(skeyBytes, skeyBytesActual.getBytes());
// assertArrayEquals(vkeyBytes, vkeyBytesActual.getBytes());
var privateKey = new Ed25519PrivateKeyParameters(skeyBytesActual.getBytes(), 0);
var actualVekey = privateKey.generatePublicKey();
var publicKey = new Ed25519PublicKeyParameters(vkeyBytesActual.getBytes(), 0);
assertEquals(
new String(publicKey.getEncoded()),
new String(actualVekey.getEncoded())
);
var msg = "Cardano is the best blockchain. Sign. Gimbalabs".getBytes(StandardCharsets.UTF_8);
// Generate new signature
var signer = new Ed25519Signer();
signer.init(true, privateKey);
signer.update(msg, 0, msg.length);
byte[] signature = signer.generateSignature();
var verifies = new Ed25519Signer();
verifies.init(false, publicKey);
verifies.update(msg, 0, msg.length);
var outcome = verifies.verifySignature(signature);
System.out.println(outcome);
assertTrue(outcome);
System.out.printf("Message: %s\n", new String(msg));
System.out.printf("Signature: %s\n", new String(signature));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment