public static ExternalAccount BuildExternalSigner(ILogger log, string KeyVaultURI) { var azureServiceTokenProvider = new AzureServiceTokenProvider(); var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); try{ var signer = new AzureKeyVaultExternalSigner(keyVaultClient, KeyVaultURI); var address = signer.GetAddressAsync(); log.LogInformation("Signer Address: " + address); return(new ExternalAccount(signer)); } catch (Exception e) { log.LogInformation(e.Message); Console.WriteLine(e.Message); return(null); } }
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(); }
public static async Task <ExternalAccount> BuildExternalSignerWithToken(ILogger log, string KeyVaultURI, string appID, string appSecret) { APP_ID = appID; APP_SECRET = appSecret; var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken)); try{ var signer = new AzureKeyVaultExternalSigner(keyVaultClient, KeyVaultURI); var address = await signer.GetAddressAsync(); Console.WriteLine("Signer Address: " + address); return(new ExternalAccount(signer)); } catch (Exception e) { log.LogInformation(e.Message); Console.WriteLine(e.Message); return(null); } }
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(); }