Преглед на файлове

pull deltachat-core upstream chages

Jonas Reinsch преди 7 години
родител
ревизия
07c38f4567

+ 1 - 1
deltachat-ios/AppDelegate.swift

@@ -45,7 +45,7 @@ public func callbackSwift(event: CInt, data1: CUnsignedLong, data2: CUnsignedLon
             let chatPointer = mrmailbox_get_chat(mailboxPointer, chatId)
             let msgPointer = mrmsg_new()!
 
-            sendMessageSwiftOnly(chatPointer: chatPointer!, msgPointer: msgPointer, msg: "uziuzi")
+            sendMessageSwiftOnly(chatPointer: chatPointer!, msgPointer: msgPointer, msg: "test with new dc core")
         }
         
         break

+ 3 - 2
deltachat-ios/libraries/deltachat-core/libs/netpgp/src/create.c

@@ -1321,6 +1321,7 @@ pgp_write_symm_enc_data(const uint8_t *data,
 				       const uint8_t* key, // EDIT BY MR - the key was simply missing
 				       pgp_output_t * output)
 {
+	// TODO: use PGP_PTAG_CT_SE_IP_DATA instead of PGP_PTAG_CT_SE_DATA
 	pgp_crypt_t	crypt_info;
 	uint8_t		*encrypted = (uint8_t *) NULL;
 	size_t		encrypted_sz;
@@ -1347,8 +1348,8 @@ pgp_write_symm_enc_data(const uint8_t *data,
 	}
 
 	return pgp_write_ptag(output, PGP_PTAG_CT_SE_DATA) &&
-		pgp_write_length(output, (unsigned)(len)) && // EDIT BY MR: length was: 1 + encrypted_sz - why?
-		pgp_write(output, data, (unsigned)len);
+		pgp_write_length(output, (unsigned)(encrypted_sz)) &&
+		pgp_write(output, encrypted, (unsigned)encrypted_sz); // EDIT BY MR: originally the input data was written to output
 }
 
 /**

+ 7 - 2
deltachat-ios/libraries/deltachat-core/src/mrcmdline.c

@@ -60,10 +60,15 @@ static void log_msglist(mrmailbox_t* mailbox, carray* msglist)
 			}
 
 			char* temp2 = mr_timestamp_to_str(msg->m_timestamp);
-				mrmailbox_log_info(mailbox, 0, "Msg#%i: %s (Contact#%i): %s %s%s%s%s [%s]", (int)msg->m_id, contact_name, contact_id, msg->m_text,
+				mrmailbox_log_info(mailbox, 0, "Msg#%i: %s (Contact#%i): %s %s%s%s%s%s [%s]",
+					(int)msg->m_id,
+					contact_name,
+					contact_id,
+					msg->m_text,
 					mrmsg_show_padlock(msg)? "\xF0\x9F\x94\x92" : "",
 					msg->m_starred? " \xE2\x98\x85" : "",
 					msg->m_from_id==1? "" : (msg->m_state==MR_IN_SEEN? "[SEEN]" : (msg->m_state==MR_IN_NOTICED? "[NOTICED]":"[FRESH]")),
+					mrparam_get_int(msg->m_param, MRP_SYSTEM_CMD, 0)? "[SYSTEM]" : "",
 					statestr,
 					temp2);
 			free(temp2);
@@ -572,7 +577,7 @@ char* mrmailbox_cmdline(mrmailbox_t* mailbox, const char* cmdline)
 			if( arg1 && arg1[0] ) {
 				mrmsg_t* msg = mrmsg_new();
 					msg->m_type = MR_MSG_TEXT;
-					msg->m_text = strdup(arg1);
+					mrmsg_set_text(msg, arg1);
 					if( mrchat_send_msg(sel_chat, msg) ) {
 						ret = safe_strdup("Message sent.");
 					}

+ 1 - 2
deltachat-ios/libraries/deltachat-core/src/mrmailbox.c

@@ -88,8 +88,7 @@ static uint32_t lookup_group_by_grpid__(mrmailbox_t* mailbox, mrmimeparser_t* mi
 						grpid1 = safe_strdup(optional_field->fld_value);
 					}
 					else if( strcasecmp(optional_field->fld_name, "X-MrGrpName")==0 || strcasecmp(optional_field->fld_name, "Chat-Group-Name")==0 ) {
-						grpname = mr_decode_header_string(optional_field->fld_value);
-						mime_parser->m_is_system_message = MR_SYSTEM_GROUPNAME_CHANGED;
+						grpname = mr_decode_header_string(optional_field->fld_value); /* this is no changed groupname message */
 					}
 					else if( strcasecmp(optional_field->fld_name, "X-MrRemoveFromGrp")==0 || strcasecmp(optional_field->fld_name, "Chat-Group-Member-Removed")==0 ) {
 						X_MrRemoveFromGrp = optional_field->fld_value;

+ 1 - 1
deltachat-ios/libraries/deltachat-core/src/mrmailbox.h

@@ -33,7 +33,7 @@
  * they're strings. Eg. mrmsg_get_state() does _always_ return the state of the
  * time the objects is created.
  * If you want an _updated state_, you have to recreate the object reflecting
- * the message - or use methods that explcitly force reloading.
+ * the message - or use methods that explicitly force reloading.
  *
  ******************************************************************************/
 

+ 32 - 23
deltachat-ios/libraries/deltachat-core/src/mrmailbox_imex.c

@@ -426,8 +426,8 @@ int mrmailbox_render_keys_to_html(mrmailbox_t* mailbox, const char* passphrase,
 	#define                AES_KEY_LENGTH 16
 	uint8_t                key[AES_KEY_LENGTH];
 
-	pgp_output_t*          decr_output = NULL;
-	pgp_memory_t*          decr_mem = NULL;
+	pgp_output_t*          payload_output = NULL;
+	pgp_memory_t*          payload_mem = NULL;
 
 	pgp_output_t*          encr_output = NULL;
 	pgp_memory_t*          encr_mem = NULL;
@@ -444,29 +444,33 @@ int mrmailbox_render_keys_to_html(mrmailbox_t* mailbox, const char* passphrase,
 
 	/* create the payload */
 
-	mrsqlite3_lock(mailbox->m_sql);
-	locked = 1;
+	{
+		mrsqlite3_lock(mailbox->m_sql);
+		locked = 1;
 
-		self_addr = mrsqlite3_get_config__(mailbox->m_sql, "configured_addr", NULL);
-		mrkey_load_self_private__(curr_private_key, self_addr, mailbox->m_sql);
+			self_addr = mrsqlite3_get_config__(mailbox->m_sql, "configured_addr", NULL);
+			mrkey_load_self_private__(curr_private_key, self_addr, mailbox->m_sql);
 
-		char* key_asc = mrkey_render_asc(curr_private_key, mailbox->m_e2ee_enabled? "Autocrypt-Prefer-Encrypt: mutual\r\n" : NULL);
-		if( key_asc == NULL ) {
-			goto cleanup;
-		}
+			char* payload_key_asc = mrkey_render_asc(curr_private_key, mailbox->m_e2ee_enabled? "Autocrypt-Prefer-Encrypt: mutual\r\n" : NULL);
+			if( payload_key_asc == NULL ) {
+				goto cleanup;
+			}
 
-	mrsqlite3_unlock(mailbox->m_sql);
-	locked = 0;
+		mrsqlite3_unlock(mailbox->m_sql);
+		locked = 0;
 
-	//printf("\n~~~~~~~~~~~~~~~~~~~~SETUP-PAYLOAD~~~~~~~~~~~~~~~~~~~~\n%s~~~~~~~~~~~~~~~~~~~~/SETUP-PAYLOAD~~~~~~~~~~~~~~~~~~~~\n",key_asc); // DEBUG OUTPUT
+		//printf("\n~~~~~~~~~~~~~~~~~~~~SETUP-PAYLOAD~~~~~~~~~~~~~~~~~~~~\n%s~~~~~~~~~~~~~~~~~~~~/SETUP-PAYLOAD~~~~~~~~~~~~~~~~~~~~\n",key_asc); // DEBUG OUTPUT
 
 
-	/* put the payload into a literal data packet which will be encrypted then, see RFC 4880, 5.7 :
-	"When it has been decrypted, it contains other packets (usually a literal data packet or compressed data
-	packet, but in theory other Symmetrically Encrypted Data packets or sequences of packets that form whole OpenPGP messages)" */
+		/* put the payload into a literal data packet which will be encrypted then, see RFC 4880, 5.7 :
+		"When it has been decrypted, it contains other packets (usually a literal data packet or compressed data
+		packet, but in theory other Symmetrically Encrypted Data packets or sequences of packets that form whole OpenPGP messages)" */
 
-	pgp_setup_memory_write(&decr_output, &decr_mem, 128);
-	pgp_write_litdata(decr_output, (const uint8_t*)key_asc, strlen(key_asc), PGP_LDT_BINARY);
+		pgp_setup_memory_write(&payload_output, &payload_mem, 128);
+		pgp_write_litdata(payload_output, (const uint8_t*)payload_key_asc, strlen(payload_key_asc), PGP_LDT_BINARY);
+
+		free(payload_key_asc);
+	}
 
 
 	/* create salt for the key */
@@ -565,10 +569,15 @@ int mrmailbox_render_keys_to_html(mrmailbox_t* mailbox, const char* passphrase,
 	  pgp_write_scalar (encr_output, s2k_iter_id, 1);  // 1 octets
 	}
 
-	/* Tag 9 */
-	pgp_write_symm_enc_data((const uint8_t*)decr_mem->buf, decr_mem->length, PGP_SA_AES_128, key, encr_output);
+	for(int j=0; j<AES_KEY_LENGTH; j++) {
+		printf("%02x", key[j]);
+	}
+		printf("\n----------------\n");
+
+	/* Tag 18 */
+	pgp_write_symm_enc_data((const uint8_t*)payload_mem->buf, payload_mem->length, PGP_SA_AES_128, key, encr_output);
 
-	/* done with symetric key block */
+	/* done with symmetric key block */
 	pgp_writer_close(encr_output);
 	encr_string = mr_null_terminate((const char*)encr_mem->buf, encr_mem->length);
 
@@ -613,8 +622,8 @@ cleanup:
 	if( stmt ) { sqlite3_finalize(stmt); }
 	if( locked ) { mrsqlite3_unlock(mailbox->m_sql); }
 
-	if( decr_output ) { pgp_output_delete(decr_output); }
-	if( decr_mem ) { pgp_memory_free(decr_mem); }
+	if( payload_output ) { pgp_output_delete(payload_output); }
+	if( payload_mem ) { pgp_memory_free(payload_mem); }
 
 	if( encr_output ) { pgp_output_delete(encr_output); }
 	if( encr_mem ) { pgp_memory_free(encr_mem); }

+ 11 - 0
deltachat-ios/libraries/deltachat-core/src/mrmsg.c

@@ -326,6 +326,17 @@ cleanup:
 }
 
 
+void mrmsg_set_text(mrmsg_t* msg, const char* text)
+{
+	if( msg==NULL || text==NULL ) {
+		return;
+	}
+
+	free(msg->m_text);
+	msg->m_text = safe_strdup(text);
+}
+
+
 char* mrmailbox_get_msg_info(mrmailbox_t* mailbox, uint32_t msg_id)
 {
 	mrstrbuilder_t ret;

+ 1 - 0
deltachat-ios/libraries/deltachat-core/src/mrmsg.h

@@ -104,6 +104,7 @@ char*         mrmsg_get_filename           (mrmsg_t*); /* returns base file name
 mrpoortext_t* mrmsg_get_mediainfo          (mrmsg_t*); /* returns real author (as text1, this is not always the sender, NULL if unknown) and title (text2, NULL if unknown) */
 int           mrmsg_is_increation          (mrmsg_t*);
 void          mrmsg_save_param_to_disk     (mrmsg_t*); /* can be used to add some additional, persistent information to a messages record */
+void          mrmsg_set_text               (mrmsg_t*, const char* text);
 
 
 /*** library-private **********************************************************/

+ 8 - 5
deltachat-ios/libraries/deltachat-core/src/mrpgp.c

@@ -58,11 +58,14 @@ static pgp_io_t s_io;
 
 void mrpgp_init(mrmailbox_t* mailbox)
 {
-    OPENSSL_init();
-	/*SSL_library_init(); */ /* older, but more compatible function, simply defined as OPENSSL_init_ssl().
-						SSL_library_init() should be called from the main thread before OpenSSL is called from other threads.
-	                    libEtPan may call SSL_library_init() again later, however, this should be no problem.
-	                    SSL_library_init() always returns "1", so it is safe to discard the return value */
+	#ifdef __APPLE__
+		OPENSSL_init();
+	#else
+		SSL_library_init(); /* older, but more compatible function, simply defined as OPENSSL_init_ssl().
+							SSL_library_init() should be called from the main thread before OpenSSL is called from other threads.
+							libEtPan may call SSL_library_init() again later, however, this should be no problem.
+							SSL_library_init() always returns "1", so it is safe to discard the return value */
+	#endif
 
 	/* setup i/o structure */
 	memset(&s_io, 0, sizeof(pgp_io_t));

+ 0 - 11
deltachat-ios/libraries/deltachat-core/src/stress.c

@@ -286,16 +286,6 @@ void stress_functions(mrmailbox_t* mailbox)
 	/* test end-to-end-encryption
 	 **************************************************************************/
 
-	#if 1
-	{
-		mrkey_t* public_key  = mrkey_new();
-		mrkey_set_from_file(public_key, "/home/bpetersen/messy/eml/pgp/k-9.pem", mailbox);
-		mrpgp_is_valid_key(mailbox, public_key);
-		mrkey_unref(public_key);
-	}
-	#endif
-
-	#if 0
 	{
 		mrkey_t *public_key = mrkey_new(), *private_key = mrkey_new();
 		mrpgp_create_keypair(mailbox, "foo@bar.de", public_key, private_key);
@@ -390,5 +380,4 @@ void stress_functions(mrmailbox_t* mailbox)
 		mrkey_unref(public_key);
 		mrkey_unref(private_key);
 	}
-	#endif
 }