Пример #1
0
        /// <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);
        }