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(); }