about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-06-28 20:25:57 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-06-28 20:25:57 +0200
commitcd695f735b70d37498c796160849226d7c379d59 (patch)
treedc6db436e1e63849f1a43e5b75e1d2b699cd9d91 /src
parent0e3cd11a5591cc30cc90a457ba979402edc52d5d (diff)
downloadbox64-cd695f735b70d37498c796160849226d7c379d59.tar.gz
box64-cd695f735b70d37498c796160849226d7c379d59.zip
Added one libssl wrapped functions with reverse callback (for #331)
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedlibssltypes.h2
-rwxr-xr-xsrc/wrapped/wrappedlibssl.c16
-rwxr-xr-xsrc/wrapped/wrappedlibssl_private.h2
4 files changed, 21 insertions, 1 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 4ac74302..a4f1c7c9 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -3147,6 +3147,8 @@ wrappedlibsndfile:
 - pFpipp:
   - sf_open_virtual
 wrappedlibssl:
+- pFp:
+  - SSL_get_verify_callback
 - vFpp:
   - SSL_CTX_set_default_passwd_cb
   - SSL_set_psk_client_callback
diff --git a/src/wrapped/generated/wrappedlibssltypes.h b/src/wrapped/generated/wrappedlibssltypes.h
index 6e9684c7..5d293011 100644
--- a/src/wrapped/generated/wrappedlibssltypes.h
+++ b/src/wrapped/generated/wrappedlibssltypes.h
@@ -11,6 +11,7 @@
 #define ADDED_FUNCTIONS() 
 #endif
 
+typedef void* (*pFp_t)(void*);
 typedef void (*vFpp_t)(void*, void*);
 typedef void (*vFpip_t)(void*, int64_t, void*);
 typedef void (*vFppp_t)(void*, void*, void*);
@@ -18,6 +19,7 @@ typedef intptr_t (*lFpip_t)(void*, int64_t, void*);
 typedef int64_t (*iFlpppp_t)(intptr_t, void*, void*, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
+	GO(SSL_get_verify_callback, pFp_t) \
 	GO(SSL_CTX_set_default_passwd_cb, vFpp_t) \
 	GO(SSL_set_psk_client_callback, vFpp_t) \
 	GO(SSL_CTX_set_verify, vFpip_t) \
diff --git a/src/wrapped/wrappedlibssl.c b/src/wrapped/wrappedlibssl.c
index 380394fa..0d7fc823 100755
--- a/src/wrapped/wrappedlibssl.c
+++ b/src/wrapped/wrappedlibssl.c
@@ -106,6 +106,16 @@ static void* find_verify_Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libSSL verify callback\n");
     return NULL;
 }
+static void* reverse_verify_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(CheckBridged(my_lib->priv.w.bridge, fct))
+        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    #define GO(A) if(my_verify_##A == fct) return (void*)my_verify_fct_##A;
+    SUPER()
+    #undef GO
+    return (void*)AddBridge(my_lib->priv.w.bridge, iFip, fct, 0, NULL);
+}
 
 // ex_new
 #define GO(A)   \
@@ -277,6 +287,12 @@ EXPORT void my_SSL_CTX_set_next_proto_select_cb(x64emu_t* emu, void* ctx, void*
     my->SSL_CTX_set_next_proto_select_cb(ctx, find_proto_select_Fct(cb), arg);
 }
 
+EXPORT void* my_SSL_get_verify_callback(x64emu_t* emu, void* ctx)
+{
+    (void)emu;
+    return reverse_verify_Fct(my->SSL_get_verify_callback(ctx));
+}
+
 #define CUSTOM_INIT \
     getMy(lib);
 
diff --git a/src/wrapped/wrappedlibssl_private.h b/src/wrapped/wrappedlibssl_private.h
index 5cc79c5a..827c4a67 100755
--- a/src/wrapped/wrappedlibssl_private.h
+++ b/src/wrapped/wrappedlibssl_private.h
@@ -414,7 +414,7 @@ GO(SSL_get_shutdown, iFp)
 //GO(SSL_get_srtp_profiles, 
 //GO(SSL_get_SSL_CTX, 
 //GO(SSL_get_ssl_method, 
-//GO(SSL_get_verify_callback, 
+GOM(SSL_get_verify_callback, pFEp)
 //GO(SSL_get_verify_depth, 
 //GO(SSL_get_verify_mode, 
 GO(SSL_get_verify_result, iFp)