Beispiel #1
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ClientLoginRequest)
            {
                Utils.PacketValidation(socket.Status, (int)SocketStatus.Connected, header.GetPayloadSize(), false);

                IPayload <IAuthInfo> packet = socket.PacketFactory.CreateClientLoginRequest(null, null, 0, socket.CryptoProvider.CryptoStream);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                bool    isSuccess = session.Auth(new Account(packet.Payload.Account.Id, packet.Payload.Account.Password));
                IPacket response  = socket.PacketFactory.CreateServerLoginResponse(isSuccess);

                if (isSuccess)
                {
                    OnClientLoggedIn(packet.Payload);
                }

                Utils.SendPacket(socket.SocketStream, response);

                socket.Status = (int)SocketStatus.LoggedIn;
                return(true);
            }

            return(false);
        }
Beispiel #2
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ServerBitLockerLockRequest)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.LoggedIn, header.GetPayloadSize(), false);

                IPayload <DriveInformation> packet = socket.PacketFactory.CreateServerBitLockerLockRequest(null);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                BitLocker bitLocker = BitLocker.GetVolume(packet.Payload.Name);
                bool      isSuccess = true;
                try {
                    bitLocker.Lock(true);
                }
                catch (Exception)
                {
                    isSuccess = false;
                }

                IPayload <bool> result = socket.PacketFactory.CreateClientBitLockerCommandResponse(isSuccess);
                Utils.SendPacket(socket.SocketStream, result);

                return(true);
            }

            return(false);
        }
Beispiel #3
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ServerKeyResponse)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.Handshaking, header.GetPayloadSize(), false);

                CryptoProvider    cryptoProvider = socket.CryptoProvider;
                IPayload <byte[]> packet         = socket.PacketFactory.CreateServerKeyResponse(null);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                cryptoProvider.SharedKey    = cryptoProvider.ECDiffieHellman.DeriveKeyMaterial(CngKey.Import(packet.Payload, CngKeyBlobFormat.EccPublicBlob));
                cryptoProvider.CryptoStream = new CryptoMemoryStream(cryptoProvider.SharedKey);
                byte[] nonce = new byte[cryptoProvider.CryptoStream.IV.Length];
                Array.Copy(cryptoProvider.SharedKey, nonce, nonce.Length);
                cryptoProvider.CryptoStream.IV = nonce;

                IPacket responsePacket = socket.PacketFactory.CreateClientKeyResponse(cryptoProvider.ECDiffieHellman.PublicKey.ToByteArray());
                Utils.SendPacket(socket.SocketStream, responsePacket);

                socket.Status = (int)ClientSocketStatus.Connected;
                return(true);
            }

            return(false);
        }
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ClientBitLockerCommandResponse)
            {
                Utils.PacketValidation(socket.Status, (int)SocketStatus.LoggedIn, header.GetPayloadSize(), false);
                IPayload <bool> packet = socket.PacketFactory.CreateClientBitLockerCommandResponse(false);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                messageQueue.Enqueue(packet.Type, packet.Payload);
                return(true);
            }

            return(false);
        }
Beispiel #5
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ServerBitLockerCommandResponse)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.LoggedIn, header.GetPayloadSize(), false);
                IPayload <bool> packet = socket.PacketFactory.CreateServerBitLockerCommandResponse(false);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                OnBitLockerCommandResponseReceived(packet.Payload);
                return(true);
            }

            return(false);
        }
Beispiel #6
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ClientDrivesResponse)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.LoggedIn);
                IPayload <DriveInformation[]> packet = socket.PacketFactory.CreateClientDrivesResponse(null);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                messageQueue.Enqueue(header.Type, packet.Payload);
                return(true);
            }

            return(false);
        }
Beispiel #7
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ManagerDrivesRequest)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.LoggedIn, header.GetPayloadSize(), false);
                IPayload <IDevice> packet = socket.PacketFactory.CreateManagerDrivesRequest(null);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                Utils.SendPacket(socket.SocketStream, socket.PacketFactory.CreateServerDrivesResponse(broadcaster.RequestDrives(packet.Payload)));

                return(true);
            }

            return(false);
        }
Beispiel #8
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ServerLoginResponse)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.Connected, header.GetPayloadSize(), false);

                IPayload <bool> packet = socket.PacketFactory.CreateServerLoginResponse(false);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                if (!packet.Payload)
                {
                    throw new InvalidAuthorizationDataException();
                }

                socket.Status = (int)ClientSocketStatus.LoggedIn;
                return(true);
            }

            return(false);
        }
Beispiel #9
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.IVChangeReqeust)
            {
                IPayload <byte[]> packet = socket.PacketFactory.CreateIVChangeRequest(null, socket.CryptoProvider.CryptoStream);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                IVExchangeAcceptEventArgs accept = new IVExchangeAcceptEventArgs();
                IVExchangeAccpetEvent(accept);

                if (accept.Accpet)
                {
                    socket.CryptoProvider.CryptoStream.IV = packet.Payload;
                }

                Utils.SendPacket(socket.SocketStream, socket.PacketFactory.CreateIVChangeResposne(accept.Accpet));
                return(true);
            }

            return(false);
        }
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.ManagerBitLockerLock)
            {
                Utils.PacketValidation(socket.Status, (int)ClientSocketStatus.LoggedIn, header.GetPayloadSize(), false);
                IPayload <ClientDrive> packet = socket.PacketFactory.CreateManagerBitLockerLockRequest(null);
                packet.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                IDevice receiver = (from device in deviceController.GetUserDevices(session.Account.Id) where device.DeviceIP.Equals(packet.Payload.IP) select device).FirstOrDefault();
                if (receiver != null)
                {
                    Utils.SendPacket(socket.SocketStream, socket.PacketFactory.CreateServerBitLockerCommandResponse(broadcaster.RequestBitLockerLock(receiver, packet.Payload.Drive)));
                }
                else
                {
                    Utils.SendPacket(socket.SocketStream, socket.PacketFactory.CreateServerBitLockerCommandResponse(false));
                }

                return(true);
            }

            return(false);
        }
Beispiel #11
0
        public bool Handle(IPacket header, IIBLVMSocket socket)
        {
            if (header.Type == PacketType.IVChangeResponse)
            {
                IPayload <bool> result = socket.PacketFactory.CreateIVChangeResposne(false);
                result.ParsePayload(header.GetPayloadSize(), socket.SocketStream);

                if (!result.Payload)
                {
                    throw new InvalidOperationException("IV Change request isn't accepted.");
                }

                byte[] nextIV = socket.CryptoProvider.NextIV;
                if (nextIV != null)
                {
                    socket.CryptoProvider.CryptoStream.IV = nextIV;
                }

                socket.CryptoProvider.NextIV = null;
                return(true);
            }

            return(false);
        }