Example #1
0
    static void Main()
    {
        //var privKey = EthECKey.GenerateKey();
        var privKey = new EthECKey("97ddae0f3a25b92268175400149d65d6887b9cefaf28ea2c078e05cdc15a3c0a");

        byte[] pubKeyCompressed = new ECKey(privKey.GetPrivateKeyAsBytes(), true).GetPubKey(true);
        Console.WriteLine("Private key: {0}", privKey.GetPrivateKey().Substring(4));
        Console.WriteLine("Public key: {0}", privKey.GetPubKey().ToHex().Substring(2));
        Console.WriteLine("Public key (compressed): {0}", pubKeyCompressed.ToHex());

        Console.WriteLine();

        string msg = "Message for signing";

        byte[] msgBytes  = Encoding.UTF8.GetBytes(msg);
        byte[] msgHash   = new Sha3Keccack().CalculateHash(msgBytes);
        var    signature = privKey.SignAndCalculateV(msgHash);

        Console.WriteLine("Msg: {0}", msg);
        Console.WriteLine("Msg hash: {0}", msgHash.ToHex());
        Console.WriteLine("Signature: [v = {0}, r = {1}, s = {2}]",
                          signature.V[0] - 27, signature.R.ToHex(), signature.S.ToHex());

        Console.WriteLine();

        var pubKeyRecovered = EthECKey.RecoverFromSignature(signature, msgHash);

        Console.WriteLine("Recovered pubKey: {0}", pubKeyRecovered.GetPubKey().ToHex().Substring(2));

        bool validSig = pubKeyRecovered.Verify(msgHash, signature);

        Console.WriteLine("Signature valid? {0}", validSig);
    }
Example #2
0
        /// <summary>
        /// Returns HoardID that signed this transaction
        /// </summary>
        /// <param name="signatureStr"></param>
        /// <param name="rlpEncodedTransaction"></param>
        /// <returns>Signer of this transaction</returns>
        public static HoardID RecoverHoardIdFromTransaction(string signatureStr, byte[] rlpEncodedTransaction)
        {
            if (string.IsNullOrEmpty(signatureStr))
            {
                return(null);
            }

            var signature = EthECDSASignatureFactory.ExtractECDSASignature(signatureStr);

            var rawHash = new Nethereum.Util.Sha3Keccack().CalculateHash(rlpEncodedTransaction);

            return(new HoardID(EthECKey.RecoverFromSignature(signature, rawHash).GetPublicAddress()));
        }
Example #3
0
 public static bool verify(string dataStr, string signStr)
 {
     try
     {
         var sign     = EthECDSASignatureFactory.ExtractECDSASignature(signStr);
         var dataHash = new Sha3Keccack().CalculateHash(Encoding.UTF8.GetBytes(dataStr));
         var pubKey   = EthECKey.RecoverFromSignature(sign, dataHash);
         return(pubKey.Verify(dataHash, sign));
     }catch
     {
         return(false);
     }
 }
Example #4
0
        public string FullRoundRec()
        {
            EthECKey.SignRecoverable = true;
            var key       = EthECKey.GenerateKey();
            var address   = key.GetPublicAddress();
            var signature = key.SignAndCalculateV(message);
            var recAdress = EthECKey.RecoverFromSignature(signature, message).GetPublicAddress();

            if (!address.IsTheSameAddress(recAdress))
            {
                Debug.WriteLine(key.GetPrivateKey());
            }
            return(recAdress);
        }
Example #5
0
        public string Recover(string message, byte[] signature, bool preFixed)
        {
            var bytes = Encoding.ASCII.GetBytes(message);

            if (!preFixed)
            {
                bytes = this.HashMessage(bytes);
            }

            var ecdaSignature = EthECDSASignatureFactory.ExtractECDSASignature(signature.ToHex());

            return(Bech32.Encode("io",
                                 Hash.Hash160B(EthECKey.RecoverFromSignature(ecdaSignature, bytes).GetPubKey().Slice(1))));
        }
Example #6
0
        public bool IsValid()
        {
            if (FromAddress == null)
            {
                return(true);
            }
            if (Signature == null)
            {
                throw new Exception("No singature in this promise.");
            }
            byte[]   hashBytes       = Encoding.UTF8.GetBytes(CalculateHash());
            EthECKey pubKeyRecovered = EthECKey.RecoverFromSignature(Signature, hashBytes);

            return(pubKeyRecovered.Verify(hashBytes, Signature));
        }
        private static void Main(string[] args)
        {
            string            input          = File.ReadAllText("../../../Input.json");
            EthereumSignature inputSignature = JsonConvert.DeserializeObject <EthereumSignature>(input);

            byte[] messageBytes = Utils.GetBytes(inputSignature.Message);
            byte[] messageHash  = new Sha3Keccack().CalculateHash(messageBytes);
            int    recId        = inputSignature.V.HexToByteArray()[0];

            EthECDSASignature signature = EthECDSASignatureFactory.FromComponents(
                inputSignature.R.HexToByteArray(),
                inputSignature.S.HexToByteArray());

            EthECKey publicKey = EthECKey.RecoverFromSignature(signature, recId, messageHash);

            Console.WriteLine("Public address: {0}", publicKey.GetPublicAddress());
        }
