{
    "content": [
        {
            "type": "text",
            "text": "# EVP_SIGNATURE-ED448 (info)\n\n## NAME\n\nEVPSIGNATURE-ED25519, EVPSIGNATURE-ED448, Ed25519, Ed448 - EVPPKEY Ed25519 and Ed448 support\n\n## DESCRIPTION\n\nThe Ed25519 and Ed448 EVPPKEY implementation supports key generation,\none-shot digest sign and digest verify using PureEdDSA and Ed25519 or\nEd448 (see RFC8032). It has associated private and public key formats\ncompatible with RFC 8410.\n\n## Sections\n\n- **NAME**\n- **DESCRIPTION**\n- **NOTES**\n- **EXAMPLES**\n- **SEE ALSO**\n- **COPYRIGHT**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "EVP_SIGNATURE-ED448",
        "section": "",
        "mode": "info",
        "summary": "EVPSIGNATURE-ED25519, EVPSIGNATURE-ED448, Ed25519, Ed448 - EVPPKEY Ed25519 and Ed448 support",
        "synopsis": null,
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [
            "To sign a message using a ED25519 or ED448 key:",
            "void dosign(EVPPKEY *edkey, unsigned char *msg, sizet msglen)",
            "sizet siglen;",
            "unsigned char *sig = NULL;",
            "EVPMDCTX *mdctx = EVPMDCTXnew();",
            "EVPDigestSignInit(mdctx, NULL, NULL, NULL, edkey);",
            "/* Calculate the requires size for the signature by passing a NULL buffer */",
            "EVPDigestSign(mdctx, NULL, &siglen, msg, msglen);",
            "sig = OPENSSLzalloc(siglen);",
            "EVPDigestSign(mdctx, sig, &siglen, msg, msglen);",
            "...",
            "OPENSSLfree(sig);",
            "EVPMDCTXfree(mdctx);"
        ],
        "see_also": [
            {
                "name": "EVPPKEY-X25519",
                "section": "7",
                "url": "https://www.chedong.com/phpMan.php/man/EVPPKEY-X25519/7/json"
            },
            {
                "name": "provider-signature",
                "section": "7",
                "url": "https://www.chedong.com/phpMan.php/man/provider-signature/7/json"
            },
            {
                "name": "EVPDigestSignInit",
                "section": "3",
                "url": "https://www.chedong.com/phpMan.php/man/EVPDigestSignInit/3/json"
            },
            {
                "name": "EVPDigestVerifyInit",
                "section": "3",
                "url": "https://www.chedong.com/phpMan.php/man/EVPDigestVerifyInit/3/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 17,
                "subsections": []
            },
            {
                "name": "NOTES",
                "lines": 28,
                "subsections": []
            },
            {
                "name": "EXAMPLES",
                "lines": 19,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "COPYRIGHT",
                "lines": 8,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "EVPSIGNATURE-ED25519, EVPSIGNATURE-ED448, Ed25519, Ed448 - EVPPKEY\nEd25519 and Ed448 support\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "The Ed25519 and Ed448 EVPPKEY implementation supports key generation,\none-shot digest sign and digest verify using PureEdDSA and Ed25519 or\nEd448 (see RFC8032). It has associated private and public key formats\ncompatible with RFC 8410.\n\nED25519 and ED448 Signature Parameters\nNo additional parameters can be set during one-shot signing or\nverification.  In particular, because PureEdDSA is used, a digest must\nNOT be specified when signing or verifying.  See EVPPKEY-X25519(7) for\ninformation related to X25519 and X448 keys.\n\nThe following signature parameters can be retrieved using\nEVPPKEYCTXgetparams().\n\n\"algorithm-id\" (OSSLSIGNATUREPARAMALGORITHMID) <octet string>\nThe parameters are described in provider-signature(7).\n",
                "subsections": []
            },
            "NOTES": {
                "content": "The PureEdDSA algorithm does not support the streaming mechanism of\nother signature algorithms using, for example, EVPDigestUpdate().  The\nmessage to sign or verify must be passed using the one-shot\nEVPDigestSign() and EVPDigestVerify() functions.\n\nWhen calling EVPDigestSignInit() or EVPDigestVerifyInit(), the digest\ntype parameter MUST be set to NULL.\n\nApplications wishing to sign certificates (or other structures such as\nCRLs or certificate requests) using Ed25519 or Ed448 can either use\nX509sign() or X509signctx() in the usual way.\n\nEd25519 or Ed448 private keys can be set directly using\nEVPPKEYnewrawprivatekey(3) or loaded from a PKCS#8 private key\nfile using PEMreadbioPrivateKey(3) (or similar function). Completely\nnew keys can also be generated (see the example below). Setting a\nprivate key also sets the associated public key.\n\nEd25519 or Ed448 public keys can be set directly using\nEVPPKEYnewrawpublickey(3) or loaded from a SubjectPublicKeyInfo\nstructure in a PEM file using PEMreadbioPUBKEY(3) (or similar\nfunction).\n\nEd25519 and Ed448 can be tested with the openssl-speed(1) application\nsince version 1.1.1.  Valid algorithm names are ed25519, ed448 and\neddsa. If eddsa is specified, then both Ed25519 and Ed448 are\nbenchmarked.\n",
                "subsections": []
            },
            "EXAMPLES": {
                "content": "To sign a message using a ED25519 or ED448 key:\n\nvoid dosign(EVPPKEY *edkey, unsigned char *msg, sizet msglen)\n{\nsizet siglen;\nunsigned char *sig = NULL;\nEVPMDCTX *mdctx = EVPMDCTXnew();\n\nEVPDigestSignInit(mdctx, NULL, NULL, NULL, edkey);\n/* Calculate the requires size for the signature by passing a NULL buffer */\nEVPDigestSign(mdctx, NULL, &siglen, msg, msglen);\nsig = OPENSSLzalloc(siglen);\n\nEVPDigestSign(mdctx, sig, &siglen, msg, msglen);\n...\nOPENSSLfree(sig);\nEVPMDCTXfree(mdctx);\n}\n",
                "subsections": []
            },
            "SEE ALSO": {
                "content": "EVPPKEY-X25519(7) provider-signature(7), EVPDigestSignInit(3),\nEVPDigestVerifyInit(3),\n",
                "subsections": []
            },
            "COPYRIGHT": {
                "content": "Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved.\n\nLicensed under the Apache License 2.0 (the \"License\").  You may not use\nthis file except in compliance with the License.  You can obtain a copy\nin the file LICENSE in the source distribution or at\n<https://www.openssl.org/source/license.html>.\n\n3.0.2                             2026-06-02       EVPSIGNATURE-ED25519(7SSL)",
                "subsections": []
            }
        }
    }
}