示例#1
0
 public App(
     IKeyStorageContainer keyStorageContainer,
     IStorageContainer storageContainer,
     IPreferencesManager preferencesManager,
     IDeviceInformationService deviceInformationService)
 {
     Mvx.RegisterSingleton(keyStorageContainer);
     Mvx.RegisterSingleton(storageContainer);
     Mvx.RegisterSingleton(preferencesManager);
     Mvx.RegisterSingleton(deviceInformationService);
 }
 public SecureChannelService(
     ICryptoService cryptoService,
     IStorageContainer storageContainer,
     IKeyStorageContainer keyStorageContainer,
     IDeviceInformationService deviceInformationService)
 {
     _storageContainer    = storageContainer;
     _keyStorageContainer = keyStorageContainer;
     _deviceId            = deviceInformationService.DeviceId;
     _cryptoService       = cryptoService;
     _httpClient          = new HttpClient
     {
         BaseAddress = new Uri(_baseUrl),
         Timeout     = TimeSpan.FromSeconds(20)
     };
 }
        public async Task <IActionResult> ExchangeTripleDesKeys(
            [FromBody] ExchangePublicKeyModel exchangePublicKeyModel,
            [FromServices] ISecurityService securityService,
            [FromServices] ICryptoService cryptoService,
            [FromServices] IKeyStorageContainer storageContainer)
        {
            if (ModelState.IsValid)
            {
                var rsaKey = await securityService.GetPrivateRSAKeyAsync("server");

                var clientRsaKey = await securityService.GetClientPublicRSAKeysAsync(exchangePublicKeyModel.Id);

                var encryptedClientTripleDesKey = Convert.FromBase64String(exchangePublicKeyModel.Key);
                var decryptedClientTripleDesKey = await cryptoService.DecryptRSAAsync(encryptedClientTripleDesKey, rsaKey);

                var tripleDesKey = await cryptoService.GenerateTripleDESKeyAsync();

                var mergedKey = cryptoService.GenerateCombinedTripleDesKey(tripleDesKey, Convert.FromBase64String(decryptedClientTripleDesKey));
                cryptoService.RegisterMergedKey(exchangePublicKeyModel.Id, mergedKey);

                var model = new ExchangePublicKeyModel
                {
                    Id  = "server",
                    Key = Convert.ToBase64String(tripleDesKey)
                };

                var encryptedModel = await cryptoService.EncryptRSAAsync(JsonConvert.SerializeObject(model), clientRsaKey);

                _logger.LogInformation("merged key: " + Convert.ToBase64String(mergedKey));

                return(Json(Convert.ToBase64String(encryptedModel)));
            }
            else
            {
                return(BadRequest(ModelState.ValidationState));
            }
        }
示例#4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="cryptoService">Intance of the crypto service</param>
 /// <param name="keyStorageContainer">Instance of the key storage container</param>
 public SecurityService(ICryptoService cryptoService, IKeyStorageContainer keyStorageContainer)
 {
     _cryptoService       = cryptoService;
     _keyStorageContainer = keyStorageContainer;
 }