コード例 #1
0
        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();
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        public RepositoryResponse <string> EncryptRsa([FromBody] JObject model)
        {
            string data = model.GetValue("data").Value <string>();

            return(new RepositoryResponse <string>()
            {
                Data = RSAEncryptionHelper.GetEncryptedText(data)
            });
        }
コード例 #4
0
        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);
        }
コード例 #5
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();
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
コード例 #8
0
        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);
        }
コード例 #9
0
        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
            });
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: ranjancse26/RSK-KMS
        /// <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();
        }