예제 #1
0
        public void TestMethod1()
        {
            byte[] encryptByteArray = encryptor.Encrypt(Encoding.ASCII.GetBytes("=zasxi10021824 ajfd 22s"));
            string encryptStr       = Base32Object.GetEncodeStrResult(encryptByteArray);

            byte[] decryptByteArray = decryptor.Decrypt(encryptStr);
            string decryptStr       = Base32Object.GetDecodeStrResult(decryptByteArray);

            Assert.AreEqual("=zasxi10021824 ajfd 22s", decryptStr);
        }
        public void DecryptedOutputStringMatchesInputString()
        {
            const string inputString = "Test String";
            const string password    = "******";

            var encryptedString = encryptor.Encrypt(inputString, password);
            var decryptedString = decryptor.Decrypt(encryptedString, password);

            Assert.AreEqual(decryptedString, inputString);
        }
예제 #3
0
        public void binary_to_string()
        {
            string     expected = "z";
            string     diffs    = "01111010";
            List <int> diff     = new List <int>();

            diffs.ToList().ForEach(x => diff.Add(int.Parse(x.ToString())));
            string result = _decryptor.Decrypt(diff);

            Assert.Equal(expected, result);
        }
 public TextModel Decrypt(TextModel input)
 {
     return(new TextModel()
     {
         Text = _decryptor.Decrypt(input.Text)
     });
 }
예제 #5
0
        public void DecryptData(StateObject new_state, StateObject state, string sender, int count)
        {
            IntPtr output      = IntPtr.Zero;
            int    output_size = 0;

            try
            {
                int sender_flag = CLIENT;
                if (sender.Equals("server"))
                {
                    sender_flag = SERVER;
                }
                int    ret       = Decrypt.Decrypt(sender_flag, new_state.buffer, state.recvSize, count, ref output, ref output_size);
                byte[] decrypted = new byte[output_size];
                Marshal.Copy(output, decrypted, 0, output_size);

                // if we allow modification, take the response data from our decryption dll.
                if (modify.Equals(true))
                {
                    Console.WriteLine("Modified data!");
                    Console.WriteLine("x: {0}", Encoding.ASCII.GetString(decrypted));
                    new_state.buffer   = decrypted;
                    new_state.recvSize = output_size;
                }
            }
            finally
            {
                if (output != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(output);
                }
            }
        }
예제 #6
0
        private void Authenticate(byte[] packet)
        {
            var roomid        = NumberConversionExtensions.MakeWord(packet[4], packet[5]);
            var requestedRoom = this.manager.GetChatRoom(roomid);

            if (requestedRoom == null)
            {
                Log.Error($"Requested room {roomid} has not been registered before.");
                this.LogOff();
                return;
            }

            TokenDecryptor.Decrypt(ref packet);
            var tokenAsString = packet.ExtractString(TokenOffset, 10, Encoding.UTF8);

            if (!uint.TryParse(tokenAsString, out uint _))
            {
                Log.Error($"Token '{tokenAsString}' is not a parseable integer.");
                this.LogOff();
                return;
            }

            this.AuthenticationToken = tokenAsString;
            if (requestedRoom.TryJoin(this))
            {
                this.room = requestedRoom;
            }
            else
            {
                this.LogOff();
            }
        }
예제 #7
0
        private byte[] ReadRawData(Stream stream, Entity entity)
        {
            stream.Seek(entity.OffsetRawBlock, SeekOrigin.Begin);
            var buffer = stream.ReadBytes(entity.Size);

            _decryptor.Decrypt(buffer, entity.DecryptIndexBlock);
            return(buffer);
        }
예제 #8
0
        internal static T Decrypt <T>(Encrypted encrypted, IDecryptor decryptor)
        {
            var plaintext = decryptor.Decrypt(encrypted).ToUtf8();

            try
            {
                return(JsonConvert.DeserializeObject <T>(plaintext));
            }
            catch (JsonException e)
            {
                throw new InternalErrorException("Failed to parse JSON", e);
            }
        }
 public static AssetBundleArchive LoadAssetBundle(this ArchiveContainer container, string path, IDecryptor decryptor)
 {
     using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
     {
         using (var stream = decryptor.Decrypt(fileStream))
         {
             AssetBundleArchive bundle = AssetBundleArchive.Load(stream);
             bundle.Path = path;
             container.AddBundleArchive(bundle);
             return(bundle);
         }
     }
 }
