SaQura .NET · v1.0.13 · NuGet
SaQura Cryptography Library
Einführung
SaQura bietet AES-256-GCM, RSA-4096, Passwort-Hashing und Post-Quanten-Verschlüsselung. Die Verarbeitung läuft lokal in Ihrer Anwendung; es werden keine Daten an Dritte übertragen. Namespace: SaQura.
Bezug: NuGet · SaQura. Byte-kompatibel mit den Kotlin-, Swift-, Python- und JS/TS-SDKs (siehe Tabs oben).
Voraussetzungen
- Framework: .NET 8.0+
- Plattformen: Windows x64, Linux x64/ARM64, macOS (Intel/ARM), Android, iOS (.NET MAUI)
- Speicher: PQC-Schlüsselerzeugung ist rechenintensiv — auf Mobilgeräten Gen6 bevorzugen.
Installation
dotnet add package SaQuraOhne Lizenz läuft SaQura im Free-Modus (Wasserzeichen, 100-Byte-Limit für PQC). Eine Lizenz schaltet alle Funktionen frei.
Lizenz-Aktivierung
Option A: Lizenzschlüssel (Online)
using SaQura;
var result = await ApiLicense.ActivateLicenseAsync("PRO-XXXX-XXXX-XXXX-XXXX");
if (result.Success)
{
Console.WriteLine($"License active: {ApiLicense.CurrentTier}");
}Option B: Standard-Lizenzdatei
using SaQura;
var result = await ApiLicense.ActivateLicenseFileAsync("license.lic");
if (result.Success)
{
Console.WriteLine("License activated!");
}Option C: Distribution-Lizenz (App/Play Store)
// MauiProgram.cs — activate license at startup (background)
Task.Run(async () =>
{
if (ApiLicense.IsLicensed) return;
using var stream = await FileSystem.OpenAppPackageFileAsync("license.lic");
using var reader = new StreamReader(stream);
var json = await reader.ReadToEndAsync();
var result = await ApiLicense.ActivateLicenseFromJsonAsync(json);
});App-Bindung (optional, kostenlos): Auf Wunsch binden wir Ihre Distributions-Lizenz an Ihre App – an den Package-Namen bzw. Bundle Identifier (Android, iOS, macOS, Windows) und, auf Android, Windows und macOS-Desktop, zusätzlich an Ihr Signatur-Zertifikat. Eine extrahierte Lizenzdatei lässt sich dann in keiner fremden App aktivieren. Die App-Identität wird vom Betriebssystem geprüft und in der SDK durchgesetzt; die Bindung setzt eine aktuelle SDK-Version voraus, die wir Ihnen bei der Ausstellung nennen. Unter Linux gibt es keine vom Betriebssystem bestätigte App-Identität – dort liefern wir eine ungebundene Lizenz. Kontaktieren Sie uns für eine gebundene Lizenz.
Lizenzstatus prüfen
if (ApiLicense.IsLicensed)
{
Console.WriteLine($"Tier: {ApiLicense.CurrentTier}");
Console.WriteLine($"Days remaining: {ApiLicense.GetDaysRemaining()}");
Console.WriteLine($"AES: {ApiLicense.IsAESAvailable}, Quantum: {ApiLicense.IsQuantumAvailable}");
}API-Referenz
Quantum-Generationen
Selbstbeschreibende Generationen-Header (krypto-agil, abwärtskompatibel). Gen2–7 folgen dem BSI-empfohlenen Profil; Gen8 ergänzt X25519 + ML-KEM (NIST FIPS 203).
| Generation | Beschreibung | Einsatz |
|---|---|---|
| Gen4 | FrodoKEM-1344 + AES-GCM | Allzweck (empfohlen) |
| Gen6 | Mobil-optimiert | Mobile / On-Device |
| Gen7 | Hybrid RSA+Quantum | Kritische Infrastruktur (Pro+) |
| Gen8 | X25519 + ML-KEM (FIPS 203) | Quantensicher (Pro+) |
Post-Quanten-Signaturen
Signaturen nach NIST FIPS 204 (ML-DSA) und FIPS 205 (SLH-DSA). Signieren ab Pro; Verifikation in allen Tarifen.
Wichtige Klassen
ApiLicense, AES, RSAKey, Quantum, QuantumSignature, PasswordHasher, StreamingExtensions.
Code-Beispiele
AES-Verschlüsselung
using SaQura;
var key = AES.GenerateAESKey();
var encrypted = await AES.EncryptAsync("Secret message", key);
var decrypted = await AES.DecryptAsync(encrypted, key);Passwortbasierte Verschlüsselung
using SaQura;
var salt = AES.GenerateSalt(); // store with the data
var key = AES.DeriveKeyFromPassword("user_password_123", salt);
var encrypted = await AES.EncryptAsync("Sensitive data", key);
var key2 = AES.DeriveKeyFromPassword("user_password_123", salt);
var decrypted = await AES.DecryptAsync(encrypted, key2);RSA + Digitale Signaturen
using SaQura;
using System.Text;
var (privateKey, publicKey) = await RSAKey.NewKeyPairAsync();
var data = Encoding.UTF8.GetBytes("Document to sign");
var signature = await RSAKey.SignAsync(data, privateKey);
var isValid = await RSAKey.VerifyAsync(data, signature, publicKey);Quantensichere Verschlüsselung (Pro+)
using SaQura;
var generation = Quantum.GetRecommendedGeneration(
isMobile: false, requiresHighestSecurity: false);
var (publicKey, privateKey) = Quantum.GenerateKeyPair(
QuantumStrength.Standard, generation);Password Hashing
using SaQura;
var hash = await PasswordHasher.HashPasswordAsync("MySecurePassword123!");
var ok = await PasswordHasher.VerifyPasswordAsync("MySecurePassword123!", hash);Large-File-Streaming
Verschlüsselt Dateien beliebiger Größe bei konstantem Speicher — kein ~2-GB-Limit. Eigenes SQS1-Format, additiv (ab 1.0.10).
- Zwei Suiten (auto):
AES-256-GCMundChaCha20-Poly1305. - Manipulationssicher je Segment.
- PQC-Envelope (Pro+): per-File-Schlüssel, mit SaQura-PQC-Schlüssel gewrappt → DSGVO-Krypto-Shredding.
- Tiering: Streaming ab Standard; PQC-Envelope ab Pro.
using SaQura;
await StreamingExtensions.EncryptFileAsync(
"input.mp4", "input.mp4.enc", key,
suite: StreamCipherSuite.AesGcm);
await StreamingExtensions.DecryptFileAsync(
"input.mp4.enc", "output.mp4", key);Das SQS1-Format ist byte-identisch über alle SaQura-SDKs. Beispiele: saqura-samples.
Best Practices
Schlüsselverwaltung
- Schlüssel nie hartkodieren.
- Schlüssel regelmäßig rotieren.
- Plattform-Secure-Storage nutzen (Keychain, KeyStore, DPAPI).
- Private Schlüssel und Lizenzdateien als Geheimnis behandeln.
Fehlerbehandlung
try
{
var encrypted = await AES.EncryptAsync(plainText, key);
}
catch (LicenseException ex) // feature not in current tier
{
Console.WriteLine($"License error: {ex.Message} (Feature: {ex.Feature})");
}
catch (CryptographicException ex)
{
Console.WriteLine($"Crypto error: {ex.Message}");
}Troubleshooting
„License validation failed“
Lizenzdatei beschädigt/verändert — frische .lic laden bzw. über unser Kontaktformular melden.
Lizenzfehler / Feature nicht verfügbar
Feature im Tarif nicht freigeschaltet (AES ab Standard, PQC ab Pro). Vor dem Aufruf restriktiver APIs currentTier prüfen.
Fragen? Über unser Kontaktformular — bitte Version, Plattform und kurze Beschreibung. Niemals Schlüssel in Support-Tickets mitsenden.