EDDSA Message Verification
Check an EdDSA signature with one boolean — the message was signed or it wasn't
- message
- signature
- public_bytes
- public_key
- verify_status
EdDSAVerify is the receiving end of the pack's Ed25519 signing chain: you give it the message bytes, the signature, and a public key, and it returns a single BOOLEAN - True if the signature was made by the matching private key, False otherwise. It's the automated "is this real?" check for anything signed with EdDSASignature, and it's refreshingly hard to misuse because Ed25519 doesn't let you pick a hash or a curve.
What it needs
key_type-Ed25519orEd448. Must match the key that was used to sign. This is the only algorithm choice you get, because the scheme bakes in SHA-512 - no hash dropdown to drift on, which is exactly the thing that makes ECDSA verification fiddly.key_source- aBOOLEANtoggle, and it's the bit that trips people up. On (From Private Bytes), the node reconstructs the public key frompublic_bytes(BYTESLIKE) - the raw 32-byte public key you saved fromEdDSAPublicKeyFormat. Off (From Loaded Key), it uses thepublic_key(KEYOBJ) you wired in.message(BYTESLIKE) - the signed bytes. Note it's bytes here even thoughEdDSASignaturetakes a string; the verifier gets raw bytes, so route text through the pack's converters if that's what you have.signature(BYTESLIKE) - the signature blob fromEdDSASignature.
The output
verify_status(BOOLEAN) -TrueorFalse, nothing else. Wire it into aBooleanOutputteror any boolean consumer; ComfyUI also shows it on the node itself. AFalsemeans either the wrong key, tampered bytes, or a mismatched key type - the node swallowsInvalidSignature/ValueErrorand just reports "no."
The byte-for-byte trap
Ed25519 verification is exact: the message you feed in must be the exact byte sequence that was signed. This is where beginners lose an afternoon. If the message went through a decode/re-encode round trip, picked up a trailing newline, or was case-normalized anywhere, the signature will not verify - even though it "should." The signature is over the precise bytes, and nothing else. When in doubt, sign and verify the identical byte stream and change nothing in between.
Installing it
Same pack, same routine:
cd ComfyUI/custom_nodes
git clone https://github.com/AzelusLightvale/ComfyUI-ARG-Toolkit
Restart ComfyUI, or install via ComfyUI Manager ("ComfyUI ARG Toolkit") which pulls cryptography and the rest of the dependencies.
Where people get burned
- Public key from the wrong source. Derive the public key from a different private key than the one that signed, and you get a permanent
Falsewith no error message. Check which key yourEdDSAPublicKeyFormatis actually sourcing. - Bytes vs string.
messagewantsBYTESLIKE.EdDSASignature's message box is a string. Don't expect them to match up without going through the converters consistently. - Key type drift. Ed448 signature checked against an Ed25519 public key, or vice versa -
False. Keepkey_typelocked across the whole chain.
A True here proves the holder of the private key signed those exact bytes. It doesn't mean the message is wise, true, or from someone you'd trust with your wallet - same caveat as every signature scheme. But for an ARG trail where a "signed message" appears at the end of a rabbit hole, this node turns a leap of faith into a mechanical yes/no.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| key_type | COMBO | Ed25519 | 2 options: Ed25519, Ed448 |
| key_source | BOOLEAN | The source of the private key to be used to verify the signature of the message | |
| message | BYTESLIKE | — | |
| signature | BYTESLIKE | — | |
| public_bytesopt | BYTESLIKE | — | |
| public_keyopt | KEYOBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| verify_status | BOOLEAN | — |