Exemple #1
0
        static string WriteObfuscatedAppleClassAsAsset(string certPath, string classIncompleteErr, string classPrefix)
        {
            string appleError = null;
            int    key        = 0;

            int[]  order   = new int[0];
            byte[] tangled = new byte[0];
            try
            {
                byte[] bytes = File.ReadAllBytes(certPath);
                order = new int[bytes.Length / 20 + 1];

                // TODO: Integrate with upgraded Tangle!

                tangled = TangleObfuscator.Obfuscate(bytes, order, out key);
            }
            catch (Exception e)
            {
                Debug.LogWarning($"{classIncompleteErr}. Generating incomplete credentials file. " + e);
                appleError = $"  {classIncompleteErr}";
            }

            WriteObfuscatedClassAsAsset(classPrefix, key, order, tangled, tangled.Length != 0);

            return(appleError);
        }
        static string BuildObfuscatedAppleClass()
        {
            string appleError = null;
            int    key        = 0;

            int[]  order   = new int[0];
            byte[] tangled = new byte[0];
            try
            {
                byte[] bytes = System.IO.File.ReadAllBytes(k_AppleCertPath);
                order = new int[bytes.Length / 20 + 1];

                // TODO: Integrate with upgraded Tangle!

                tangled = TangleObfuscator.Obfuscate(bytes, order, out key);
            }
            catch (Exception e)
            {
                Debug.LogWarning("Invalid Apple Root Certificate. Generating incomplete credentials file. " + e);
                appleError = "  Invalid Apple Root Certificate";
            }
            BuildObfuscatedClass(TangleFileConsts.k_AppleClassPrefix, key, order, tangled, tangled.Length != 0);

            return(appleError);
        }
        static string BuildObfuscatedGooglePlayClass(string googlePlayPublicKey)
        {
            string googleError = null;
            int    key         = 0;

            int[]  order   = new int[0];
            byte[] tangled = new byte[0];
            try
            {
                var bytes = Convert.FromBase64String(googlePlayPublicKey);
                order = new int[bytes.Length / 20 + 1];

                tangled = TangleObfuscator.Obfuscate(bytes, order, out key);
            }
            catch (Exception e)
            {
                Debug.LogWarning("Invalid Google Play Public Key. Generating incomplete credentials file. " + e);
                googleError =
                    "  The Google Play License Key is invalid. GooglePlayTangle was generated with incomplete credentials.";
            }
            BuildObfuscatedClass(TangleFileConsts.k_GooglePlayClassPrefix, key, order, tangled, tangled.Length != 0);

            return(googleError);
        }
        /// <summary>
        /// Generates specified obfuscated class files.
        /// </summary>
        public static void ObfuscateSecrets(bool includeGoogle, ref string appleError,
                                            ref string googleError, string googlePlayPublicKey)
        {
            try
            {
                // First things first! Obfuscate! XHTLOA!
                {
                    appleError = null;
                    int    key     = 0;
                    int[]  order   = new int[0];
                    byte[] tangled = new byte[0];
                    try
                    {
                        byte[] bytes = System.IO.File.ReadAllBytes(kAppleCertPath);
                        order = new int[bytes.Length / 20 + 1];

                        // TODO: Integrate with upgraded Tangle!

                        tangled = TangleObfuscator.Obfuscate(bytes, order, out key);
                    }
                    catch (Exception e)
                    {
                        Debug.LogWarning("Invalid Apple Root Certificate. Generating incomplete credentials file. " + e);
                        appleError = "  Invalid Apple Root Certificate";
                    }
                    BuildObfuscatedClass("Apple", key, order, tangled, tangled.Length != 0);
                }

                if (includeGoogle)
                {
                    googleError = null;
                    int    key     = 0;
                    int[]  order   = new int[0];
                    byte[] tangled = new byte[0];
                    try
                    {
                        var bytes = Convert.FromBase64String(googlePlayPublicKey);
                        order = new int[bytes.Length / 20 + 1];

                        tangled = TangleObfuscator.Obfuscate(bytes, order, out key);
                    }
                    catch (Exception e)
                    {
                        Debug.LogWarning("Invalid Google Play Public Key. Generating incomplete credentials file. " + e);
                        googleError =
                            "  The Google Play License Key is invalid. GooglePlayTangle was generated with incomplete credentials.";
                    }
                    BuildObfuscatedClass("GooglePlay", key, order, tangled, tangled.Length != 0);
                }
            }
            catch (Exception e)
            {
                Debug.Log(e.StackTrace);
            }

            // Ensure all the Tangle classes exist, even if they were not generated at this time. Apple will always
            // be generated.
            if (!ObfuscatedClassExists("GooglePlay"))
            {
                try
                {
                    BuildObfuscatedClass("GooglePlay", 0, new int[0], new byte[0], false);
                }
                catch (Exception e)
                {
                    Debug.Log(e.StackTrace);
                }
            }

            AssetDatabase.Refresh();
        }