{
  "slug": "ed25519-sign-verify",
  "name": "gizza-ai/ed25519-sign-verify",
  "version": "0.1.0",
  "title": "Ed25519 Sign & Verify — sign a message or check a signature — gizza.ai",
  "description": "Sign a message with an Ed25519 private key, or verify a signature with the public key — hex, base64, or PEM keys, entirely in your browser.",
  "tags": [
    "ed25519 sign",
    "ed25519 verify",
    "eddsa",
    "curve25519",
    "digital signature",
    "rfc8032",
    "verify signature",
    "crypto"
  ],
  "category": "security",
  "urls": {
    "page": "https://gizza.ai/tools/ed25519-sign-verify/",
    "markdown": "https://gizza.ai/tools/ed25519-sign-verify/index.md",
    "descriptor": "https://gizza.ai/tools/ed25519-sign-verify/tool.json",
    "deep_link_example": "https://gizza.ai/tools/ed25519-sign-verify/?operation=sign&message=The%20message%20to%20sign%20or%20verify&message_encoding=utf8&key=-----BEGIN%20PRIVATE%20KEY-----%0A...%0A-----END%20PRIVATE%20KEY-----%20%20%20%C2%B7%20%20%20or%20raw%2032-byte%20key%20as%20hex%2Fbase64&signature=hex%20or%20base64%20signature%20%E2%80%94%20required%20when%20verifying"
  },
  "cli": "gizza tool ed25519-sign-verify \"...\"",
  "tool": {
    "description": "Sign a message with an Ed25519 private key, or verify an Ed25519 signature with the matching public key. Ed25519 (EdDSA over Curve25519, RFC 8032) signatures are deterministic — the same key + message always yields the same 64-byte signature, with no repeated-nonce risk. Keys are accepted as PEM (PKCS#8 private / SPKI public) or as a raw 32-byte key in hex or base64; the message can be plain text (utf8), hex, or base64. Signing returns the signature in hex and base64 plus the derived public key; verifying returns whether the signature is valid. Runs locally — keys and messages never leave the device.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "key": {
          "description": "For sign: your Ed25519 private key. For verify: the signer's public key. Accepts PEM (PKCS#8 private / SPKI public), or a raw 32-byte key as hex or base64 (a private key may also be a 64-byte seed||public keypair).",
          "type": "string"
        },
        "message": {
          "description": "The message to sign or verify. Interpreted using message_encoding.",
          "type": "string"
        },
        "message_encoding": {
          "default": "utf8",
          "description": "How to read the message into bytes: utf8 (plain text), hex, or base64 (for binary payloads).",
          "enum": [
            "utf8",
            "hex",
            "base64"
          ],
          "type": "string"
        },
        "operation": {
          "default": "sign",
          "description": "sign: create an Ed25519 signature for the message with a private key. verify: check a signature against the message with a public key.",
          "enum": [
            "sign",
            "verify"
          ],
          "type": "string"
        },
        "signature": {
          "description": "Required for verify: the signature to check, as hex or base64 (the raw 64 bytes). Ignored for sign.",
          "type": "string"
        }
      },
      "required": [
        "message",
        "key"
      ],
      "type": "object"
    }
  }
}