示例#1
0
        private void AcceptFriendAsync()
        {
            string invitingPublicDHKey = lastRecivedInvitation.publicKeySender;
            string p            = lastRecivedInvitation.p;
            string g            = lastRecivedInvitation.g;
            string invitationID = lastRecivedInvitation.invitationId.ToString();

            model.ReceivedInvitations.RemoveAt(model.ReceivedInvitations.Count - 1);
            lastRecivedInvitation = null;
            OnPropertyChanged(nameof(InvitationsBoxVisibility));
            OnPropertyChanged(nameof(LastInvitationUsername));

            (string publicDHKey, byte[] privateDHKey) = model.GenerateDHKeys(p, g);
            byte[] conversationKey = model.GenerateConversationKey(invitingPublicDHKey, p, g, privateDHKey);
            (string conversationID, byte[] conversationIV) = model.AcceptFriendInvitation(invitationID, publicDHKey);
            byte[] encryptedConversationKey = Security.AESEncrypt(conversationKey, model.UserKey, conversationIV); //Using userKey to encrypt conversationKey
            model.SendEncryptedConversationKey(conversationID, encryptedConversationKey);

            if (model.ReceivedInvitations.Count > 0)
            {
                lastRecivedInvitation = model.ReceivedInvitations[^ 1];