| Ed25519 Signieren / Verifizieren | sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKey | RFC 8032. Öffentlicher Schlüssel mit 32 Byte, Signatur mit 64 Byte. Verify weist nicht kanonische Punkte und S >= L gemäß Abschnitt 5.1.7 zurück. Das Signieren läuft in konstanter Zeit im geheimen Skalar und in der Nonce pro Nachricht: feste Vier-Bit-Fenster, der Tabelleneintrag wird durch Durchlaufen aller sechzehn unter einer Maske gewählt, und die vollständige Additionsformel aus Abschnitt 5.1.4. Der öffentliche Schlüssel stammt aus dem 32-Byte-Seed. |
| X25519-Schlüsselaustausch | sgcX25519, sgcX25519_PublicKey, sgcX25519_SharedSecret | RFC 7748 Diffie-Hellman über Curve25519. |
| Ed448 signieren / verifizieren | sgcEd448_GenerateKeyPair, sgcEd448_Sign, sgcEd448_Verify | RFC 8032, die 448-Bit-EdDSA-Kurve (Goldilocks). |
| X448-Schlüsselaustausch | sgcX448, sgcX448_PublicKey, sgcX448_SharedSecret | RFC 7748 Diffie-Hellman über Curve448. |
| secp256k1 | sgcECDSA_SignHash / VerifyHash mit eccSecp256k1 | Die Bitcoin-/Ethereum-Kurve, SEC 2, in sgcCrypto_ECCurves. |
| Brainpool P256r1 / P384r1 / P512r1 | dieselben Funktionen mit eccBrainpoolP256r1 / P384r1 / P512r1 | RFC 5639, verbreitet in EU-eIDAS- und Behördenprofilen. |
| NIST P-256 / P-384 / P-521 | dieselben Funktionen mit eccP256 / eccP384 / eccP521 | TsgcECCurve benennt jetzt sieben Kurven, sodass Schlüsselerzeugung, Signieren, Verifizieren, ECDH und Punktkompression alle die NIST-Primkurven aus rohen Schlüssel-Bytes erreichen, nicht nur aus einer PEM-Datei. |
| Deterministische ECDSA-Nonce | eingebaut in sgcECDSA_SignHash | RFC 6979: Die Nonce wird aus dem privaten Schlüssel und der Nachricht abgeleitet, kein RNG-Fehlermodus. |
| Skalarmultiplikation in konstanter Zeit | innerhalb von sgcECDSA_SignHash, sgcECDH_SharedSecret und der EC-Schlüsselerzeugung | Jede Kurve in sgcCrypto_ECCurves läuft auf derselben Engine: Montgomery-Reduktion, die keinen datenabhängigen Schritt hat, ein festes Fenster, dessen Anzahl von der Kurve kommt, Tabelleneinträge, die durch Durchlaufen aller unter einer Maske gewählt werden, und eine vollständige Additionsformel, die nie eine Koordinate ansieht, um zu entscheiden, welcher Fall gilt. Die JOSE-, WebAuthn- und E2EE-Pfade von sgcCrypto_EC führen denselben Code aus. |
| ECDH (secp256k1 / Brainpool) | sgcECDH_SharedSecret | Gemeinsames Geheimnis über dieselben vier Kurven. |
| Punktkompression | sgcEC_Compress / sgcEC_Decompress | Speichere oder übertrage die kürzere komprimierte Public-Key-Form. |
| EC als JWS (ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | Kurve automatisch aus der angeforderten Bitlänge gewählt, direkt aus einem PEM-Schlüssel signieren/verifizieren, JOSE-orientiertes Gegenstück zu ECCurves. |
| Generisches ECDH | sgcECDH | Gemeinsames Geheimnis aus einem rohen privaten Schlüssel und dem öffentlichen Punkt der Gegenseite. |
| Rohes / DER-ECDSA-Verify | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | Verifiziert gegen ein rohes (Qx, Qy, r, s)-Tupel oder eine DER-kodierte Signatur. |
| DER-ECDSA-Signieren & -Konvertierung | sgcECDSA_SignDER / sgcECDSA_VerifyDER, sgcECDSA_RawToDER / sgcECDSA_DERToRaw | X.509, CMS und TLS tragen den DER-ECDSA-Sig-Value, eine SEQUENCE aus INTEGER r gefolgt von INTEGER s. JOSE und WebAuthn tragen stattdessen das rohe Paar R || S. Signiere direkt in eine der beiden Formen, oder konvertiere eine bestehende Signatur zwischen ihnen. |
| Schnorr-Signaturen (BIP-340) | sgcSchnorr_PublicKey, sgcSchnorr_Sign, sgcSchnorr_Verify | Nur secp256k1, mit x-only 32-Byte-Public-Keys und 64-Byte-Signaturen: was Taproot, Nostr und Lightning verwenden. sgcSchnorr_TaggedHash ist freigelegt, damit sich die BIP-341- und BIP-342-Tags auf derselben Konstruktion aufbauen lassen. |
| RSA signieren (PKCS#1 v1.5) | sgcRSA_SignPKCS1 | Aus einem PEM-Private-Key, SHA-1/256/384/512-Digest. |
| Private RSA-Schlüsseloperationen | sgcRSA_SignPKCS1 und die übrigen Signier- und Entschlüsselungsaufrufe von sgcCrypto_RSA_Keys | Jede Operation wird mit einem frischen Zufallspaar geblendet, über eine Exponentiation mit festem Fenster und eine CRT-Rekombination geführt, deren Laufzeit nicht von den Faktoren oder den Daten abhängt, und gegen den öffentlichen Exponenten geprüft, bevor das Ergebnis zurückgegeben wird. Ein Fehler in einer CRT-Hälfte würde sonst in einer einzigen Signatur einen Faktor verraten, daher wird bei einer Abweichung nichts zurückgegeben. |
| RSA verifizieren (PKCS#1 v1.5 / PSS) | sgcRSA_VerifyPKCS1, sgcRSA_VerifyPSS, sowie _Raw-Varianten über Modulus/Exponent | RFC 8017. Verify funktioniert aus einem PEM-Schlüssel oder rohem Modulus und Exponent, ohne Konstruktion eines Key-Objekts. |
| RSA-Schlüsselerzeugung | sgcRSA_GenerateKey | Jede angeforderte Bitlänge, Miller-Rabin-Primzahltest. |
| RSA-OAEP-Verschlüsselung | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | RFC 8017 Optimal Asymmetric Encryption Padding. |
| RSA-OAEP mit unabhängigem MGF1-Hash | die fünf-Parameter-Überladungen von sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | Lege den Label-Hash und den MGF1-Hash getrennt fest. OAEPWithSHA256AndMGF1Padding bedeutet in Bouncy Castle SHA-256 für beide, aber in SunJCE SHA-256 mit MGF1-SHA1, und genau dieser Fehlabgleich ist der übliche Grund, warum die Java-Interoperabilität scheitert. |
| RSA-PKCS#1-v1.5-Verschlüsselung | sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_Decrypt | RFC 8017 Abschnitt 7.2, der Modus, den Java RSA/ECB/PKCS1Padding nennt. Decrypt nimmt für jeden Fehler denselben Pfad, sodass es einem Padding-Oracle nichts liefert, womit es arbeiten könnte. Bevorzuge OAEP für alles Neue. |
| RSA-PSS-/PKCS#1-Signierung | sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / Verify | Signiere direkt aus einem erzeugten TsgcRSAPrivateKey. |
| RSA-Schlüsselexport | sgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, entsprechende DER-Aufrufe | PKCS#1- und SubjectPublicKeyInfo-Kodierungen. |
| PKCS#8- und SEC-1-Schlüsselexport | sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeySEC1DER / SEC1PEM, sgcEC_ExportSubjectPublicKeyInfo, sgcEC_ExportPublicKeyPEM | Der Container BEGIN PRIVATE KEY, den Java, .NET und die meisten modernen Tools erwarten, neben der SEC-1-Form BEGIN EC PRIVATE KEY und dem SubjectPublicKeyInfo, das ein Zertifikat einbettet. Unverschlüsselt, das Ergebnis ist also blankes Schlüsselmaterial. |
| RSA- und EC-Schlüsselimport | sgcRSA_ImportPrivateKeyDER / PEM, sgcRSA_ImportPublicKeyDER / PEM, sgcEC_ImportPrivateKeyDER / PEM, sgcEC_ImportPublicKeyDER / PEM | Das gab es vorher nicht: Ein erzeugter Schlüssel ließ sich schreiben, aber nie wieder einlesen. Der Import akzeptiert PKCS#1, PKCS#8, SEC 1 und SubjectPublicKeyInfo, DER oder PEM, berechnet die CRT-Parameter oder den öffentlichen Punkt neu, wenn die Datei sie auslässt, und gibt bei fehlerhafter Eingabe False zurück, statt eine Exception auszulösen, sodass sich nicht vertrauenswürdige Dateien gefahrlos übergeben lassen. |
| ECIES Seal / Open | sgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_Open | Hybridverschlüsselung an einen X25519-Public-Key: ephemeres ECDH plus ein AEAD, ein Aufruf pro Richtung. |