/// <summary>
        /// Releases managed resources.
        /// </summary>
        /// <param name="disposing">true, if called from Dispose(), false, if invoked inside a finalizer.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;
            if (disposing && _symmetricSignatureProvider != null)
            {
                _cryptoProviderFactory.ReleaseSignatureProvider(_symmetricSignatureProvider.Value);
            }
        }
        /// <summary>
        /// Releases managed resources.
        /// </summary>
        /// <param name="disposing">true, if called from Dispose(), false, if invoked inside a finalizer.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                _disposed = true;
                if (disposing)
                {
                    if (_symmetricSignatureProvider != null)
                    {
                        _cryptoProviderFactory.ReleaseSignatureProvider(_symmetricSignatureProvider.Value);
                    }

                    if (_aesGcmObjectPool != null)
                    {
                        foreach (var item in _aesGcmObjectPool.Items)
                        {
                            item.Value?.Dispose();
                        }
                    }
                }
            }
        }