Commit f3636ced authored by vvaltman's avatar vvaltman

updates

parent 839e9cd4
...@@ -182,7 +182,7 @@ static int fetch_comb_binlog_user_add (void *extra) { ...@@ -182,7 +182,7 @@ static int fetch_comb_binlog_user_add (void *extra) {
U->first_name = fetch_str_dup (); U->first_name = fetch_str_dup ();
U->last_name = fetch_str_dup (); U->last_name = fetch_str_dup ();
assert (!U->print_name); assert (!U->print_name);
U->print_name = create_print_name (U->id, U->first_name, U->last_name, 0, 0); U->print_name = tgl_state.callback.create_print_name (U->id, U->first_name, U->last_name, 0, 0);
tglp_peer_insert_name ((void *)U); tglp_peer_insert_name ((void *)U);
U->access_hash = fetch_long (); U->access_hash = fetch_long ();
...@@ -311,7 +311,7 @@ static int fetch_comb_binlog_user_set_name (void *extra) { ...@@ -311,7 +311,7 @@ static int fetch_comb_binlog_user_set_name (void *extra) {
tglp_peer_delete_name (U); tglp_peer_delete_name (U);
tfree_str (U->print_name); tfree_str (U->print_name);
} }
U->print_name = create_print_name (U->id, U->user.first_name, U->user.last_name, 0, 0); U->print_name = tgl_state.callback.create_print_name (U->id, U->user.first_name, U->user.last_name, 0, 0);
tglp_peer_insert_name ((void *)U); tglp_peer_insert_name ((void *)U);
if (tgl_state.callback.user_update) { if (tgl_state.callback.user_update) {
...@@ -386,11 +386,11 @@ static int fetch_comb_binlog_encr_chat_requested (void *extra) { ...@@ -386,11 +386,11 @@ static int fetch_comb_binlog_encr_chat_requested (void *extra) {
tgl_peer_t *Us = tgl_peer_get (TGL_MK_USER (U->user_id)); tgl_peer_t *Us = tgl_peer_get (TGL_MK_USER (U->user_id));
assert (!U->print_name); assert (!U->print_name);
if (Us) { if (Us) {
U->print_name = create_print_name (id, "!", Us->user.first_name, Us->user.last_name, 0); U->print_name = tgl_state.callback.create_print_name (id, "!", Us->user.first_name, Us->user.last_name, 0);
} else { } else {
static char buf[100]; static char buf[100];
tsnprintf (buf, 99, "user#%d", U->user_id); tsnprintf (buf, 99, "user#%d", U->user_id);
U->print_name = create_print_name (id, "!", buf, 0, 0); U->print_name = tgl_state.callback.create_print_name (id, "!", buf, 0, 0);
} }
tglp_peer_insert_name ((void *)U); tglp_peer_insert_name ((void *)U);
U->g_key = talloc (256); U->g_key = talloc (256);
...@@ -480,7 +480,7 @@ static int fetch_comb_binlog_encr_chat_init (void *extra) { ...@@ -480,7 +480,7 @@ static int fetch_comb_binlog_encr_chat_init (void *extra) {
tglp_insert_encrypted_chat (P); tglp_insert_encrypted_chat (P);
tgl_peer_t *Us = tgl_peer_get (TGL_MK_USER (P->encr_chat.user_id)); tgl_peer_t *Us = tgl_peer_get (TGL_MK_USER (P->encr_chat.user_id));
assert (Us); assert (Us);
P->print_name = create_print_name (P->id, "!", Us->user.first_name, Us->user.last_name, 0); P->print_name = tgl_state.callback.create_print_name (P->id, "!", Us->user.first_name, Us->user.last_name, 0);
tglp_peer_insert_name (P); tglp_peer_insert_name (P);
P->encr_chat.g_key = talloc (256); P->encr_chat.g_key = talloc (256);
...@@ -508,7 +508,7 @@ static int fetch_comb_binlog_chat_create (void *extra) { ...@@ -508,7 +508,7 @@ static int fetch_comb_binlog_chat_create (void *extra) {
C->flags = FLAG_CREATED | fetch_int (); C->flags = FLAG_CREATED | fetch_int ();
C->title = fetch_str_dup (); C->title = fetch_str_dup ();
assert (!C->print_title); assert (!C->print_title);
C->print_title = create_print_name (id, C->title, 0, 0, 0); C->print_title = tgl_state.callback.create_print_name (id, C->title, 0, 0, 0);
tglp_peer_insert_name ((void *)C); tglp_peer_insert_name ((void *)C);
C->users_num = fetch_int (); C->users_num = fetch_int ();
C->date = fetch_int (); C->date = fetch_int ();
...@@ -545,7 +545,7 @@ static int fetch_comb_binlog_chat_set_title (void *extra) { ...@@ -545,7 +545,7 @@ static int fetch_comb_binlog_chat_set_title (void *extra) {
tglp_peer_delete_name ((void *)C); tglp_peer_delete_name ((void *)C);
tfree_str (C->print_name); tfree_str (C->print_name);
} }
C->print_name = create_print_name (C->id, C->chat.title, 0, 0, 0); C->print_name = tgl_state.callback.create_print_name (C->id, C->chat.title, 0, 0, 0);
tglp_peer_insert_name ((void *)C); tglp_peer_insert_name ((void *)C);
if (tgl_state.callback.chat_update) { if (tgl_state.callback.chat_update) {
......
...@@ -871,7 +871,9 @@ int parse_tlo_file (void) { ...@@ -871,7 +871,9 @@ int parse_tlo_file (void) {
printf ("#include \"auto.h\"\n"); printf ("#include \"auto.h\"\n");
printf ("#include <assert.h>\n"); printf ("#include <assert.h>\n");
printf ("extern int *in_ptr, *in_end;\n"); printf ("extern int *tgl_in_ptr, *tgl_in_end;\n");
printf ("#define in_ptr tgl_in_ptr\n");
printf ("#define in_end tgl_in_end\n");
printf ("#include \"auto-static.c\"\n"); printf ("#include \"auto-static.c\"\n");
for (i = 0; i < tn; i++) { for (i = 0; i < tn; i++) {
......
...@@ -96,7 +96,7 @@ static long long precise_time; ...@@ -96,7 +96,7 @@ static long long precise_time;
static double get_utime (int clock_id) { static double get_utime (int clock_id) {
struct timespec T; struct timespec T;
my_clock_gettime (clock_id, &T); tgl_my_clock_gettime (clock_id, &T);
double res = T.tv_sec + (double) T.tv_nsec * 1e-9; double res = T.tv_sec + (double) T.tv_nsec * 1e-9;
if (clock_id == CLOCK_REALTIME) { if (clock_id == CLOCK_REALTIME) {
precise_time = (long long) (res * (1LL << 32)); precise_time = (long long) (res * (1LL << 32));
...@@ -139,9 +139,7 @@ static int rsa_load_public_key (const char *public_key_name) { ...@@ -139,9 +139,7 @@ static int rsa_load_public_key (const char *public_key_name) {
return -1; return -1;
} }
if (verbosity) { vlogprintf (E_WARNING, "public key '%s' loaded successfully\n", rsa_public_key_name);
vlogprintf (E_WARNING, "public key '%s' loaded successfully\n", rsa_public_key_name);
}
return 0; return 0;
} }
...@@ -173,12 +171,12 @@ static int encrypt_buffer[ENCRYPT_BUFFER_INTS]; ...@@ -173,12 +171,12 @@ static int encrypt_buffer[ENCRYPT_BUFFER_INTS];
static int decrypt_buffer[ENCRYPT_BUFFER_INTS]; static int decrypt_buffer[ENCRYPT_BUFFER_INTS];
static int encrypt_packet_buffer (void) { static int encrypt_packet_buffer (void) {
return pad_rsa_encrypt ((char *) packet_buffer, (packet_ptr - packet_buffer) * 4, (char *) encrypt_buffer, ENCRYPT_BUFFER_INTS * 4, pubKey->n, pubKey->e); return tgl_pad_rsa_encrypt ((char *) packet_buffer, (packet_ptr - packet_buffer) * 4, (char *) encrypt_buffer, ENCRYPT_BUFFER_INTS * 4, pubKey->n, pubKey->e);
} }
static int encrypt_packet_buffer_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32]) { static int encrypt_packet_buffer_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32]) {
init_aes_unauth (server_nonce, hidden_client_nonce, AES_ENCRYPT); tgl_init_aes_unauth (server_nonce, hidden_client_nonce, AES_ENCRYPT);
return pad_aes_encrypt ((char *) packet_buffer, (packet_ptr - packet_buffer) * 4, (char *) encrypt_buffer, ENCRYPT_BUFFER_INTS * 4); return tgl_pad_aes_encrypt ((char *) packet_buffer, (packet_ptr - packet_buffer) * 4, (char *) encrypt_buffer, ENCRYPT_BUFFER_INTS * 4);
} }
...@@ -421,7 +419,7 @@ static int process_respq_answer (struct connection *c, char *packet, int len) { ...@@ -421,7 +419,7 @@ static int process_respq_answer (struct connection *c, char *packet, int len) {
} }
static int check_prime (BIGNUM *p) { static int check_prime (BIGNUM *p) {
int r = BN_is_prime (p, BN_prime_checks, 0, BN_ctx, 0); int r = BN_is_prime (p, BN_prime_checks, 0, tgl_state.BN_ctx, 0);
ensure (r >= 0); ensure (r >= 0);
return r; return r;
} }
...@@ -434,7 +432,7 @@ int tglmp_check_DH_params (BIGNUM *p, int g) { ...@@ -434,7 +432,7 @@ int tglmp_check_DH_params (BIGNUM *p, int g) {
BN_init (&dh_g); BN_init (&dh_g);
ensure (BN_set_word (&dh_g, 4 * g)); ensure (BN_set_word (&dh_g, 4 * g));
ensure (BN_mod (&t, p, &dh_g, BN_ctx)); ensure (BN_mod (&t, p, &dh_g, tgl_state.BN_ctx));
int x = BN_get_word (&t); int x = BN_get_word (&t);
assert (x >= 0 && x < 4 * g); assert (x >= 0 && x < 4 * g);
...@@ -465,7 +463,7 @@ int tglmp_check_DH_params (BIGNUM *p, int g) { ...@@ -465,7 +463,7 @@ int tglmp_check_DH_params (BIGNUM *p, int g) {
BIGNUM b; BIGNUM b;
BN_init (&b); BN_init (&b);
ensure (BN_set_word (&b, 2)); ensure (BN_set_word (&b, 2));
ensure (BN_div (&t, 0, p, &b, BN_ctx)); ensure (BN_div (&t, 0, p, &b, tgl_state.BN_ctx));
if (!check_prime (&t)) { return -1; } if (!check_prime (&t)) { return -1; }
BN_free (&b); BN_free (&b);
BN_free (&t); BN_free (&t);
...@@ -528,12 +526,12 @@ static int process_dh_answer (struct connection *c, char *packet, int len) { ...@@ -528,12 +526,12 @@ static int process_dh_answer (struct connection *c, char *packet, int len) {
assert (*(int *) (packet + 20) == (int)CODE_server_DH_params_ok); assert (*(int *) (packet + 20) == (int)CODE_server_DH_params_ok);
assert (!memcmp (packet + 24, nonce, 16)); assert (!memcmp (packet + 24, nonce, 16));
assert (!memcmp (packet + 40, server_nonce, 16)); assert (!memcmp (packet + 40, server_nonce, 16));
init_aes_unauth (server_nonce, new_nonce, AES_DECRYPT); tgl_init_aes_unauth (server_nonce, new_nonce, AES_DECRYPT);
in_ptr = (int *)(packet + 56); in_ptr = (int *)(packet + 56);
in_end = (int *)(packet + len); in_end = (int *)(packet + len);
int l = prefetch_strlen (); int l = prefetch_strlen ();
assert (l > 0); assert (l > 0);
l = pad_aes_decrypt (fetch_str (l), l, (char *) decrypt_buffer, DECRYPT_BUFFER_INTS * 4 - 16); l = tgl_pad_aes_decrypt (fetch_str (l), l, (char *) decrypt_buffer, DECRYPT_BUFFER_INTS * 4 - 16);
assert (in_ptr == in_end); assert (in_ptr == in_end);
assert (l >= 60); assert (l >= 60);
assert (decrypt_buffer[5] == (int)CODE_server_DH_inner_data); assert (decrypt_buffer[5] == (int)CODE_server_DH_inner_data);
...@@ -579,12 +577,12 @@ static int process_dh_answer (struct connection *c, char *packet, int len) { ...@@ -579,12 +577,12 @@ static int process_dh_answer (struct connection *c, char *packet, int len) {
BIGNUM *y = BN_new (); BIGNUM *y = BN_new ();
ensure_ptr (y); ensure_ptr (y);
ensure (BN_mod_exp (y, &dh_g, dh_power, &dh_prime, BN_ctx)); ensure (BN_mod_exp (y, &dh_g, dh_power, &dh_prime, tgl_state.BN_ctx));
out_bignum (y); out_bignum (y);
BN_free (y); BN_free (y);
BN_init (&auth_key_num); BN_init (&auth_key_num);
ensure (BN_mod_exp (&auth_key_num, &g_a, dh_power, &dh_prime, BN_ctx)); ensure (BN_mod_exp (&auth_key_num, &g_a, dh_power, &dh_prime, tgl_state.BN_ctx));
l = BN_num_bytes (&auth_key_num); l = BN_num_bytes (&auth_key_num);
assert (l >= 250 && l <= 256); assert (l >= 250 && l <= 256);
assert (BN_bn2bin (&auth_key_num, (unsigned char *)D->auth_key)); assert (BN_bn2bin (&auth_key_num, (unsigned char *)D->auth_key));
...@@ -711,9 +709,9 @@ static int aes_encrypt_message (struct dc *DC, struct encrypted_message *enc) { ...@@ -711,9 +709,9 @@ static int aes_encrypt_message (struct dc *DC, struct encrypted_message *enc) {
//printf ("enc_len is %d\n", enc_len); //printf ("enc_len is %d\n", enc_len);
vlogprintf (E_DEBUG, "sending message with sha1 %08x\n", *(int *)sha1_buffer); vlogprintf (E_DEBUG, "sending message with sha1 %08x\n", *(int *)sha1_buffer);
memcpy (enc->msg_key, sha1_buffer + 4, 16); memcpy (enc->msg_key, sha1_buffer + 4, 16);
init_aes_auth (DC->auth_key, enc->msg_key, AES_ENCRYPT); tgl_init_aes_auth (DC->auth_key, enc->msg_key, AES_ENCRYPT);
//hexdump ((char *)enc, (char *)enc + enc_len + 24); //hexdump ((char *)enc, (char *)enc + enc_len + 24);
return pad_aes_encrypt ((char *) &enc->server_salt, enc_len, (char *) &enc->server_salt, MAX_MESSAGE_INTS * 4 + (MINSZ - UNENCSZ)); return tgl_pad_aes_encrypt ((char *) &enc->server_salt, enc_len, (char *) &enc->server_salt, MAX_MESSAGE_INTS * 4 + (MINSZ - UNENCSZ));
} }
long long tglmp_encrypt_send_message (struct connection *c, int *msg, int msg_ints, int useful) { long long tglmp_encrypt_send_message (struct connection *c, int *msg, int msg_ints, int useful) {
...@@ -821,7 +819,7 @@ static void work_packed (struct connection *c, long long msg_id) { ...@@ -821,7 +819,7 @@ static void work_packed (struct connection *c, long long msg_id) {
int l = prefetch_strlen (); int l = prefetch_strlen ();
char *s = fetch_str (l); char *s = fetch_str (l);
int total_out = tinflate (s, l, buf, MAX_PACKED_SIZE); int total_out = tgl_inflate (s, l, buf, MAX_PACKED_SIZE);
int *end = in_ptr; int *end = in_ptr;
int *eend = in_end; int *eend = in_end;
//assert (total_out % 4 == 0); //assert (total_out % 4 == 0);
...@@ -933,8 +931,8 @@ static int process_rpc_message (struct connection *c UU, struct encrypted_messag ...@@ -933,8 +931,8 @@ static int process_rpc_message (struct connection *c UU, struct encrypted_messag
struct dc *DC = tgl_state.net_methods->get_dc (c); struct dc *DC = tgl_state.net_methods->get_dc (c);
assert (enc->auth_key_id == DC->auth_key_id); assert (enc->auth_key_id == DC->auth_key_id);
assert (DC->auth_key_id); assert (DC->auth_key_id);
init_aes_auth (DC->auth_key + 8, enc->msg_key, AES_DECRYPT); tgl_init_aes_auth (DC->auth_key + 8, enc->msg_key, AES_DECRYPT);
int l = pad_aes_decrypt ((char *)&enc->server_salt, len - UNENCSZ, (char *)&enc->server_salt, len - UNENCSZ); int l = tgl_pad_aes_decrypt ((char *)&enc->server_salt, len - UNENCSZ, (char *)&enc->server_salt, len - UNENCSZ);
assert (l == len - UNENCSZ); assert (l == len - UNENCSZ);
//assert (enc->auth_key_id2 == enc->auth_key_id); //assert (enc->auth_key_id2 == enc->auth_key_id);
assert (!(enc->msg_len & 3) && enc->msg_len > 0 && enc->msg_len <= len - MINSZ && len - MINSZ - enc->msg_len <= 12); assert (!(enc->msg_len & 3) && enc->msg_len > 0 && enc->msg_len <= len - MINSZ && len - MINSZ - enc->msg_len <= 12);
...@@ -1089,7 +1087,7 @@ static int rpc_close (struct connection *c) { ...@@ -1089,7 +1087,7 @@ static int rpc_close (struct connection *c) {
#define RANDSEED_PASSWORD_FILENAME NULL #define RANDSEED_PASSWORD_FILENAME NULL
#define RANDSEED_PASSWORD_LENGTH 0 #define RANDSEED_PASSWORD_LENGTH 0
void tglmp_on_start (const char *key) { void tglmp_on_start (const char *key) {
prng_seed (RANDSEED_PASSWORD_FILENAME, RANDSEED_PASSWORD_LENGTH); tgl_prng_seed (RANDSEED_PASSWORD_FILENAME, RANDSEED_PASSWORD_LENGTH);
if (key) { if (key) {
if (rsa_load_public_key (key) < 0) { if (rsa_load_public_key (key) < 0) {
...@@ -1103,7 +1101,7 @@ void tglmp_on_start (const char *key) { ...@@ -1103,7 +1101,7 @@ void tglmp_on_start (const char *key) {
exit (1); exit (1);
} }
} }
pk_fingerprint = compute_rsa_key_fingerprint (pubKey); pk_fingerprint = tgl_do_compute_rsa_key_fingerprint (pubKey);
} }
//int auth_ok (void) { //int auth_ok (void) {
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "mtproto-common.h" #include "mtproto-common.h"
#include "include.h" #include "include.h"
#include "tools.h"
#ifdef __MACH__ #ifdef __MACH__
#include <mach/clock.h> #include <mach/clock.h>
...@@ -47,12 +48,12 @@ ...@@ -47,12 +48,12 @@
#endif #endif
int __packet_buffer[PACKET_BUFFER_SIZE], *packet_ptr; static int __packet_buffer[PACKET_BUFFER_SIZE];
int *packet_buffer = __packet_buffer + 16; int *tgl_packet_ptr;
int *tgl_packet_buffer = __packet_buffer + 16;
long long rsa_encrypted_chunks, rsa_decrypted_chunks; static long long rsa_encrypted_chunks, rsa_decrypted_chunks;
BN_CTX *BN_ctx;
//int verbosity; //int verbosity;
static int get_random_bytes (unsigned char *buf, int n) { static int get_random_bytes (unsigned char *buf, int n) {
...@@ -105,9 +106,9 @@ static __inline__ unsigned long long rdtsc (void) { ...@@ -105,9 +106,9 @@ static __inline__ unsigned long long rdtsc (void) {
} }
#endif #endif
void prng_seed (const char *password_filename, int password_length) { void tgl_prng_seed (const char *password_filename, int password_length) {
struct timespec T; struct timespec T;
my_clock_gettime (CLOCK_REALTIME, &T); tgl_my_clock_gettime (CLOCK_REALTIME, &T);
RAND_add (&T, sizeof (T), 4.0); RAND_add (&T, sizeof (T), 4.0);
#ifdef HAVE_RDTSC #ifdef HAVE_RDTSC
unsigned long long r = rdtsc (); unsigned long long r = rdtsc ();
...@@ -140,11 +141,11 @@ void prng_seed (const char *password_filename, int password_length) { ...@@ -140,11 +141,11 @@ void prng_seed (const char *password_filename, int password_length) {
tfree_secure (a, password_length); tfree_secure (a, password_length);
} }
} }
BN_ctx = BN_CTX_new (); tgl_state.BN_ctx = BN_CTX_new ();
ensure_ptr (BN_ctx); ensure_ptr (tgl_state.BN_ctx);
} }
int serialize_bignum (BIGNUM *b, char *buffer, int maxlen) { int tgl_serialize_bignum (BIGNUM *b, char *buffer, int maxlen) {
int itslen = BN_num_bytes (b); int itslen = BN_num_bytes (b);
int reqlen; int reqlen;
if (itslen < 254) { if (itslen < 254) {
...@@ -174,19 +175,19 @@ int serialize_bignum (BIGNUM *b, char *buffer, int maxlen) { ...@@ -174,19 +175,19 @@ int serialize_bignum (BIGNUM *b, char *buffer, int maxlen) {
} }
long long compute_rsa_key_fingerprint (RSA *key) { long long tgl_do_compute_rsa_key_fingerprint (RSA *key) {
static char tempbuff[4096]; static char tempbuff[4096];
static unsigned char sha[20]; static unsigned char sha[20];
assert (key->n && key->e); assert (key->n && key->e);
int l1 = serialize_bignum (key->n, tempbuff, 4096); int l1 = tgl_serialize_bignum (key->n, tempbuff, 4096);
assert (l1 > 0); assert (l1 > 0);
int l2 = serialize_bignum (key->e, tempbuff + l1, 4096 - l1); int l2 = tgl_serialize_bignum (key->e, tempbuff + l1, 4096 - l1);
assert (l2 > 0 && l1 + l2 <= 4096); assert (l2 > 0 && l1 + l2 <= 4096);
SHA1 ((unsigned char *)tempbuff, l1 + l2, sha); SHA1 ((unsigned char *)tempbuff, l1 + l2, sha);
return *(long long *)(sha + 12); return *(long long *)(sha + 12);
} }
void out_cstring (const char *str, long len) { void tgl_out_cstring (const char *str, long len) {
assert (len >= 0 && len < (1 << 24)); assert (len >= 0 && len < (1 << 24));
assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE)); assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE));
char *dest = (char *) packet_ptr; char *dest = (char *) packet_ptr;
...@@ -204,7 +205,7 @@ void out_cstring (const char *str, long len) { ...@@ -204,7 +205,7 @@ void out_cstring (const char *str, long len) {
packet_ptr = (int *) dest; packet_ptr = (int *) dest;
} }
void out_cstring_careful (const char *str, long len) { void tgl_out_cstring_careful (const char *str, long len) {
assert (len >= 0 && len < (1 << 24)); assert (len >= 0 && len < (1 << 24));
assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE)); assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE));
char *dest = (char *) packet_ptr; char *dest = (char *) packet_ptr;
...@@ -229,16 +230,16 @@ void out_cstring_careful (const char *str, long len) { ...@@ -229,16 +230,16 @@ void out_cstring_careful (const char *str, long len) {
} }
void out_data (const void *data, long len) { void tgl_out_data (const void *data, long len) {
assert (len >= 0 && len < (1 << 24) && !(len & 3)); assert (len >= 0 && len < (1 << 24) && !(len & 3));
assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE)); assert ((char *) packet_ptr + len + 8 < (char *) (packet_buffer + PACKET_BUFFER_SIZE));
memcpy (packet_ptr, data, len); memcpy (packet_ptr, data, len);
packet_ptr += len >> 2; packet_ptr += len >> 2;
} }
int *in_ptr, *in_end; int *tgl_in_ptr, *tgl_in_end;
int fetch_bignum (BIGNUM *x) { int tgl_fetch_bignum (BIGNUM *x) {
int l = prefetch_strlen (); int l = prefetch_strlen ();
if (l < 0) { if (l < 0) {
return l; return l;
...@@ -248,7 +249,7 @@ int fetch_bignum (BIGNUM *x) { ...@@ -248,7 +249,7 @@ int fetch_bignum (BIGNUM *x) {
return l; return l;
} }
int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E) { int tgl_pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E) {
int pad = (255000 - from_len - 32) % 255 + 32; int pad = (255000 - from_len - 32) % 255 + 32;
int chunks = (from_len + pad) / 255; int chunks = (from_len + pad) / 255;
int bits = BN_num_bits (N); int bits = BN_num_bits (N);
...@@ -263,7 +264,7 @@ int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI ...@@ -263,7 +264,7 @@ int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI
rsa_encrypted_chunks += chunks; rsa_encrypted_chunks += chunks;
for (i = 0; i < chunks; i++) { for (i = 0; i < chunks; i++) {
BN_bin2bn ((unsigned char *) from, 255, &x); BN_bin2bn ((unsigned char *) from, 255, &x);
assert (BN_mod_exp (&y, &x, E, N, BN_ctx) == 1); assert (BN_mod_exp (&y, &x, E, N, tgl_state.BN_ctx) == 1);
unsigned l = 256 - BN_num_bytes (&y); unsigned l = 256 - BN_num_bytes (&y);
assert (l <= 256); assert (l <= 256);
memset (to, 0, l); memset (to, 0, l);
...@@ -275,7 +276,7 @@ int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI ...@@ -275,7 +276,7 @@ int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI
return chunks * 256; return chunks * 256;
} }
int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D) { int tgl_pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D) {
if (from_len < 0 || from_len > 0x1000 || (from_len & 0xff)) { if (from_len < 0 || from_len > 0x1000 || (from_len & 0xff)) {
return -1; return -1;
} }
...@@ -290,7 +291,7 @@ int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI ...@@ -290,7 +291,7 @@ int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI
for (i = 0; i < chunks; i++) { for (i = 0; i < chunks; i++) {
++rsa_decrypted_chunks; ++rsa_decrypted_chunks;
BN_bin2bn ((unsigned char *) from, 256, &x); BN_bin2bn ((unsigned char *) from, 256, &x);
assert (BN_mod_exp (&y, &x, D, N, BN_ctx) == 1); assert (BN_mod_exp (&y, &x, D, N, tgl_state.BN_ctx) == 1);
int l = BN_num_bytes (&y); int l = BN_num_bytes (&y);
if (l > 255) { if (l > 255) {
BN_free (&x); BN_free (&x);
...@@ -307,10 +308,10 @@ int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI ...@@ -307,10 +308,10 @@ int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BI
return chunks * 255; return chunks * 255;
} }
unsigned char aes_key_raw[32], aes_iv[32]; static unsigned char aes_key_raw[32], aes_iv[32];
AES_KEY aes_key; static AES_KEY aes_key;
void init_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32], int encrypt) { void tgl_init_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32], int encrypt) {
static unsigned char buffer[64], hash[20]; static unsigned char buffer[64], hash[20];
memcpy (buffer, hidden_client_nonce, 32); memcpy (buffer, hidden_client_nonce, 32);
memcpy (buffer + 32, server_nonce, 16); memcpy (buffer + 32, server_nonce, 16);
...@@ -331,7 +332,7 @@ void init_aes_unauth (const char server_nonce[16], const char hidden_client_nonc ...@@ -331,7 +332,7 @@ void init_aes_unauth (const char server_nonce[16], const char hidden_client_nonc
memset (aes_key_raw, 0, sizeof (aes_key_raw)); memset (aes_key_raw, 0, sizeof (aes_key_raw));
} }
void init_aes_auth (char auth_key[192], char msg_key[16], int encrypt) { void tgl_init_aes_auth (char auth_key[192], char msg_key[16], int encrypt) {
static unsigned char buffer[48], hash[20]; static unsigned char buffer[48], hash[20];
// sha1_a = SHA1 (msg_key + substr (auth_key, 0, 32)); // sha1_a = SHA1 (msg_key + substr (auth_key, 0, 32));
// sha1_b = SHA1 (substr (auth_key, 32, 16) + msg_key + substr (auth_key, 48, 16)); // sha1_b = SHA1 (substr (auth_key, 32, 16) + msg_key + substr (auth_key, 48, 16));
...@@ -371,7 +372,7 @@ void init_aes_auth (char auth_key[192], char msg_key[16], int encrypt) { ...@@ -371,7 +372,7 @@ void init_aes_auth (char auth_key[192], char msg_key[16], int encrypt) {
memset (aes_key_raw, 0, sizeof (aes_key_raw)); memset (aes_key_raw, 0, sizeof (aes_key_raw));
} }
int pad_aes_encrypt (char *from, int from_len, char *to, int size) { int tgl_pad_aes_encrypt (char *from, int from_len, char *to, int size) {
int padded_size = (from_len + 15) & -16; int padded_size = (from_len + 15) & -16;
assert (from_len > 0 && padded_size <= size); assert (from_len > 0 && padded_size <= size);
if (from_len < padded_size) { if (from_len < padded_size) {
...@@ -381,7 +382,7 @@ int pad_aes_encrypt (char *from, int from_len, char *to, int size) { ...@@ -381,7 +382,7 @@ int pad_aes_encrypt (char *from, int from_len, char *to, int size) {
return padded_size; return padded_size;
} }
int pad_aes_decrypt (char *from, int from_len, char *to, int size) { int tgl_pad_aes_decrypt (char *from, int from_len, char *to, int size) {
if (from_len <= 0 || from_len > size || (from_len & 15)) { if (from_len <= 0 || from_len > size || (from_len & 15)) {
return -1; return -1;
} }
......
...@@ -111,14 +111,17 @@ struct encrypted_message { ...@@ -111,14 +111,17 @@ struct encrypted_message {
#pragma pack(pop) #pragma pack(pop)
BN_CTX *BN_ctx; //BN_CTX *BN_ctx;
void prng_seed (const char *password_filename, int password_length); void tgl_prng_seed (const char *password_filename, int password_length);
int serialize_bignum (BIGNUM *b, char *buffer, int maxlen); int tgl_serialize_bignum (BIGNUM *b, char *buffer, int maxlen);
long long compute_rsa_key_fingerprint (RSA *key); long long tgl_do_compute_rsa_key_fingerprint (RSA *key);
extern int *packet_buffer; #define packet_buffer tgl_packet_buffer
extern int *packet_ptr; #define packet_ptr tgl_packet_ptr
extern int *tgl_packet_buffer;
extern int *tgl_packet_ptr;
static inline void out_ints (const int *what, int len) { static inline void out_ints (const int *what, int len) {
assert (packet_ptr + len <= packet_buffer + PACKET_BUFFER_SIZE); assert (packet_ptr + len <= packet_buffer + PACKET_BUFFER_SIZE);
...@@ -143,21 +146,28 @@ static inline void clear_packet (void) { ...@@ -143,21 +146,28 @@ static inline void clear_packet (void) {
packet_ptr = packet_buffer; packet_ptr = packet_buffer;
} }
void out_cstring (const char *str, long len); void tgl_out_cstring (const char *str, long len);
void out_cstring_careful (const char *str, long len); void tgl_out_cstring_careful (const char *str, long len);
void out_data (const void *data, long len); void tgl_out_data (const void *data, long len);
#define out_cstring tgl_out_cstring
#define out_cstring_careful tgl_out_cstring_careful
#define out_data tgl_out_data
static inline void out_string (const char *str) { static inline void out_string (const char *str) {
out_cstring (str, strlen (str)); out_cstring (str, strlen (str));
} }
static inline void out_bignum (BIGNUM *n) { static inline void out_bignum (BIGNUM *n) {
int l = serialize_bignum (n, (char *)packet_ptr, (PACKET_BUFFER_SIZE - (packet_ptr - packet_buffer)) * 4); int l = tgl_serialize_bignum (n, (char *)packet_ptr, (PACKET_BUFFER_SIZE - (packet_ptr - packet_buffer)) * 4);
assert (l > 0); assert (l > 0);
packet_ptr += l >> 2; packet_ptr += l >> 2;
} }
extern int *in_ptr, *in_end; #define in_ptr tgl_in_ptr
#define in_end tgl_in_end
extern int *tgl_in_ptr, *tgl_in_end;
//void fetch_pts (void); //void fetch_pts (void);
//void fetch_qts (void); //void fetch_qts (void);
...@@ -179,7 +189,6 @@ static inline int prefetch_strlen (void) { ...@@ -179,7 +189,6 @@ static inline int prefetch_strlen (void) {
} }
} }
extern int verbosity;
static inline char *fetch_str (int len) { static inline char *fetch_str (int len) {
assert (len >= 0); assert (len >= 0);
vlogprintf (E_DEBUG + 3, "fetch_string: len = %d\n", len); vlogprintf (E_DEBUG + 3, "fetch_string: len = %d\n", len);
...@@ -270,7 +279,8 @@ static inline long have_prefetch_ints (void) { ...@@ -270,7 +279,8 @@ static inline long have_prefetch_ints (void) {
return in_end - in_ptr; return in_end - in_ptr;
} }
int fetch_bignum (BIGNUM *x); int tgl_fetch_bignum (BIGNUM *x);
#define fetch_bignum tgl_fetch_bignum
static inline int fetch_int (void) { static inline int fetch_int (void) {
assert (in_ptr + 1 <= in_end); assert (in_ptr + 1 <= in_end);
...@@ -335,18 +345,18 @@ static inline void fetch256 (void *buf) { ...@@ -335,18 +345,18 @@ static inline void fetch256 (void *buf) {
//int get_random_bytes (unsigned char *buf, int n); //int get_random_bytes (unsigned char *buf, int n);
int pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E); int tgl_pad_rsa_encrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *E);
int pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D); int tgl_pad_rsa_decrypt (char *from, int from_len, char *to, int size, BIGNUM *N, BIGNUM *D);
extern long long rsa_encrypted_chunks, rsa_decrypted_chunks; //extern long long rsa_encrypted_chunks, rsa_decrypted_chunks;
extern unsigned char aes_key_raw[32], aes_iv[32]; //extern unsigned char aes_key_raw[32], aes_iv[32];
extern AES_KEY aes_key; //extern AES_KEY aes_key;
void init_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32], int encrypt); void tgl_init_aes_unauth (const char server_nonce[16], const char hidden_client_nonce[32], int encrypt);
void init_aes_auth (char auth_key[192], char msg_key[16], int encrypt); void tgl_init_aes_auth (char auth_key[192], char msg_key[16], int encrypt);
int pad_aes_encrypt (char *from, int from_len, char *to, int size); int tgl_pad_aes_encrypt (char *from, int from_len, char *to, int size);
int pad_aes_decrypt (char *from, int from_len, char *to, int size); int tgl_pad_aes_decrypt (char *from, int from_len, char *to, int size);
/* /*
static inline void hexdump_in (void) { static inline void hexdump_in (void) {
hexdump (in_ptr, in_end); hexdump (in_ptr, in_end);
...@@ -360,5 +370,4 @@ static inline void hexdump_out (void) { ...@@ -360,5 +370,4 @@ static inline void hexdump_out (void) {
#define CLOCK_REALTIME 0 #define CLOCK_REALTIME 0
#define CLOCK_MONOTONIC 1 #define CLOCK_MONOTONIC 1
#endif #endif
void my_clock_gettime (int clock_id, struct timespec *T);
#endif #endif
...@@ -220,7 +220,7 @@ void tglq_query_result (long long id UU) { ...@@ -220,7 +220,7 @@ void tglq_query_result (long long id UU) {
fetch_int (); fetch_int ();
int l = prefetch_strlen (); int l = prefetch_strlen ();
char *s = fetch_str (l); char *s = fetch_str (l);
int total_out = tinflate (s, l, packed_buffer, MAX_PACKED_SIZE); int total_out = tgl_inflate (s, l, packed_buffer, MAX_PACKED_SIZE);
end = in_ptr; end = in_ptr;
eend = in_end; eend = in_end;
//assert (total_out % 4 == 0); //assert (total_out % 4 == 0);
...@@ -2468,7 +2468,7 @@ static struct query_methods send_encr_request_methods = { ...@@ -2468,7 +2468,7 @@ static struct query_methods send_encr_request_methods = {
//int encr_root; //int encr_root;
//unsigned char *encr_prime; //unsigned char *encr_prime;
//int encr_param_version; //int encr_param_version;
static BN_CTX *ctx; //static BN_CTX *ctx;
void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *random, void (*callback)(void *callback_extra, int success, struct tgl_secret_chat *E), void *callback_extra) { void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *random, void (*callback)(void *callback_extra, int success, struct tgl_secret_chat *E), void *callback_extra) {
int i; int i;
...@@ -2493,15 +2493,15 @@ void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *ran ...@@ -2493,15 +2493,15 @@ void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *ran
BIGNUM *g_a = BN_bin2bn (E->g_key, 256, 0); BIGNUM *g_a = BN_bin2bn (E->g_key, 256, 0);
ensure_ptr (g_a); ensure_ptr (g_a);
assert (tglmp_check_g (tgl_state.encr_prime, g_a) >= 0); assert (tglmp_check_g (tgl_state.encr_prime, g_a) >= 0);
if (!ctx) { //if (!ctx) {
ctx = BN_CTX_new (); // ctx = BN_CTX_new ();
ensure_ptr (ctx); // ensure_ptr (ctx);
} //}
BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0); BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0);
ensure_ptr (p); ensure_ptr (p);
BIGNUM *r = BN_new (); BIGNUM *r = BN_new ();
ensure_ptr (r); ensure_ptr (r);
ensure (BN_mod_exp (r, g_a, b, p, ctx)); ensure (BN_mod_exp (r, g_a, b, p, tgl_state.BN_ctx));
static unsigned char kk[256]; static unsigned char kk[256];
memset (kk, 0, sizeof (kk)); memset (kk, 0, sizeof (kk));
BN_bn2bin (r, kk); BN_bn2bin (r, kk);
...@@ -2520,7 +2520,7 @@ void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *ran ...@@ -2520,7 +2520,7 @@ void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *ran
out_long (E->access_hash); out_long (E->access_hash);
ensure (BN_set_word (g_a, tgl_state.encr_root)); ensure (BN_set_word (g_a, tgl_state.encr_root));
ensure (BN_mod_exp (r, g_a, b, p, ctx)); ensure (BN_mod_exp (r, g_a, b, p, tgl_state.BN_ctx));
static unsigned char buf[256]; static unsigned char buf[256];
memset (buf, 0, sizeof (buf)); memset (buf, 0, sizeof (buf));
BN_bn2bin (r, buf); BN_bn2bin (r, buf);
...@@ -2540,17 +2540,13 @@ void tgl_do_create_keys_end (struct tgl_secret_chat *U) { ...@@ -2540,17 +2540,13 @@ void tgl_do_create_keys_end (struct tgl_secret_chat *U) {
BIGNUM *g_b = BN_bin2bn (U->g_key, 256, 0); BIGNUM *g_b = BN_bin2bn (U->g_key, 256, 0);
ensure_ptr (g_b); ensure_ptr (g_b);
assert (tglmp_check_g (tgl_state.encr_prime, g_b) >= 0); assert (tglmp_check_g (tgl_state.encr_prime, g_b) >= 0);
if (!ctx) {
ctx = BN_CTX_new ();
ensure_ptr (ctx);
}
BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0); BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0);
ensure_ptr (p); ensure_ptr (p);
BIGNUM *r = BN_new (); BIGNUM *r = BN_new ();
ensure_ptr (r); ensure_ptr (r);
BIGNUM *a = BN_bin2bn ((void *)U->key, 256, 0); BIGNUM *a = BN_bin2bn ((void *)U->key, 256, 0);
ensure_ptr (a); ensure_ptr (a);
ensure (BN_mod_exp (r, g_b, a, p, ctx)); ensure (BN_mod_exp (r, g_b, a, p, tgl_state.BN_ctx));
unsigned char *t = talloc (256); unsigned char *t = talloc (256);
memcpy (t, U->key, 256); memcpy (t, U->key, 256);
...@@ -2586,10 +2582,6 @@ void tgl_do_send_create_encr_chat (void *x, unsigned char *random, void (*callba ...@@ -2586,10 +2582,6 @@ void tgl_do_send_create_encr_chat (void *x, unsigned char *random, void (*callba
for (i = 0; i < 256; i++) { for (i = 0; i < 256; i++) {
random[i] ^= random_here[i]; random[i] ^= random_here[i];
} }
if (!ctx) {
ctx = BN_CTX_new ();
ensure_ptr (ctx);
}
BIGNUM *a = BN_bin2bn (random, 256, 0); BIGNUM *a = BN_bin2bn (random, 256, 0);
ensure_ptr (a); ensure_ptr (a);
BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0); BIGNUM *p = BN_bin2bn (tgl_state.encr_prime, 256, 0);
...@@ -2603,7 +2595,7 @@ void tgl_do_send_create_encr_chat (void *x, unsigned char *random, void (*callba ...@@ -2603,7 +2595,7 @@ void tgl_do_send_create_encr_chat (void *x, unsigned char *random, void (*callba
BIGNUM *r = BN_new (); BIGNUM *r = BN_new ();
ensure_ptr (r); ensure_ptr (r);
ensure (BN_mod_exp (r, g, a, p, ctx)); ensure (BN_mod_exp (r, g, a, p, tgl_state.BN_ctx));
BN_clear_free (a); BN_clear_free (a);
......
...@@ -68,7 +68,7 @@ static tgl_peer_t *Peers[TGL_MAX_PEER_NUM]; ...@@ -68,7 +68,7 @@ static tgl_peer_t *Peers[TGL_MAX_PEER_NUM];
char *create_print_name (tgl_peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4) { char *tgls_default_create_print_name (tgl_peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4) {
const char *d[4]; const char *d[4];
d[0] = a1; d[1] = a2; d[2] = a3; d[3] = a4; d[0] = a1; d[1] = a2; d[2] = a3; d[3] = a4;
static char buf[10000]; static char buf[10000];
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include "tgl-layout.h" #include "tgl-layout.h"
#include "tgl-fetch.h" #include "tgl-fetch.h"
char *create_print_name (tgl_peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4); char *tgls_default_create_print_name (tgl_peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4);
void tgls_free_user (struct tgl_user *U); void tgls_free_user (struct tgl_user *U);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "tgl.h" #include "tgl.h"
#include "tools.h" #include "tools.h"
#include "mtproto-client.h" #include "mtproto-client.h"
#include "structures.h"
#include "net.h" #include "net.h"
#include <event2/event.h> #include <event2/event.h>
...@@ -44,6 +45,9 @@ void tgl_init (void) { ...@@ -44,6 +45,9 @@ void tgl_init (void) {
if (!tgl_state.net_methods) { if (!tgl_state.net_methods) {
tgl_state.net_methods = &tgl_conn_methods; tgl_state.net_methods = &tgl_conn_methods;
} }
if (!tgl_state.callback.create_print_name) {
tgl_state.callback.create_print_name = tgls_default_create_print_name;
}
tglmp_on_start (tgl_state.rsa_key); tglmp_on_start (tgl_state.rsa_key);
} }
......
...@@ -6,14 +6,15 @@ ...@@ -6,14 +6,15 @@
#define TGL_MAX_DC_NUM 100 #define TGL_MAX_DC_NUM 100
// JUST RANDOM STRING
#define TGL_BUILD "1828" #define TGL_BUILD "1828"
#define TGL_VERSION "0.9-beta" #define TGL_VERSION "1.0-beta"
// Do not modify this structure, unless you know what you do
struct connection; struct connection;
struct mtproto_methods; struct mtproto_methods;
struct session; struct session;
struct dc; struct dc;
struct bingnum_ctx;
#define TGL_UPDATE_CREATED 1 #define TGL_UPDATE_CREATED 1
#define TGL_UPDATE_DELETED 2 #define TGL_UPDATE_DELETED 2
...@@ -31,6 +32,21 @@ struct dc; ...@@ -31,6 +32,21 @@ struct dc;
#define TGL_UPDATE_MEMBERS 8192 #define TGL_UPDATE_MEMBERS 8192
#define TGL_UPDATE_ACCESS_HASH 16384 #define TGL_UPDATE_ACCESS_HASH 16384
struct tgl_allocator {
void *(*talloc)(size_t size);
void *(*trealloc)(void *ptr, size_t old_size, size_t size);
void *(*talloc0)(size_t size);
char *(*tstrdup)(const char *s);
char *(*tstrndup)(const char *s, size_t n);
void (*tfree)(void *ptr, int size);
void (*tfree_str)(void *ptr);
void (*tfree_secure)(void *ptr, int size);
int (*tasprintf)(char **res, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
int (*tsnprintf)(char *buf, int len, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
void (*tcheck)(void);
void (*texists)(void *ptr, int size);
};
struct tgl_update_callback { struct tgl_update_callback {
void (*new_msg)(struct tgl_message *M); void (*new_msg)(struct tgl_message *M);
void (*marked_read)(int num, struct tgl_message *list[]); void (*marked_read)(int num, struct tgl_message *list[]);
...@@ -59,6 +75,7 @@ struct tgl_update_callback { ...@@ -59,6 +75,7 @@ struct tgl_update_callback {
void (*secret_chat_update)(struct tgl_secret_chat *C, unsigned flags); void (*secret_chat_update)(struct tgl_secret_chat *C, unsigned flags);
void (*msg_receive)(struct tgl_message *M); void (*msg_receive)(struct tgl_message *M);
void (*our_id)(int id); void (*our_id)(int id);
char *(*create_print_name) (tgl_peer_id_t id, const char *a1, const char *a2, const char *a3, const char *a4);
}; };
struct tgl_net_methods { struct tgl_net_methods {
...@@ -81,6 +98,7 @@ struct tgl_net_methods { ...@@ -81,6 +98,7 @@ struct tgl_net_methods {
#define TGL_LOCK_DIFF 1 #define TGL_LOCK_DIFF 1
// Do not modify this structure, unless you know what you do
struct tgl_state { struct tgl_state {
int our_id; // ID of logged in user int our_id; // ID of logged in user
int encr_root; int encr_root;
...@@ -115,6 +133,9 @@ struct tgl_state { ...@@ -115,6 +133,9 @@ struct tgl_state {
struct event_base *ev_base; struct event_base *ev_base;
char *rsa_key; char *rsa_key;
struct bignum_ctx *BN_ctx;
struct tgl_allocator allocator;
}; };
extern struct tgl_state tgl_state; extern struct tgl_state tgl_state;
......
...@@ -40,10 +40,10 @@ ...@@ -40,10 +40,10 @@
#define RES_PRE 8 #define RES_PRE 8
#define RES_AFTER 8 #define RES_AFTER 8
#define MAX_BLOCKS 1000000 #define MAX_BLOCKS 1000000
void *blocks[MAX_BLOCKS]; static void *blocks[MAX_BLOCKS];
void *free_blocks[MAX_BLOCKS]; static void *free_blocks[MAX_BLOCKS];
int used_blocks; static int used_blocks;
int free_blocks_cnt; static int free_blocks_cnt;
#endif #endif
...@@ -59,11 +59,6 @@ extern int verbosity; ...@@ -59,11 +59,6 @@ extern int verbosity;
long long total_allocated_bytes; long long total_allocated_bytes;
static void out_of_memory (void) {
fprintf (stderr, "Out of memory\n");
exit (1);
}
int tsnprintf (char *buf, int len, const char *format, ...) { int tsnprintf (char *buf, int len, const char *format, ...) {
va_list ap; va_list ap;
va_start (ap, format); va_start (ap, format);
...@@ -201,21 +196,8 @@ char *tstrndup (const char *s, size_t n) { ...@@ -201,21 +196,8 @@ char *tstrndup (const char *s, size_t n) {
#endif #endif
} }
void ensure (int r) {
if (!r) {
logprintf ("Open SSL error\n");
ERR_print_errors_fp (stderr);
assert (0);
}
}
void ensure_ptr (void *p) {
if (p == NULL) {
out_of_memory ();
}
}
int tinflate (void *input, int ilen, void *output, int olen) { int tgl_inflate (void *input, int ilen, void *output, int olen) {
z_stream strm; z_stream strm;
memset (&strm, 0, sizeof (strm)); memset (&strm, 0, sizeof (strm));
assert (inflateInit2 (&strm, 16 + MAX_WBITS) == Z_OK); assert (inflateInit2 (&strm, 16 + MAX_WBITS) == Z_OK);
...@@ -282,7 +264,7 @@ void texists (void *ptr, int size) { ...@@ -282,7 +264,7 @@ void texists (void *ptr, int size) {
} }
#endif #endif
void my_clock_gettime (int clock_id, struct timespec *T) { void tgl_my_clock_gettime (int clock_id, struct timespec *T) {
#ifdef __MACH__ #ifdef __MACH__
// We are ignoring MONOTONIC and hope time doesn't go back too often // We are ignoring MONOTONIC and hope time doesn't go back too often
clock_serv_t cclock; clock_serv_t cclock;
...@@ -299,7 +281,7 @@ void my_clock_gettime (int clock_id, struct timespec *T) { ...@@ -299,7 +281,7 @@ void my_clock_gettime (int clock_id, struct timespec *T) {
double tglt_get_double_time (void) { double tglt_get_double_time (void) {
struct timespec tv; struct timespec tv;
my_clock_gettime (CLOCK_REALTIME, &tv); tgl_my_clock_gettime (CLOCK_REALTIME, &tv);
return tv.tv_sec + 1e-9 * tv.tv_nsec; return tv.tv_sec + 1e-9 * tv.tv_nsec;
} }
......
...@@ -19,6 +19,9 @@ ...@@ -19,6 +19,9 @@
#ifndef __TOOLS_H__ #ifndef __TOOLS_H__
#define __TOOLS_H__ #define __TOOLS_H__
#include <time.h>
#include <openssl/err.h>
#include <assert.h>
double tglt_get_double_time (void); double tglt_get_double_time (void);
...@@ -27,9 +30,28 @@ void *trealloc (void *ptr, size_t old_size, size_t size); ...@@ -27,9 +30,28 @@ void *trealloc (void *ptr, size_t old_size, size_t size);
void *talloc0 (size_t size); void *talloc0 (size_t size);
char *tstrdup (const char *s); char *tstrdup (const char *s);
char *tstrndup (const char *s, size_t n); char *tstrndup (const char *s, size_t n);
int tinflate (void *input, int ilen, void *output, int olen); int tgl_inflate (void *input, int ilen, void *output, int olen);
void ensure (int r); //void ensure (int r);
void ensure_ptr (void *p); //void ensure_ptr (void *p);
static inline void out_of_memory (void) {
fprintf (stderr, "Out of memory\n");
exit (1);
}
static inline void ensure (int r) {
if (!r) {
fprintf (stderr, "Open SSL error\n");
ERR_print_errors_fp (stderr);
assert (0);
}
}
static inline void ensure_ptr (void *p) {
if (p == NULL) {
out_of_memory ();
}
}
void tfree (void *ptr, int size); void tfree (void *ptr, int size);
void tfree_str (void *ptr); void tfree_str (void *ptr);
...@@ -40,9 +62,11 @@ int tsnprintf (char *buf, int len, const char *format, ...) __attribute__ ((form ...@@ -40,9 +62,11 @@ int tsnprintf (char *buf, int len, const char *format, ...) __attribute__ ((form
int tasprintf (char **res, const char *format, ...) __attribute__ ((format (printf, 2, 3))); int tasprintf (char **res, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
void tglt_secure_random (void *s, int l); void tglt_secure_random (void *s, int l);
void tgl_my_clock_gettime (int clock_id, struct timespec *T);
#ifdef DEBUG #ifdef DEBUG
void tcheck (void); void tcheck (void);
void texists (void *ptr, int size); void texists (void *ptr, int size);
#endif #endif
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment