{
  "slug": "ecdsa-sign",
  "name": "gizza-ai/ecdsa-sign",
  "version": "0.1.0",
  "title": "ECDSA Sign — sign a message with a P-256/P-384 key — gizza.ai",
  "description": "Sign a message with an ECDSA private key (NIST P-256 or P-384) and get a DER or raw r||s signature in base64 and hex, in your browser. Nothing is uploaded.",
  "tags": [
    "ecdsa sign",
    "ecdsa signature",
    "p256",
    "p384",
    "secp256r1",
    "digital signature",
    "rfc6979",
    "crypto"
  ],
  "category": "security",
  "urls": {
    "page": "https://gizza.ai/tools/ecdsa-sign/",
    "markdown": "https://gizza.ai/tools/ecdsa-sign/index.md",
    "descriptor": "https://gizza.ai/tools/ecdsa-sign/tool.json",
    "deep_link_example": "https://gizza.ai/tools/ecdsa-sign/?message=The%20message%20to%20sign&private_key=-----BEGIN%20PRIVATE%20KEY-----%0A...%0A-----END%20PRIVATE%20KEY-----&curve=p256&format=der"
  },
  "cli": "gizza tool ecdsa-sign \"The message to sign\" 'private_key=-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----'",
  "tool": {
    "description": "Sign a message with an ECDSA private key on NIST curve P-256 or P-384. The curve fixes the digest (P-256→SHA-256, P-384→SHA-384) and signing uses deterministic RFC-6979 nonces, so the signature is reproducible. The private key is PEM-encoded PKCS#8. Output is base64 (and hex), in DER (ASN.1, OpenSSL-style) or raw fixed-length r||s (IEEE-P1363/JOSE) form. Runs locally — the private key and message never leave the device.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "curve": {
          "default": "p256",
          "description": "Elliptic curve of the key: p256 (NIST P-256/secp256r1, SHA-256) or p384 (NIST P-384/secp384r1, SHA-384).",
          "enum": [
            "p256",
            "p384"
          ],
          "type": "string"
        },
        "format": {
          "default": "der",
          "description": "Signature encoding: der (ASN.1 DER, as OpenSSL emits) or raw (fixed-length r||s, IEEE-P1363/JOSE).",
          "enum": [
            "der",
            "raw"
          ],
          "type": "string"
        },
        "message": {
          "description": "The message to sign.",
          "type": "string"
        },
        "private_key": {
          "description": "Your EC private key, PEM-encoded PKCS#8 ('-----BEGIN PRIVATE KEY-----'). Must match the chosen curve.",
          "type": "string"
        }
      },
      "required": [
        "message",
        "private_key"
      ],
      "type": "object"
    }
  }
}