Example #8
0
        public async void ShouldRecoverRawTransactionFromRPCTransactionAndAccountSender()
        {
            var web3 = _ethereumClientIntegrationFixture.GetWeb3();

            var toAddress = "0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe";

            var transactionManager = web3.TransactionManager;
            var fromAddress        = transactionManager?.Account?.Address;

            //Sending transaction
            var transactionInput = EtherTransferTransactionInputBuilder.CreateTransactionInput(fromAddress, toAddress, 1.11m, 2);
            //Raw transaction signed
            var rawTransaction = await transactionManager.SignTransactionAsync(transactionInput).ConfigureAwait(false);

            var txnHash = await web3.Eth.Transactions.SendRawTransaction.SendRequestAsync(rawTransaction).ConfigureAwait(false);

            //Getting the transaction from the chain
            var transactionRpc = await web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync(txnHash).ConfigureAwait(false);

            //Using the transanction from RPC to build a txn for signing / signed
            var transaction = TransactionFactory.CreateLegacyTransaction(transactionRpc.To, transactionRpc.Gas, transactionRpc.GasPrice, transactionRpc.Value, transactionRpc.Input, transactionRpc.Nonce,
                                                                         transactionRpc.R, transactionRpc.S, transactionRpc.V);

            //Get the raw signed rlp recovered
            var rawTransactionRecovered = transaction.GetRLPEncoded().ToHex();

            //Get the account sender recovered
            var accountSenderRecovered = string.Empty;

            if (transaction is LegacyTransactionChainId)
            {
                var txnChainId = transaction as LegacyTransactionChainId;
                accountSenderRecovered = EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash, txnChainId.GetChainIdAsBigInteger()).GetPublicAddress();
            }
            else
            {
                accountSenderRecovered = EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash).GetPublicAddress();
            }

            Assert.Equal(rawTransaction, rawTransactionRecovered);
            Assert.Equal(web3.TransactionManager.Account.Address, accountSenderRecovered);
        }
Example #9
0
        public static void Verify()
        {
            string            input          = File.ReadAllText("../../Output.json");
            EthereumSignature inputSignature = JsonConvert.DeserializeObject <EthereumSignature>(input);
            string            message        = inputSignature.Msg;

            byte[] messageBytes = Utils.GetBytes(message);
            byte[] messageHash  = new Sha3Keccack().CalculateHash(messageBytes);

            byte[] rawSignature = inputSignature.Sig.HexToByteArray();
            byte[] r            = ArrayUtils.SubArray(rawSignature, 0, 32);
            byte[] s            = ArrayUtils.SubArray(rawSignature, 32, 32);
            int    recId        = rawSignature[rawSignature.Length - 1];

            EthECDSASignature signature = EthECDSASignatureFactory.FromComponents(r, s);

            EthECKey publicKey = EthECKey.RecoverFromSignature(signature, recId, messageHash);

            bool valid = publicKey.GetPublicAddress() == inputSignature.Address;

            Console.WriteLine("{0}", valid ? "Valid" : "Invalid");
        }
Example #10
0
        static void Main(string[] args)
        {
            KeyVaultClient kvc       = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
            var            signer    = new AzureKeyVaultExternalSigner(kvc, URI);
            var            publicKey = signer.GetPublicKeyAsync().Result;

            System.Console.WriteLine(publicKey.ToHex());

            var msgHash           = new Util.Sha3Keccack().CalculateHash("Hello").HexToByteArray();
            var ethExternalSigner = new EthECKeyExternalSigner(signer);

            var signature          = ethExternalSigner.SignAndCalculateVAsync(msgHash).Result;
            var publicKeyRecovered = EthECKey.RecoverFromSignature(signature, msgHash);

            System.Console.WriteLine(publicKeyRecovered.GetPubKey().ToHex());

            var transfer = new TransferFunction();

            transfer.To          = "0x1996a57077877D38e18A1BE44A55100D77b8fA1D";
            transfer.FromAddress = publicKeyRecovered.GetPublicAddress();
            transfer.Value       = 1;
            transfer.Nonce       = 1;
            transfer.GasPrice    = 100;
            transfer.Gas         = 1000;

            var rpcClient        = new RpcClient(new Uri("http://localhost:8545"));
            var transactionInput = transfer.CreateTransactionInput("0x12890d2cce102216644c59daE5baed380d84830c");

            var externalAccount = new ExternalAccount(ethExternalSigner, 1);

            externalAccount.InitialiseAsync().Wait();
            externalAccount.InitialiseDefaultTransactionManager(rpcClient);
            var signature2          = externalAccount.TransactionManager.SignTransactionAsync(transactionInput).Result;
            var transactionSigner   = new TransactionSigner();
            var publicKeyRecovered2 = transactionSigner.GetPublicKey(signature2, 1);

            System.Console.WriteLine(publicKeyRecovered2.ToHex());
            System.Console.ReadLine();
        }
