public void ShouldSignHash()
        {
            var address1    = "0x6A849e2036A36EB4Cd37b9aFA3c770064899f1A2";
            var address2    = "0x12890D2cce102216644c59daE5baed380d84830c";
            var numberBytes = new IntTypeEncoder().Encode(1); //Number is a big integer so we need 32 bytes if it was int32 it will be 4 bytes. Using the abi encoder it takes care of padding

            var sha3   = new Util.Sha3Keccack();
            var output = sha3.CalculateHashFromHex(address1, address2, numberBytes.ToHex());

            Assert.Equal("0xc11d3d2b8e0c5b8b645b9e7502751352ecaf8c3fdf3a0124dae9c1556fb2ce37", output.EnsureHexPrefix());

            var signer    = new MessageSigner();
            var signature = signer.Sign(output.HexToByteArray(), "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7");
            var ethEcdsa  = MessageSigner.ExtractEcdsaSignature(signature);
            var adddress  = signer.EcRecover(output.HexToByteArray(), signature);

            Assert.Equal(adddress, new EthECKey("0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7".HexToByteArray(), true).GetPublicAddress());
        }
Esempio n. 2
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();
        }
Esempio n. 3
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();
        }