Hello everyone!
New to Elixir, trying to implement following code and facing some issues
Original code, Javascript
const nacl = require("tweetnacl");
const web3 = require("@solana/web3.js");
const bs58 = require("bs58");
const acc = web3.Keypair.fromSecretKey(bs58.decode("67W6oboaDL6CwoS2APNwkUttMkKNNtJeNNnKAXPpVhJPWfV8jHPuAP7nEUP3iXFHBvH7GpwAcrrFPgJCDQDvKhco"));
const message = new TextEncoder().encode("hello world");
const sig = nacl.sign.detached(message, acc.secretKey);
console.log("Signature", sig);
// Result:
// 125, 215, 145, 185, 147, 227, 199, 234, 158, 49, 89, 35, 26, 11, 1, 28, 157,
// 75, 128, 145, 174, 187, 144, 196, 62, 190, 164, 31, 16, 131, 114, 23, 223,
// 249, 154, 55, 219, 254, 205, 18, 92, 251, 101, 247, 15, 193, 75, 141, 31,
// 46, 18, 42, 57, 248, 135, 25, 181, 52, 69, 201, 239, 167, 223, 3
Now, Elixir:
iex(1)> secret = B58.decode58!("67W6oboaDL6CwoS2APNwkUttMkKNNtJeNNnKAXPpVhJPWfV8jHPuAP7nEUP3iXFHBvH7GpwAcrrFPgJCDQDvKhco")
<<255, 177, 27, 246, 3, 158, 142, 9, 100, 55, 130, 149, 54, 84, 65, 81, 33, 211,
0, 110, 189, 49, 38, 118, 90, 12, 9, 135, 115, 225, 97, 198, 166, 247, 6, 214,
222, 146, 112, 135, 85, 251, 27, 37, 149, 248, 121, 230, 215, 218, ...>>
iex(2)> :crypto.sign(:ecdsa, :sha512, "hello world", secret)
** (ErlangError) Erlang error: {:badarg, {'pkey.c', 363}, 'Couldn\'t get ECDSA private key'}
(crypto 5.1.1) crypto.erl:1455: :crypto.sign/5
Or, using Ed25519 library:
iex(1)> Ed25519.signature("hello world", secret)
<<248, 139, 63, 60, 149, 176, 171, 216, 212, 129, 32, 157, 234, 81, 33, 242, 34,
227, 237, 79, 137, 82, 197, 193, 104, 231, 165, 139, 26, 168, 43, 112, 120,
192, 185, 76, 131, 60, 124, 167, 1, 129, 52, 61, 179, 184, 18, 129, 245, 82,
...>>
which is different from result I’m getting in the first snippet (JS).
Any idea what am I doing wrong?