Example #1
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.BuildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                switch (kidx % 3)
                {
                case 0:
                    kidx += 103;
                    break;

                case 1:
                    kidx = 4 * kidx % header.BuildVersion;
                    break;

                case 2:
                    --kidx;
                    break;
                }
            }

            return(buffer);
        }
Example #2
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[SignedMod(length * Keytable[0], 512)];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                switch (SignedMod(kidx, 3))
                {
                case 0:
                    kidx += 103;
                    break;

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

                case 2:
                    --kidx;
                    break;
                }
            }

            return(buffer);
        }
Example #3
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[(digest[7] * Keytable[0]) & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                switch (kidx % 3)
                {
                case 0:
                    kidx += 103;
                    break;

                case 1:
                    kidx = 4 * kidx % header.BuildVersion;
                    break;

                case 2:
                    --kidx;
                    break;
                }

                buffer[i] ^= digest[(kidx + header.BuildVersion) % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #4
0
        protected void Read(BinaryReader reader, string name, ProgressReportSlave worker = null)
        {
            reader.BaseStream.Position = 0;
            uint cmfVersion = reader.ReadUInt32();

            reader.BaseStream.Position = 0;

            // todo: the int of Header21 is converted to uint without checking

            if (CMFHeaderCommon.IsV22(cmfVersion))
            {
                Header = reader.Read <CMFHeader22>().Upgrade();
            }
            else if (cmfVersion >= 39028)
            {
                Header = reader.Read <CMFHeader21>().Upgrade();
            }
            else
            {
                Header = reader.Read <CMFHeader20>().Upgrade();
            }
            worker?.ReportProgress(0, $"Loading CMF {name}...");

            if (Header.Magic >> 8 == ENCRYPTED_MAGIC)
            {
                using (BinaryReader decryptedReader = DecryptCMF(reader, name)) {
                    ParseCMF(decryptedReader);
                }
            }
            else
            {
                ParseCMF(reader);
            }
        }
Example #5
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = 0;
            }

            return(buffer);
        }
Example #6
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx   = Keytable[header.DataCount & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[kidx % 512];
                kidx      += 3;
                buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #7
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[length + 256];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += header.EntryCount;
            }

            return(buffer);
        }
Example #8
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];
            uint   kidx   = (uint)(2 * digest[5]);

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx       = header.BuildVersion - kidx;
                buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }
Example #9
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[(2 * digest[13] - length) % 512];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                buffer[i] = digest[(i + kidx) % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #10
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Constrain(length * header.BuildVersion);

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     += 3;
            }

            return(buffer);
        }
Example #11
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.BuildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     += header.EntryCount;
            }

            return(buffer);
        }
Example #12
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.DataCount & 511];

            for (int i = 0; i != length; ++i)
            {
                kidx     += header.EntryCount + digest[header.EntryCount % SHA1_DIGESTSIZE];
                buffer[i] = digest[kidx % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #13
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.BuildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += 3;
            }

            return(buffer);
        }
Example #14
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[length + 256];

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     += 3;
            }

            return(buffer);
        }
Example #15
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.BuildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[kidx % 512];
                kidx      -= 43;
                buffer[i] ^= (byte)(digest[(kidx + header.DataCount) % SHA1_DIGESTSIZE] % 0xFF);
            }

            return(buffer);
        }
Example #16
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Keytable[header.DataCount & 511];
            uint increment = header.EntryCount + digest[SignedMod(header.EntryCount, SHA1_DIGESTSIZE)];

            for (int i = 0; i != length; ++i)
            {
                kidx      += increment;
                buffer[i] ^= digest[SignedMod(kidx, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }
Example #17
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Keytable[SignedMod(length * Keytable[0], 512)];
            uint increment = kidx % 61;

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[SignedMod(kidx, 512)];
                kidx     += increment;
            }

            return(buffer);
        }
Example #18
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = (uint)length * header.BuildVersion;
            uint increment = header.EntryCount + digest[header.EntryCount % SHA1_DIGESTSIZE];

            for (int i = 0; i != length; ++i)
            {
                kidx     += increment;
                buffer[i] = digest[kidx % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #19
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint       kidx      = 193;
            const uint increment = 319;

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     -= increment;
            }

            return(buffer);
        }
Example #20
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = Keytable[header.BuildVersion & 511];

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      -= 0x2B;
                buffer[i] ^= digest[SignedMod(kidx + header.DataCount, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }
Example #21
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Keytable[header.DataCount & 511];
            uint increment = kidx % 61;

            for (uint i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     += increment;
            }

            return(buffer);
        }
Example #22
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = header.BuildVersion * (uint)length;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[kidx % 512];
                kidx       = header.BuildVersion - kidx;
                buffer[i] ^= digest[(i + kidx) % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #23
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx = (digest[7] + header.DataCount) & 511;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += 3;
                buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }
Example #24
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Constrain(digest[7] + (ushort)header.DataCount) & 511;
            uint increment = header.EntryCount + digest[header.EntryCount % SHA1_DIGESTSIZE];

            for (int i = 0; i != length; ++i)
            {
                kidx     += increment;
                buffer[i] = digest[kidx % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #25
0
        public byte[] Key(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Keytable[length + 256];
            uint increment = header.BuildVersion * header.DataCount % 7;

            for (int i = 0; i != length; ++i)
            {
                buffer[i] = Keytable[kidx % 512];
                kidx     += increment;
            }

            return(buffer);
        }
Example #26
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Keytable[(2 * digest[13] - length) % 512];
            uint increment = header.EntryCount + digest[header.EntryCount % SHA1_DIGESTSIZE];

            for (int i = 0; i != length; ++i)
            {
                kidx     += increment;
                buffer[i] = digest[kidx % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #27
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Constrain(header.BuildVersion * length);
            uint increment = kidx % 29;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[kidx % 512];
                kidx      += increment;
                buffer[i] ^= (byte)((digest[(kidx + header.EntryCount) % SHA1_DIGESTSIZE] + 1) % 0xFF);
            }

            return(buffer);
        }
Example #28
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = Constrain(header.BuildVersion * length);
            uint increment = kidx % 13;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[kidx % 512];
                kidx      += increment;
                buffer[i] ^= digest[(kidx + 0x14666D63) % SHA1_DIGESTSIZE];
            }

            return(buffer);
        }
Example #29
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = 2u * digest[1];
            uint increment = header.BuildVersion * header.DataCount % 7;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += increment;
                buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }
Example #30
0
        public byte[] IV(CMFHeaderCommon header, string name, byte[] digest, int length)
        {
            byte[] buffer = new byte[length];

            uint kidx      = (uint)length * header.BuildVersion;
            uint increment = kidx % 13;

            for (int i = 0; i != length; ++i)
            {
                buffer[i]  = Keytable[SignedMod(kidx, 512)];
                kidx      += increment;
                buffer[i] ^= digest[SignedMod(kidx + 0x15666D63, SHA1_DIGESTSIZE)];
            }

            return(buffer);
        }