0

我正在尝试使用 Hive 网络中的 PostingKey 对短消息进行签名。我正在尝试使用 BouncyCastle,但我无法初始化它的签名者,我的(不太好的代码)看起来像这样:

 public static class Signer
    {
        public static byte[] Sign(string message, byte[] privateKey)
        {
            var signer = new Org.BouncyCastle.Crypto.Signers.ECDsaSigner(new HMacDsaKCalculator(new Sha256Digest()));
            var bigInt = new BigInteger(privateKey);
            var parameters = new ECPrivateKeyParameters(bigInt, new ECDomainParameters())
            signer.Init(false, parameters);


            var messageBytes = Encoding.UTF8.GetBytes(message);
            var signature = signer.GenerateSignature(messageBytes);

            return signature;
        }
    }

我很可能做错了什么(或一切)。

密钥如下所示: 5KN6ZfGZgH1puWwH1Nc1P8xyrFZSPHDw3WUP6iitsjCECJLrGBq 然后将其编码为 32 字节数组。

我有在 JavaScript 中工作的示例代码,但我未能让它在 C# 中运行

eosjs_ecc.sign("message", "key")

已编辑:所以我设法生成了与 JavaScript 中生成的大小相匹配的签名,但我仍然无法在 dApp 中唱歌。我现在正在使用 Cryptography.ECDSA 库,因为它可以在一次调用中生成带有恢复号、r 和 s 的签名。唯一的问题是每次我调用相同的值时签名都是不同的。

var buffer = Secp256K1Manager.SignCompressedCompact(message, privateKey);
var checksum = Ripemd160Manager.GetHash(buffer);
var signatureArray = buffer.Concat(checksum.Take(4)).ToArray();

var result = Base58.Encode(signatureArray);
return $"SIG_K1_{result}";
4

0 回答 0