Example #1
0
        /// <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);
        }