private async void btnKMSSetItem_Click(object sender, EventArgs e) { if (ValidateKMSSet() == false) { return; } if (contractHandler == null && !string.IsNullOrEmpty(txtKMSContractAddress.Text.Trim())) { Web3 web3 = GetWeb3(); contractHandler = web3.Eth.GetContractHandler(txtKMSContractAddress.Text.Trim()); } if (contractHandler == null) { MessageBox.Show("Problem in getting an instance of the Contract Handler. " + "Please try specifying a valid Contract Address", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } StartProgressBar(); btnKMSSetItem.Enabled = false; var encryptedText = RSAEncryptionHelper.Encrypt(txtValue.Text.Trim(), filteredCert); var account = new Nethereum.Web3.Accounts.Account(privateKey); var setItemRequest = new SetItemFunction { Key = txtKeyName.Text.Trim(), Value = encryptedText, FromAddress = account.Address }; // Set the Gas value var estimate = await contractHandler .EstimateGasAsync(setItemRequest); setItemRequest.Gas = estimate.Value; var setItemFunctionTxnReceipt = await contractHandler .SendRequestAndWaitForReceiptAsync(setItemRequest); if (setItemFunctionTxnReceipt != null && setItemFunctionTxnReceipt.BlockNumber.Value > 0) { string[] keyCollection = new string[3]; ListViewItem listItem; keyCollection[0] = txtKeyName.Text.Trim(); keyCollection[1] = encryptedText; keyCollection[2] = ""; listItem = new ListViewItem(keyCollection); listView1.Items.Add(listItem); } btnKMSSetItem.Enabled = true; StopProgressBar(); }
public async Task <ActionResult <RepositoryResponse <AccessTokenViewModel> > > Register([FromBody] MixRegisterViewModel model) { RepositoryResponse <AccessTokenViewModel> result = new RepositoryResponse <AccessTokenViewModel>(); if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Avatar = model.Avatar ?? MixService.GetAppSetting <string>("DefaultAvatar"), JoinDate = DateTime.UtcNow }; var createResult = await _userManager.CreateAsync(user, password : model.Password).ConfigureAwait(false); if (createResult.Succeeded) { await _userManager.AddToRoleAsync(user, MixDefaultRoles.Guest); var saveData = await Mix.Cms.Lib.ViewModels.MixDatabaseDatas.Helper.SaveObjAsync( MixDatabaseNames.SYSTEM_USER_DATA, model.UserData, user.UserName, MixDatabaseParentType.User); result.IsSucceed = saveData.IsSucceed; result.Errors = saveData.Errors; result.Exception = saveData.Exception; _logger.LogInformation("User created a new account with password."); user = await _userManager.FindByNameAsync(model.Username).ConfigureAwait(false); var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); var token = await _idService.GenerateAccessTokenAsync(user, true, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { result.IsSucceed = true; result.Data = token; _logger.LogInformation("User logged in."); return(result); } else { return(Ok(result)); } } else { foreach (var error in createResult.Errors) { result.Errors.Add(error.Description); } return(BadRequest(result)); } } return(BadRequest(result)); }
public RepositoryResponse <string> EncryptRsa([FromBody] JObject model) { string data = model.GetValue("data").Value <string>(); return(new RepositoryResponse <string>() { Data = RSAEncryptionHelper.GetEncryptedText(data) }); }
public void RSAEncryptionHelper_Encrypt() { certFilename = "TestCert.crt"; keyFilename = "TestPrivateKeyfile.pem"; CreateCertificate(certFilename, keyFilename); var x509 = new X509Certificate2(File.ReadAllBytes(certFilename)); string plainText = "testing"; string encryptedText = RSAEncryptionHelper.Encrypt(plainText, x509, RSKKMS.Lib.Security.RSKEncryptionPadding.OaepSHA256); Assert.IsTrue(encryptedText.Length > 0); }
private async void btnKMSGetItem_Click(object sender, EventArgs e) { var selectedItem = listView1.SelectedItems; if (string.IsNullOrEmpty(txtKMSContractAddress.Text.Trim())) { MessageBox.Show("Please try specifying a valid Contract Address", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } StartProgressBar(); if (selectedItem.Count > 0) { string keyName = selectedItem[0].Text.Trim(); string getItemResponse = await GetKMSKeyValue(keyName); if (!string.IsNullOrEmpty(getItemResponse)) { var decryptedText = RSAEncryptionHelper.Decrypt(getItemResponse, filteredCert); int index = listView1.SelectedIndices[0]; listView1.Items[index].SubItems[1].Text = getItemResponse; listView1.Items[index].SubItems[2].Text = decryptedText; } } else { if (string.IsNullOrEmpty(txtKeyName.Text.Trim())) { MessageBox.Show("Please specify the Key name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); txtKeyName.Focus(); return; } // Get the KMS value by the Key Name string encryptedText = await GetKMSKeyValue(txtKeyName.Text.Trim()); var decryptedText = RSAEncryptionHelper.Decrypt(encryptedText, filteredCert); txtStoredKeyValue.Text = decryptedText; } StopProgressBar(); }
public void RSAEncryptionHelper_Encrypt_Decrypt() { certFilename = "TestCert.crt"; keyFilename = "TestPrivateKeyfile.pem"; CreateCertificate(certFilename, keyFilename); X509Certificate2 certWithPrivateKey = LoadWithPrivateCert(); string plainText = "testing"; string encryptedText = RSAEncryptionHelper.Encrypt(plainText, certWithPrivateKey, RSKKMS.Lib.Security.RSKEncryptionPadding.OaepSHA256); string decryptedText = RSAEncryptionHelper.Decrypt(encryptedText, certWithPrivateKey, RSKKMS.Lib.Security.RSKEncryptionPadding.OaepSHA256); Assert.IsTrue(encryptedText.Length > 0); Assert.IsTrue(plainText == decryptedText); }
public async Task <JObject> GetAuthData(ApplicationUser user, bool rememberMe) { var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = AesEncryptionHelper.GenerateCombinedKeys(256); var token = await GenerateAccessTokenAsync(user, rememberMe, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { token.Info = new MixUserViewModel(user); await token.Info.LoadUserDataAsync(); var plainText = JObject.FromObject(token).ToString(Formatting.None).Replace("\r\n", string.Empty); var encryptedInfo = AesEncryptionHelper.EncryptString(plainText, aesKey); var resp = new JObject() { new JProperty("k", aesKey), new JProperty("rpk", rsaKeys[MixConstants.CONST_RSA_PRIVATE_KEY]), new JProperty("data", encryptedInfo) }; return(resp); } return(default);
public async Task <RepositoryResponse <AccessTokenViewModel> > InitSuperAdmin([FromBody] MixRegisterViewModel model) { RepositoryResponse <AccessTokenViewModel> result = new RepositoryResponse <AccessTokenViewModel>(); if (ModelState.IsValid) { if (_userManager.Users.Count() == 0) { var user = new ApplicationUser { UserName = model.Username, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Avatar = model.Avatar ?? MixService.GetConfig <string>("DefaultAvatar"), JoinDate = DateTime.UtcNow }; var createResult = await _userManager.CreateAsync(user, password : model.Password).ConfigureAwait(false); if (createResult.Succeeded) { user = await _userManager.FindByEmailAsync(model.Email).ConfigureAwait(false); await _userManager.AddToRoleAsync(user, MixRoles.SuperAdmin); await MixAccountHelper.LoadUserInfoAsync(user.UserName); var rsaKeys = RSAEncryptionHelper.GenerateKeys(); var aesKey = MixService.GetConfig <string>(MixAppSettingKeywords.ApiEncryptKey); var token = await _idHelper.GenerateAccessTokenAsync(user, true, aesKey, rsaKeys[MixConstants.CONST_RSA_PUBLIC_KEY]); if (token != null) { result.IsSucceed = true; MixService.LoadFromDatabase(); MixService.SetConfig <string>(MixAppSettingKeywords.ApiEncryptKey, aesKey); MixService.SetConfig("InitStatus", 2); MixService.SaveSettings(); MixService.Reload(); result.Data = token; return(result); } else { return(result); } } else { foreach (var error in createResult.Errors) { result.Errors.Add(error.Description); } return(result); } } } return(result); }
private RepositoryResponse <JObject> GetAllSettings(string lang = null) { lang ??= MixService.GetAppSetting <string>(MixAppSettingKeywords.DefaultCulture); var cultures = CommonRepository.Instance.LoadCultures(); var culture = cultures.FirstOrDefault(c => c.Specificulture == lang); // Get Settings GlobalSettingsViewModel configurations = new GlobalSettingsViewModel() { Domain = MixService.GetAppSetting <string>(MixAppSettingKeywords.Domain), Lang = lang, PortalThemeSettings = MixService.GetAppSetting <JObject>(MixAppSettingKeywords.PortalThemeSettings), ThemeId = MixService.GetConfig <int>(MixAppSettingKeywords.ThemeId, lang), ApiEncryptKey = MixService.GetAppSetting <string>(MixAppSettingKeywords.ApiEncryptKey), IsEncryptApi = MixService.GetAppSetting <bool>(MixAppSettingKeywords.IsEncryptApi), Cultures = cultures, PageTypes = Enum.GetNames(typeof(MixPageType)), ModuleTypes = Enum.GetNames(typeof(MixModuleType)), MixDatabaseTypes = Enum.GetNames(typeof(MixDatabaseType)), DataTypes = Enum.GetNames(typeof(MixDataType)), Statuses = Enum.GetNames(typeof(MixContentStatus)), RSAKeys = RSAEncryptionHelper.GenerateKeys(), ExternalLoginProviders = new JObject() { new JProperty("Facebook", MixService.Instance.MixAuthentications.Facebook?.AppId), new JProperty("Google", MixService.Instance.MixAuthentications.Google?.AppId), new JProperty("Twitter", MixService.Instance.MixAuthentications.Twitter?.AppId), new JProperty("Microsoft", MixService.Instance.MixAuthentications.Microsoft?.AppId), }, LastUpdateConfiguration = MixService.GetAppSetting <DateTime?>(MixAppSettingKeywords.LastUpdateConfiguration) }; configurations.LangIcon = culture?.Icon ?? MixService.GetAppSetting <string>(MixAppSettingKeywords.Language); // Get translator var translator = new JObject() { new JProperty("lang", lang), new JProperty("data", MixService.GetTranslator(lang)) }; // Get Configurations var localizeSettings = new JObject() { new JProperty("lang", lang), new JProperty("langIcon", configurations.LangIcon), new JProperty("data", MixService.GetLocalizeSettings(lang)) }; JObject result = new JObject() { new JProperty("globalSettings", JObject.FromObject(configurations)), new JProperty("translator", translator), new JProperty("localizeSettings", JObject.FromObject(localizeSettings)) }; return(new RepositoryResponse <JObject>() { IsSucceed = true, Data = result }); }
/// <summary> /// The AES Key/Value with the Private Key for Contract is for demonstration purpose only /// Feel free to use it. /// </summary> /// <param name="args"></param> public static void Main(string[] args) { string key = "aesKey"; string value = "testing"; string rnsResolvedAddress = GetRnsResolvedAddress("ranjancse.rsk", true); string nodeUrl = ConfigurationManager.AppSettings["RskTestnetNodeUrl"]; var privateKey = ConfigurationManager.AppSettings["PrivateKey"]; var fromTransferPrivateKey = ConfigurationManager.AppSettings["FromTransferPrivateKey"]; var account = new Nethereum.Web3.Accounts.Account(privateKey); IGasPriceService gasPriceService = new GasPriceService(nodeUrl); int gasPrice = gasPriceService.GetRskMinGasPrice(); // Load some RBTC LoadSomeRBTC(nodeUrl, fromTransferPrivateKey, account.Address, 0.001m, 0.06m); Stopwatch stopwatch = new Stopwatch(); System.Console.WriteLine("Trying to pull the RSA certificate from the local store using the Thumbprint"); // Get the certificate by Thumbprint string thumbPrint = ConfigurationManager.AppSettings["Thumbprint"].ToUpper(); X509Certificate2 filteredCert = X509CertificateHelper.GetRSKCertificate(thumbPrint, StoreLocation.LocalMachine); if (filteredCert == null) { System.Console.WriteLine($"Unable to find the RSK certificate by Thumbprint: " + $"{thumbPrint}"); System.Console.ReadLine(); return; } // Encrypt Text/Data var encryptedText = RSAEncryptionHelper.Encrypt(value, filteredCert); var url = ConfigurationManager.AppSettings["ContractDeploymentUrl"]; Web3 web3 = new Web3(account, url); // Get the balance stopwatch.Start(); var weiBalance = AccountHelper.GetBalance(web3, account); var etherAmount = Web3.Convert.FromWei(weiBalance.Value); stopwatch.Stop(); System.Console.WriteLine($"Account Balance: {etherAmount}"); System.Console.WriteLine($"Time take to fetch the balance:" + $" {stopwatch.Elapsed.Seconds} seconds"); // Gas estimated, in wei System.Console.WriteLine($"Estimated Gas Price: {gasPrice}"); System.Console.WriteLine("Deploying the Iterable Mapping Library"); stopwatch.Restart(); // Deploy Iterable Mapping Library TransactionReceipt transactionReceiptDeployment; string contractAddress; ContractHandler contractHandler; RSKContractHelper.DeployIterableMappingContract(web3, out transactionReceiptDeployment, out contractAddress, out contractHandler); stopwatch.Stop(); System.Console.WriteLine($"Iterable Mapping Contarct Address: " + $"{contractAddress}"); System.Console.WriteLine($"Time taken to deploy the Iterable mapping:" + $" {stopwatch.Elapsed.Seconds} seconds"); System.Console.WriteLine("Deploying the RSK KMS Contract"); // Deploy the RSK Contract stopwatch.Restart(); contractHandler = RSKContractHelper.DeployRSKKeyManagmentContract(web3, transactionReceiptDeployment, out contractAddress); stopwatch.Stop(); System.Console.WriteLine($"RSK Contract Address {contractAddress}"); System.Console.WriteLine($"Time taken to deploy the RSK Contract: " + $"{stopwatch.Elapsed.Seconds} seconds"); System.Console.WriteLine("Trying to set a value in RSK KMS Contract"); /** Function: setItem**/ var setItemRequest = new SetItemFunction { Key = key, Value = encryptedText, FromAddress = account.Address }; setItemRequest.GasPrice = new BigInteger(gasPrice * 1.1); stopwatch.Restart(); var setItemFunctionTxnReceipt = contractHandler .SendRequestAndWaitForReceiptAsync(setItemRequest) .ConfigureAwait(false) .GetAwaiter() .GetResult(); stopwatch.Stop(); System.Console.WriteLine($"Time taken to set the KMS Key Item: " + $"{stopwatch.Elapsed.Seconds} seconds"); System.Console.WriteLine("Trying to get a value from the RSK KMS Contract"); /** Function: getItem**/ var getItemRequest = new GetItemFunction { Key = key, FromAddress = account.Address }; stopwatch.Restart(); var getItemResponse = contractHandler .QueryAsync <GetItemFunction, string>(getItemRequest) .ConfigureAwait(false) .GetAwaiter() .GetResult(); stopwatch.Stop(); System.Console.WriteLine($"Time taken to get the KMS Key Item: " + $"{stopwatch.Elapsed.Seconds} seconds"); if (!string.IsNullOrEmpty(getItemResponse)) { var decryptedText = RSAEncryptionHelper.Decrypt(getItemResponse, filteredCert); System.Console.WriteLine($"Decrypted Text: {decryptedText}"); } else { System.Console.WriteLine("The KMS Response as empty"); } System.Console.WriteLine("Press any key to exit"); System.Console.ReadLine(); }