public bool DecryptRulePackage(out byte[] outputDecryptedRulePackageData, out byte[] outputEncryptedRulePackageDataWithSymmetricKey) { XmlNode encryptionNode = this.GetEncryptionNode(); if (encryptionNode == null) { outputDecryptedRulePackageData = null; outputEncryptedRulePackageDataWithSymmetricKey = null; return(false); } byte[] array = this.AsymmetricDecrypt(this.GetEncryptionParameter(encryptionNode, "ns:Key")); byte[] array2 = this.AsymmetricDecrypt(this.GetEncryptionParameter(encryptionNode, "ns:IV")); using (this.algorithm = new AesCryptoServiceProvider()) { this.algorithm.Key = array; this.algorithm.IV = array2; this.DecryptEntities(); this.DecryptAffinities(); this.DecryptRegexes(); this.DecryptKeywordLists(); } this.RemoveEncryptionNode(); outputDecryptedRulePackageData = XmlProcessingUtils.XmlDocumentToUtf16EncodedBytes(this.document); outputEncryptedRulePackageDataWithSymmetricKey = this.ReplaceSymmetricAlgorithmParameters(array, array2); return(true); }
private byte[] ReplaceSymmetricAlgorithmParameters(byte[] symmetricKey, byte[] initializationVector) { XmlDocument xmlDocument = new XmlDocument(); XmlReader reader = XmlReader.Create(new MemoryStream(this.inputRulePackageData), ClassificationDefinitionUtils.CreateSafeXmlReaderSettings()); xmlDocument.Load(reader); XmlNode xmlNode = RulePackageDecrypter.InternalRulePackageDecrypter.SelectAndEnsureSingleNode(xmlDocument, this.nsmgr, "/ns:RulePackage/ns:RulePack/ns:Encryption/ns:Key"); if (xmlNode == null) { throw new XmlException("Encryption key node not found"); } xmlNode.InnerText = Convert.ToBase64String(symmetricKey); XmlNode xmlNode2 = RulePackageDecrypter.InternalRulePackageDecrypter.SelectAndEnsureSingleNode(xmlDocument, this.nsmgr, "/ns:RulePackage/ns:RulePack/ns:Encryption/ns:IV"); if (xmlNode2 == null) { throw new XmlException("Encryption IV node not found"); } xmlNode2.InnerText = Convert.ToBase64String(initializationVector); return(XmlProcessingUtils.XmlDocumentToUtf16EncodedBytes(xmlDocument)); }