Skip to content

Commit b8bdb39

Browse files
packet23charlesconnell
authored andcommitted
HubSpot Backport: HADOOP-18583. Fix loading of OpenSSL 3.x symbols (apache#5256)
Contributed by Sebastian Klemke
1 parent bf6b696 commit b8bdb39

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 *);
@@ -87,6 +138,15 @@ static __dlsym_EVP_aes_128_ctr dlsym_EVP_aes_128_ctr;
87138
static HMODULE openssl;
88139
#endif
89140

141+
// names changed in OpenSSL 3 ABI - see History section in EVP_EncryptInit(3)
142+
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
143+
#define CIPHER_CTX_BLOCK_SIZE "EVP_CIPHER_CTX_get_block_size"
144+
#define CIPHER_CTX_ENCRYPTING "EVP_CIPHER_CTX_is_encrypting"
145+
#else
146+
#define CIPHER_CTX_BLOCK_SIZE "EVP_CIPHER_CTX_block_size"
147+
#define CIPHER_CTX_ENCRYPTING "EVP_CIPHER_CTX_encrypting"
148+
#endif /* OPENSSL_VERSION_NUMBER >= 0x30000000L */
149+
90150
static void loadAesCtr(JNIEnv *env)
91151
{
92152
#ifdef UNIX
@@ -142,10 +202,10 @@ JNIEXPORT void JNICALL Java_org_apache_hadoop_crypto_OpensslCipher_initIDs
142202
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_test_flags, env, openssl, \
143203
"EVP_CIPHER_CTX_test_flags");
144204
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_block_size, env, openssl, \
145-
"EVP_CIPHER_CTX_block_size");
205+
CIPHER_CTX_BLOCK_SIZE);
146206
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
147207
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CIPHER_CTX_encrypting, env, openssl, \
148-
"EVP_CIPHER_CTX_encrypting");
208+
CIPHER_CTX_ENCRYPTING);
149209
#endif
150210
LOAD_DYNAMIC_SYMBOL(dlsym_EVP_CipherInit_ex, env, openssl, \
151211
"EVP_CipherInit_ex");
@@ -173,11 +233,11 @@ JNIEXPORT void JNICALL Java_org_apache_hadoop_crypto_OpensslCipher_initIDs
173233
openssl, "EVP_CIPHER_CTX_test_flags");
174234
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CIPHER_CTX_block_size, \
175235
dlsym_EVP_CIPHER_CTX_block_size, env, \
176-
openssl, "EVP_CIPHER_CTX_block_size");
236+
openssl, CIPHER_CTX_BLOCK_SIZE);
177237
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
178238
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CIPHER_CTX_encrypting, \
179239
dlsym_EVP_CIPHER_CTX_encrypting, env, \
180-
openssl, "EVP_CIPHER_CTX_encrypting");
240+
openssl, CIPHER_CTX_ENCRYPTING);
181241
#endif
182242
LOAD_DYNAMIC_SYMBOL(__dlsym_EVP_CipherInit_ex, dlsym_EVP_CipherInit_ex, \
183243
env, openssl, "EVP_CipherInit_ex");

0 commit comments

Comments
 (0)