예제 #10
0
        public int ProcessData()
        {
            int ret = SetDecryptor(decrypto.dll);

            if (ret != 0)
            {
                return(ret);
            }
            if (decrypto.format.Equals("json"))
            {
                var    output      = new IntPtr();
                var    output_size = 0;
                string sender      = "";
                reader = new JSONLogWriter();
                reader.Open(decrypto.input, "r");
                Transmissions trans = reader.ReadTransmission();
                foreach (LogEvent e in trans.LogEventList)
                {
                    try
                    {
                        if (e.sender == CLIENT)
                        {
                            sender = "client";
                        }
                        else
                        {
                            sender = "server";
                        }
                        Console.WriteLine("sender: {0} packet: {1} length: {2}", sender, e.count, e.data.Length);
                        Decrypt.Decrypt(e.sender, e.data, e.data.Length, e.count, ref output, ref output_size);
                        byte[] decrypted = new byte[output_size];
                        Marshal.Copy(output, decrypted, 0, output_size);
                        Console.WriteLine("\nAfter decrypt: {0}", Encoding.ASCII.GetString(decrypted));
                        Console.WriteLine("--------------------------------------");
                        if (writer != null)
                        {
                            writer.LogTransmission(decrypted, sender, e.count);
                        }
                    }
                    finally
                    {
                        if (output != IntPtr.Zero)
                        {
                            Marshal.FreeCoTaskMem(output);
                        }
                    }
                }
            }

            return(0);
        }
예제 #11
0
        private void PacketReceived(byte[] packet)
        {
            if (packet.Length < 3 || packet[0] != 0xC1)
            {
                return;
            }

            this.LastActivity = DateTime.Now;
            switch (packet[2])
            {
            case 0:
                this.Authenticate(packet);
                break;

            case 1:
            case 2:
            case 3:
                // We did never capture such packets, but they don't seem to be wrong (next is 4), so do nothing.
                break;

            case 4:
                if (this.room != null && this.CheckMessage(packet))
                {
                    MessageDecryptor.Decrypt(ref packet);
                    var message = packet.ExtractString(5, int.MaxValue, Encoding.UTF8);
                    if (Log.IsDebugEnabled)
                    {
                        Log.Debug($"Message reveived from {this.Index}: \"{message}\"");
                    }

                    this.room.SendMessage(this.Index, message);
                }

                break;

            case 5:
                // This is something like a keep-connection-alive packet.
                // Last activity is always set, so we have to do nothing here.
                Log.Debug("Keep-alive received");
                break;

            default:
                Log.Error($"Received unknown packet of type {packet[2]}: {packet.AsString()}");
                this.LogOff();
                break;
            }
        }
예제 #12
0
        public static Response <T> Read <T>(IDecryptor decryptor, NetMQMessage message)
        {
            // Frame 0: Message type
            // Frame 1: Payload
            Debug.Assert(message.FrameCount == 2);

            var type = (MessageType)message.Pop().ConvertToInt32();

            var payload = default(T);

            if (!message.First.IsEmpty)
            {
                payload = JsonConvert.DeserializeObject <T>(decryptor.Decrypt(message.Pop().ToByteArray()));
            }

            return(new Response <T>(type, payload));
        }
        public static Int32 ReadInt32(
            this IDecryptor decryptor,
            Stream stream,
            ulong cryptBlockIndex,
            ref ulong nextCryptBlockIndex,
            Endian endian
            )
        {
            var buffer = stream.FillBuffer(4);

            decryptor.Decrypt(buffer, cryptBlockIndex, ref nextCryptBlockIndex);
            if (endian == Endian.Big)
            {
                Array.Reverse(buffer);
            }

            return(BitConverter.ToInt32(buffer, 0));
        }
예제 #14
0
        public static Request <T> Read <T>(IDecryptor decryptor, NetMQMessage message)
        {
            // Frame 0: RequesterID
            // Frame 1: Empty
            // Frame 2: Message type
            // Frame 3: Payload
            Debug.Assert(message.FrameCount == 4);

            var requester = message.Pop().ToByteArray();

            message.Pop(); // Empty frame
            var type = (MessageType)message.Pop().ConvertToInt32();

            var payload = default(T);

            if (!message.First.IsEmpty)
            {
                payload = JsonConvert.DeserializeObject <T>(decryptor.Decrypt(message.Pop().ToByteArray()));
            }

            return(new Request <T>(requester, type, payload));
        }
예제 #15
0
 /// <summary>
 /// Decrypts incoming data.
 /// </summary>
 public byte[] Decrypt(byte[] input)
 {
     return(decryptor.Decrypt(input));
 }
 public static INotifyModelDecrypted Decrypt(this INotifyModel notifyModel, IDecryptor <INotifyModel, IDecryptorOption, INotifyModelDecrypted> decryptor)
 {
     return(decryptor.Decrypt(notifyModel));
 }