Example #1
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[header.m_skinCount & 511];
            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                switch (SignedMod(kidx, 3))
                {
                case 0:
                    kidx += 341;
                    break;

                case 1:
                    kidx = (uint)SignedMod(kidx * 7, header.m_buildVersion);
                    break;

                case 2:
                    kidx -= 13;
                    break;
                }
                buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #2
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[header.m_buildVersion & 511];
            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                switch (SignedMod(kidx, 3))
                {
                case 0:
                    kidx += 1273;
                    break;

                case 1:
                    kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion);
                    break;

                case 2:
                    kidx -= 17;
                    break;
                }
            }
            return(buffer);
        }
Example #3
0
 public byte[] Key(TRGHeader header, int length)
 {
     byte[] buffer = new byte[length];
     uint kidx, okidx;
     kidx = okidx = (uint) (length * header.m_buildVersion);
     for (uint i = 0; i != length; ++i)
     {
         buffer[i] = Keytable[SignedMod(kidx, 512)];
         kidx += okidx % 61;
     }
     return buffer;
 }
Example #4
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx   = (uint)length * header.m_buildVersion;

            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     -= header.m_buildVersion & 511;
            }
            return(buffer);
        }
Example #5
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[length + 256];
            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += (header.m_buildVersion * (uint)header.m_skinCount) % 7;
            }
            return(buffer);
        }
Example #6
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx   = Keytable[header.m_skinCount & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      -= 43;
                buffer[i] ^= digest[SignedMod(kidx + header.m_skinCount, SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #7
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[header.m_skinCount & 511];
            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += okidx % 61;
            }
            return(buffer);
        }
Example #8
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[(length * Keytable[0]) & 511];
            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx      = header.m_buildVersion - kidx;
            }
            return(buffer);
        }
Example #9
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx   = Keytable[header.m_buildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += (uint)header.m_packageCount + digest[SignedMod(header.m_packageCount, SHA1_DIGESTSIZE)];
                buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #10
0
        public byte[] Key(TRGHeader header, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[header.m_buildVersion & 511];
            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += (uint)header.m_packageCount;
            }
            return(buffer);
        }
Example #11
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = (uint)(length * header.m_buildVersion);
            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += okidx % 13;
                buffer[i] ^= digest[SignedMod(kidx + header.GetNonEncryptedMagic(), SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #12
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = (uint)(2 * digest[7]);
            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += (uint)(header.m_buildVersion * header.m_skinCount) % 7;
                buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #13
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[(digest[3] * Keytable[111]) & 511];
            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx       = header.m_buildVersion - kidx;
                buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)];
            }
            return(buffer);
        }
Example #14
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = (uint)(digest[5] + header.m_skinCount) & 511;
            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += okidx % 29;
                buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_skinCount, SHA1_DIGESTSIZE)] + 1);
            }
            return(buffer);
        }
Example #15
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            kidx = okidx = Keytable[((3 * digest[11]) - length) & 511];
            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += okidx % 29;
                buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)] + 1);
            }
            return(buffer);
        }
Example #16
0
        public byte[] IV(TRGHeader header, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx, okidx;

            return(buffer);

            // IV_INVALID
            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                // IV_INVALID
                // IV_INVALID
            }
            return(buffer);
        }
Example #17
0
        public ResourceGraph(ClientHandler client, Stream stream, string name)
        {
            using (BinaryReader reader = new BinaryReader(stream)) {
                m_header = reader.Read <TRGHeader>();
                if (IsPre152(m_header))
                {
                    stream.Position = 0;
                    m_header        = reader.Read <TRGHeader6>().Upgrade();
                }

                var version = m_header.GetVersion();
                if (version != 5 && version != 6 && version != 7 && version != 8)
                {
                    throw new InvalidDataException($"unable to parse TRG. invalid version {version}, expected 5, 6, 7 or 8");
                }

                var isEnc = m_header.IsEncrypted();

                if (!isEnc)
                {
                    ParseBlocks(reader, name);
                }
                else
                {
                    using (var decryptedReader = ManifestCryptoHandler.GetDecryptedReader(name, "TRG", m_header, m_header.m_buildVersion, client.Product, stream))
                        ParseBlocks(decryptedReader, name);
                }
            }

            if (m_packages == null)
            {
                throw new NullReferenceException(nameof(m_packages));
            }
            if (m_skins == null)
            {
                throw new NullReferenceException(nameof(m_skins));
            }
            if (m_graphBlock == null)
            {
                throw new NullReferenceException(nameof(m_graphBlock));
            }
        }
Example #18
0
 public static bool IsPre152(TRGHeader header)
 {
     return(header.m_buildVersion < ProductHandler_Tank.VERSION_152_PTR || header.m_buildVersion == 72604); // 72604 = 1.51 on proc2
 }