Skip to content

Commit dce3788

Browse files
committed
Rely on built-in OpenSSL crypto functions in libtgvoip
1 parent d5d336f commit dce3788

File tree

3 files changed

+93
-14
lines changed

3 files changed

+93
-14
lines changed

‎app/jni/CMakeLists.txt

+27-12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ set(SSL_DIR "${THIRDPARTY_DIR}/openssl/android_static/${ANDROID_ABI}")
1717
set(SSL_LIB_PATH "${SSL_DIR}/lib/libssl.a")
1818
set(CRYPTO_LIB_PATH "${SSL_DIR}/lib/libcrypto.a")
1919

20+
set(LINK_TDLIB yes)
21+
set(USE_TDLIB_CRYPTO no)
22+
2023
# Using webp only if building for 32-bit platform
2124
if (${ANDROID_ABI} STREQUAL "armeabi-v7a" OR ${ANDROID_ABI} STREQUAL "x86")
2225
set(USE_WEBP yes)
@@ -129,14 +132,18 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ADD_LINKER_FLAGS}"
129132
# == Libraries ==
130133

131134
# tdjni
132-
add_library(tdjni SHARED IMPORTED)
133-
set_target_properties(tdjni PROPERTIES IMPORTED_LOCATION
134-
"${TDLIB_DIR}/src/main/libs/${ANDROID_ABI}/libtdjni.so"
135-
)
136-
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.11.0")
137-
target_include_directories(tdjni INTERFACE
138-
"${TDLIB_DIR}/include"
135+
if (${LINK_TDLIB})
136+
add_library(tdjni SHARED IMPORTED)
137+
set_target_properties(tdjni PROPERTIES IMPORTED_LOCATION
138+
"${TDLIB_DIR}/src/main/libs/${ANDROID_ABI}/libtdjni.so"
139139
)
140+
if (${USE_TDLIB_CRYPTO})
141+
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.11.0")
142+
target_include_directories(tdjni INTERFACE
143+
"${TDLIB_DIR}/include"
144+
)
145+
endif()
146+
endif()
140147
endif()
141148

142149
# crypto
@@ -250,10 +257,12 @@ target_include_directories(${NATIVE_LIB} PRIVATE
250257
"${THIRDPARTY_DIR}"
251258
.
252259
)
253-
if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
254-
target_include_directories(${NATIVE_LIB} PRIVATE
255-
"${TDLIB_DIR}/include"
256-
)
260+
if (${LINK_TDLIB} AND ${USE_TDLIB_CRYPTO})
261+
if(${CMAKE_VERSION} VERSION_LESS "3.11.0")
262+
target_include_directories(${NATIVE_LIB} PRIVATE
263+
"${TDLIB_DIR}/include"
264+
)
265+
endif()
257266
endif()
258267

259268
target_compile_definitions(${NATIVE_LIB} PUBLIC
@@ -273,8 +282,14 @@ target_compile_options(${NATIVE_LIB} PUBLIC
273282

274283
# == Linking dependencies ==
275284

285+
if(${LINK_TDLIB})
286+
target_link_libraries(${NATIVE_LIB} tdjni)
287+
if (${USE_TDLIB_CRYPTO})
288+
target_compile_definitions(${NATIVE_LIB} PRIVATE HAVE_TDLIB_CRYPTO)
289+
endif()
290+
endif()
291+
276292
target_link_libraries(${NATIVE_LIB}
277-
tdjni
278293
jni-utils
279294
flac
280295
tgvoip

‎app/jni/tgvoip.cpp

+64-1
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,68 @@
1414
*/
1515

1616
#include <libtgvoip/VoIPController.h>
17-
#include <tdjni/telegram_crypto.h>
1817
#include <libtgvoip/client/android/tg_voip_jni.h>
1918

19+
#ifdef HAVE_TDLIB_CRYPTO
20+
#include <tdjni/telegram_crypto.h>
21+
#else
22+
23+
extern "C" {
24+
#include <openssl/sha.h>
25+
#include <openssl/aes.h>
26+
#ifndef OPENSSL_IS_BORINGSSL
27+
#include <openssl/modes.h>
28+
#endif
29+
#include <openssl/rand.h>
30+
}
31+
32+
void telegram_aes_ige_encrypt(uint8_t* in, uint8_t* out, size_t length, uint8_t* key, uint8_t* iv){
33+
AES_KEY akey;
34+
AES_set_encrypt_key(key, 32*8, &akey);
35+
AES_ige_encrypt(in, out, length, &akey, iv, AES_ENCRYPT);
36+
}
37+
38+
void telegram_aes_ige_decrypt(uint8_t* in, uint8_t* out, size_t length, uint8_t* key, uint8_t* iv){
39+
AES_KEY akey;
40+
AES_set_decrypt_key(key, 32*8, &akey);
41+
AES_ige_encrypt(in, out, length, &akey, iv, AES_DECRYPT);
42+
}
43+
44+
void telegram_rand_bytes(uint8_t* buffer, size_t len){
45+
RAND_bytes(buffer, len);
46+
}
47+
48+
void telegram_sha1(uint8_t* msg, size_t len, uint8_t* output){
49+
SHA1(msg, len, output);
50+
}
51+
52+
void telegram_sha256(uint8_t* msg, size_t len, uint8_t* output){
53+
SHA256(msg, len, output);
54+
}
55+
56+
void telegram_aes_ctr_encrypt(uint8_t* inout, size_t length, uint8_t* key, uint8_t* iv, uint8_t* ecount, uint32_t* num){
57+
AES_KEY akey;
58+
AES_set_encrypt_key(key, 32*8, &akey);
59+
#ifdef OPENSSL_IS_BORINGSSL
60+
AES_ctr128_encrypt(inout, inout, length, &akey, iv, ecount, num);
61+
#else
62+
CRYPTO_ctr128_encrypt(inout, inout, length, &akey, iv, ecount, num, (block128_f) AES_encrypt);
63+
#endif
64+
}
65+
66+
void telegram_aes_cbc_encrypt(uint8_t* in, uint8_t* out, size_t length, uint8_t* key, uint8_t* iv){
67+
AES_KEY akey;
68+
AES_set_encrypt_key(key, 256, &akey);
69+
AES_cbc_encrypt(in, out, length, &akey, iv, AES_ENCRYPT);
70+
}
71+
72+
void telegram_aes_cbc_decrypt(uint8_t* in, uint8_t* out, size_t length, uint8_t* key, uint8_t* iv){
73+
AES_KEY akey;
74+
AES_set_decrypt_key(key, 256, &akey);
75+
AES_cbc_encrypt(in, out, length, &akey, iv, AES_DECRYPT);
76+
}
77+
#endif
78+
2079
extern "C" {
2180
int voipOnJNILoad(JavaVM *vm, JNIEnv *env) {
2281
tgvoip::VoIPController::crypto.sha1 = &telegram_sha1;
@@ -25,6 +84,10 @@ int voipOnJNILoad(JavaVM *vm, JNIEnv *env) {
2584
tgvoip::VoIPController::crypto.aes_ige_encrypt = &telegram_aes_ige_encrypt;
2685
tgvoip::VoIPController::crypto.aes_ige_decrypt = &telegram_aes_ige_decrypt;
2786
tgvoip::VoIPController::crypto.aes_ctr_encrypt = &telegram_aes_ctr_encrypt;
87+
#ifndef HAVE_TDLIB_CRYPTO
88+
tgvoip::VoIPController::crypto.aes_cbc_decrypt = &telegram_aes_cbc_decrypt;
89+
tgvoip::VoIPController::crypto.aes_cbc_encrypt = &telegram_aes_cbc_encrypt;
90+
#endif
2891
tgvoipRegisterNatives(env);
2992
return 0;
3093
}

‎app/src/main/java/org/thunderdog/challegram/ui/CallController.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
import org.drinkless.td.libcore.telegram.TdApi;
4040
import org.thunderdog.challegram.BaseActivity;
41+
import org.thunderdog.challegram.BuildConfig;
4142
import org.thunderdog.challegram.Log;
4243
import org.thunderdog.challegram.R;
4344
import org.thunderdog.challegram.core.Lang;
@@ -433,7 +434,7 @@ protected void onDraw(Canvas c){
433434
brandView.setEllipsize(TextUtils.TruncateAt.END);
434435
brandView.setLayoutParams(lp);
435436
brandView.setText(Lang.getString(R.string.VoipBranding).toUpperCase());
436-
if (Log.checkLogLevel(Log.LEVEL_INFO)) {
437+
if (Log.checkLogLevel(Log.LEVEL_INFO) || BuildConfig.EXPERIMENTAL) {
437438
brandView.setOnClickListener(new View.OnClickListener() {
438439
@Override
439440
public void onClick (View v) {

0 commit comments

Comments
 (0)