ECDSA und RSA signieren immer einen Hash; die Daten lassen sich daher als Stream oder auf einer anderen Maschine hashen, und ein HSM sieht immer nur 32–64 Byte. PureEdDSA und ML-DSA verarbeiten dagegen die ganze Nachricht zusammen mit schlüsselabhängigen Werten (Nonce und Challenge von EdDSA hashen beide die Nachricht; ML-DSA bindet einen Hash des öffentlichen Schlüssels in seinen Nachrichtenrepräsentanten μ ein), deshalb muss die gesamte Nachricht beim Signierer ankommen.
Für diesen Fall gibt es Pre-Hash-Varianten: Ed25519ph und Ed448ph (RFC 8032; HashEdDSA in FIPS 186-5 §7.8), HashML-DSA (FIPS 204 §5.4) und HashSLH-DSA (FIPS 205 §10.2.2), wobei die beiden letzten die OID der Hashfunktion in die signierten Daten einbinden. Diese Varianten sind eigenständige Algorithmen mit eigenen Signaturen, deshalb lehnt ein Verifizierer der reinen Variante ihre Signaturen ab. FIPS 204 erlaubt außerdem, jeden Schritt von ML-DSA außer der Erzeugung der Zufallswerte für die Signatur außerhalb des Signaturmoduls auszuführen; das nutzen HSM-Schnittstellen, um ein vorab berechnetes μ anzunehmen.
Pre-Hashing macht die Sicherheit von der Kollisionsresistenz des Hashes abhängig, während reines EdDSA Hash-Kollisionen toleriert. Verwende die reinen Varianten, sofern dich nicht Streaming oder ein entfernter Signierer zu etwas anderem zwingt, und mische nie beide Varianten unter einem Schlüssel ohne Domain-Separation (RFC 8032 §8.6; FIPS 204 empfiehlt eine Variante pro Schlüssel).