{
    "mode": "man",
    "parameter": "provider-signature",
    "section": "7ssl",
    "url": "https://www.chedong.com/phpMan.php/man/provider-signature/7ssl/json",
    "generated": "2026-10-09T17:05:43Z",
    "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,\nvoid *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,\nvoid *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,\nvoid *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,\nvoid *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(3) arrays via OSSLALGORITHM(3) 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(3) 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(3) 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 OSSLFUNCsignatureverifyrecover\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.\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.\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(3)  array  that  describes  the  gettable  and settable parameters, i.e.\nparameters   that    can    be    used    with    OSSLFUNCsignaturegetctxparams()    and\nOSSLFUNCsignaturesetctxparams() respectively.\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(3)  array  that  describes  the  gettable  and  settable  digest\nparameters, i.e. parameters that can be used with OSSLFUNCsignaturegetmdctxparams() and\nOSSLFUNCsignaturesetmdctxparams() respectively.\n"
                }
            ]
        },
        "RETURN VALUES": {
            "content": "OSSLFUNCsignaturenewctx() and OSSLFUNCsignaturedupctx() should return the newly created\nprovider side signature context, or NULL on failure.\n\nOSSLFUNCsignaturegettablectxparams(),         OSSLFUNCsignaturesettablectxparams(),\nOSSLFUNCsignaturegettablemdctxparams()                                              and\nOSSLFUNCsignaturesettablemdctxparams(), return the gettable or settable parameters in a\nconstant OSSLPARAM(3) 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-2023 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\n3.0.13                                       2026-07-29                     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"
        }
    ]
}