diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedcrypto3types.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedcrypto3.c | 29 | ||||
| -rw-r--r-- | src/wrapped/wrappedcrypto3_private.h | 10 |
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, |