/// <summary> /// Creates an ephemeral <see cref="IDataProtectionProvider"/>, optionally providing /// services (such as logging) for consumption by the provider. /// </summary> public EphemeralDataProtectionProvider(IServiceProvider services) { IKeyRingProvider keyringProvider; if (OSVersionUtil.IsWindows()) { // Fastest implementation: AES-256-GCM [CNG] keyringProvider = new EphemeralKeyRing <CngGcmAuthenticatedEncryptionSettings>(); } else { // Slowest implementation: AES-256-CBC + HMACSHA256 [Managed] keyringProvider = new EphemeralKeyRing <ManagedAuthenticatedEncryptionSettings>(); } var logger = services.GetLogger <EphemeralDataProtectionProvider>(); logger?.UsingEphemeralDataProtectionProvider(); _dataProtectionProvider = new KeyRingBasedDataProtectionProvider(keyringProvider, services); }