@ -20,9 +20,7 @@
# include <openssl/crmf.h>
# include <openssl/err.h>
/*
* Get current certificate store containing trusted root CA certs
*/
/* Get current certificate store containing trusted root CA certs */
X509_STORE * OSSL_CMP_CTX_get0_trustedStore ( const OSSL_CMP_CTX * ctx )
{
if ( ctx = = NULL ) {
@ -36,7 +34,6 @@ X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx)
* Set certificate store containing trusted ( root ) CA certs and possibly CRLs
* and a cert verification callback function used for CMP server authentication .
* Any already existing store entry is freed . Given NULL , the entry is reset .
* returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set0_trustedStore ( OSSL_CMP_CTX * ctx , X509_STORE * store )
{
@ -49,9 +46,7 @@ int OSSL_CMP_CTX_set0_trustedStore(OSSL_CMP_CTX *ctx, X509_STORE *store)
return 1 ;
}
/*
* Get current list of non - trusted intermediate certs
*/
/* Get current list of non-trusted intermediate certs */
STACK_OF ( X509 ) * OSSL_CMP_CTX_get0_untrusted_certs ( const OSSL_CMP_CTX * ctx )
{
if ( ctx = = NULL ) {
@ -64,7 +59,6 @@ STACK_OF(X509) *OSSL_CMP_CTX_get0_untrusted_certs(const OSSL_CMP_CTX *ctx)
/*
* Set untrusted certificates for path construction in authentication of
* the CMP server and potentially others ( TLS server , newly enrolled cert ) .
* returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set1_untrusted_certs ( OSSL_CMP_CTX * ctx , STACK_OF ( X509 ) * certs )
{
@ -102,7 +96,6 @@ OSSL_CMP_CTX *OSSL_CMP_CTX_new(void)
ctx - > failInfoCode = - 1 ;
ctx - > serverPort = OSSL_CMP_DEFAULT_PORT ;
ctx - > proxyPort = OSSL_CMP_DEFAULT_PORT ;
ctx - > msg_timeout = 2 * 60 ;
if ( ( ctx - > untrusted_certs = sk_X509_new_null ( ) ) = = NULL )
@ -125,9 +118,7 @@ OSSL_CMP_CTX *OSSL_CMP_CTX_new(void)
return NULL ;
}
/*
* Prepare the OSSL_CMP_CTX for next use , partly re - initializing OSSL_CMP_CTX
*/
/* Prepare the OSSL_CMP_CTX for next use, partly re-initializing OSSL_CMP_CTX */
int OSSL_CMP_CTX_reinit ( OSSL_CMP_CTX * ctx )
{
if ( ctx = = NULL ) {
@ -148,9 +139,7 @@ int OSSL_CMP_CTX_reinit(OSSL_CMP_CTX *ctx)
& & ossl_cmp_ctx_set1_recipNonce ( ctx , NULL ) ;
}
/*
* Frees OSSL_CMP_CTX variables allocated in OSSL_CMP_CTX_new ( )
*/
/* Frees OSSL_CMP_CTX variables allocated in OSSL_CMP_CTX_new() */
void OSSL_CMP_CTX_free ( OSSL_CMP_CTX * ctx )
{
if ( ctx = = NULL )
@ -158,7 +147,8 @@ void OSSL_CMP_CTX_free(OSSL_CMP_CTX *ctx)
OPENSSL_free ( ctx - > serverPath ) ;
OPENSSL_free ( ctx - > serverName ) ;
OPENSSL_free ( ctx - > proxyName ) ;
OPENSSL_free ( ctx - > proxy ) ;
OPENSSL_free ( ctx - > no_proxy ) ;
X509_free ( ctx - > srvCert ) ;
X509_free ( ctx - > validatedSrvCert ) ;
@ -252,11 +242,7 @@ int ossl_cmp_ctx_set0_validatedSrvCert(OSSL_CMP_CTX *ctx, X509 *cert)
return 1 ;
}
/*
* Set callback function for checking if the cert is ok or should
* it be rejected .
* Returns 1 on success , 0 on error
*/
/* Set callback function for checking if the cert is ok or should be rejected */
int OSSL_CMP_CTX_set_certConf_cb ( OSSL_CMP_CTX * ctx , OSSL_CMP_certConf_cb_t cb )
{
if ( ctx = = NULL ) {
@ -270,7 +256,6 @@ int OSSL_CMP_CTX_set_certConf_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_certConf_cb_t cb)
/*
* Set argument , respectively a pointer to a structure containing arguments ,
* optionally to be used by the certConf callback .
* Returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set_certConf_cb_arg ( OSSL_CMP_CTX * ctx , void * arg )
{
@ -380,10 +365,7 @@ int ossl_cmp_print_log(OSSL_CMP_severity level, const OSSL_CMP_CTX *ctx,
return res ;
}
/*
* Set a callback function for error reporting and logging messages .
* Returns 1 on success , 0 on error
*/
/* Set a callback function for error reporting and logging messages */
int OSSL_CMP_CTX_set_log_cb ( OSSL_CMP_CTX * ctx , OSSL_CMP_log_cb_t cb )
{
if ( ctx = = NULL ) {
@ -411,7 +393,6 @@ void OSSL_CMP_CTX_print_errors(OSSL_CMP_CTX *ctx)
/*
* Set or clear the reference value to be used for identification
* ( i . e . , the user name ) when using PBMAC .
* Returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set1_referenceValue ( OSSL_CMP_CTX * ctx ,
const unsigned char * ref , int len )
@ -424,10 +405,7 @@ int OSSL_CMP_CTX_set1_referenceValue(OSSL_CMP_CTX *ctx,
len ) ;
}
/*
* Set or clear the password to be used for protecting messages with PBMAC .
* Returns 1 on success , 0 on error
*/
/* Set or clear the password to be used for protecting messages with PBMAC */
int OSSL_CMP_CTX_set1_secretValue ( OSSL_CMP_CTX * ctx , const unsigned char * sec ,
const int len )
{
@ -465,7 +443,6 @@ STACK_OF(X509) *OSSL_CMP_CTX_get1_extraCertsIn(const OSSL_CMP_CTX *ctx)
/*
* Copies any given stack of inbound X509 certificates to extraCertsIn
* of the OSSL_CMP_CTX structure so that they may be retrieved later .
* Returns 1 on success , 0 on error .
*/
int ossl_cmp_ctx_set1_extraCertsIn ( OSSL_CMP_CTX * ctx ,
STACK_OF ( X509 ) * extraCertsIn )
@ -483,7 +460,6 @@ int ossl_cmp_ctx_set1_extraCertsIn(OSSL_CMP_CTX *ctx,
/*
* Duplicate and set the given stack as the new stack of X509
* certificates to send out in the extraCerts field .
* Returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set1_extraCertsOut ( OSSL_CMP_CTX * ctx ,
STACK_OF ( X509 ) * extraCertsOut )
@ -503,7 +479,6 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx,
/*
* Add the given policy info object
* to the X509_EXTENSIONS of the requested certificate template .
* Returns 1 on success , 0 on error .
*/
int OSSL_CMP_CTX_push0_policy ( OSSL_CMP_CTX * ctx , POLICYINFO * pinfo )
{
@ -519,9 +494,7 @@ int OSSL_CMP_CTX_push0_policy(OSSL_CMP_CTX *ctx, POLICYINFO *pinfo)
return sk_POLICYINFO_push ( ctx - > policies , pinfo ) ;
}
/*
* Add an ITAV for geninfo of the PKI message header
*/
/* Add an ITAV for geninfo of the PKI message header */
int OSSL_CMP_CTX_push0_geninfo_ITAV ( OSSL_CMP_CTX * ctx , OSSL_CMP_ITAV * itav )
{
if ( ctx = = NULL ) {
@ -531,9 +504,7 @@ int OSSL_CMP_CTX_push0_geninfo_ITAV(OSSL_CMP_CTX *ctx, OSSL_CMP_ITAV *itav)
return OSSL_CMP_ITAV_push0_stack_item ( & ctx - > geninfo_ITAVs , itav ) ;
}
/*
* Add an itav for the body of outgoing general messages
*/
/* Add an itav for the body of outgoing general messages */
int OSSL_CMP_CTX_push0_genm_ITAV ( OSSL_CMP_CTX * ctx , OSSL_CMP_ITAV * itav )
{
if ( ctx = = NULL ) {
@ -562,7 +533,6 @@ STACK_OF(X509) *OSSL_CMP_CTX_get1_caPubs(const OSSL_CMP_CTX *ctx)
/*
* Duplicate and copy the given stack of certificates to the given
* OSSL_CMP_CTX structure so that they may be retrieved later .
* Returns 1 on success , 0 on error
*/
int ossl_cmp_ctx_set1_caPubs ( OSSL_CMP_CTX * ctx , STACK_OF ( X509 ) * caPubs )
{
@ -614,39 +584,25 @@ int OSSL_CMP_CTX_set1_##FIELD(OSSL_CMP_CTX *ctx, TYPE *val) \
* Pins the server certificate to be directly trusted ( even if it is expired )
* for verifying response messages .
* Cert pointer is not consumed . It may be NULL to clear the entry .
* Returns 1 on success , 0 on error
*/
DEFINE_OSSL_CMP_CTX_set1_up_ref ( srvCert , X509 )
/*
* Set the X509 name of the recipient . Set in the PKIHeader .
* returns 1 on success , 0 on error
*/
/* Set the X509 name of the recipient. Set in the PKIHeader */
DEFINE_OSSL_CMP_CTX_set1 ( recipient , X509_NAME )
/*
* Store the X509 name of the expected sender in the PKIHeader of responses .
* Returns 1 on success , 0 on error
*/
/* Store the X509 name of the expected sender in the PKIHeader of responses */
DEFINE_OSSL_CMP_CTX_set1 ( expected_sender , X509_NAME )
/*
* Set the X509 name of the issuer . Set in the PKIHeader .
* Returns 1 on success , 0 on error
*/
/* Set the X509 name of the issuer. Set in the PKIHeader */
DEFINE_OSSL_CMP_CTX_set1 ( issuer , X509_NAME )
/*
* Set the subject name that will be placed in the certificate
* request . This will be the subject name on the received certificate .
* Returns 1 on success , 0 on error
*/
DEFINE_OSSL_CMP_CTX_set1 ( subjectName , X509_NAME )
/*
* Set the X .509 v3 certificate request extensions to be used in IR / CR / KUR .
* Returns 1 on success , 0 on error
*/
/* Set the X.509v3 certificate request extensions to be used in IR/CR/KUR */
int OSSL_CMP_CTX_set0_reqExtensions ( OSSL_CMP_CTX * ctx , X509_EXTENSIONS * exts )
{
if ( ctx = = NULL ) {
@ -680,7 +636,6 @@ int OSSL_CMP_CTX_reqExtensions_have_SAN(OSSL_CMP_CTX *ctx)
/*
* Add a GENERAL_NAME structure that will be added to the CRMF
* request ' s extensions field to request subject alternative names .
* Returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_push1_subjectAltName ( OSSL_CMP_CTX * ctx ,
const GENERAL_NAME * name )
@ -712,7 +667,6 @@ int OSSL_CMP_CTX_push1_subjectAltName(OSSL_CMP_CTX *ctx,
/*
* Set our own client certificate , used for example in KUR and when
* doing the IR with existing certificate .
* Returns 1 on success , 0 on error
*/
DEFINE_OSSL_CMP_CTX_set1_up_ref ( clCert , X509 )
@ -721,19 +675,14 @@ DEFINE_OSSL_CMP_CTX_set1_up_ref(clCert, X509)
* or the certificate to be revoked in RR , respectively .
* Also used as reference cert ( defaulting to clCert ) for deriving subject DN
* and SANs . Its issuer is used as default recipient in the CMP message header .
* Returns 1 on success , 0 on error
*/
DEFINE_OSSL_CMP_CTX_set1_up_ref ( oldCert , X509 )
/*
* Set the PKCS # 10 CSR to be sent in P10CR .
* Returns 1 on success , 0 on error
*/
/* Set the PKCS#10 CSR to be sent in P10CR */
DEFINE_OSSL_CMP_CTX_set1 ( p10CSR , X509_REQ )
/*
* Sets the ( newly received in IP / KUP / CP ) certificate in the context .
* Returns 1 on success , 0 on error
* Set the ( newly received in IP / KUP / CP ) certificate in the context .
* TODO : this only permits for one cert to be enrolled at a time .
*/
int ossl_cmp_ctx_set0_newCert ( OSSL_CMP_CTX * ctx , X509 * cert )
@ -759,16 +708,10 @@ X509 *OSSL_CMP_CTX_get0_newCert(const OSSL_CMP_CTX *ctx)
return ctx - > newCert ;
}
/*
* Set the client ' s current private key .
* Returns 1 on success , 0 on error
*/
/* Set the client's current private key */
DEFINE_OSSL_CMP_CTX_set1_up_ref ( pkey , EVP_PKEY )
/*
* Set new key pair . Used e . g . when doing Key Update .
* Returns 1 on success , 0 on error
*/
/* Set new key pair. Used e.g. when doing Key Update */
int OSSL_CMP_CTX_set0_newPkey ( OSSL_CMP_CTX * ctx , int priv , EVP_PKEY * pkey )
{
if ( ctx = = NULL ) {
@ -782,9 +725,7 @@ int OSSL_CMP_CTX_set0_newPkey(OSSL_CMP_CTX *ctx, int priv, EVP_PKEY *pkey)
return 1 ;
}
/*
* gets the private / public key to use for certificate enrollment , NULL on error
*/
/* Get the private/public key to use for cert enrollment, or NULL on error */
EVP_PKEY * OSSL_CMP_CTX_get0_newPkey ( const OSSL_CMP_CTX * ctx , int priv )
{
if ( ctx = = NULL ) {
@ -799,10 +740,7 @@ EVP_PKEY *OSSL_CMP_CTX_get0_newPkey(const OSSL_CMP_CTX *ctx, int priv)
return ctx - > pkey ; /* may be NULL */
}
/*
* Sets the given transactionID to the context .
* Returns 1 on success , 0 on error
*/
/* Set the given transactionID to the context */
int OSSL_CMP_CTX_set1_transactionID ( OSSL_CMP_CTX * ctx ,
const ASN1_OCTET_STRING * id )
{
@ -813,11 +751,7 @@ int OSSL_CMP_CTX_set1_transactionID(OSSL_CMP_CTX *ctx,
return ossl_cmp_asn1_octet_string_set1 ( & ctx - > transactionID , id ) ;
}
/*
* sets the given nonce to be used for the recipNonce in the next message to be
* created .
* returns 1 on success , 0 on error
*/
/* Set the nonce to be used for the recipNonce in the message created next */
int ossl_cmp_ctx_set1_recipNonce ( OSSL_CMP_CTX * ctx ,
const ASN1_OCTET_STRING * nonce )
{
@ -826,10 +760,7 @@ int ossl_cmp_ctx_set1_recipNonce(OSSL_CMP_CTX *ctx,
return ossl_cmp_asn1_octet_string_set1 ( & ctx - > recipNonce , nonce ) ;
}
/*
* Stores the given nonce as the last senderNonce sent out .
* Returns 1 on success , 0 on error
*/
/* Stores the given nonce as the last senderNonce sent out */
int OSSL_CMP_CTX_set1_senderNonce ( OSSL_CMP_CTX * ctx ,
const ASN1_OCTET_STRING * nonce )
{
@ -840,36 +771,16 @@ int OSSL_CMP_CTX_set1_senderNonce(OSSL_CMP_CTX *ctx,
return ossl_cmp_asn1_octet_string_set1 ( & ctx - > senderNonce , nonce ) ;
}
/*
* Set the host name of the ( HTTP ) proxy server to use for all connections
* returns 1 on success , 0 on error
*/
DEFINE_OSSL_CMP_CTX_set1 ( proxyName , char )
/* Set the proxy server to use for HTTP(S) connections */
DEFINE_OSSL_CMP_CTX_set1 ( proxy , char )
/*
* Set the ( HTTP ) host name of the CA server .
* Returns 1 on success , 0 on error
*/
/* Set the (HTTP) host name of the CMP server */
DEFINE_OSSL_CMP_CTX_set1 ( serverName , char )
/*
* Sets the ( HTTP ) proxy port to be used .
* Returns 1 on success , 0 on error
*/
int OSSL_CMP_CTX_set_proxyPort ( OSSL_CMP_CTX * ctx , int port )
{
if ( ctx = = NULL ) {
CMPerr ( 0 , CMP_R_NULL_ARGUMENT ) ;
return 0 ;
}
ctx - > proxyPort = port ;
return 1 ;
}
/* Set the server exclusion list of the HTTP proxy server */
DEFINE_OSSL_CMP_CTX_set1 ( no_proxy , char )
/*
* sets the http connect / disconnect callback function to be used for HTTP ( S )
* returns 1 on success , 0 on error
*/
/* Set the http connect/disconnect callback function to be used for HTTP(S) */
int OSSL_CMP_CTX_set_http_cb ( OSSL_CMP_CTX * ctx , OSSL_HTTP_bio_cb_t cb )
{
if ( ctx = = NULL ) {
@ -880,10 +791,7 @@ int OSSL_CMP_CTX_set_http_cb(OSSL_CMP_CTX *ctx, OSSL_HTTP_bio_cb_t cb)
return 1 ;
}
/*
* Set argument optionally to be used by the http connect / disconnect callback .
* Returns 1 on success , 0 on error
*/
/* Set argument optionally to be used by the http connect/disconnect callback */
int OSSL_CMP_CTX_set_http_cb_arg ( OSSL_CMP_CTX * ctx , void * arg )
{
if ( ctx = = NULL ) {
@ -907,10 +815,7 @@ void *OSSL_CMP_CTX_get_http_cb_arg(const OSSL_CMP_CTX *ctx)
return ctx - > http_cb_arg ;
}
/*
* Set callback function for sending CMP request and receiving response .
* Returns 1 on success , 0 on error
*/
/* Set callback function for sending CMP request and receiving response */
int OSSL_CMP_CTX_set_transfer_cb ( OSSL_CMP_CTX * ctx , OSSL_CMP_transfer_cb_t cb )
{
if ( ctx = = NULL ) {
@ -921,10 +826,7 @@ int OSSL_CMP_CTX_set_transfer_cb(OSSL_CMP_CTX *ctx, OSSL_CMP_transfer_cb_t cb)
return 1 ;
}
/*
* Set argument optionally to be used by the transfer callback .
* Returns 1 on success , 0 on error
*/
/* Set argument optionally to be used by the transfer callback */
int OSSL_CMP_CTX_set_transfer_cb_arg ( OSSL_CMP_CTX * ctx , void * arg )
{
if ( ctx = = NULL ) {
@ -948,10 +850,7 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx)
return ctx - > transfer_cb_arg ;
}
/*
* Sets the ( HTTP ) server port to be used .
* Returns 1 on success , 0 on error
*/
/** Set the HTTP server port to be used */
int OSSL_CMP_CTX_set_serverPort ( OSSL_CMP_CTX * ctx , int port )
{
if ( ctx = = NULL ) {
@ -962,16 +861,10 @@ int OSSL_CMP_CTX_set_serverPort(OSSL_CMP_CTX *ctx, int port)
return 1 ;
}
/*
* Sets the HTTP path to be used on the server ( e . g " pkix/ " ) .
* Returns 1 on success , 0 on error
*/
/* Set the HTTP path to be used on the server (e.g "pkix/") */
DEFINE_OSSL_CMP_CTX_set1 ( serverPath , char )
/*
* Set the failInfo error code as bit encoding in OSSL_CMP_CTX .
* Returns 1 on success , 0 on error
*/
/* Set the failInfo error code as bit encoding in OSSL_CMP_CTX */
int ossl_cmp_ctx_set_failInfoCode ( OSSL_CMP_CTX * ctx , int fail_info )
{
if ( ! ossl_assert ( ctx ! = NULL ) )
@ -993,10 +886,7 @@ int OSSL_CMP_CTX_get_failInfoCode(const OSSL_CMP_CTX *ctx)
return ctx - > failInfoCode ;
}
/*
* Sets a Boolean or integer option of the context to the " val " arg .
* Returns 1 on success , 0 on error
*/
/* Set a Boolean or integer option of the context to the "val" arg */
int OSSL_CMP_CTX_set_option ( OSSL_CMP_CTX * ctx , int opt , int val )
{
int min_val ;