2019-12-13 18:54:15 +01:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2020-05-13 16:03:26 +02:00
|
|
|
ossl_cmp_build_cert_chain,
|
2020-08-13 17:44:54 +02:00
|
|
|
ossl_cmp_calc_protection,
|
2019-12-13 18:54:15 +01:00
|
|
|
ossl_cmp_msg_protect,
|
|
|
|
ossl_cmp_msg_add_extraCerts
|
|
|
|
- functions for producing CMP message protection
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
2020-05-13 16:03:26 +02:00
|
|
|
#include "cmp_local.h"
|
2019-12-13 18:54:15 +01:00
|
|
|
|
2020-05-13 16:03:26 +02:00
|
|
|
STACK_OF(X509)
|
|
|
|
*ossl_cmp_build_cert_chain(OPENSSL_CTX *libctx, const char *propq,
|
2020-09-04 15:24:14 +02:00
|
|
|
X509_STORE *store,
|
2020-05-13 16:03:26 +02:00
|
|
|
STACK_OF(X509) *certs, X509 *cert);
|
2020-08-13 17:44:54 +02:00
|
|
|
ASN1_BIT_STRING *ossl_cmp_calc_protection(const OSSL_CMP_CTX *ctx,
|
|
|
|
const OSSL_CMP_MSG *msg);
|
2020-05-13 16:03:26 +02:00
|
|
|
int ossl_cmp_msg_protect(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
|
|
|
|
int ossl_cmp_msg_add_extraCerts(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
|
2019-12-13 18:54:15 +01:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2020-09-04 15:24:14 +02:00
|
|
|
ossl_cmp_build_cert_chain() builds a certificate chain starting from I<cert>
|
|
|
|
using the optional list of intermediate CA certificates I<certs>.
|
|
|
|
If I<store> is NULL builds the chain as far down as possible, ignoring errors.
|
|
|
|
Else the chain must reach a trust anchor contained in I<store>.
|
2020-05-13 16:03:26 +02:00
|
|
|
It internally uses a B<X509_STORE_CTX> structure associated with the library
|
|
|
|
context I<libctx> and property query string I<propq>, both of which may be NULL.
|
2020-09-04 15:24:14 +02:00
|
|
|
If a non-NULL stack is returned the caller is responsible for freeing it.
|
2020-05-13 16:03:26 +02:00
|
|
|
In case there is more than one possibility for the chain,
|
2020-09-04 15:24:14 +02:00
|
|
|
OpenSSL seems to take the first one; check L<X509_verify_cert(3)> for details.
|
2020-05-13 16:03:26 +02:00
|
|
|
|
2020-08-13 17:44:54 +02:00
|
|
|
ossl_cmp_calc_protection() calculates the protection for the given I<msg>
|
|
|
|
according to the algorithm and parameters in the message header's protectionAlg
|
|
|
|
using the credentials, library context, and property criteria in the I<ctx>.
|
|
|
|
|
|
|
|
ossl_cmp_msg_protect() (re-)protects the given message I<msg> using an algorithm
|
|
|
|
depending on the available context information given in the I<ctx>.
|
2020-05-08 13:30:44 +02:00
|
|
|
If there is a secretValue it selects PBMAC, else if there is a protection cert
|
2020-08-13 17:44:54 +02:00
|
|
|
it selects Signature and uses L<ossl_cmp_msg_add_extraCerts(3)>.
|
2019-12-13 18:54:15 +01:00
|
|
|
It also sets the protectionAlg field in the message header accordingly.
|
|
|
|
|
2020-09-04 15:24:14 +02:00
|
|
|
ossl_cmp_msg_add_extraCerts() adds elements to the extraCerts field in I<msg>.
|
|
|
|
If signature-based message protection is used it adds first the CMP signer cert
|
|
|
|
ctx->cert and then its chain ctx->chain. If this chain is not present in I<ctx>
|
|
|
|
tries to build it using ctx->untrusted_certs and caches the result in ctx->chain.
|
2019-12-13 18:54:15 +01:00
|
|
|
In any case all the certificates explicitly specified to be sent out (i.e.,
|
2020-08-13 17:44:54 +02:00
|
|
|
I<ctx->extraCertsOut>) are added. Note that it will NOT add the root certificate
|
2019-12-13 18:54:15 +01:00
|
|
|
of the chain, i.e, the trust anchor (unless it is part of extraCertsOut).
|
|
|
|
|
|
|
|
=head1 NOTES
|
|
|
|
|
|
|
|
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
|
|
|
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
2020-05-13 16:03:26 +02:00
|
|
|
ossl_cmp_build_cert_chain() returns NULL on error,
|
|
|
|
else a pointer to a stack of (up_ref'ed) certificates
|
2020-09-04 15:24:14 +02:00
|
|
|
starting with given EE certificate and followed by all available intermediate
|
|
|
|
certificates down towards (but excluding) any trusted root certificate.
|
2020-05-13 16:03:26 +02:00
|
|
|
|
2020-08-13 17:44:54 +02:00
|
|
|
ossl_cmp_calc_protection() returns the protection on success, else NULL.
|
|
|
|
|
2020-05-13 16:03:26 +02:00
|
|
|
All other functions return 1 on success, 0 on error.
|
2019-12-13 18:54:15 +01:00
|
|
|
|
|
|
|
=head1 HISTORY
|
|
|
|
|
|
|
|
The OpenSSL CMP support was added in OpenSSL 3.0.
|
|
|
|
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
2020-04-23 13:55:52 +01:00
|
|
|
Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
|
2019-12-13 18:54:15 +01: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
|