public XmlSerializedDescriptorInfo ExportToXml() { // <descriptor> // <encryption algorithm="..." /> // <validation algorithm="..." /> <!-- only if not GCM --> // <masterKey requiresEncryption="true">...</masterKey> // </descriptor> var encryptionElement = new XElement("encryption", new XAttribute("algorithm", Configuration.EncryptionAlgorithm)); var validationElement = (AuthenticatedEncryptorFactory.IsGcmAlgorithm(Configuration.EncryptionAlgorithm)) ? (object)new XComment(" AES-GCM includes a 128-bit authentication tag, no extra validation algorithm required. ") : (object)new XElement("validation", new XAttribute("algorithm", Configuration.ValidationAlgorithm)); var outerElement = new XElement("descriptor", encryptionElement, validationElement, MasterKey.ToMasterKeyElement()); return(new XmlSerializedDescriptorInfo(outerElement, typeof(AuthenticatedEncryptorDescriptorDeserializer))); }
public void Unprotect_KeyNotFound_RefreshOnce_CanFindKey() { // Arrange Guid notFoundKeyId = new Guid("654057ab-2491-4471-a72a-b3b114afda38"); byte[] protectedData = BuildProtectedDataFromCiphertext( keyId: notFoundKeyId, ciphertext: new byte[0]); var mockDescriptor = new Mock <IAuthenticatedEncryptorDescriptor>(); var mockEncryptorFactory = new Mock <IAuthenticatedEncryptorFactory>(); mockEncryptorFactory.Setup(o => o.CreateEncryptorInstance(It.IsAny <IKey>())).Returns(new Mock <IAuthenticatedEncryptor>().Object); var encryptorFactory = new AuthenticatedEncryptorFactory(NullLoggerFactory.Instance); // the keyring has only one key Key key = new Key(Guid.Empty, DateTimeOffset.Now, DateTimeOffset.Now, DateTimeOffset.Now, mockDescriptor.Object, new[] { mockEncryptorFactory.Object }); var keyRing = new CacheableKeyRing(CancellationToken.None, DateTimeOffset.MaxValue, key, new[] { key }); // the refresh keyring has the notfound key Key key2 = new Key(notFoundKeyId, DateTimeOffset.Now, DateTimeOffset.Now, DateTimeOffset.Now, mockDescriptor.Object, new[] { mockEncryptorFactory.Object }); var keyRing2 = new CacheableKeyRing(CancellationToken.None, DateTimeOffset.MaxValue, key, new[] { key2 }); var keyRingProvider = CreateKeyRingProvider(new RefreshTestKeyRingProvider(keyRing, keyRing2)); IDataProtector protector = new KeyRingBasedDataProtector( keyRingProvider: keyRingProvider, logger: GetLogger(), originalPurposes: null, newPurpose: "purpose"); // Act & assert var result = protector.Unprotect(protectedData); Assert.Empty(result); }