2019-11-05 16:56:59 +08:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2020-03-10 17:29:46 +08:00
|
|
|
OSSL_CMP_MSG_get0_header,
|
2021-06-16 16:26:26 +08:00
|
|
|
OSSL_CMP_MSG_get_bodytype,
|
2020-04-30 00:06:43 +08:00
|
|
|
OSSL_CMP_MSG_update_transactionID,
|
2020-07-18 22:59:06 +08:00
|
|
|
OSSL_CMP_CTX_setup_CRM,
|
2020-07-11 17:36:48 +08:00
|
|
|
OSSL_CMP_MSG_read,
|
2020-07-11 18:26:22 +08:00
|
|
|
OSSL_CMP_MSG_write,
|
2020-03-11 20:42:49 +08:00
|
|
|
d2i_OSSL_CMP_MSG_bio,
|
|
|
|
i2d_OSSL_CMP_MSG_bio
|
2019-11-05 16:56:59 +08:00
|
|
|
- function(s) manipulating CMP messages
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/cmp.h>
|
|
|
|
|
|
|
|
OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg);
|
2021-06-16 16:26:26 +08:00
|
|
|
int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg);
|
2020-04-30 00:06:43 +08:00
|
|
|
int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
|
2020-07-18 22:59:06 +08:00
|
|
|
OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid);
|
2021-09-08 09:13:20 +08:00
|
|
|
OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, const char *propq);
|
2020-07-11 18:26:22 +08:00
|
|
|
int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg);
|
2020-03-11 20:42:49 +08:00
|
|
|
OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg);
|
|
|
|
int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg);
|
2019-11-05 16:56:59 +08:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2020-04-30 00:06:43 +08:00
|
|
|
OSSL_CMP_MSG_get0_header() returns the header of the given CMP message.
|
2019-11-05 16:56:59 +08:00
|
|
|
|
2021-06-16 16:26:26 +08:00
|
|
|
OSSL_CMP_MSG_get_bodytype() returns the body type of the given CMP message.
|
|
|
|
|
2020-04-30 00:06:43 +08:00
|
|
|
OSSL_CMP_MSG_update_transactionID() updates the transactionID field
|
|
|
|
in the header of the given message according to the CMP_CTX.
|
|
|
|
This requires re-protecting the message (if it was protected).
|
|
|
|
|
2020-07-18 22:59:06 +08:00
|
|
|
OSSL_CMP_CTX_setup_CRM() creates a CRMF certificate request message
|
2022-02-18 02:40:29 +08:00
|
|
|
from various information provided in the CMP context argument I<ctx>
|
2020-07-18 22:59:06 +08:00
|
|
|
for inclusion in a CMP request message based on details contained in I<ctx>.
|
2022-02-18 02:40:29 +08:00
|
|
|
The I<rid> argument defines the request identifier to use, which typically is 0.
|
|
|
|
|
2022-03-16 01:39:13 +08:00
|
|
|
The subject DN included in the certificate template is
|
|
|
|
the first available value of these:
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
=item any subject name in I<ctx> set via L<OSSL_CMP_CTX_set1_subjectName(3)> -
|
|
|
|
if it is the NULL-DN (i.e., any empty sequence of RDNs), no subject is included,
|
2022-03-16 01:39:13 +08:00
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
=item the subject field of any PKCS#10 CSR set in I<ctx>
|
|
|
|
via L<OSSL_CMP_CTX_set1_p10CSR(3)>,
|
2022-03-16 01:39:13 +08:00
|
|
|
|
|
|
|
=item the subject field of any reference certificate given in I<ctx>
|
2022-08-02 02:34:19 +08:00
|
|
|
(see L<OSSL_CMP_CTX_set1_oldCert(3)>), but only if I<for_KUR> is nonzero
|
2022-03-16 01:39:13 +08:00
|
|
|
or the I<ctx> does not include a Subject Alternative Name.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
The public key included is the first available value of these:
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item the public key derived from any key set via L<OSSL_CMP_CTX_set0_newPkey(3)>,
|
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
=item the public key of any PKCS#10 CSR given in I<ctx>,
|
2022-03-16 01:39:13 +08:00
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
=item the public key of any reference certificate given in I<ctx>,
|
2022-03-16 01:39:13 +08:00
|
|
|
|
2022-03-16 01:40:32 +08:00
|
|
|
=item the public key derived from any client's private key
|
|
|
|
set via L<OSSL_CMP_CTX_set1_pkey(3)>.
|
2022-03-16 01:39:13 +08:00
|
|
|
|
|
|
|
=back
|
2022-02-18 02:40:29 +08:00
|
|
|
|
|
|
|
The set of X.509 extensions to include is computed as follows.
|
|
|
|
If a PKCS#10 CSR is present in I<ctx>, default extensions are taken from there,
|
|
|
|
otherwise the empty set is taken as the initial value.
|
|
|
|
If there is a reference certificate in I<ctx> and contains Subject Alternative
|
|
|
|
Names (SANs) and B<OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT> is not set,
|
|
|
|
these override any SANs from the PKCS#10 CSR.
|
|
|
|
The extensions are further augmented or overridden by any extensions with the
|
|
|
|
same OIDs included in the I<ctx> via L<OSSL_CMP_CTX_set0_reqExtensions(3)>.
|
|
|
|
The SANs are further overridden by any SANs included in I<ctx> via
|
|
|
|
L<OSSL_CMP_CTX_push1_subjectAltName(3)>.
|
|
|
|
Finally, policies are overridden by any policies included in I<ctx> via
|
|
|
|
L<OSSL_CMP_CTX_push0_policy(3)>.
|
|
|
|
|
|
|
|
OSSL_CMP_CTX_setup_CRM() also sets the sets the regToken control B<oldCertID>
|
|
|
|
for KUR messages using the issuer name and serial number of the reference
|
|
|
|
certificate, if present.
|
2020-07-18 22:59:06 +08:00
|
|
|
|
2021-01-12 22:41:10 +08:00
|
|
|
OSSL_CMP_MSG_read() loads a DER-encoded OSSL_CMP_MSG from I<file>.
|
2020-07-11 17:36:48 +08:00
|
|
|
|
2021-01-12 22:41:10 +08:00
|
|
|
OSSL_CMP_MSG_write() stores the given OSSL_CMP_MSG to I<file> in DER encoding.
|
2020-07-11 18:26:22 +08:00
|
|
|
|
2020-04-30 00:06:43 +08:00
|
|
|
d2i_OSSL_CMP_MSG_bio() parses an ASN.1-encoded OSSL_CMP_MSG from the BIO I<bio>.
|
2020-03-10 17:29:46 +08:00
|
|
|
It assigns a pointer to the new structure to I<*msg> if I<msg> is not NULL.
|
|
|
|
|
2020-04-30 00:06:43 +08:00
|
|
|
i2d_OSSL_CMP_MSG_bio() writes the OSSL_CMP_MSG I<msg> in ASN.1 encoding
|
2020-03-11 20:42:49 +08:00
|
|
|
to BIO I<bio>.
|
2020-03-10 17:29:46 +08:00
|
|
|
|
2019-11-05 16:56:59 +08:00
|
|
|
=head1 NOTES
|
|
|
|
|
|
|
|
CMP is defined in RFC 4210.
|
|
|
|
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
2020-03-10 17:29:46 +08:00
|
|
|
OSSL_CMP_MSG_get0_header() returns the intended pointer value as described above
|
2019-11-05 16:56:59 +08:00
|
|
|
or NULL if the respective entry does not exist and on error.
|
|
|
|
|
2021-06-16 16:26:26 +08:00
|
|
|
OSSL_CMP_MSG_get_bodytype() returns the body type or -1 on error.
|
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
OSSL_CMP_CTX_setup_CRM() returns a pointer to a B<OSSL_CRMF_MSG> on success,
|
2020-07-18 22:59:06 +08:00
|
|
|
NULL on error.
|
|
|
|
|
2020-03-11 20:42:49 +08:00
|
|
|
d2i_OSSL_CMP_MSG_bio() returns the parsed message or NULL on error.
|
2020-03-10 17:29:46 +08:00
|
|
|
|
2020-07-11 17:36:48 +08:00
|
|
|
OSSL_CMP_MSG_read() and d2i_OSSL_CMP_MSG_bio()
|
|
|
|
return the parsed CMP message or NULL on error.
|
|
|
|
|
2022-05-30 12:37:53 +08:00
|
|
|
OSSL_CMP_MSG_write() returns the number of bytes successfully encoded or a
|
|
|
|
negative value if an error occurs.
|
2020-07-11 18:26:22 +08:00
|
|
|
|
2022-05-30 12:37:53 +08:00
|
|
|
i2d_OSSL_CMP_MSG_bio() and OSSL_CMP_MSG_update_transactionID() return 1 on
|
|
|
|
success, 0 on error.
|
2020-03-10 17:29:46 +08:00
|
|
|
|
2022-08-02 02:34:19 +08:00
|
|
|
=head1 SEE ALSO
|
|
|
|
|
|
|
|
L<OSSL_CMP_CTX_set1_subjectName(3)>, L<OSSL_CMP_CTX_set1_p10CSR(3)>,
|
|
|
|
L<OSSL_CMP_CTX_set1_oldCert(3)>, L<OSSL_CMP_CTX_set0_newPkey(3)>,
|
|
|
|
L<OSSL_CMP_CTX_set1_pkey(3)>, L<OSSL_CMP_CTX_set0_reqExtensions(3)>,
|
|
|
|
L<OSSL_CMP_CTX_push1_subjectAltName(3)>, L<OSSL_CMP_CTX_push0_policy(3)>
|
|
|
|
|
2019-11-05 16:56:59 +08:00
|
|
|
=head1 HISTORY
|
|
|
|
|
|
|
|
The OpenSSL CMP support was added in OpenSSL 3.0.
|
|
|
|
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
2022-05-03 18:52:38 +08:00
|
|
|
Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved.
|
2019-11-05 16:56:59 +08:00
|
|
|
|
|
|
|
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
|
|
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
|
|
|
|
=cut
|