Re: svn commit: r1908433 - in /apr/apr/trunk: crypto/apr_crypto_openssl.c test/testcrypto.c

Ruediger Pluem <[email protected]>
Newsgroups gmane.comp.apache.apr.devel
Message-ID <[email protected]>

On 3/16/23 1:43 PM, [email protected] wrote:
> Author: ylavic
> Date: Thu Mar 16 12:43:17 2023
> New Revision: 1908433
> 
> URL: http://svn.apache.org/viewvc?rev=1908433&view=rev
> Log:
> apr_crypto_openssl: Compatibility with OpenSSL 3+
> 
> Modified:
>     apr/apr/trunk/crypto/apr_crypto_openssl.c
>     apr/apr/trunk/test/testcrypto.c
> 
> Modified: apr/apr/trunk/crypto/apr_crypto_openssl.c
> URL: http://svn.apache.org/viewvc/apr/apr/trunk/crypto/apr_crypto_openssl.c?rev=1908433&r1=1908432&r2=1908433&view=diff
> ==============================================================================
> --- apr/apr/trunk/crypto/apr_crypto_openssl.c (original)
> +++ apr/apr/trunk/crypto/apr_crypto_openssl.c Thu Mar 16 12:43:17 2023
> @@ -32,6 +32,10 @@
>  
>  #if APU_HAVE_CRYPTO
>  
> +#ifndef OPENSSL_API_COMPAT
> +#define OPENSSL_API_COMPAT 0x10100000L /* for ENGINE API */
> +#endif

On RedHat 8 with openssl 1.1.1k this causes openssl/err.h which is included openssl/engine.h to
no longer define the noop macro ERR_free_strings and thus causing the compilation to fail.
Removing the above makes this go away. Why do we need to set it?

> +
>  #include <openssl/evp.h>
>  #include <openssl/rand.h>
>  #include <openssl/engine.h>
{
> @@ -79,8 +124,11 @@ struct apr_crypto_key_t {
>      const apr_crypto_t *f;
>      const apr_crypto_key_rec_t *rec;
>      const EVP_CIPHER *cipher;
> -    const EVP_MD *hmac;
> +    const EVP_MD *md;
>      EVP_PKEY *pkey;
> +#if !APR_USE_OPENSSL_PRE_3_0_API
> +    EVP_MAC *mac;
> +#endif

It looks like the usage of this field is not appropriately #If ed later on as I get compilation failures like

crypto/apr_crypto_openssl.c: In function ‘crypto_key_cleanup’:
crypto/apr_crypto_openssl.c:301:12: error: ‘apr_crypto_key_t’ {aka ‘struct apr_crypto_key_t’} has no member named ‘mac’
     if (key->mac) {
            ^~


>      unsigned char *key;
>      int keyLen;
>      int doPad;

> @@ -106,7 +153,9 @@ struct apr_crypto_digest_t {
>      const apr_crypto_key_t *key;
>      apr_crypto_digest_rec_t *rec;
>      EVP_MD_CTX *mdCtx;
> -    int initialised;
> +#if !APR_USE_OPENSSL_PRE_3_0_API
> +    EVP_MAC_CTX *macCtx;
> +#endif

Same as above with the mac field:

crypto/apr_crypto_openssl.c: In function ‘crypto_digest_cleanup’:
crypto/apr_crypto_openssl.c:355:14: error: ‘apr_crypto_digest_t’ {aka ‘struct apr_crypto_digest_t’} has no member named ‘macCtx’;
did you mean ‘mdCtx’?
     if (ctx->macCtx) {
              ^~~~~~


>      int digestSize;
>  };
>  

Regards

Rüdiger
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.