Example #1
0
        public void Encrypt(IVocabularyProvider data, string what, Stream writer)
        {
            int  overhead = 0;
            long padding  = writer.Position;
            var  rnd      = new Random();

            using (var briter = new BinaryWriter(writer, Encoding.Default, true))
            {
                foreach (char t in what)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        var ch = (ushort)(t & 0xF << 4 * j ^ data.Next());
                        briter.Write(ch);
                    }
                    if (t % 3 == 0)
                    {
                        briter.Write((short)rnd.Next(1023, 65535));
                        overhead++;
                    }
                    if (t % 2 == 0)
                    {
                        briter.Write((short)rnd.Next(1023, 65535));
                        overhead++;
                    }
                }
            }
            writer.SetLength(padding + what.Length * 8 + overhead * 2);
        }
Example #2
0
        public string Decrypt(IVocabularyProvider data, Stream reader)
        {
            int  overhead = 0;
            var  builder = new StringBuilder();
            long readerLength = reader.Length, streamLength = readerLength - reader.Position;

            using (var breader = new BinaryReader(reader, Encoding.Default, true))
            {
                while (builder.Length < (streamLength - overhead * 2) / 8 && readerLength >= reader.Position + 8)
                {
                    char x = default;
                    for (int j = 0; j < 4; j++)
                    {
                        var z = breader.ReadInt16();
                        var y = (char)(z ^ data.Next());
                        x |= y;
                    }
                    if (x % 3 == 0 && readerLength >= reader.Position + 2)
                    {
                        breader.ReadInt16();
                        overhead++;
                    }
                    if (x % 2 == 0 && readerLength >= reader.Position + 2)
                    {
                        breader.ReadInt16();
                        overhead++;
                    }
                    builder.Append(x);
                }
            }
            return(builder.ToString());
        }
Example #3
0
 private static CryptoDataV2 CheckCryptoData(IVocabularyProvider data)
 {
     if (!(data is CryptoDataV2 datav2))
     {
         throw new Exception("CryptorV2 expects CryptoDataV2 or later version as IVocabularyProvider");
     }
     return(datav2);
 }
Example #4
0
 public static string Decrypt(IVocabularyProvider data, Stream reader)
 {
     foreach (var cryptor in Cryptors)
     {
         if (cryptor.CanDecrypt(reader))
         {
             return(cryptor.Decrypt(data, reader));
         }
     }
     return(null);
 }
Example #5
0
        public virtual string Decrypt(IVocabularyProvider data, Stream reader)
        {
            var offset = (reader.ReadByte() ^ data.Next()) & 0xFF;

            reader.Position = offset;
            for (int i = 0; i < (offset - (Magic.Length + 1) & 0xF); i++)
            {
                data.Next();
            }
            return(LegacyCryptor.Singleton.Decrypt(data, reader));
        }
Example #6
0
        public virtual void Encrypt(IVocabularyProvider data, string what, Stream writer)
        {
            writer.Write(Magic, 0, Magic.Length);
            var rnd          = new Random();
            var garbageCount = rnd.Next(10, 250);
            var totalPadding = (byte)((garbageCount + Magic.Length + 1 ^ data.Next()) & 0xFF);
            var buffer       = new byte[garbageCount + 1];

            rnd.NextBytes(buffer);
            buffer[0] = totalPadding;
            writer.Write(buffer, 0, buffer.Length);
            for (int i = 0; i < (garbageCount & 0xF); i++)
            {
                data.Next();
            }
            LegacyCryptor.Singleton.Encrypt(data, what, writer);
        }
Example #7
0
 public static void Encrypt(IVocabularyProvider data, string what, Stream writer)
 {
     Cryptors[0].Encrypt(data, what, writer);
 }
Example #8
0
 public override void Encrypt(IVocabularyProvider data, string what, Stream writer)
 {
     base.Encrypt(CheckCryptoData(data).UpgradeToV2(), what, writer);
 }
Example #9
0
 public override string Decrypt(IVocabularyProvider data, Stream reader)
 {
     return(base.Decrypt(CheckCryptoData(data).UpgradeToV2(), reader));
 }