Example #11
0
        static void Main(string[] args)
        {
            //var credential = new DefaultAzureCredential(
            //    new DefaultAzureCredentialOptions
            //    {
            //        //VisualStudioTenantId = TENANT_ID,
            //        //VisualStudioCodeTenantId = TENANT_ID,
            //    });
            var credential = new ClientSecretCredential(TENANT_ID, APP_ID, APP_PASSWORD);
            var signer     = new AzureKeyVaultExternalSigner(KEY_NAME, URI, credential);
            var address    = signer.GetAddressAsync().Result;

            System.Console.WriteLine(address);

            var msgHash = new Util.Sha3Keccack().CalculateHash("Hello").HexToByteArray();

            var signature          = signer.SignAsync(msgHash).Result;
            var publicKeyRecovered = EthECKey.RecoverFromSignature(signature, msgHash);

            System.Console.WriteLine(publicKeyRecovered.GetPubKey().ToHex());

            var transfer = new TransferFunction();

            transfer.To          = "0x1996a57077877D38e18A1BE44A55100D77b8fA1D";
            transfer.FromAddress = publicKeyRecovered.GetPublicAddress();
            transfer.Value       = 1;
            transfer.Nonce       = 1;
            transfer.GasPrice    = 100;
            transfer.Gas         = 1000;

            var rpcClient        = new RpcClient(new Uri("http://localhost:8545"));
            var transactionInput = transfer.CreateTransactionInput("0x12890d2cce102216644c59daE5baed380d84830c");

            var externalAccount = new ExternalAccount(signer, 1);

            externalAccount.InitialiseAsync().Wait();
            externalAccount.InitialiseDefaultTransactionManager(rpcClient);


            var signature2               = externalAccount.TransactionManager.SignTransactionAsync(transactionInput).Result;
            var publicKeyRecovered2      = TransactionVerificationAndRecovery.GetPublicKey(signature2);
            var transactionFromSignature = TransactionFactory.CreateTransaction(signature2);

            System.Console.WriteLine("Recovered public key");
            System.Console.WriteLine(publicKeyRecovered2.ToHex());
            System.Console.WriteLine("Recovered transaction Type");
            System.Console.WriteLine(transactionFromSignature.TransactionType.ToString());


            System.Console.WriteLine("Signing EIP1559");


            var transferEip1559 = new TransferFunction();

            transferEip1559.To                   = "0x1996a57077877D38e18A1BE44A55100D77b8fA1D";
            transferEip1559.FromAddress          = publicKeyRecovered.GetPublicAddress();
            transferEip1559.Value                = 1;
            transferEip1559.Nonce                = 1;
            transferEip1559.MaxFeePerGas         = 1000;
            transferEip1559.MaxPriorityFeePerGas = 999;
            transferEip1559.Gas                  = 1000;

            var transactionInputEip1559 = transferEip1559.CreateTransactionInput("0x12890d2cce102216644c59daE5baed380d84830c");
            var signature3                      = externalAccount.TransactionManager.SignTransactionAsync(transactionInputEip1559).Result;
            var publicKeyRecovered3             = TransactionVerificationAndRecovery.GetPublicKey(signature3);
            var transactionFromSignatureEIP1559 = TransactionFactory.CreateTransaction(signature3);

            System.Console.WriteLine("Recovered public key");
            System.Console.WriteLine(publicKeyRecovered3.ToHex());
            System.Console.WriteLine("Recovered transaction Type");
            System.Console.WriteLine(transactionFromSignatureEIP1559.TransactionType.ToString());
            System.Console.ReadLine();
        }
 public static EthECKey GetRecoveredKey(this RLPSigner signer)
 {
     return(EthECKey.RecoverFromSignature(signer.Signature, signer.RawHash));
 }