[#OSSL_CRMF_MSG_create_popo]
= OSSL&lowbar;CRMF&lowbar;MSG&lowbar;create&lowbar;popo
:mrdocs:

Create and set the Proof&hyphen;of&hyphen;Possession field in a CRMF CertReqMsg&period;

== Synopsis

Declared in `&lt;openssl&sol;crmf&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
int
OSSL&lowbar;CRMF&lowbar;MSG&lowbar;create&lowbar;popo(
    int meth,
    xref:OSSL_CRMF_MSG.adoc[OSSL&lowbar;CRMF&lowbar;MSG]* crm,
    xref:EVP_PKEY.adoc[EVP&lowbar;PKEY]* pkey,
    xref:EVP_MD.adoc[EVP&lowbar;MD] const* digest,
    xref:OSSL_LIB_CTX.adoc[OSSL&lowbar;LIB&lowbar;CTX]* libctx,
    char const* propq);
----

== Return Value

1 on success, or 0 on error&period;

== Parameters

[cols="1,4"]
|===
| Name| Description
| *meth*
| POPO method (OSSL&lowbar;CRMF&lowbar;POPO&lowbar;&ast;)&semi; see RFC 4211 section 4&period;
| *crm*
| CertReqMsg to update&period;
| *pkey*
| Private key used when `meth` is OSSL&lowbar;CRMF&lowbar;POPO&lowbar;SIGNATURE&period;
| *digest*
| Digest for signature POPO&semi; ignored for Ed25519&sol;Ed448 keys&period;
| *libctx*
| Library context for algorithm fetches, or NULL for the default&period;
| *propq*
| Property query for algorithm fetches, or NULL&period;
|===


[.small]#Created with https://www.mrdocs.com[MrDocs]#
