{
    "mode": "man",
    "parameter": "provider-signature",
    "section": "7",
    "url": "https://www.chedong.com/phpMan.php/man/provider-signature/7/json",
    "generated": "2026-06-03T03:50:52Z",
    "synopsis": "#include <openssl/coredispatch.h>\n#include <openssl/corenames.h>\n/*\n* None of these are actual functions, but are displayed like this for\n* the function signatures for functions that are offered as function\n* pointers in OSSLDISPATCH arrays.\n*/\n/* Context management */\nvoid *OSSLFUNCsignaturenewctx(void *provctx, const char *propq);\nvoid OSSLFUNCsignaturefreectx(void *ctx);\nvoid *OSSLFUNCsignaturedupctx(void *ctx);\n/* Signing */\nint OSSLFUNCsignaturesigninit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturesign(void *ctx, unsigned char *sig, sizet *siglen,\nsizet sigsize, const unsigned char *tbs, sizet tbslen);\n/* Verifying */\nint OSSLFUNCsignatureverifyinit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignatureverify(void *ctx, const unsigned char *sig, sizet siglen,\nconst unsigned char *tbs, sizet tbslen);\n/* Verify Recover */\nint OSSLFUNCsignatureverifyrecoverinit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignatureverifyrecover(void *ctx, unsigned char *rout,\nsizet *routlen, sizet routsize,\nconst unsigned char *sig, sizet siglen);\n/* Digest Sign */\nint OSSLFUNCsignaturedigestsigninit(void *ctx, const char *mdname,\nconst char *props, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturedigestsignupdate(void *ctx, const unsigned char *data,\nsizet datalen);\nint OSSLFUNCsignaturedigestsignfinal(void *ctx, unsigned char *sig,\nsizet *siglen, sizet sigsize);\nint OSSLFUNCsignaturedigestsign(void *ctx,\nunsigned char *sigret, sizet *siglen,\nsizet sigsize, const unsigned char *tbs,\nsizet tbslen);\n/* Digest Verify */\nint OSSLFUNCsignaturedigestverifyinit(void *ctx, const char *mdname,\nconst char *props, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturedigestverifyupdate(void *ctx,\nconst unsigned char *data,\nsizet datalen);\nint OSSLFUNCsignaturedigestverifyfinal(void *ctx, const unsigned char *sig,\nsizet siglen);\nint OSSLFUNCsignaturedigestverify(void *ctx, const unsigned char *sig,\nsizet siglen, const unsigned char *tbs,\nsizet tbslen);\n/* Signature parameters */\nint OSSLFUNCsignaturegetctxparams(void *ctx, OSSLPARAM params[]);\nconst OSSLPARAM *OSSLFUNCsignaturegettablectxparams(void *ctx,\nvoid *provctx);\nint OSSLFUNCsignaturesetctxparams(void *ctx, const OSSLPARAM params[]);\nconst OSSLPARAM *OSSLFUNCsignaturesettablectxparams(void *ctx,\nvoid *provctx);\n/* MD parameters */\nint OSSLFUNCsignaturegetctxmdparams(void *ctx, OSSLPARAM params[]);\nconst OSSLPARAM * OSSLFUNCsignaturegettablectxmdparams(void *ctx);\nint OSSLFUNCsignaturesetctxmdparams(void *ctx, const OSSLPARAM params[]);\nconst OSSLPARAM * OSSLFUNCsignaturesettablectxmdparams(void *ctx);",
    "sections": {
        "NAME": {
            "content": "provider-signature - The signature library <-> provider functions\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "#include <openssl/coredispatch.h>\n#include <openssl/corenames.h>\n\n/*\n* None of these are actual functions, but are displayed like this for\n* the function signatures for functions that are offered as function\n* pointers in OSSLDISPATCH arrays.\n*/\n\n/* Context management */\nvoid *OSSLFUNCsignaturenewctx(void *provctx, const char *propq);\nvoid OSSLFUNCsignaturefreectx(void *ctx);\nvoid *OSSLFUNCsignaturedupctx(void *ctx);\n\n/* Signing */\nint OSSLFUNCsignaturesigninit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturesign(void *ctx, unsigned char *sig, sizet *siglen,\nsizet sigsize, const unsigned char *tbs, sizet tbslen);\n\n/* Verifying */\nint OSSLFUNCsignatureverifyinit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignatureverify(void *ctx, const unsigned char *sig, sizet siglen,\nconst unsigned char *tbs, sizet tbslen);\n\n/* Verify Recover */\nint OSSLFUNCsignatureverifyrecoverinit(void *ctx, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignatureverifyrecover(void *ctx, unsigned char *rout,\nsizet *routlen, sizet routsize,\nconst unsigned char *sig, sizet siglen);\n\n/* Digest Sign */\nint OSSLFUNCsignaturedigestsigninit(void *ctx, const char *mdname,\nconst char *props, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturedigestsignupdate(void *ctx, const unsigned char *data,\nsizet datalen);\nint OSSLFUNCsignaturedigestsignfinal(void *ctx, unsigned char *sig,\nsizet *siglen, sizet sigsize);\nint OSSLFUNCsignaturedigestsign(void *ctx,\nunsigned char *sigret, sizet *siglen,\nsizet sigsize, const unsigned char *tbs,\nsizet tbslen);\n\n/* Digest Verify */\nint OSSLFUNCsignaturedigestverifyinit(void *ctx, const char *mdname,\nconst char *props, void *provkey,\nconst OSSLPARAM params[]);\nint OSSLFUNCsignaturedigestverifyupdate(void *ctx,\nconst unsigned char *data,\nsizet datalen);\nint OSSLFUNCsignaturedigestverifyfinal(void *ctx, const unsigned char *sig,\nsizet siglen);\nint OSSLFUNCsignaturedigestverify(void *ctx, const unsigned char *sig,\nsizet siglen, const unsigned char *tbs,\nsizet tbslen);\n\n/* Signature parameters */\nint OSSLFUNCsignaturegetctxparams(void *ctx, OSSLPARAM params[]);\nconst OSSLPARAM *OSSLFUNCsignaturegettablectxparams(void *ctx,\nvoid *provctx);\nint OSSLFUNCsignaturesetctxparams(void *ctx, const OSSLPARAM params[]);\nconst OSSLPARAM *OSSLFUNCsignaturesettablectxparams(void *ctx,\nvoid *provctx);\n/* MD parameters */\nint OSSLFUNCsignaturegetctxmdparams(void *ctx, OSSLPARAM params[]);\nconst OSSLPARAM * OSSLFUNCsignaturegettablectxmdparams(void *ctx);\nint OSSLFUNCsignaturesetctxmdparams(void *ctx, const OSSLPARAM params[]);\nconst OSSLPARAM * OSSLFUNCsignaturesettablectxmdparams(void *ctx);\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "This documentation is primarily aimed at provider authors. See provider(7) for further\ninformation.\n\nThe signature (OSSLOPSIGNATURE) operation enables providers to implement signature\nalgorithms and make them available to applications via the API functions EVPPKEYsign(3),\nEVPPKEYverify(3), and EVPPKEYverifyrecover(3) (as well as other related functions).\n\nAll \"functions\" mentioned here are passed as function pointers between libcrypto and the\nprovider in OSSLDISPATCH arrays via OSSLALGORITHM arrays that are returned by the\nprovider's providerqueryoperation() function (see \"Provider Functions\" in\nprovider-base(7)).\n\nAll these \"functions\" have a corresponding function type definition named\nOSSLFUNC{name}fn, and a helper function to retrieve the function pointer from an\nOSSLDISPATCH element named OSSLFUNC{name}.  For example, the \"function\"\nOSSLFUNCsignaturenewctx() has these:\n\ntypedef void *(OSSLFUNCsignaturenewctxfn)(void *provctx, const char *propq);\nstatic osslinline OSSLFUNCsignaturenewctxfn\nOSSLFUNCsignaturenewctx(const OSSLDISPATCH *opf);\n\nOSSLDISPATCH arrays are indexed by numbers that are provided as macros in\nopenssl-coredispatch.h(7), as follows:\n\nOSSLFUNCsignaturenewctx                 OSSLFUNCSIGNATURENEWCTX\nOSSLFUNCsignaturefreectx                OSSLFUNCSIGNATUREFREECTX\nOSSLFUNCsignaturedupctx                 OSSLFUNCSIGNATUREDUPCTX\n\nOSSLFUNCsignaturesigninit              OSSLFUNCSIGNATURESIGNINIT\nOSSLFUNCsignaturesign                   OSSLFUNCSIGNATURESIGN\n\nOSSLFUNCsignatureverifyinit            OSSLFUNCSIGNATUREVERIFYINIT\nOSSLFUNCsignatureverify                 OSSLFUNCSIGNATUREVERIFY\n\nOSSLFUNCsignatureverifyrecoverinit    OSSLFUNCSIGNATUREVERIFYRECOVERINIT\nOSSLFUNCsignatureverifyrecover         OSSLFUNCSIGNATUREVERIFYRECOVER\n\nOSSLFUNCsignaturedigestsigninit       OSSLFUNCSIGNATUREDIGESTSIGNINIT\nOSSLFUNCsignaturedigestsignupdate     OSSLFUNCSIGNATUREDIGESTSIGNUPDATE\nOSSLFUNCsignaturedigestsignfinal      OSSLFUNCSIGNATUREDIGESTSIGNFINAL\nOSSLFUNCsignaturedigestsign            OSSLFUNCSIGNATUREDIGESTSIGN\n\nOSSLFUNCsignaturedigestverifyinit     OSSLFUNCSIGNATUREDIGESTVERIFYINIT\nOSSLFUNCsignaturedigestverifyupdate   OSSLFUNCSIGNATUREDIGESTVERIFYUPDATE\nOSSLFUNCsignaturedigestverifyfinal    OSSLFUNCSIGNATUREDIGESTVERIFYFINAL\nOSSLFUNCsignaturedigestverify          OSSLFUNCSIGNATUREDIGESTVERIFY\n\nOSSLFUNCsignaturegetctxparams         OSSLFUNCSIGNATUREGETCTXPARAMS\nOSSLFUNCsignaturegettablectxparams    OSSLFUNCSIGNATUREGETTABLECTXPARAMS\nOSSLFUNCsignaturesetctxparams         OSSLFUNCSIGNATURESETCTXPARAMS\nOSSLFUNCsignaturesettablectxparams    OSSLFUNCSIGNATURESETTABLECTXPARAMS\n\nOSSLFUNCsignaturegetctxmdparams      OSSLFUNCSIGNATUREGETCTXMDPARAMS\nOSSLFUNCsignaturegettablectxmdparams OSSLFUNCSIGNATUREGETTABLECTXMDPARAMS\nOSSLFUNCsignaturesetctxmdparams      OSSLFUNCSIGNATURESETCTXMDPARAMS\nOSSLFUNCsignaturesettablectxmdparams OSSLFUNCSIGNATURESETTABLECTXMDPARAMS\n\nA signature algorithm implementation may not implement all of these functions.  In order to\nbe a consistent set of functions we must have at least a set of context functions\n(OSSLFUNCsignaturenewctx and OSSLFUNCsignaturefreectx) as well as a set of \"signature\"\nfunctions, i.e. at least one of:\n\nOSSLFUNCsignaturesigninit and OSSLFUNCsignaturesign\nOSSLFUNCsignatureverifyinit and OSSLFUNCsignatureverify\nOSSLFUNCsignatureverifyrecoverinit and OSSLFUNCsignatureverifyinit\nOSSLFUNCsignaturedigestsigninit, OSSLFUNCsignaturedigestsignupdate and\nOSSLFUNCsignaturedigestsignfinal\nOSSLFUNCsignaturedigestverifyinit, OSSLFUNCsignaturedigestverifyupdate and\nOSSLFUNCsignaturedigestverifyfinal\nOSSLFUNCsignaturedigestsigninit and OSSLFUNCsignaturedigestsign\nOSSLFUNCsignaturedigestverifyinit and OSSLFUNCsignaturedigestverify\n\nOSSLFUNCsignaturesetctxparams and OSSLFUNCsignaturesettablectxparams are optional,\nbut if one of them is present then the other one must also be present. The same applies to\nOSSLFUNCsignaturegetctxparams and OSSLFUNCsignaturegettablectxparams, as well as\nthe \"mdparams\" functions. The OSSLFUNCsignaturedupctx function is optional.\n\nA signature algorithm must also implement some mechanism for generating, loading or importing\nkeys via the key management (OSSLOPKEYMGMT) operation.  See provider-keymgmt(7) for further\ndetails.\n",
            "subsections": [
                {
                    "name": "Context Management Functions",
                    "content": "OSSLFUNCsignaturenewctx() should create and return a pointer to a provider side structure\nfor holding context information during a signature operation.  A pointer to this context will\nbe passed back in a number of the other signature operation function calls.  The parameter\nprovctx is the provider context generated during provider initialisation (see provider(7)).\nThe propq parameter is a property query string that may be (optionally) used by the provider\nduring any \"fetches\" that it may perform (if it performs any).\n\nOSSLFUNCsignaturefreectx() is passed a pointer to the provider side signature context in\nthe ctx parameter.  This function should free any resources associated with that context.\n\nOSSLFUNCsignaturedupctx() should duplicate the provider side signature context in the ctx\nparameter and return the duplicate copy.\n"
                },
                {
                    "name": "Signing Functions",
                    "content": "OSSLFUNCsignaturesigninit() initialises a context for signing given a provider side\nsignature context in the ctx parameter, and a pointer to a provider key object in the provkey\nparameter.  The params, if not NULL, should be set on the context in a manner similar to\nusing OSSLFUNCsignaturesetctxparams().  The key object should have been previously\ngenerated, loaded or imported into the provider using the key management (OSSLOPKEYMGMT)\noperation (see provider-keymgmt(7)>.\n\nOSSLFUNCsignaturesign() performs the actual signing itself.  A previously initialised\nsignature context is passed in the ctx parameter.  The data to be signed is pointed to be the\ntbs parameter which is tbslen bytes long.  Unless sig is NULL, the signature should be\nwritten to the location pointed to by the sig parameter and it should not exceed sigsize\nbytes in length.  The length of the signature should be written to *siglen.  If sig is NULL\nthen the maximum length of the signature should be written to *siglen.\n"
                },
                {
                    "name": "Verify Functions",
                    "content": "OSSLFUNCsignatureverifyinit() initialises a context for verifying a signature given a\nprovider side signature context in the ctx parameter, and a pointer to a provider key object\nin the provkey parameter.  The params, if not NULL, should be set on the context in a manner\nsimilar to using OSSLFUNCsignaturesetctxparams().  The key object should have been\npreviously generated, loaded or imported into the provider using the key management\n(OSSLOPKEYMGMT) operation (see provider-keymgmt(7)>.\n\nOSSLFUNCsignatureverify() performs the actual verification itself.  A previously\ninitialised signature context is passed in the ctx parameter.  The data that the signature\ncovers is pointed to be the tbs parameter which is tbslen bytes long.  The signature is\npointed to by the sig parameter which is siglen bytes long.\n"
                },
                {
                    "name": "Verify Recover Functions",
                    "content": "OSSLFUNCsignatureverifyrecoverinit() initialises a context for recovering the signed\ndata given a provider side signature context in the ctx parameter, and a pointer to a\nprovider key object in the provkey parameter.  The params, if not NULL, should be set on the\ncontext in a manner similar to using OSSLFUNCsignaturesetctxparams().  The key object\nshould have been previously generated, loaded or imported into the provider using the key\nmanagement (OSSLOPKEYMGMT) operation (see provider-keymgmt(7)>.\n\nOSSLFUNCsignatureverifyrecover() performs the actual verify recover itself.  A previously\ninitialised signature context is passed in the ctx parameter.  The signature is pointed to by\nthe sig parameter which is siglen bytes long.  Unless rout is NULL, the recovered data should\nbe written to the location pointed to by rout which should not exceed routsize bytes in\nlength.  The length of the recovered data should be written to *routlen.  If rout is NULL\nthen the maximum size of the output buffer is written to the routlen parameter.\n"
                },
                {
                    "name": "Digest Sign Functions",
                    "content": "OSSLFUNCsignaturedigesetsigninit() initialises a context for signing given a provider\nside signature context in the ctx parameter, and a pointer to a provider key object in the\nprovkey parameter.  The params, if not NULL, should be set on the context in a manner similar\nto using OSSLFUNCsignaturesetctxparams() and OSSLFUNCsignaturesetctxmdparams().\nThe key object should have been previously generated, loaded or imported into the provider\nusing the key management (OSSLOPKEYMGMT) operation (see provider-keymgmt(7)>.  The name of\nthe digest to be used will be in the mdname parameter. There may also be properties to be\nused in fetching the digest in the props parameter, although this may be ignored by\nproviders.\n\nOSSLFUNCsignaturedigestsignupdate() provides data to be signed in the data parameter\nwhich should be of length datalen. A previously initialised signature context is passed in\nthe ctx parameter. This function may be called multiple times to cumulatively add data to be\nsigned.\n\nOSSLFUNCsignaturedigestsignfinal() finalises a signature operation previously started\nthrough OSSLFUNCsignaturedigestsigninit() and OSSLFUNCsignaturedigestsignupdate()\ncalls. Once finalised no more data will be added through\nOSSLFUNCsignaturedigestsignupdate(). A previously initialised signature context is\npassed in the ctx parameter. Unless sig is NULL, the signature should be written to the\nlocation pointed to by the sig parameter and it should not exceed sigsize bytes in length.\nThe length of the signature should be written to *siglen. If sig is NULL then the maximum\nlength of the signature should be written to *siglen.\n\nOSSLFUNCsignaturedigestsign() implements a \"one shot\" digest sign operation previously\nstarted through OSSLFUNCsignaturedigesetsigninit(). A previously initialised signature\ncontext is passed in the ctx parameter. The data to be signed is in tbs which should be\ntbslen bytes long. Unless sig is NULL, the signature should be written to the location\npointed to by the sig parameter and it should not exceed sigsize bytes in length. The length\nof the signature should be written to *siglen. If sig is NULL then the maximum length of the\nsignature should be written to *siglen.\n"
                },
                {
                    "name": "Digest Verify Functions",
                    "content": "OSSLFUNCsignaturedigesetverifyinit() initialises a context for verifying given a\nprovider side verification context in the ctx parameter, and a pointer to a provider key\nobject in the provkey parameter.  The params, if not NULL, should be set on the context in a\nmanner similar to OSSLFUNCsignaturesetctxparams() and\nOSSLFUNCsignaturesetctxmdparams().  The key object should have been previously\ngenerated, loaded or imported into the provider using the key management (OSSLOPKEYMGMT)\noperation (see provider-keymgmt(7)>.  The name of the digest to be used will be in the mdname\nparameter. There may also be properties to be used in fetching the digest in the props\nparameter, although this may be ignored by providers.\n\nOSSLFUNCsignaturedigestverifyupdate() provides data to be verified in the data parameter\nwhich should be of length datalen. A previously initialised verification context is passed in\nthe ctx parameter. This function may be called multiple times to cumulatively add data to be\nverified.\n\nOSSLFUNCsignaturedigestverifyfinal() finalises a verification operation previously\nstarted through OSSLFUNCsignaturedigestverifyinit() and\nOSSLFUNCsignaturedigestverifyupdate() calls. Once finalised no more data will be added\nthrough OSSLFUNCsignaturedigestverifyupdate(). A previously initialised verification\ncontext is passed in the ctx parameter. The signature to be verified is in sig which is\nsiglen bytes long.\n\nOSSLFUNCsignaturedigestverify() implements a \"one shot\" digest verify operation\npreviously started through OSSLFUNCsignaturedigesetverifyinit(). A previously\ninitialised verification context is passed in the ctx parameter. The data to be verified is\nin tbs which should be tbslen bytes long. The signature to be verified is in sig which is\nsiglen bytes long.\n"
                },
                {
                    "name": "Signature parameters",
                    "content": "See OSSLPARAM(3) for further details on the parameters structure used by the\nOSSLFUNCsignaturegetctxparams() and OSSLFUNCsignaturesetctxparams() functions.\n\nOSSLFUNCsignaturegetctxparams() gets signature parameters associated with the given\nprovider side signature context ctx and stored them in params.  Passing NULL for params\nshould return true.\n\nOSSLFUNCsignaturesetctxparams() sets the signature parameters associated with the given\nprovider side signature context ctx to params.  Any parameter settings are additional to any\nthat were previously set.  Passing NULL for params should return true.\n\nCommon parameters currently recognised by built-in signature algorithms are as follows.\n\n\"digest\" (OSSLSIGNATUREPARAMDIGEST) <UTF8 string>\nGet or sets the name of the digest algorithm used for the input to the signature\nfunctions. It is required in order to calculate the \"algorithm-id\".\n\n\"properties\" (OSSLSIGNATUREPARAMPROPERTIES) <UTF8 string>\nSets the name of the property query associated with the \"digest\" algorithm.  NULL is used\nif this optional value is not set.\n\n\"digest-size\" (OSSLSIGNATUREPARAMDIGESTSIZE) <unsigned integer>\nGets or sets the output size of the digest algorithm used for the input to the signature\nfunctions.  The length of the \"digest-size\" parameter should not exceed that of a sizet.\n\n\"algorithm-id\" (OSSLSIGNATUREPARAMALGORITHMID) <octet string>\nGets the DER encoded AlgorithmIdentifier that corresponds to the combination of signature\nalgorithm and digest algorithm for the signature operation.\n\n\"kat\" (OSSLSIGNATUREPARAMKAT) <unsigned integer>\nSets a flag to modify the sign operation to return an error if the initial calculated\nsignature is invalid.  In the normal mode of operation - new random values are chosen\nuntil the signature operation succeeds.  By default it retries until a signature is\ncalculated.  Setting the value to 0 causes the sign operation to retry, otherwise the\nsign operation is only tried once and returns whether or not it was successful.  Known\nanswer tests can be performed if the random generator is overridden to supply known\nvalues that either pass or fail.\n\nOSSLFUNCsignaturegettablectxparams() and OSSLFUNCsignaturesettablectxparams() get a\nconstant OSSLPARAM array that describes the gettable and settable parameters, i.e.\nparameters that can be used with OSSLFUNCsignaturegetctxparams() and\nOSSLFUNCsignaturesetctxparams() respectively.  See OSSLPARAM(3) for the use of\nOSSLPARAM as parameter descriptor.\n"
                },
                {
                    "name": "MD parameters",
                    "content": "See OSSLPARAM(3) for further details on the parameters structure used by the\nOSSLFUNCsignaturegetmdctxparams() and OSSLFUNCsignaturesetmdctxparams()\nfunctions.\n\nOSSLFUNCsignaturegetmdctxparams() gets digest parameters associated with the given\nprovider side digest signature context ctx and stores them in params.  Passing NULL for\nparams should return true.\n\nOSSLFUNCsignaturesetmsctxparams() sets the digest parameters associated with the given\nprovider side digest signature context ctx to params.  Any parameter settings are additional\nto any that were previously set.  Passing NULL for params should return true.\n\nParameters currently recognised by built-in signature algorithms are the same as those for\nbuilt-in digest algorithms. See \"Digest Parameters\" in provider-digest(7) for further\ninformation.\n\nOSSLFUNCsignaturegettablemdctxparams() and OSSLFUNCsignaturesettablemdctxparams()\nget a constant OSSLPARAM array that describes the gettable and settable digest parameters,\ni.e. parameters that can be used with OSSLFUNCsignaturegetmdctxparams() and\nOSSLFUNCsignaturesetmdctxparams() respectively. See OSSLPARAM(3) for the use of\nOSSLPARAM as parameter descriptor.\n"
                }
            ]
        },
        "RETURN VALUES": {
            "content": "OSSLFUNCsignaturenewctx() and OSSLFUNCsignaturedupctx() should return the newly created\nprovider side signature, or NULL on failure.\n\nOSSLFUNCsignaturegettablectxparams(), OSSLFUNCsignaturesettablectxparams(),\nOSSLFUNCsignaturegettablemdctxparams() and\nOSSLFUNCsignaturesettablemdctxparams(), return the gettable or settable parameters in a\nconstant OSSLPARAM array.\n\nAll other functions should return 1 for success or 0 on error.\n",
            "subsections": []
        },
        "SEE ALSO": {
            "content": "provider(7)\n",
            "subsections": []
        },
        "HISTORY": {
            "content": "The provider SIGNATURE interface was introduced in OpenSSL 3.0.\n",
            "subsections": []
        },
        "COPYRIGHT": {
            "content": "Copyright 2019-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-04-07                     PROVIDER-SIGNATURE(7SSL)",
            "subsections": []
        }
    },
    "summary": "provider-signature - The signature library <-> provider functions",
    "flags": [],
    "examples": [],
    "see_also": [
        {
            "name": "provider",
            "section": "7",
            "url": "https://www.chedong.com/phpMan.php/man/provider/7/json"
        }
    ]
}