{
    "content": [
        {
            "type": "text",
            "text": "# EVP_SIGNATURE-ED448 (man)\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, one-shot digest sign\nand digest verify using PureEdDSA and Ed25519 or Ed448 (see RFC8032). It has associated\nprivate and public key formats compatible with RFC 8410.\n\n## Sections\n\n- **NAME**\n- **DESCRIPTION** (1 subsections)\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": "man",
        "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": 4,
                "subsections": [
                    {
                        "name": "ED25519 and ED448 Signature Parameters",
                        "lines": 9
                    }
                ]
            },
            {
                "name": "NOTES",
                "lines": 24,
                "subsections": []
            },
            {
                "name": "EXAMPLES",
                "lines": 19,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "COPYRIGHT",
                "lines": 9,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "EVPSIGNATURE-ED25519, EVPSIGNATURE-ED448, Ed25519, Ed448 - EVPPKEY Ed25519 and Ed448\nsupport\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "The Ed25519 and Ed448 EVPPKEY implementation supports key generation, one-shot digest sign\nand digest verify using PureEdDSA and Ed25519 or Ed448 (see RFC8032). It has associated\nprivate and public key formats compatible with RFC 8410.\n",
                "subsections": [
                    {
                        "name": "ED25519 and ED448 Signature Parameters",
                        "content": "No additional parameters can be set during one-shot signing or verification.  In particular,\nbecause PureEdDSA is used, a digest must NOT be specified when signing or verifying.  See\nEVPPKEY-X25519(7) for information related to X25519 and X448 keys.\n\nThe following signature parameters can be retrieved using EVPPKEYCTXgetparams().\n\n\"algorithm-id\" (OSSLSIGNATUREPARAMALGORITHMID) <octet string>\nThe parameters are described in provider-signature(7).\n"
                    }
                ]
            },
            "NOTES": {
                "content": "The PureEdDSA algorithm does not support the streaming mechanism of other signature\nalgorithms using, for example, EVPDigestUpdate().  The message to sign or verify must be\npassed using the one-shot EVPDigestSign() and EVPDigestVerify() functions.\n\nWhen calling EVPDigestSignInit() or EVPDigestVerifyInit(), the digest type parameter MUST\nbe set to NULL.\n\nApplications wishing to sign certificates (or other structures such as CRLs or certificate\nrequests) using Ed25519 or Ed448 can either use X509sign() or X509signctx() in the usual\nway.\n\nEd25519 or Ed448 private keys can be set directly using EVPPKEYnewrawprivatekey(3) or\nloaded from a PKCS#8 private key file using PEMreadbioPrivateKey(3) (or similar function).\nCompletely new keys can also be generated (see the example below). Setting a private key also\nsets the associated public key.\n\nEd25519 or Ed448 public keys can be set directly using EVPPKEYnewrawpublickey(3) or\nloaded from a SubjectPublicKeyInfo structure in a PEM file using PEMreadbioPUBKEY(3) (or\nsimilar function).\n\nEd25519 and Ed448 can be tested with the openssl-speed(1) application since version 1.1.1.\nValid algorithm names are ed25519, ed448 and eddsa. If eddsa is specified, then both Ed25519\nand Ed448 are benchmarked.\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), EVPDigestVerifyInit(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 this file except in\ncompliance with the License.  You can obtain a copy in the file LICENSE in the source\ndistribution or at <https://www.openssl.org/source/license.html>.\n\n\n\n3.0.2                                        2026-06-02                  EVPSIGNATURE-ED25519(7SSL)",
                "subsections": []
            }
        }
    }
}