I need sign message in C# via EIP-191

587 Views Asked by At

c# signing not equal node.js signing

node.js produces correct result

I have code in node.js

import { Wallet, utils } from 'ethers'

const privateKey = '0xcd180f4628bf1fceb5ab9e2e22df38d6d1dee52667926c997c58a318890aa4ee'
const wallet = new Wallet(privateKey)
const body = '{"jsonrpc":"2.0","method":"eth_sendBundle","params":[{see above}],"id":1}'
const signature = wallet.address + ':' + wallet.signMessage(utils.id(body))

console.log(wallet.address)
console.log(utils.id(body))
console.log(wallet.signMessage(utils.id(body)))

and i get the result (correctly)

0xB0D23E7099C128fbeee8E097a776ED73d50c7656 0x311d6d3d0466023c1dc327266ba7294cc8ee18b2ab81b0de3ef97ee1af10ecb6

Promise { '0xad2b2e1352d4ebc7f870359feb3efd14f6f43f20002a20d1eada609d8f9b878f27606bee58c4403550555925e4b0ce48cb4653bbd077589da0e8a689b4ea9e161b' }

i am trying to sign in c#, keccack matches but no signature

i get result

0x9364eb479cda8fb4a70cae68233aa3b866d5c49366a701029e4f7b745ff1f0ac300e206e64061d43ca3a18b072c51575bcef559eb109f95b4743d68c8f6a79cd1c

C# code (library Nethereum)

var ecKey = new EthECKey("0xcd180f4628bf1fceb5ab9e2e22df38d6d1dee52667926c997c58a318890aa4ee");
var json = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendBundle\",\"params\":[{see above}],\"id\":1}";
var keccack = Sha3Keccack.Current.CalculateHash(json).HexToByteArray();

var signer = new EthereumMessageSigner();
var hash = signer.Sign(keccack, ecKey);
Console.WriteLine(hash);
1

There are 1 best solutions below

1
On BEST ANSWER
var ecKey = new EthECKey("0xcd180f4628bf1fceb5ab9e2e22df38d6d1dee52667926c997c58a318890aa4ee");
var json = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendBundle\",\"params\":[{see above}],\"id\":1}";
var keccack = Sha3Keccack.Current.CalculateHash(json).HexToByteArray();
    
var signer = new EthereumMessageSigner();
var hash = signer.EncodeUTF8AndSign(keccack.ToHex(true), ecKey);
Console.WriteLine(hash);