Beispiel #1
0
        private bool CryptHeaderCik(bool encrypt)
        {
            if ((!encrypt && CikIsDecrypted) || IsXvcFile)
            {
                CikIsDecrypted = true;
                return(true);
            }

            if (!OdkKeyLoaded)
            {
                return(false);
            }

            var cipher = new AesCipher(OdkKey);

            if (encrypt)
            {
                cipher.EncryptBlock(Header.EncryptedCIK, 0, 0x10, Header.EncryptedCIK, 0);
                cipher.EncryptBlock(Header.EncryptedCIK, 0x10, 0x10, Header.EncryptedCIK, 0x10);
            }
            else
            {
                cipher.DecryptBlock(Header.EncryptedCIK, 0, 0x10, Header.EncryptedCIK, 0);
                cipher.DecryptBlock(Header.EncryptedCIK, 0x10, 0x10, Header.EncryptedCIK, 0x10);
            }

            CikIsDecrypted = !encrypt;

            return(true);
        }
Beispiel #2
0
        static byte[] CryptBlock(bool encrypt, byte[] data, int dataOffset, int dataLength, byte[] iv, AesCipher cipher)
        {
            var newData = new byte[dataLength];

            //if (!encrypt)
            for (int i = 0; i < dataLength; i++)
            {
                newData[i] = (byte)(data[dataOffset + i] ^ iv[i % iv.Length]);
            }

            var cryptData = new byte[dataLength];

            if (encrypt)
            {
                cipher.EncryptBlock(newData, 0, dataLength, cryptData, 0);
            }
            else
            {
                cipher.DecryptBlock(newData, 0, dataLength, cryptData, 0);
            }

            for (int i = 0; i < dataLength; i++)
            {
                cryptData[i] = (byte)(cryptData[i] ^ iv[i % iv.Length]);
            }

            return(cryptData);
        }
Beispiel #3
0
        private void CryptHeaderCik(bool encrypt)
        {
            if ((!encrypt && CikIsDecrypted) || IsXvcFile)
            {
                CikIsDecrypted = true;
                return;
            }

            if (!OdkKeyLoaded)
                return;

            var cipher = new AesCipher(OdkKey);
            if (encrypt)
            {
                cipher.EncryptBlock(Header.EncryptedCIK, 0, 0x10, Header.EncryptedCIK, 0);
                cipher.EncryptBlock(Header.EncryptedCIK, 0x10, 0x10, Header.EncryptedCIK, 0x10);
            }
            else
            {
                cipher.DecryptBlock(Header.EncryptedCIK, 0, 0x10, Header.EncryptedCIK, 0);
                cipher.DecryptBlock(Header.EncryptedCIK, 0x10, 0x10, Header.EncryptedCIK, 0x10);
            }

            CikIsDecrypted = !encrypt;
        }