/// <summary> /// Meine Nachricht holen /// </summary> /// <returns>Nachricht(ViewMessage)</returns> public async Task <Models.ViewMessage> getMessage() { try { var request = new Models.GetMessageRequest(); //Unix-Timestamp erstellen request.timestamp = Convert.ToString(Util.UnixTimeNow()); //Anfrage signieren request.dig_sig = EncryptLogic.createSignGetMessageRequest(request.timestamp, user.Username, user.privatekey); HttpResponseMessage response = await client.PatchAsJsonAsync("/" + user.Username + "/message", request); if (response.IsSuccessStatusCode) { Models.Message msg_response = await response.Content.ReadAsAsync <Models.Message>(); //PublicKey vom Absender holen string publickey = await getPublicKeyFromUser(msg_response.sender); //Nachricht prüfen if (!EncryptLogic.verfiyInnerEnvelope(msg_response, publickey)) { throw new Exception("Die Nachricht ist nicht verifiziert."); } //Key_recipient_enc(Symmetrischer Schlüssel verschlüsselt) entschlüsseln byte[] key_recipient_enc = Convert.FromBase64String(msg_response.key_recipient_enc); byte[] key_recipient = EncryptLogic.toDecryptKeyRecipient(key_recipient_enc, user.privatekey); //IV byte[] iv = Convert.FromBase64String(msg_response.iv); //Cipher(verschlüsselte Nachricht) entschlüsseln byte[] cipher_bytes = Convert.FromBase64String(msg_response.cipher); string msg_dec = EncryptLogic.toDecryptMessage(cipher_bytes, key_recipient, iv); var vm = new Models.ViewMessage(); vm.sender = msg_response.sender; vm.content = msg_dec; return(vm); } else { throw new HttpRequestException("URL:" + response.RequestMessage.RequestUri.AbsolutePath + Environment.NewLine + "HTTP-Statuscode: " + (int)response.StatusCode + " - " + response.StatusCode); } } catch (Exception ex) { Util.Log(ex.Message); } return(null); }