Skip to content

Commit 4e0ac98

Browse files
committed
HADOOP-18583. Fix loading of OpenSSL 3.x symbols
1 parent 7a7b346 commit 4e0ac98

File tree

1 file changed

+64
-4
lines changed
  • hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/crypto

1 file changed

+64
-4
lines changed

hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/crypto/OpensslCipher.c

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,57 @@
2424

2525
#include "org_apache_hadoop_crypto_OpensslCipher.h"
2626

27+
/*
28+
# OpenSSL ABI Symbols
29+
30+
Available on all OpenSSL versions:
31+
32+
| Function | 1.0 | 1.1 | 3.0 |
33+
|--------------------------------|-----|-----|-----|
34+
| EVP_CIPHER_CTX_new | YES | YES | YES |
35+
| EVP_CIPHER_CTX_free | YES | YES | YES |
36+
| EVP_CIPHER_CTX_set_padding | YES | YES | YES |
37+
| EVP_CIPHER_CTX_test_flags | YES | YES | YES |
38+
| EVP_CipherInit_ex | YES | YES | YES |
39+
| EVP_CipherUpdate | YES | YES | YES |
40+
| EVP_CipherFinal_ex | YES | YES | YES |
41+
| ENGINE_by_id | YES | YES | YES |
42+
| ENGINE_free | YES | YES | YES |
43+
| EVP_aes_256_ctr | YES | YES | YES |
44+
| EVP_aes_128_ctr | YES | YES | YES |
45+
46+
Available on old versions:
47+
48+
| Function | 1.0 | 1.1 | 3.0 |
49+
|--------------------------------|-----|-----|-----|
50+
| EVP_CIPHER_CTX_cleanup | YES | --- | --- |
51+
| EVP_CIPHER_CTX_init | YES | --- | --- |
52+
| EVP_CIPHER_CTX_block_size | YES | YES | --- |
53+
| EVP_CIPHER_CTX_encrypting | --- | YES | --- |
54+
55+
Available on new versions:
56+
57+
| Function | 1.0 | 1.1 | 3.0 |
58+
|--------------------------------|-----|-----|-----|
59+
| OPENSSL_init_crypto | --- | YES | YES |
60+
| EVP_CIPHER_CTX_reset | --- | YES | YES |
61+
| EVP_CIPHER_CTX_get_block_size | --- | --- | YES |
62+
| EVP_CIPHER_CTX_is_encrypting | --- | --- | YES |
63+
64+
Optionally available on new versions:
65+
66+
| Function | 1.0 | 1.1 | 3.0 |
67+
|--------------------------------|-----|-----|-----|
68+
| EVP_sm4_ctr | --- | opt | opt |
69+
70+
Name changes:
71+
72+
| < 3.0 name | >= 3.0 name |
73+
|----------------------------|--------------------------------|
74+
| EVP_CIPHER_CTX_block_size | EVP_CIPHER_CTX_get_block_size |
75+
| EVP_CIPHER_CTX_encrypting | EVP_CIPHER_CTX_is_encrypting |
76+
*/
77+
2778
#ifdef UNIX
2879
static EVP_CIPHER_CTX * (*dlsym_EVP_CIPHER_CTX_new)(void);
2980
static void (*dlsym_EVP_CIPHER_CTX_free)(EVP_CIPHER_CTX *);
@@ -106,6 +157,15 @@ static __dlsym_ENGINE_free dlsym_ENGINE_free;
106157
static HMODULE openssl;
107158
#endif
108159

160+
// names changed in OpenSSL 3 ABI - see History section in EVP_EncryptInit(3)
161+
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
162+
#define CIPHER_CTX_BLOCK_SIZE "EVP_CIPHER_CTX_get_block_size"
163+
#define CIPHER_CTX_ENCRYPTING "EVP_CIPHER_CTX_is_encrypting"
164+
#else
165+
#define CIPHER_CTX_BLOCK_SIZE "EVP_CIPHER_CTX_block_size"
166+
#define CIPHER_CTX_ENCRYPTING "EVP_CIPHER_CTX_encrypting"
167+
#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */
168+
109169
static void loadAesCtr(JNIEnv *env)
110170
{
111171
#ifdef UNIX
@@ -170,10 +230,10 @@ JNIEXPORT void JNICALL Java_org_apache_hadoop_crypto_OpensslCipher_initIDs
170230
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_test_flags, env, openssl, \
171231
"EVP_CIPHER_CTX_test_flags");
172232
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_block_size, env, openssl, \
173-
"EVP_CIPHER_CTX_block_size");
233+
CIPHER_CTX_BLOCK_SIZE);
174234
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
175235
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_encrypting, env, openssl, \
176-
"EVP_CIPHER_CTX_encrypting");
236+
CIPHER_CTX_ENCRYPTING);
177237
#endif
178238
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CipherInit_ex, env, openssl, \
179239
"EVP_CipherInit_ex");
@@ -209,11 +269,11 @@ JNIEXPORT void JNICALL Java_org_apache_hadoop_crypto_OpensslCipher_initIDs
209269
openssl, "EVP_CIPHER_CTX_test_flags");
210270
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CIPHER_CTX_block_size, \
211271
dlsym_EVP_CIPHER_CTX_block_size, env, \
212-
openssl, "EVP_CIPHER_CTX_block_size");
272+
openssl, CIPHER_CTX_BLOCK_SIZE);
213273
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
214274
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CIPHER_CTX_encrypting, \
215275
dlsym_EVP_CIPHER_CTX_encrypting, env, \
216-
openssl, "EVP_CIPHER_CTX_encrypting");
276+
openssl, CIPHER_CTX_ENCRYPTING);
217277
#endif
218278
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CipherInit_ex, dlsym_EVP_CipherInit_ex, \
219279
env, openssl, "EVP_CipherInit_ex");

0 commit comments

Comments
 (0)