private async Task <ExchangePublicKeyModel> ExchangeRsaKeyAsync(string key) { var payload = new ExchangePublicKeyModel() { Id = _deviceId, Key = key }; var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json"); var serverKeyResponse = await _httpClient.PostAsync("api/securechannel/exchangepublickey", content); var keyModelString = await serverKeyResponse.Content.ReadAsStringAsync(); var keyModel = JsonConvert.DeserializeObject <ExchangePublicKeyModel>(keyModelString); return(keyModel); }
public async Task <IActionResult> ExchangePublicKeys( [FromBody] ExchangePublicKeyModel exchangePublicKeyModel, [FromServices] ISecurityService securityService) { if (ModelState.IsValid) { var key = await securityService.GetPublicRSAKeyAsync("server"); await securityService.SaveClientRSAKeyAsync(exchangePublicKeyModel.Id, exchangePublicKeyModel.Key); return(Json(new ExchangePublicKeyModel { Id = "server", Key = key })); } else { return(BadRequest(ModelState.ValidationState)); } }
private async Task <ExchangePublicKeyModel> ExchangeTripleDesKeyAsync(string key, string rsaKey) { var payload = new ExchangePublicKeyModel() { Id = _deviceId, Key = key }; var content = new StringContent(JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json"); var serverKeyResponse = await _httpClient.PostAsync("api/securechannel/exchangetripledeskey", content); var keyModelJson = await serverKeyResponse.Content.ReadAsStringAsync(); var keyModelString = JsonConvert.DeserializeObject <string>(keyModelJson); var decryptedServerModel = await _cryptoService.DecryptRSAAsync(Convert.FromBase64String(keyModelString), rsaKey); var keyModel = JsonConvert.DeserializeObject <ExchangePublicKeyModel>(decryptedServerModel); return(keyModel); }
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)); } }