private static Func <IAuthenticatedEncryptorDescriptor> GetLazyDescriptorDelegate(IInternalXmlKeyManager keyManager, XElement keyElement) { // The <key> element will be held around in memory for a potentially lengthy period // of time. Since it might contain sensitive information, we should protect it. var encryptedKeyElement = keyElement.ToSecret(); try { return(() => keyManager.DeserializeDescriptorFromKeyElement(encryptedKeyElement.ToXElement())); } finally { // It's important that the lambda above doesn't capture 'descriptorElement'. Clearing the reference here // helps us detect if we've done this by causing a null ref at runtime. keyElement = null; } }
private static Func<IAuthenticatedEncryptor> GetLazyEncryptorDelegate(IInternalXmlKeyManager keyManager, XElement keyElement) { // The <key> element will be held around in memory for a potentially lengthy period // of time. Since it might contain sensitive information, we should protect it. var encryptedKeyElement = keyElement.ToSecret(); try { return () => keyManager.DeserializeDescriptorFromKeyElement(encryptedKeyElement.ToXElement()).CreateEncryptorInstance(); } finally { // It's important that the lambda above doesn't capture 'descriptorElement'. Clearing the reference here // helps us detect if we've done this by causing a null ref at runtime. keyElement = null; } }