about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedcrypto3types.h2
-rw-r--r--src/wrapped/wrappedcrypto3.c29
-rw-r--r--src/wrapped/wrappedcrypto3_private.h10
4 files changed, 42 insertions, 1 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index c518002a..11fe4f39 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -3900,6 +3900,8 @@ wrappedcrypto3:
   - ASN1_i2d_bio
 - iFppV:
   - BIO_printf
+- pFppp:
+  - OPENSSL_sk_deep_copy
 - vFiipV:
   - ERR_set_error
 - vFiipA:
diff --git a/src/wrapped/generated/wrappedcrypto3types.h b/src/wrapped/generated/wrappedcrypto3types.h
index 5875eaa1..4afc1054 100644
--- a/src/wrapped/generated/wrappedcrypto3types.h
+++ b/src/wrapped/generated/wrappedcrypto3types.h
@@ -17,6 +17,7 @@ typedef void (*vFpp_t)(void*, void*);
 typedef void (*vFppp_t)(void*, void*, void*);
 typedef int32_t (*iFppp_t)(void*, void*, void*);
 typedef int32_t (*iFppV_t)(void*, void*, ...);
+typedef void* (*pFppp_t)(void*, void*, void*);
 typedef void (*vFiipV_t)(int32_t, int32_t, void*, ...);
 typedef void (*vFiipA_t)(int32_t, int32_t, void*, va_list);
 typedef void* (*pFiLpp_t)(int32_t, uintptr_t, void*, void*);
@@ -36,6 +37,7 @@ typedef int32_t (*iFppppipp_t)(void*, void*, void*, void*, int32_t, void*, void*
 	GO(EVP_MD_do_all_provided, vFppp_t) \
 	GO(ASN1_i2d_bio, iFppp_t) \
 	GO(BIO_printf, iFppV_t) \
+	GO(OPENSSL_sk_deep_copy, pFppp_t) \
 	GO(ERR_set_error, vFiipV_t) \
 	GO(ERR_vset_error, vFiipA_t) \
 	GO(RSA_generate_key, pFiLpp_t) \
diff --git a/src/wrapped/wrappedcrypto3.c b/src/wrapped/wrappedcrypto3.c
index c073c95b..fcadae86 100644
--- a/src/wrapped/wrappedcrypto3.c
+++ b/src/wrapped/wrappedcrypto3.c
@@ -126,6 +126,30 @@ static void* find_free_fnc_Fct(void* fct)
     return NULL;
 }
 
+// copy_fnc
+#define GO(A)   \
+static uintptr_t my3_copy_fnc_fct_##A = 0;               \
+static void my3_copy_fnc_##A(void* p)                    \
+{                                                       \
+    RunFunctionFmt(my3_copy_fnc_fct_##A, "p", p); \
+}
+SUPER()
+#undef GO
+static void* find_copy_fnc_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    void* p;
+    if((p = GetNativeFnc((uintptr_t)fct))) return p;
+    #define GO(A) if(my3_copy_fnc_fct_##A == (uintptr_t)fct) return my3_copy_fnc_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my3_copy_fnc_fct_##A == 0) {my3_copy_fnc_fct_##A = (uintptr_t)fct; return my3_copy_fnc_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libcrypto copy_fnc callback\n");
+    return NULL;
+}
+
 // id_func
 #define GO(A)   \
 static uintptr_t my3_id_func_fct_##A = 0;                                    \
@@ -512,6 +536,11 @@ EXPORT void my3_OPENSSL_sk_pop_free(x64emu_t* emu, void* s, void* cb)
     my->OPENSSL_sk_pop_free(s, find_free_fnc_Fct(cb));
 }
 
+EXPORT void* my3_OPENSSL_sk_deep_copy(x64emu_t* emu, void* s, void* c, void* f)
+{
+    return my->OPENSSL_sk_deep_copy(s, find_copy_fnc_Fct(c), find_free_fnc_Fct(f));
+}
+
 EXPORT void* my3_OPENSSL_sk_new(x64emu_t* emu, void* f)
 {
     return my->OPENSSL_sk_new(find_cmp_fnc_Fct(f));
diff --git a/src/wrapped/wrappedcrypto3_private.h b/src/wrapped/wrappedcrypto3_private.h
index cd5311b8..7aba2076 100644
--- a/src/wrapped/wrappedcrypto3_private.h
+++ b/src/wrapped/wrappedcrypto3_private.h
@@ -2697,7 +2697,8 @@ GO(OPENSSL_issetugid, iFv)
 //GO(OPENSSL_load_builtin_modules, 
 //GO(OPENSSL_memcmp, 
 GO(OPENSSL_no_config, vFv)
-//GO(OPENSSL_rdtsc, 
+// GO(OPENSSL_rdtsc,
+GOM(OPENSSL_sk_deep_copy, pFEppp)
 GO(OPENSSL_sk_find, iFpp)
 GO(OPENSSL_sk_free, vFp)
 GOM(OPENSSL_sk_new, pFEp)
@@ -3668,9 +3669,14 @@ GO(X509_NAME_print_ex, iFppiu)
 GO(X509_NAME_print_ex_fp, iFppiu)
 //GO(X509_NAME_set, 
 GO(X509_new, pFv)
+GO(X509_OBJECT_free, vFp)
+GO(X509_OBJECT_new, pFv)
 //GO(X509_OBJECT_free_contents, 
 GO(X509_OBJECT_get_type, iFp)
 GO(X509_OBJECT_get0_X509, pFp)
+GO(X509_OBJECT_set1_X509, iFpp)
+GO(X509_OBJECT_get0_X509_CRL, pFp)
+GO(X509_OBJECT_set1_X509_CRL, iFpp)
 //GO(X509_OBJECT_idx_by_subject, 
 //GO(X509_OBJECT_retrieve_by_subject, 
 //GO(X509_OBJECT_retrieve_match, 
@@ -3833,6 +3839,8 @@ GO(X509_STORE_load_file, iFpp)
 GO(X509_STORE_load_path, iFpp)
 GO(X509_STORE_load_store, iFpp)
 //GO(X509_STORE_load_locations, iFppp)
+GO(X509_STORE_lock, iFp)
+GO(X509_STORE_unlock, iFp)
 GO(X509_STORE_new, pFv)
 //GO(X509_STORE_set1_param, 
 //GO(X509_STORE_set_default_paths,