diff options
Diffstat (limited to 'secure/lib/libcrypto/man/man3/OSSL_CMP_CTX_new.3')
| -rw-r--r-- | secure/lib/libcrypto/man/man3/OSSL_CMP_CTX_new.3 | 945 |
1 files changed, 945 insertions, 0 deletions
diff --git a/secure/lib/libcrypto/man/man3/OSSL_CMP_CTX_new.3 b/secure/lib/libcrypto/man/man3/OSSL_CMP_CTX_new.3 new file mode 100644 index 000000000000..b1879efa0628 --- /dev/null +++ b/secure/lib/libcrypto/man/man3/OSSL_CMP_CTX_new.3 @@ -0,0 +1,945 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Required to disable full justification in groff 1.23.0. +.if n .ds AD l +.\" ======================================================================== +.\" +.IX Title "OSSL_CMP_CTX_NEW 3ossl" +.TH OSSL_CMP_CTX_NEW 3ossl 2026-04-07 3.5.6 OpenSSL +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +OSSL_CMP_CTX_new, +OSSL_CMP_CTX_free, +OSSL_CMP_CTX_reinit, +OSSL_CMP_CTX_get0_libctx, OSSL_CMP_CTX_get0_propq, +OSSL_CMP_CTX_set_option, +OSSL_CMP_CTX_get_option, +OSSL_CMP_CTX_set_log_cb, +OSSL_CMP_CTX_set_log_verbosity, +OSSL_CMP_CTX_print_errors, +OSSL_CMP_CTX_set1_serverPath, +OSSL_CMP_CTX_set1_server, +OSSL_CMP_CTX_set_serverPort, +OSSL_CMP_CTX_set1_proxy, +OSSL_CMP_CTX_set1_no_proxy, +OSSL_CMP_CTX_set_http_cb, +OSSL_CMP_CTX_set_http_cb_arg, +OSSL_CMP_CTX_get_http_cb_arg, +OSSL_CMP_transfer_cb_t, +OSSL_CMP_CTX_set_transfer_cb, +OSSL_CMP_CTX_set_transfer_cb_arg, +OSSL_CMP_CTX_get_transfer_cb_arg, +OSSL_CMP_CTX_set1_srvCert, +OSSL_CMP_CTX_set1_expected_sender, +OSSL_CMP_CTX_set0_trusted, +OSSL_CMP_CTX_set0_trustedStore, +OSSL_CMP_CTX_get0_trusted, +OSSL_CMP_CTX_get0_trustedStore, +OSSL_CMP_CTX_set1_untrusted, +OSSL_CMP_CTX_get0_untrusted, +OSSL_CMP_CTX_set1_cert, +OSSL_CMP_CTX_build_cert_chain, +OSSL_CMP_CTX_set1_pkey, +OSSL_CMP_CTX_set1_referenceValue, +OSSL_CMP_CTX_set1_secretValue, +OSSL_CMP_CTX_set1_recipient, +OSSL_CMP_CTX_push0_geninfo_ITAV, +OSSL_CMP_CTX_reset_geninfo_ITAVs, +OSSL_CMP_CTX_get0_geninfo_ITAVs, +OSSL_CMP_CTX_set1_extraCertsOut, +OSSL_CMP_CTX_set0_newPkey, +OSSL_CMP_CTX_get0_newPkey, +OSSL_CMP_CTX_set1_issuer, +OSSL_CMP_CTX_set1_serialNumber, +OSSL_CMP_CTX_set1_subjectName, +OSSL_CMP_CTX_push1_subjectAltName, +OSSL_CMP_CTX_set0_reqExtensions, +OSSL_CMP_CTX_reqExtensions_have_SAN, +OSSL_CMP_CTX_push0_policy, +OSSL_CMP_CTX_set1_oldCert, +OSSL_CMP_CTX_set1_p10CSR, +OSSL_CMP_CTX_push0_genm_ITAV, +OSSL_CMP_certConf_cb_t, +OSSL_CMP_certConf_cb, +OSSL_CMP_CTX_set_certConf_cb, +OSSL_CMP_CTX_set_certConf_cb_arg, +OSSL_CMP_CTX_get_certConf_cb_arg, +OSSL_CMP_CTX_get_status, +OSSL_CMP_CTX_get0_statusString, +OSSL_CMP_CTX_get_failInfoCode, +OSSL_CMP_CTX_get0_validatedSrvCert, +OSSL_CMP_CTX_get0_newCert, +OSSL_CMP_CTX_get1_newChain, +OSSL_CMP_CTX_get1_caPubs, +OSSL_CMP_CTX_get1_extraCertsIn, +OSSL_CMP_CTX_set1_transactionID, +OSSL_CMP_CTX_set1_senderNonce +\&\- functions for managing the CMP client context data structure +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 1 +\& #include <openssl/cmp.h> +\& +\& OSSL_CMP_CTX *OSSL_CMP_CTX_new(OSSL_LIB_CTX *libctx, const char *propq); +\& void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx); +\& OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); +\& const char *OSSL_CMP_CTX_get0_propq(const OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_set_option(OSSL_CMP_CTX *ctx, int opt, int val); +\& int OSSL_CMP_CTX_get_option(const OSSL_CMP_CTX *ctx, int opt); +\& +\& /* logging and error reporting: */ +\& int OSSL_CMP_CTX_set_log_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_log_cb_t cb); +\& #define OSSL_CMP_CTX_set_log_verbosity(ctx, level) +\& void OSSL_CMP_CTX_print_errors(const OSSL_CMP_CTX *ctx); +\& +\& /* message transfer: */ +\& int OSSL_CMP_CTX_set1_serverPath(OSSL_CMP_CTX *ctx, const char *path); +\& int OSSL_CMP_CTX_set1_server(OSSL_CMP_CTX *ctx, const char *address); +\& int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port); +\& int OSSL_CMP_CTX_set1_proxy(OSSL_CMP_CTX *ctx, const char *name); +\& int OSSL_CMP_CTX_set1_no_proxy(OSSL_CMP_CTX *ctx, const char *names); +\& int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, HTTP_bio_cb_t cb); +\& int OSSL_CMP_CTX_set_http_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +\& void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx); +\& typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t)(OSSL_CMP_CTX *ctx, +\& const OSSL_CMP_MSG *req); +\& int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, +\& OSSL_CMP_transfer_cb_t cb); +\& int OSSL_CMP_CTX_set_transfer_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +\& void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); +\& +\& /* server authentication: */ +\& int OSSL_CMP_CTX_set1_srvCert(OSSL_CMP_CTX *ctx, X509 *cert); +\& int OSSL_CMP_CTX_set1_expected_sender(OSSL_CMP_CTX *ctx, +\& const X509_NAME *name); +\& #define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore +\& int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store); +\& #define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore +\& X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_set1_untrusted(OSSL_CMP_CTX *ctx, STACK_OF(X509) *certs); +\& STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted(const OSSL_CMP_CTX *ctx); +\& +\& /* client authentication: */ +\& int OSSL_CMP_CTX_set1_cert(OSSL_CMP_CTX *ctx, X509 *cert); +\& int OSSL_CMP_CTX_build_cert_chain(OSSL_CMP_CTX *ctx, X509_STORE *own_trusted, +\& STACK_OF(X509) *candidates); +\& int OSSL_CMP_CTX_set1_pkey(OSSL_CMP_CTX *ctx, EVP_PKEY *pkey); +\& int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx, +\& const unsigned char *ref, int len); +\& int OSSL_CMP_CTX_set1_secretValue(OSSL_CMP_CTX *ctx, +\& const unsigned char *sec, int len); +\& +\& /* CMP message header and extra certificates: */ +\& int OSSL_CMP_CTX_set1_recipient(OSSL_CMP_CTX *ctx, const X509_NAME *name); +\& int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +\& int OSSL_CMP_CTX_reset_geninfo_ITAVs(OSSL_CMP_CTX *ctx); +\& STACK_OF(OSSL_CMP_ITAV) +\& *OSSL_CMP_CTX_get0_geninfo_ITAVs(const OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, +\& STACK_OF(X509) *extraCertsOut); +\& +\& /* certificate template: */ +\& int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey); +\& EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv); +\& int OSSL_CMP_CTX_set1_issuer(OSSL_CMP_CTX *ctx, const X509_NAME *name); +\& int OSSL_CMP_CTX_set1_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); +\& int OSSL_CMP_CTX_set1_subjectName(OSSL_CMP_CTX *ctx, const X509_NAME *name); +\& int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx, +\& const GENERAL_NAME *name); +\& int OSSL_CMP_CTX_set0_reqExtensions(OSSL_CMP_CTX *ctx, X509_EXTENSIONS *exts); +\& int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo); +\& int OSSL_CMP_CTX_set1_oldCert(OSSL_CMP_CTX *ctx, X509 *cert); +\& int OSSL_CMP_CTX_set1_p10CSR(OSSL_CMP_CTX *ctx, const X509_REQ *csr); +\& +\& /* misc body contents: */ +\& int OSSL_CMP_CTX_push0_genm_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav); +\& +\& /* certificate confirmation: */ +\& typedef int (*OSSL_CMP_certConf_cb_t)(OSSL_CMP_CTX *ctx, X509 *cert, +\& int fail_info, const char **txt); +\& int OSSL_CMP_certConf_cb(OSSL_CMP_CTX *ctx, X509 *cert, int fail_info, +\& const char **text); +\& int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb); +\& int OSSL_CMP_CTX_set_certConf_cb_arg(OSSL_CMP_CTX *ctx, void *arg); +\& void *OSSL_CMP_CTX_get_certConf_cb_arg(const OSSL_CMP_CTX *ctx); +\& +\& /* result fetching: */ +\& int OSSL_CMP_CTX_get_status(const OSSL_CMP_CTX *ctx); +\& OSSL_CMP_PKIFREETEXT *OSSL_CMP_CTX_get0_statusString(const OSSL_CMP_CTX *ctx); +\& int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx); +\& +\& X509 *OSSL_CMP_CTX_get0_validatedSrvCert(const OSSL_CMP_CTX *ctx); +\& X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx); +\& STACK_OF(X509) *OSSL_CMP_CTX_get1_newChain(const OSSL_CMP_CTX *ctx); +\& STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx); +\& STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx); +\& +\& /* for testing and debugging purposes: */ +\& int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx, +\& const ASN1_OCTET_STRING *id); +\& int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx, +\& const ASN1_OCTET_STRING *nonce); +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This is the context API for using CMP (Certificate Management Protocol) with +OpenSSL. +.PP +\&\fBOSSL_CMP_CTX_new()\fR allocates an \fBOSSL_CMP_CTX\fR structure associated with +the library context \fIlibctx\fR and property query string \fIpropq\fR, +both of which may be NULL to select the defaults. +It initializes the remaining fields to their default values \- for instance, +the logging verbosity is set to OSSL_CMP_LOG_INFO, +the message timeout is set to 120 seconds, +and the proof\-of\-possession method is set to OSSL_CRMF_POPO_SIGNATURE. +.PP +\&\fBOSSL_CMP_CTX_free()\fR deallocates an OSSL_CMP_CTX structure. +If the argument is NULL, nothing is done. +.PP +\&\fBOSSL_CMP_CTX_reinit()\fR prepares the given \fIctx\fR for a further transaction by +clearing the internal CMP transaction (aka session) status, PKIStatusInfo, +and any previous results (newCert, newChain, caPubs, and extraCertsIn) +from the last executed transaction. +It also clears any ITAVs that were added by \fBOSSL_CMP_CTX_push0_genm_ITAV()\fR. +All other field values (i.e., CMP options) are retained for potential reuse. +.PP +\&\fBOSSL_CMP_CTX_get0_libctx()\fR returns the \fIlibctx\fR argument that was used +when constructing \fIctx\fR with \fBOSSL_CMP_CTX_new()\fR, which may be NULL. +.PP +\&\fBOSSL_CMP_CTX_get0_propq()\fR returns the \fIpropq\fR argument that was used +when constructing \fIctx\fR with \fBOSSL_CMP_CTX_new()\fR, which may be NULL. +.PP +\&\fBOSSL_CMP_CTX_set_option()\fR sets the given value for the given option +(e.g., OSSL_CMP_OPT_IMPLICIT_CONFIRM) in the given OSSL_CMP_CTX structure. +.PP +The following options can be set: +.IP \fBOSSL_CMP_OPT_LOG_VERBOSITY\fR 4 +.IX Item "OSSL_CMP_OPT_LOG_VERBOSITY" +The level of severity needed for actually outputting log messages +due to errors, warnings, general info, debugging, etc. +Default is OSSL_CMP_LOG_INFO. See also \fBOSSL_CMP_log_open\fR\|(3). +.IP \fBOSSL_CMP_OPT_KEEP_ALIVE\fR 4 +.IX Item "OSSL_CMP_OPT_KEEP_ALIVE" +If the given value is 0 then HTTP connections are not kept open +after receiving a response, which is the default behavior for HTTP 1.0. +If the value is 1 or 2 then persistent connections are requested. +If the value is 2 then persistent connections are required, +i.e., in case the server does not grant them an error occurs. +The default value is 1: prefer to keep the connection open. +.IP \fBOSSL_CMP_OPT_MSG_TIMEOUT\fR 4 +.IX Item "OSSL_CMP_OPT_MSG_TIMEOUT" +Number of seconds a CMP request\-response message round trip +is allowed to take before a timeout error is returned. +A value <= 0 means no limitation (waiting indefinitely). +Default is to use the \fBOSSL_CMP_OPT_TOTAL_TIMEOUT\fR setting. +.IP \fBOSSL_CMP_OPT_TOTAL_TIMEOUT\fR 4 +.IX Item "OSSL_CMP_OPT_TOTAL_TIMEOUT" +Maximum total number of seconds a transaction may take, +including polling etc. +A value <= 0 means no limitation (waiting indefinitely). +Default is 0. +.IP \fBOSSL_CMP_OPT_USE_TLS\fR 4 +.IX Item "OSSL_CMP_OPT_USE_TLS" +Use this option to indicate to the HTTP implementation +whether TLS is going to be used for the connection (resulting in HTTPS). +The value 1 indicates that TLS is used for client\-side HTTP connections, +which needs to be implemented via a callback function set by +\&\fBOSSL_CMP_CTX_set_http_cb()\fR. +The value 0 indicates that TLS is not used. +Default is \-1 for backward compatibility: TLS is used by the client side +if and only if \fBOSSL_CMP_CTX_set_http_cb_arg()\fR sets a non\-NULL \fIarg\fR. +.IP \fBOSSL_CMP_OPT_VALIDITY_DAYS\fR 4 +.IX Item "OSSL_CMP_OPT_VALIDITY_DAYS" +Number of days new certificates are asked to be valid for. +.IP \fBOSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT\fR 4 +.IX Item "OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT" +Do not take default Subject Alternative Names +from the reference certificate. +.IP \fBOSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL\fR 4 +.IX Item "OSSL_CMP_OPT_SUBJECTALTNAME_CRITICAL" +Demand that the given Subject Alternative Names are flagged as critical. +.IP \fBOSSL_CMP_OPT_POLICIES_CRITICAL\fR 4 +.IX Item "OSSL_CMP_OPT_POLICIES_CRITICAL" +Demand that the given policies are flagged as critical. +.IP \fBOSSL_CMP_OPT_POPO_METHOD\fR 4 +.IX Item "OSSL_CMP_OPT_POPO_METHOD" +Select the proof of possession method to use. Possible values are: +.Sp +.Vb 8 +\& OSSL_CRMF_POPO_NONE \- ProofOfPossession field omitted, +\& which implies central key generation +\& OSSL_CRMF_POPO_RAVERIFIED \- assert that the RA has already +\& verified the PoPo +\& OSSL_CRMF_POPO_SIGNATURE \- sign a value with private key, +\& which is the default. +\& OSSL_CRMF_POPO_KEYENC \- decrypt the encrypted certificate +\& ("indirect method") +.Ve +.Sp +Note that a signature\-based POPO can only be produced if a private key +is provided as the newPkey or client\*(Aqs pkey component of the CMP context. +.IP \fBOSSL_CMP_OPT_DIGEST_ALGNID\fR 4 +.IX Item "OSSL_CMP_OPT_DIGEST_ALGNID" +The NID of the digest algorithm to be used in RFC 9810\*(Aqs MSG_SIG_ALG +for signature\-based message protection and Proof\-of\-Possession (POPO). +Default is SHA256. +.IP "\fBOSSL_CMP_OPT_OWF_ALGNID\fR The NID of the digest algorithm to be used as one\-way function (OWF) for MAC\-based message protection with password\-based MAC (PBM). See RFC 9810 section 5.1.3.1 for details. Default is SHA256." 4 +.IX Item "OSSL_CMP_OPT_OWF_ALGNID The NID of the digest algorithm to be used as one-way function (OWF) for MAC-based message protection with password-based MAC (PBM). See RFC 9810 section 5.1.3.1 for details. Default is SHA256." +.PD 0 +.IP "\fBOSSL_CMP_OPT_MAC_ALGNID\fR The NID of the MAC algorithm to be used for message protection with PBM. Default is HMAC\-SHA1, for backward compatibility with RFC 4210." 4 +.IX Item "OSSL_CMP_OPT_MAC_ALGNID The NID of the MAC algorithm to be used for message protection with PBM. Default is HMAC-SHA1, for backward compatibility with RFC 4210." +.IP \fBOSSL_CMP_OPT_REVOCATION_REASON\fR 4 +.IX Item "OSSL_CMP_OPT_REVOCATION_REASON" +.PD +The reason code to be included in a Revocation Request (RR); +values: 0..10 (RFC 5210, 5.3.1) or \-1 for none, which is the default. +.IP \fBOSSL_CMP_OPT_IMPLICIT_CONFIRM\fR 4 +.IX Item "OSSL_CMP_OPT_IMPLICIT_CONFIRM" +Request server to enable implicit confirm mode, where the client +does not need to send confirmation upon receiving the +certificate. If the server does not enable implicit confirmation +in the return message, then confirmation is sent anyway. +.IP \fBOSSL_CMP_OPT_DISABLE_CONFIRM\fR 4 +.IX Item "OSSL_CMP_OPT_DISABLE_CONFIRM" +Do not confirm enrolled certificates, to cope with broken servers +not supporting implicit confirmation correctly. +\&\fBWARNING:\fR This setting leads to unspecified behavior and it is meant +exclusively to allow interoperability with server implementations violating +RFC 9810. +.IP \fBOSSL_CMP_OPT_UNPROTECTED_SEND\fR 4 +.IX Item "OSSL_CMP_OPT_UNPROTECTED_SEND" +Send request or response messages without CMP\-level protection. +.IP \fBOSSL_CMP_OPT_UNPROTECTED_ERRORS\fR 4 +.IX Item "OSSL_CMP_OPT_UNPROTECTED_ERRORS" +Accept unprotected error responses which are either explicitly +unprotected or where protection verification failed. Applies to regular +error messages as well as certificate responses (IP/CP/KUP) and +revocation responses (RP) with rejection. +\&\fBWARNING:\fR This setting leads to unspecified behavior and it is meant +exclusively to allow interoperability with server implementations violating +RFC 9810. +.IP \fBOSSL_CMP_OPT_IGNORE_KEYUSAGE\fR 4 +.IX Item "OSSL_CMP_OPT_IGNORE_KEYUSAGE" +Ignore key usage restrictions in the signer\*(Aqs certificate when +validating signature\-based protection in received CMP messages. +Else, \*(AqdigitalSignature\*(Aq must be allowed by CMP signer certificates. +.IP \fBOSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR\fR 4 +.IX Item "OSSL_CMP_OPT_PERMIT_TA_IN_EXTRACERTS_FOR_IR" +Allow retrieving a trust anchor from extraCerts and using that +to validate the certificate chain of an IP message. +This is a quirk option added to support 3GPP TS 33.310. +.Sp +Note that using this option is dangerous as the certificate obtained +this way has not been authenticated (at least not at CMP level). +Taking it over as a trust anchor implements trust\-on\-first\-use (TOFU). +.IP \fBOSSL_CMP_OPT_NO_CACHE_EXTRACERTS\fR 4 +.IX Item "OSSL_CMP_OPT_NO_CACHE_EXTRACERTS" +Do not cache certificates received in the extraCerts CMP message field. +Otherwise they are stored to potentially help validate further messages. +.Sp +In any case, after successfully validating an incoming message, its protection +certificate (if any) is cached for reuse with validation of subsequent messages. +This is done not only for efficiency but also +to eliminate the need for the sender to include its certificate and related chain +in the extraCerts field of subsequent messages of the same transaction. +.PP +\&\fBOSSL_CMP_CTX_get_option()\fR reads the current value of the given option +(e.g., OSSL_CMP_OPT_IMPLICIT_CONFIRM) from the given OSSL_CMP_CTX structure. +.PP +\&\fBOSSL_CMP_CTX_set_log_cb()\fR sets in \fIctx\fR the callback function \fIcb\fR +for handling error queue entries and logging messages. +When \fIcb\fR is NULL errors are printed to STDERR (if available, else ignored) +any log messages are ignored. +Alternatively, \fBOSSL_CMP_log_open\fR\|(3) may be used to direct logging to STDOUT. +.PP +\&\fBOSSL_CMP_CTX_set_log_verbosity()\fR is a macro setting the +OSSL_CMP_OPT_LOG_VERBOSITY context option to the given level. +.PP +\&\fBOSSL_CMP_CTX_print_errors()\fR outputs any entries in the OpenSSL error queue. It +is similar to \fBERR_print_errors_cb\fR\|(3) but uses the CMP log callback function +if set in the \fIctx\fR for uniformity with CMP logging if given. Otherwise it uses +\&\fBERR_print_errors\fR\|(3) to print to STDERR (unless OPENSSL_NO_STDIO is defined). +.PP +\&\fBOSSL_CMP_CTX_set1_serverPath()\fR sets the HTTP path of the CMP server on the host, +also known as "CMP alias". +The default is \f(CW\*(C`/\*(C'\fR. +.PP +\&\fBOSSL_CMP_CTX_set1_server()\fR sets the given server \fIaddress\fR +(which may be a hostname or IP address or NULL) in the given \fIctx\fR. +If \fBOSSL_CMP_CTX_get_transfer_cb_arg()\fR sets a non\-NULL argument, +this server address information is used for diagnostic output only. +.PP +\&\fBOSSL_CMP_CTX_set_serverPort()\fR sets the port of the CMP server to connect to. +If not used or the \fIport\fR argument is 0 +the default port applies, which is 80 for HTTP and 443 for HTTPS. +If \fBOSSL_CMP_CTX_get_transfer_cb_arg()\fR sets a non\-NULL argument, +this server port information is used for diagnostic output only. +.PP +\&\fBOSSL_CMP_CTX_set1_proxy()\fR sets the HTTP proxy to be used for connecting to +the given CMP server unless overruled by any "no_proxy" settings (see below). +If TLS is not used this defaults to the value of +the environment variable \f(CW\*(C`http_proxy\*(C'\fR if set, else \f(CW\*(C`HTTP_PROXY\*(C'\fR. +Otherwise defaults to the value of \f(CW\*(C`https_proxy\*(C'\fR if set, else \f(CW\*(C`HTTPS_PROXY\*(C'\fR. +An empty proxy string specifies not to use a proxy. +Otherwise the format is +\&\f(CW\*(C`[http[s]://][userinfo@]host[:port][/path][?query][#fragment]\*(C'\fR, +where any given userinfo, path, query, and fragment is ignored. +If the host string is an IPv6 address, it must be enclosed in \f(CW\*(C`[\*(C'\fR and \f(CW\*(C`]\*(C'\fR. +The default port number is 80, or 443 in case \f(CW\*(C`https:\*(C'\fR is given. +.PP +\&\fBOSSL_CMP_CTX_set1_no_proxy()\fR sets the list of server hostnames not to use +an HTTP proxy for. The names may be separated by commas and/or whitespace. +Defaults to the environment variable \f(CW\*(C`no_proxy\*(C'\fR if set, else \f(CW\*(C`NO_PROXY\*(C'\fR. +.PP +\&\fBOSSL_CMP_CTX_set_http_cb()\fR sets the optional BIO connect/disconnect callback +function, which has the prototype +.PP +.Vb 1 +\& typedef BIO *(*HTTP_bio_cb_t) (BIO *bio, void *arg, int connect, int detail); +.Ve +.PP +The callback may modify the \fIbio\fR provided by \fBOSSL_CMP_MSG_http_perform\fR\|(3) +as described for the \fIbio_update_fn\fR parameter of \fBOSSL_HTTP_open\fR\|(3). +The callback may make use of a custom defined argument \fIarg\fR, +as described for the \fIarg\fR parameter of \fBOSSL_HTTP_open\fR\|(3). +The argument is stored in the OSSL_CMP_CTX using \fBOSSL_CMP_CTX_set_http_cb_arg()\fR. +See also the \fBOSSL_CMP_OPT_USE_TLS\fR option described above. +.PP +\&\fBOSSL_CMP_CTX_set_http_cb_arg()\fR sets the argument, respectively a pointer to +a structure containing arguments such as an \fBSSL_CTX\fR structure, +optionally to be used by the http connect/disconnect callback function. +\&\fIarg\fR is not consumed, and it must therefore explicitly be freed when not +needed any more. \fIarg\fR may be NULL to clear the entry. +If a non\-NULL argument is set, it is an error to use \fBOSSL_CMP_CTX_set1_proxy()\fR +or \fBOSSL_CMP_CTX_set1_no_proxy()\fR for setting non\-NULL strings. +.PP +\&\fBOSSL_CMP_CTX_get_http_cb_arg()\fR gets the argument, respectively the pointer to a +structure containing arguments, previously set by +\&\fBOSSL_CMP_CTX_set_http_cb_arg()\fR or NULL if unset. +.PP +\&\fBOSSL_CMP_CTX_set_transfer_cb()\fR sets the message transfer callback function, +which has the type +.PP +.Vb 2 +\& typedef OSSL_CMP_MSG *(*OSSL_CMP_transfer_cb_t) (OSSL_CMP_CTX *ctx, +\& const OSSL_CMP_MSG *req); +.Ve +.PP +Default is NULL, which implies the use of \fBOSSL_CMP_MSG_http_perform\fR\|(3). +The callback should send the CMP request message it obtains via the \fIreq\fR +parameter and on success return the response, else it must return NULL. +The transfer callback may make use of a custom defined argument stored in +the ctx by means of \fBOSSL_CMP_CTX_set_transfer_cb_arg()\fR, which may be retrieved +again through \fBOSSL_CMP_CTX_get_transfer_cb_arg()\fR. +.PP +\&\fBOSSL_CMP_CTX_set_transfer_cb_arg()\fR sets an argument, respectively a pointer to a +structure containing arguments, optionally to be used by the transfer callback. +\&\fIarg\fR is not consumed, and it must therefore explicitly be freed when not +needed any more. \fIarg\fR may be NULL to clear the entry. +.PP +\&\fBOSSL_CMP_CTX_get_transfer_cb_arg()\fR gets the argument, respectively the pointer +to a structure containing arguments, previously set by +\&\fBOSSL_CMP_CTX_set_transfer_cb_arg()\fR or NULL if unset. +.PP +\&\fBOSSL_CMP_CTX_set1_srvCert()\fR sets the expected server cert in \fIctx\fR and trusts +it directly (even if it is expired) when verifying signed response messages. +This pins the accepted CMP server +and results in ignoring whatever may be set using \fBOSSL_CMP_CTX_set0_trusted()\fR. +Any previously set value is freed. +The \fIcert\fR argument may be NULL to clear the entry. +If set, the subject of the certificate is also used +as default value for the recipient of CMP requests +and as default value for the expected sender of CMP responses. +.PP +\&\fBOSSL_CMP_CTX_set1_expected_sender()\fR sets the Distinguished Name (DN) +expected in the sender field of incoming CMP messages. +Defaults to the subject of the pinned server certificate, if any. +This can be used to make sure that only a particular entity is accepted as +CMP message signer, and attackers are not able to use arbitrary certificates +of a trusted PKI hierarchy to fraudulently pose as CMP server. +Note that this gives slightly more freedom than \fBOSSL_CMP_CTX_set1_srvCert()\fR, +which pins the server to the holder of a particular certificate, while the +expected sender name will continue to match after updates of the server cert. +.PP +\&\fBOSSL_CMP_CTX_set0_trusted()\fR is an alias of the original +\&\fBOSSL_CMP_CTX_set0_trustedStore()\fR. +It sets in the CMP context \fIctx\fR the certificate store of type X509_STORE +containing trusted certificates, typically of root CAs. +This is ignored when a certificate is pinned using \fBOSSL_CMP_CTX_set1_srvCert()\fR. +The store may also hold CRLs and a certificate verification callback function +used for signature\-based peer authentication. +Any store entry already set before is freed. +When given a NULL parameter the entry is cleared. +.PP +\&\fBOSSL_CMP_CTX_get0_trusted()\fR is an alias of the original +\&\fBOSSL_CMP_CTX_get0_trustedStore()\fR. +It extracts from the CMP context \fIctx\fR the pointer to the currently set +certificate store containing trust anchors etc., or an empty store if unset. +.PP +\&\fBOSSL_CMP_CTX_set1_untrusted()\fR sets up a list of non\-trusted certificates +of intermediate CAs that may be useful for path construction for the own CMP +signer certificate, for the own TLS certificate (if any), when verifying peer +CMP protection certificates, and when verifying newly enrolled certificates. +The reference counts of those certificates handled successfully are increased. +This list of untrusted certificates in \fIctx\fR will get augmented by extraCerts +in received CMP messages unless \fBOSSL_CMP_OPT_NO_CACHE_EXTRACERTS\fR is set. +.PP +\&\fBOSSL_CMP_CTX_get0_untrusted()\fR returns a pointer to the +list of untrusted certs in \fIctx\fR, which may be empty if unset. +.PP +\&\fBOSSL_CMP_CTX_set1_cert()\fR sets the CMP \fIsigner certificate\fR, +also called \fIprotection certificate\fR, +related to the private key used for signature\-based CMP message protection. +Therefore the public key of this \fIcert\fR must correspond to +the private key set before or thereafter via \fBOSSL_CMP_CTX_set1_pkey()\fR. +When using signature\-based protection of CMP request messages +this CMP signer certificate will be included first in the extraCerts field. +It serves as fallback reference certificate, see \fBOSSL_CMP_CTX_set1_oldCert()\fR. +The subject of this \fIcert\fR will be used as the sender field of outgoing +messages, while the subject of any cert set via \fBOSSL_CMP_CTX_set1_oldCert()\fR, +the subject of any PKCS#10 CSR set via \fBOSSL_CMP_CTX_set1_p10CSR()\fR, +and any value set via \fBOSSL_CMP_CTX_set1_subjectName()\fR are used as fallback. +.PP +The \fIcert\fR argument may be NULL to clear the entry. +.PP +\&\fBOSSL_CMP_CTX_build_cert_chain()\fR builds a certificate chain for the CMP signer +certificate previously set in the \fIctx\fR. It adds the optional \fIcandidates\fR, +a list of intermediate CA certs that may already constitute the targeted chain, +to the untrusted certs that may already exist in the \fIctx\fR. +Then the function uses this augmented set of certs for chain construction. +If \fIown_trusted\fR is NULL it builds the chain as far down as possible and +ignores any verification errors. Else the CMP signer certificate must be +verifiable where the chain reaches a trust anchor contained in \fIown_trusted\fR. +On success the function stores the resulting chain in \fIctx\fR +for inclusion in the extraCerts field of signature\-protected messages. +Calling this function is optional; by default a chain construction +is performed on demand that is equivalent to calling this function +with the \fIcandidates\fR and \fIown_trusted\fR arguments being NULL. +.PP +\&\fBOSSL_CMP_CTX_set1_pkey()\fR sets the client\*(Aqs private key corresponding to the +CMP signer certificate set via \fBOSSL_CMP_CTX_set1_cert()\fR. +This key is used create signature\-based protection (protectionAlg = MSG_SIG_ALG) +of outgoing messages +unless a symmetric secret has been set via \fBOSSL_CMP_CTX_set1_secretValue()\fR. +The \fIpkey\fR argument may be NULL to clear the entry. +.PP +\&\fBOSSL_CMP_CTX_set1_secretValue()\fR sets in \fIctx\fR the byte string \fIsec\fR of length +\&\fIlen\fR to use as pre\-shared secret, or clears it if the \fIsec\fR argument is NULL. +If present, this secret is used to create MAC\-based authentication and integrity +protection (rather than applying signature\-based protection) +of outgoing messages and to verify authenticity and integrity of incoming +messages that have MAC\-based protection (protectionAlg = \f(CW\*(C`MSG_MAC_ALG\*(C'\fR). +.PP +\&\fBOSSL_CMP_CTX_set1_referenceValue()\fR sets the given referenceValue \fIref\fR with +length \fIlen\fR in the given \fIctx\fR or clears it if the \fIref\fR argument is NULL. +According to RFC 9810 section 5.1.1, if no value for the sender field in +CMP message headers can be determined (i.e., no CMP signer certificate +and no subject DN is set via \fBOSSL_CMP_CTX_set1_subjectName()\fR +then the sender field will contain the NULL\-DN +and the senderKID field of the CMP message header must be set. +When signature\-based protection is used the senderKID will be set to +the subjectKeyIdentifier of the CMP signer certificate as far as present. +If not present or when MAC\-based protection is used +the \fIref\fR value is taken as the fallback value for the senderKID. +.PP +\&\fBOSSL_CMP_CTX_set1_recipient()\fR sets the recipient name that will be used in the +PKIHeader of CMP request messages, i.e. the X509 name of the (CA) server. +.PP +The recipient field in the header of a CMP message is mandatory. +If not given explicitly the recipient is determined in the following order: +the subject of the CMP server certificate set using \fBOSSL_CMP_CTX_set1_srvCert()\fR, +the value set using \fBOSSL_CMP_CTX_set1_issuer()\fR, +the issuer of the certificate set using \fBOSSL_CMP_CTX_set1_oldCert()\fR, +the issuer of the CMP signer certificate, +as far as any of those is present, else the NULL\-DN as last resort. +.PP +\&\fBOSSL_CMP_CTX_push0_geninfo_ITAV()\fR adds \fIitav\fR to the stack in the \fIctx\fR to be +added to the generalInfo field of the CMP PKIMessage header of a request +message sent with this context. +.PP +\&\fBOSSL_CMP_CTX_reset_geninfo_ITAVs()\fR +clears any ITAVs that were added by \fBOSSL_CMP_CTX_push0_geninfo_ITAV()\fR. +.PP +\&\fBOSSL_CMP_CTX_get0_geninfo_ITAVs()\fR returns the list of ITAVs set in \fIctx\fR +for inclusion in the generalInfo field of the CMP PKIMessage header of requests +or NULL if not set. +.PP +\&\fBOSSL_CMP_CTX_set1_extraCertsOut()\fR sets the stack of extraCerts that will be +sent to remote. +.PP +\&\fBOSSL_CMP_CTX_set0_newPkey()\fR can be used to explicitly set the given EVP_PKEY +structure as the private or public key to be certified in the CMP context. +The \fIpriv\fR parameter must be 0 if and only if the given key is a public key. +.PP +\&\fBOSSL_CMP_CTX_get0_newPkey()\fR gives the key to use for certificate enrollment +dependent on fields of the CMP context structure: +the newPkey (which may be a private or public key) if present, +else the public key in the p10CSR if present, else the client\*(Aqs private key. +If the \fIpriv\fR parameter is not 0 and the selected key does not have a +private component then NULL is returned. +.PP +\&\fBOSSL_CMP_CTX_set1_issuer()\fR sets the name of the intended issuer that +will be set in the CertTemplate, i.e., the X509 name of the CA server. +.PP +\&\fBOSSL_CMP_CTX_set1_serialNumber()\fR sets the serial number optionally used to +select the certificate to be revoked in Revocation Requests (RR). +.PP +\&\fBOSSL_CMP_CTX_set1_subjectName()\fR sets the subject DN that will be used in +the CertTemplate structure when requesting a new cert. For Key Update Requests +(KUR), it defaults to the subject DN of the reference certificate, +see \fBOSSL_CMP_CTX_set1_oldCert()\fR. This default is used for Initialization +Requests (IR) and Certification Requests (CR) only if no SANs are set. +The \fIsubjectName\fR is also used as fallback for the sender field +of outgoing CMP messages if no reference certificate is available. +.PP +\&\fBOSSL_CMP_CTX_push1_subjectAltName()\fR adds the given X509 name to the list of +alternate names on the certificate template request. This cannot be used if +any Subject Alternative Name extension is set via +\&\fBOSSL_CMP_CTX_set0_reqExtensions()\fR. +By default, unless \fBOSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT\fR has been set, +the Subject Alternative Names are copied from the reference certificate, +see \fBOSSL_CMP_CTX_set1_oldCert()\fR. +If set and the subject DN is not set with \fBOSSL_CMP_CTX_set1_subjectName()\fR then +the certificate template of an IR and CR will not be filled with the default +subject DN from the reference certificate. +If a subject DN is desired it needs to be set explicitly with +\&\fBOSSL_CMP_CTX_set1_subjectName()\fR. +.PP +\&\fBOSSL_CMP_CTX_set0_reqExtensions()\fR sets the X.509v3 extensions to be used in +IR/CR/KUR. +.PP +\&\fBOSSL_CMP_CTX_reqExtensions_have_SAN()\fR returns 1 if the context contains +a Subject Alternative Name extension, else 0 or \-1 on error. +.PP +\&\fBOSSL_CMP_CTX_push0_policy()\fR adds the certificate policy info object +to the X509_EXTENSIONS of the requested certificate template. +.PP +\&\fBOSSL_CMP_CTX_set1_oldCert()\fR sets the old certificate to be updated in +Key Update Requests (KUR) or to be revoked in Revocation Requests (RR). +For RR, this is ignored if an issuer name and a serial number are provided using +\&\fBOSSL_CMP_CTX_set1_issuer()\fR and \fBOSSL_CMP_CTX_set1_serialNumber()\fR, respectively. +For IR/CR/KUR this sets the \fIreference certificate\fR, +which otherwise defaults to the CMP signer certificate. +The \fIreference certificate\fR determined this way, if any, is used for providing +default public key, subject DN, Subject Alternative Names, and issuer DN entries +in the requested certificate template of IR/CR/KUR messages. +.PP +The subject of the reference certificate is used as the sender field value +in CMP message headers. +Its issuer is used as default recipient in CMP message headers. +.PP +\&\fBOSSL_CMP_CTX_set1_p10CSR()\fR sets the PKCS#10 CSR to use in P10CR messages. +If such a CSR is provided, its subject and public key fields are also +used as fallback values for the certificate template of IR/CR/KUR/RR messages, +and any extensions included are added to the template of IR/CR/KUR messages. +.PP +\&\fBOSSL_CMP_CTX_push0_genm_ITAV()\fR adds \fIitav\fR to the stack in the \fIctx\fR which +will be the body of a General Message sent with this context. +.PP +\&\fBOSSL_CMP_certConf_cb()\fR is the default certificate confirmation callback function. +If the callback argument is not NULL it must point to a trust store. +In this case the function checks that the newly enrolled certificate can be +verified using this trust store and untrusted certificates from the \fIctx\fR, +which have been augmented by the list of extraCerts received. +During this verification, any certificate status checking is disabled. +If the callback argument is NULL the function tries building an approximate +chain as far as possible using the same untrusted certificates from the \fIctx\fR, +and if this fails it takes the received extraCerts as fallback. +The resulting cert chain can be retrieved using \fBOSSL_CMP_CTX_get1_newChain()\fR. +This chain excludes the leaf certificate, i.e., the newly enrolled certificate. +Also the trust anchor (the root certificate) is not included. +.PP +\&\fBOSSL_CMP_CTX_set_certConf_cb()\fR sets the callback used for evaluating the newly +enrolled certificate before the library sends, depending on its result, +a positive or negative certConf message to the server. The callback has type +.PP +.Vb 2 +\& typedef int (*OSSL_CMP_certConf_cb_t) (OSSL_CMP_CTX *ctx, X509 *cert, +\& int fail_info, const char **txt); +.Ve +.PP +and should inspect the certificate it obtains via the \fIcert\fR parameter and may +overrule the pre\-decision given in the \fIfail_info\fR and \fI*txt\fR parameters. +If it accepts the certificate it must return 0, indicating success. Else it must +return a bit field reflecting PKIFailureInfo with at least one failure bit and +may set the \fI*txt\fR output parameter to point to a string constant with more +detail. The transfer callback may make use of a custom defined argument stored +in the \fIctx\fR by means of \fBOSSL_CMP_CTX_set_certConf_cb_arg()\fR, which may be +retrieved again through \fBOSSL_CMP_CTX_get_certConf_cb_arg()\fR. +Typically, the callback will check at least that the certificate can be verified +using a set of trusted certificates. +It also could compare the subject DN and other fields of the newly +enrolled certificate with the certificate template of the request. +.PP +\&\fBOSSL_CMP_CTX_set_certConf_cb_arg()\fR sets an argument, respectively a pointer to a +structure containing arguments, optionally to be used by the certConf callback. +\&\fIarg\fR is not consumed, and it must therefore explicitly be freed when not +needed any more. \fIarg\fR may be NULL to clear the entry. +.PP +\&\fBOSSL_CMP_CTX_get_certConf_cb_arg()\fR gets the argument, respectively the pointer +to a structure containing arguments, previously set by +\&\fBOSSL_CMP_CTX_set_certConf_cb_arg()\fR, or NULL if unset. +.PP +\&\fBOSSL_CMP_CTX_get_status()\fR returns for client contexts the PKIstatus from +the last received CertRepMessage or Revocation Response or error message: +=item \fBOSSL_CMP_PKISTATUS_accepted\fR on successful receipt of a GENP message: +.IP \fBOSSL_CMP_PKISTATUS_request\fR 4 +.IX Item "OSSL_CMP_PKISTATUS_request" +if an IR/CR/KUR/RR/GENM request message could not be produced, +.IP \fBOSSL_CMP_PKISTATUS_trans\fR 4 +.IX Item "OSSL_CMP_PKISTATUS_trans" +on a transmission error or transaction error for this type of request, and +.IP \fBOSSL_CMP_PKISTATUS_unspecified\fR 4 +.IX Item "OSSL_CMP_PKISTATUS_unspecified" +if no such request was attempted or \fBOSSL_CMP_CTX_reinit()\fR has been called. +.PP +For server contexts it returns +\&\fBOSSL_CMP_PKISTATUS_trans\fR if a transaction is open, +otherwise \fBOSSL_CMP_PKISTATUS_unspecified\fR. +.PP +\&\fBOSSL_CMP_CTX_get0_statusString()\fR returns the statusString from the last received +CertRepMessage or Revocation Response or error message, or NULL if unset. +.PP +\&\fBOSSL_CMP_CTX_get_failInfoCode()\fR returns the error code from the failInfo field +of the last received CertRepMessage or Revocation Response or error message, +or \-1 if no such response was received or \fBOSSL_CMP_CTX_reinit()\fR has been called. +This is a bit field and the flags for it are specified in the header file +\&\fI<openssl/cmp.h>\fR. +The flags start with OSSL_CMP_CTX_FAILINFO, for example: +OSSL_CMP_CTX_FAILINFO_badAlg. Returns \-1 if the failInfoCode field is unset. +.PP +\&\fBOSSL_CMP_CTX_get0_validatedSrvCert()\fR returns +the successfully validated certificate, if any, that the CMP server used +in the current transaction for signature\-based response message protection, +or NULL if the server used MAC\-based protection. +The value is relevant only at the end of a successful transaction. +It may be used to check the authorization of the server based on its cert. +.PP +\&\fBOSSL_CMP_CTX_get0_newCert()\fR returns the pointer to the newly obtained +certificate in case it is available, else NULL. +.PP +\&\fBOSSL_CMP_CTX_get1_newChain()\fR returns a pointer to a duplicate of the stack of +X.509 certificates computed by \fBOSSL_CMP_certConf_cb()\fR (if this function has +been called) on the last received certificate response message IP/CP/KUP. +.PP +\&\fBOSSL_CMP_CTX_get1_caPubs()\fR returns a pointer to a duplicate of the list of +X.509 certificates in the caPubs field of the last received certificate +response message (of type IP, CP, or KUP), +or an empty stack if no caPubs have been received in the current transaction. +.PP +\&\fBOSSL_CMP_CTX_get1_extraCertsIn()\fR returns a pointer to a duplicate of the list +of X.509 certificates contained in the extraCerts field of the last received +response message (except for pollRep and PKIConf), or +an empty stack if no extraCerts have been received in the current transaction. +.PP +\&\fBOSSL_CMP_CTX_set1_transactionID()\fR sets the given transaction ID in the given +OSSL_CMP_CTX structure. +.PP +\&\fBOSSL_CMP_CTX_set1_senderNonce()\fR stores the last sent sender \fInonce\fR in +the \fIctx\fR. This will be used to validate the recipNonce in incoming messages. +.SH NOTES +.IX Header "NOTES" +CMP is defined in RFC 9810 (and CRMF in RFC 4211). +.SH "RETURN VALUES" +.IX Header "RETURN VALUES" +\&\fBOSSL_CMP_CTX_free()\fR and \fBOSSL_CMP_CTX_print_errors()\fR do not return anything. +.PP +\&\fBOSSL_CMP_CTX_new()\fR, +\&\fBOSSL_CMP_CTX_get0_libctx()\fR, \fBOSSL_CMP_CTX_get0_propq()\fR, +\&\fBOSSL_CMP_CTX_get_http_cb_arg()\fR, +\&\fBOSSL_CMP_CTX_get_transfer_cb_arg()\fR, +\&\fBOSSL_CMP_CTX_get0_trusted()\fR, +\&\fBOSSL_CMP_CTX_get0_untrusted()\fR, +\&\fBOSSL_CMP_CTX_get0_geninfo_ITAVs()\fR, +\&\fBOSSL_CMP_CTX_get0_newPkey()\fR, +\&\fBOSSL_CMP_CTX_get_certConf_cb_arg()\fR, +\&\fBOSSL_CMP_CTX_get0_statusString()\fR, +\&\fBOSSL_CMP_CTX_get0_validatedSrvCert()\fR, +\&\fBOSSL_CMP_CTX_get0_newCert()\fR, +\&\fBOSSL_CMP_CTX_get0_newChain()\fR, +\&\fBOSSL_CMP_CTX_get1_caPubs()\fR, and +\&\fBOSSL_CMP_CTX_get1_extraCertsIn()\fR +return the intended pointer value as described above or NULL on error. +.PP +\&\fBOSSL_CMP_CTX_get_option()\fR, +\&\fBOSSL_CMP_CTX_reqExtensions_have_SAN()\fR, +\&\fBOSSL_CMP_CTX_get_status()\fR, and +\&\fBOSSL_CMP_CTX_get_failInfoCode()\fR +return the intended value as described above or \-1 on error. +.PP +\&\fBOSSL_CMP_certConf_cb()\fR returns \fIfail_info\fR if it is not equal to 0, +else 0 on successful validation, +or else a bit field with the \fBOSSL_CMP_PKIFAILUREINFO_incorrectData\fR bit set. +.PP +All other functions, including \fBOSSL_CMP_CTX_reinit()\fR +and \fBOSSL_CMP_CTX_reset_geninfo_ITAVs()\fR, +return 1 on success, 0 on error. +.SH EXAMPLES +.IX Header "EXAMPLES" +The following code omits error handling. +.PP +Set up a CMP client context for sending requests and verifying responses: +.PP +.Vb 5 +\& cmp_ctx = OSSL_CMP_CTX_new(); +\& OSSL_CMP_CTX_set1_server(cmp_ctx, name_or_address); +\& OSSL_CMP_CTX_set1_serverPort(cmp_ctx, port_string); +\& OSSL_CMP_CTX_set1_serverPath(cmp_ctx, path_or_alias); +\& OSSL_CMP_CTX_set0_trusted(cmp_ctx, ts); +.Ve +.PP +Set up symmetric credentials for MAC\-based message protection such as PBM: +.PP +.Vb 2 +\& OSSL_CMP_CTX_set1_referenceValue(cmp_ctx, ref, ref_len); +\& OSSL_CMP_CTX_set1_secretValue(cmp_ctx, sec, sec_len); +.Ve +.PP +Set up the details for certificate requests: +.PP +.Vb 2 +\& OSSL_CMP_CTX_set1_subjectName(cmp_ctx, name); +\& OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, initialKey); +.Ve +.PP +Perform an Initialization Request transaction: +.PP +.Vb 1 +\& initialCert = OSSL_CMP_exec_IR_ses(cmp_ctx); +.Ve +.PP +Reset the transaction state of the CMP context and the credentials: +.PP +.Vb 3 +\& OSSL_CMP_CTX_reinit(cmp_ctx); +\& OSSL_CMP_CTX_set1_referenceValue(cmp_ctx, NULL, 0); +\& OSSL_CMP_CTX_set1_secretValue(cmp_ctx, NULL, 0); +.Ve +.PP +Perform a Certification Request transaction, making use of the new credentials: +.PP +.Vb 4 +\& OSSL_CMP_CTX_set1_cert(cmp_ctx, initialCert); +\& OSSL_CMP_CTX_set1_pkey(cmp_ctx, initialKey); +\& OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, curentKey); +\& currentCert = OSSL_CMP_exec_CR_ses(cmp_ctx); +.Ve +.PP +Perform a Key Update Request, signed using the cert (and key) to be updated: +.PP +.Vb 6 +\& OSSL_CMP_CTX_reinit(cmp_ctx); +\& OSSL_CMP_CTX_set1_cert(cmp_ctx, currentCert); +\& OSSL_CMP_CTX_set1_pkey(cmp_ctx, currentKey); +\& OSSL_CMP_CTX_set0_newPkey(cmp_ctx, 1, updatedKey); +\& currentCert = OSSL_CMP_exec_KUR_ses(cmp_ctx); +\& currentKey = updatedKey; +.Ve +.PP +Perform a General Message transaction including, as an example, +the id\-it\-signKeyPairTypes OID and prints info on the General Response contents: +.PP +.Vb 1 +\& OSSL_CMP_CTX_reinit(cmp_ctx); +\& +\& ASN1_OBJECT *type = OBJ_txt2obj("1.3.6.1.5.5.7.4.2", 1); +\& OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_create(type, NULL); +\& OSSL_CMP_CTX_push0_genm_ITAV(cmp_ctx, itav); +\& +\& STACK_OF(OSSL_CMP_ITAV) *itavs; +\& itavs = OSSL_CMP_exec_GENM_ses(cmp_ctx); +\& print_itavs(itavs); +\& sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free); +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fBOSSL_CMP_exec_IR_ses\fR\|(3), \fBOSSL_CMP_exec_CR_ses\fR\|(3), +\&\fBOSSL_CMP_exec_KUR_ses\fR\|(3), \fBOSSL_CMP_exec_GENM_ses\fR\|(3), +\&\fBOSSL_CMP_exec_certreq\fR\|(3), \fBOSSL_CMP_MSG_http_perform\fR\|(3), +\&\fBERR_print_errors_cb\fR\|(3), \fBOSSL_HTTP_open\fR\|(3) +.SH HISTORY +.IX Header "HISTORY" +The OpenSSL CMP support was added in OpenSSL 3.0. +.PP +\&\fBOSSL_CMP_CTX_get0_trustedStore()\fR was renamed to \fBOSSL_CMP_CTX_get0_trusted()\fR and +\&\fBOSSL_CMP_CTX_set0_trustedStore()\fR was renamed to \fBOSSL_CMP_CTX_set0_trusted()\fR, +using macros, while keeping the old names for backward compatibility, +in OpenSSL 3.2. +.PP +\&\fBOSSL_CMP_CTX_reset_geninfo_ITAVs()\fR was added in OpenSSL 3.0.8. +.PP +\&\fBOSSL_CMP_CTX_set1_serialNumber()\fR, +\&\fBOSSL_CMP_CTX_get0_libctx()\fR, \fBOSSL_CMP_CTX_get0_propq()\fR, and +\&\fBOSSL_CMP_CTX_get0_validatedSrvCert()\fR were added in OpenSSL 3.2. +.PP +\&\fBOSSL_CMP_CTX_get0_geninfo_ITAVs()\fR and +the \fBOSSL_CMP_OPT_NO_CACHE_EXTRACERTS\fR option were added in OpenSSL 3.3. +.PP +Support for central key generation, requested via \fBOSSL_CRMF_POPO_NONE\fR, +was added in OpenSSL 3.5. +.SH COPYRIGHT +.IX Header "COPYRIGHT" +Copyright 2007\-2026 The OpenSSL Project Authors. All Rights Reserved. +.PP +Licensed under the Apache License 2.0 (the "License"). You may not use +this file except in compliance with the License. You can obtain a copy +in the file LICENSE in the source distribution or at +<https://www.openssl.org/source/license.html>. |
