Overview
OpenSSL 3.0 introduced the provider architecture as the successor to the engine interface. The QAT provider (qatprovider) implements this new interface, enabling QAT hardware and software acceleration in OpenSSL 3.0 and later versions.
Key Differences: Provider vs Engine
| Feature | Engine Interface | Provider Interface |
|---|---|---|
| OpenSSL Version | 1.1.1 and earlier | 3.0 and later |
| Architecture | Legacy mechanism | Modern, flexible design |
| Default Mode | Yes (without flag) | Requires --enable-qat_provider |
| Library Name | qatengine.so | qatprovider.so |
| Configuration | OPENSSL_ENGINES env var | OpenSSL config file or command-line |
| Future Support | Maintenance mode | Active development |
Building with Provider Support
Enabling the Provider Interface
To build the QAT Engine with provider support, use the--enable-qat_provider configure flag:
If the
--enable-qat_provider flag is not specified, the build will default to the engine interface for backward compatibility.Build Options
You can combine the provider flag with other configuration options:Using the QAT Provider
Command-Line Usage
Once built and installed, you can use the QAT provider with OpenSSL commands:QAT Hardware
QAT Software
Configuration File
You can configure OpenSSL to use the QAT provider by default through the OpenSSL configuration file:Programmatic Usage
In your C/C++ applications:Provider Features
Experimental Status
The QAT provider support is currently an experimental feature with:- Limited functional testing
- Tested with real-time applications like NGINX and HAProxy
- Active development and improvements ongoing
Supported Algorithms
The QAT provider supports the same algorithms as the engine interface: Asymmetric Algorithms:- RSA (2048, 3072, 4096 bits)
- ECDSA (P-256, P-384, P-521)
- ECDH (P-256, P-384, P-521)
- X25519, X448
- DH, DSA
- AES-GCM (128, 192, 256 bits)
- AES-CBC-HMAC-SHA (128, 256 bits)
- AES-CCM
- ChaCha20-Poly1305
- TLS 1.2 PRF
- TLS 1.3 HKDF
- HKDF
- SHA-2 family (SHA-256, SHA-384, SHA-512)
- SHA-3 family
- SM3
FIPS Support
FIPS 140-3 Certification
The QAT Engine includes changes to comply with FIPS 140-3 Level-1 certification requirements when using the QAT provider with OpenSSL 3.0.Enabling FIPS Mode
FIPS support requires the provider interface. You must use
--enable-qat_provider along with --enable-qat_fips.FIPS-Approved Algorithms
QAT Hardware (FIPS mode):- RSA, ECDSA, ECDH, ECDHX25519, ECDHX448
- DSA, DH
- TLS 1.2 KDF (PRF), TLS 1.3 KDF (HKDF)
- SHA-3, AES-GCM
- RSA, ECDSA, ECDH, ECDHX25519
- SHA-2, AES-GCM
FIPS Status
When FIPS mode is enabled, the provider will:- Run self-tests on initialization
- Perform integrity checks
- Satisfy FIPS 140-3 CMVP and CAVP requirements
- Restrict operations to FIPS-approved algorithms
Application Integration
NGINX with Provider
HAProxy with Provider
Migration from Engine to Provider
Key Changes
- Library name:
qatengine.so→qatprovider.so - Location: Typically installed in
/usr/local/lib/ossl-modules/ - Configuration: Use OpenSSL config file instead of
OPENSSL_ENGINESenvironment variable - API: Use provider API (
OSSL_PROVIDER_*) instead of engine API (ENGINE_*)
Compatibility Considerations
Ensure all components in your stack use the same OpenSSL version:- QAT Engine/Provider
- Application (NGINX, HAProxy, etc.)
- Dependent libraries (crypto_mb, ipsec_mb)
Troubleshooting
Provider Not Loading
Debug Mode
Verify Provider is Active
Performance Considerations
The provider interface in OpenSSL 3.0 offers similar performance to the engine interface, with some considerations:- Provider architecture adds minimal overhead
- Async job tuning is still important (
-async_jobsparameter) - Co-existence mode (HW + SW) works the same way
- Follow the same performance tuning guidelines as engine mode