14
14
*/
15
15
16
16
#include < libtgvoip/VoIPController.h>
17
- #include < tdjni/telegram_crypto.h>
18
17
#include < libtgvoip/client/android/tg_voip_jni.h>
19
18
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
+
20
79
extern " C" {
21
80
int voipOnJNILoad (JavaVM *vm, JNIEnv *env) {
22
81
tgvoip::VoIPController::crypto.sha1 = &telegram_sha1;
@@ -25,6 +84,10 @@ int voipOnJNILoad(JavaVM *vm, JNIEnv *env) {
25
84
tgvoip::VoIPController::crypto.aes_ige_encrypt = &telegram_aes_ige_encrypt;
26
85
tgvoip::VoIPController::crypto.aes_ige_decrypt = &telegram_aes_ige_decrypt;
27
86
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
28
91
tgvoipRegisterNatives (env);
29
92
return 0 ;
30
93
}
0 commit comments