about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedcrypto3.c
diff options
context:
space:
mode:
authorYang Liu <numbksco@gmail.com>2024-12-03 17:00:48 +0800
committerGitHub <noreply@github.com>2024-12-03 10:00:48 +0100
commitcfc09e09653bb10589f9def34eb250bdb26007ba (patch)
treea622e926c8c5d1609585c1beaaac04c0930ee9b8 /src/wrapped/wrappedcrypto3.c
parent26c9b3426f5c342c785f303b355969bf11509693 (diff)
downloadbox64-cfc09e09653bb10589f9def34eb250bdb26007ba.tar.gz
box64-cfc09e09653bb10589f9def34eb250bdb26007ba.zip
[WRAPPER] Wrapped more symbols in libcrypto3 (#2105)
Diffstat (limited to 'src/wrapped/wrappedcrypto3.c')
-rw-r--r--src/wrapped/wrappedcrypto3.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/wrapped/wrappedcrypto3.c b/src/wrapped/wrappedcrypto3.c
index 127d130e..c073c95b 100644
--- a/src/wrapped/wrappedcrypto3.c
+++ b/src/wrapped/wrappedcrypto3.c
@@ -198,6 +198,30 @@ static void* find_passphrase_Fct(void* fct)
     return NULL;
 }
 
+// rsakeygen
+#define GO(A)                                              \
+static uintptr_t my3_rsakeygen_fct_##A = 0;                \
+static void my3_rsakeygen_##A(int a, int b, void* c)       \
+{                                                          \
+    RunFunctionFmt(my3_rsakeygen_fct_##A, "iip", a, b, c); \
+}
+SUPER()
+#undef GO
+static void* find_rsakeygen_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    void* p;
+    if((p = GetNativeFnc((uintptr_t)fct))) return p;
+    #define GO(A) if(my3_rsakeygen_fct_##A == (uintptr_t)fct) return my3_rsakeygen_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my3_rsakeygen_fct_##A == 0) {my3_rsakeygen_fct_##A = (uintptr_t)fct; return my3_rsakeygen_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libcrypto rsakeygen callback\n");
+    return NULL;
+}
+
 // xnew
 #define GO(A)   \
 static uintptr_t my3_xnew_fct_##A = 0;                           \
@@ -392,6 +416,12 @@ EXPORT void my3_PEM_read_bio_RSA_PUBKEY(x64emu_t* emu, void* bp, void* x, void*
     my->PEM_read_bio_RSA_PUBKEY(bp, x, find_passphrase_Fct(cb), u);
 }
 
+EXPORT void my3_PEM_read_bio_RSAPublicKey(x64emu_t* emu, void* bp, void* x, void* cb, void* u)
+{
+    (void)emu;
+    my->PEM_read_bio_RSAPublicKey(bp, x, find_passphrase_Fct(cb), u);
+}
+
 EXPORT void my3_PEM_read_bio_ECPrivateKey(x64emu_t* emu, void* bp, void* x, void* cb, void* u)
 {
     (void)emu;
@@ -551,6 +581,11 @@ EXPORT void* my3_PEM_read_bio_DHparams(x64emu_t* emu, void* bp, void* x, void* c
     return my->PEM_read_bio_DHparams(bp, x, find_pem_password_cb_Fct(cb), u);
 }
 
+EXPORT void* my3_RSA_generate_key(x64emu_t* emu, int bits, unsigned long e, void* cb, void* cb_arg)
+{
+    return my->RSA_generate_key(bits, e, find_rsakeygen_Fct(cb), cb_arg);
+}
+
 typedef struct my_v3_ext_method_s {
     int ext_nid;
     int ext_flags;