I am attempting to sign and verify a message over RPC, using C#. Round tripping the signature with sign_message_by_address
does not pass verify_signature
.
So it all looks hunky dory to me but verify_signature returns
"isValid": False, "error": "Signature is invalid."
The return from sign by address is this and relevant c# below:
{
"pubkey": "b20609c50accadefe1c1f7e69dae624865c432c82615079d62df61c8aab3819c728d3c8be0c74e299c146873a32c20e9",
"signature": "818718d0b6ac9e1ded65fdd7910bf243cc7eedccb4110cb71a48378462cba1023e76c2308525eee438cd0f57f83d79280c406edf98533aee71b317f609b8f2be17b1116bdff6be9662a8a415b25a494b031b3a073786e0be4e9e93820b9b1824",
"signing_mode": "BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_AUG:CHIP-0002_",
"success": true
}
These are the same results as using the cli:
chia wallet sign_message -m spoons -a txch1u6rknyeppcqxscpasjvxnpcenam9ztrexdyntqy6swhm0s70tgdqrr8j4e
Message: spoons
Public Key: b20609c50accadefe1c1f7e69dae624865c432c82615079d62df61c8aab3819c728d3c8be0c74e299c146873a32c20e9
Signature: 818718d0b6ac9e1ded65fdd7910bf243cc7eedccb4110cb71a48378462cba1023e76c2308525eee438cd0f57f83d79280c406edf98533aee71b317f609b8f2be17b1116bdff6be9662a8a415b25a494b031b3a073786e0be4e9e93820b9b1824
Signing Mode: BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_AUG:CHIP-0002_
C#
using var cts = new CancellationTokenSource(15000);
var address = await StandardWallet.GetNextAddress(newAddress: false, cts.Token);
// "txch1u6rknyeppcqxscpasjvxnpcenam9ztrexdyntqy6swhm0s70tgdqrr8j4e"
var message = "spoons";
var (PubKey, Signature, SigningMode) = await Wallet.SignMessageByAddress(
message: message,
address: address,
cancellationToken: cts.Token);
var returnValue = await Wallet.VerifySignature(
address: address,
signature: Signature,
message: message.ToHexString(),
pubkey: PubKey,
signingMode: SigningMode,
cancellationToken: cts.Token);
Assert.True(returnValue);