====== CryptoConfig Class ======
Static configuration class for global PQ crypto settings.
----
===== Definition =====
namespace WvdS.System.Security.Cryptography
public static class CryptoConfig
----
===== Properties =====
^ Name ^ Type ^ Description ^
| DefaultMode | [[.:cryptomode|CryptoMode]] | Global crypto mode for all operations. Default: ''CryptoMode.Classic'' |
| OpenSslPath | string? | Optional path to OpenSSL 3.6 library |
----
==== DefaultMode Property ====
Gets or sets the global crypto mode.
public static CryptoMode DefaultMode { get; set; }
| Type | [[.:cryptomode|CryptoMode]] |
| Default Value | ''CryptoMode.Classic'' |
This property determines the default behavior of all extension methods when no explicit ''CryptoMode'' is passed.
^ Value ^ Behavior ^
| Classic | No PQ extensions |
| Hybrid | RSA/ECDSA + ML-DSA |
| PostQuantum | ML-DSA/ML-KEM only |
**Example:**
// At application startup
CryptoConfig.DefaultMode = CryptoMode.Hybrid;
// All subsequent operations use Hybrid
var cert = request.CreateSelfSigned(notBefore, notAfter);
// cert.HasPqSignature() == true
----
==== OpenSslPath Property ====
Gets or sets the path to the OpenSSL library.
public static string? OpenSslPath { get; set; }
| Type | ''string?'' |
| Default Value | ''null'' (automatic search) |
When ''null'', the library automatically searches for OpenSSL:
^ Platform ^ Search Paths ^
| Windows x64 | ''libcrypto-3-x64.dll'' in application directory, PATH |
| Linux | ''libcrypto.so.3'' in LD_LIBRARY_PATH, /usr/lib |
| macOS | ''libcrypto.3.dylib'' in DYLD_LIBRARY_PATH, /opt/homebrew/lib |
OpenSSL **3.6.0 or higher** is required for ML-DSA and ML-KEM support.
**Platform Examples:**
// Windows
CryptoConfig.OpenSslPath = @"C:\OpenSSL-3.6\bin\libcrypto-3-x64.dll";
// Linux
CryptoConfig.OpenSslPath = "/opt/openssl-3.6/lib64/libcrypto.so.3";
// macOS
CryptoConfig.OpenSslPath = "/opt/homebrew/opt/openssl@3/lib/libcrypto.3.dylib";
----
===== Methods =====
^ Name ^ Description ^
| EnablePostQuantum(CryptoMode) | Enables PQ cryptography and initializes OpenSSL |
----
==== EnablePostQuantum Method ====
Enables post-quantum cryptography and initializes the OpenSSL interop.
public static void EnablePostQuantum(CryptoMode mode = CryptoMode.Hybrid)
**Parameters:**
^ Name ^ Type ^ Description ^
| mode | [[.:cryptomode|CryptoMode]] | The mode to enable. Default: ''CryptoMode.Hybrid'' |
This method is a convenience function that:
- Sets ''DefaultMode'' to the specified value
- Initializes OpenSSL and checks the version
- Loads the crypto provider
Equivalent to:
CryptoConfig.DefaultMode = mode;
CryptoProviderFactory.GetProvider().Initialize();
**Examples:**
// Enables Hybrid mode (default)
CryptoConfig.EnablePostQuantum();
// Only for fully PQ-capable environments
CryptoConfig.EnablePostQuantum(CryptoMode.PostQuantum);
**Exceptions:**
| DllNotFoundException | OpenSSL library not found |
| InvalidOperationException | OpenSSL version < 3.6 or PQ algorithms not available |
----
===== Thread Safety =====
Changes to ''DefaultMode'' and ''OpenSslPath'' are thread-safe. Ideally, change these values only at application startup.
----
===== Remarks =====
''CryptoConfig'' is the central configuration point for the entire library. Settings apply globally to all threads.
// Recommended initialization in Program.cs or Startup
CryptoConfig.DefaultMode = CryptoMode.Hybrid;
CryptoConfig.OpenSslPath = @"C:\OpenSSL\bin\libcrypto-3-x64.dll";
----
===== See Also =====
* [[.:cryptomode|CryptoMode Enum]]
* [[.:providers:start|Providers Namespace]]
* [[.:start|API Overview]]
{{tag>class configuration static}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//