Beispiel #1
0
        internal async Task SendPublicMessageAsync(PublicChatRoom chatRoom, string content)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(null);
            }

            if (!_publicRooms.Contains(chatRoom))
            {
                throw new NotSupportedException("Enter ChatRoom first.");
            }

            try
            {
                var message = new Message
                {
                    Content   = content,
                    Sender    = _publicIdentity,
                    TimeStamp = DateTimeOffset.Now.ToUnixTimeSeconds()
                };
                var signedData = await CreateSignAndEncodeDataAsync(message);

                var encrypted = CryptUtils.AesEncryptByteArray(signedData, chatRoom.PreSharedKey);

                var chatRoomIdentifier = chatRoom.GetEncryptedIdentifier();
                var packet             = new PublicMessagePacket(encrypted, chatRoomIdentifier);

                await _networkHandler.SendPacketAsync(packet);
            }
            catch (Exception) when(_disposed)
            {
            }
        }
Beispiel #2
0
        internal async Task SendInviteAsync(string name, byte[] preSharedKey, UserIdentity receiver)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(null);
            }

            try
            {
                var invite = new Invite
                {
                    Name         = name,
                    PreSharedKey = preSharedKey,
                    Sender       = _publicIdentity
                };
                var signedData = await CreateSignAndEncodeDataAsync(invite);

                var publicKey = PemUtils.GetKeyFromPem(receiver.PublicKey);
                var aesKey    = CryptUtils.GenrateAesKey();

                var encryptedAesKey = CryptUtils.RsaEncryptWithPublic(aesKey, publicKey);
                var encryptedData   = CryptUtils.AesEncryptByteArray(signedData, aesKey);

                var packet = new InvitePacket(encryptedData, encryptedAesKey);

                await _networkHandler.SendPacketAsync(packet);
            }
            catch (Exception) when(_disposed)
            {
            }
        }
Beispiel #3
0
        internal byte[] GetEncryptedIdentifier()
        {
            var encrypted = CryptUtils.AesEncryptByteArray(_nameBytes, PreSharedKey);

            return(encrypted);
        }