IOSAD-92 act on PEP_decrypt_flag_untrusted_server

IOSAD-92
Dirk Zimmermann 5 years ago
parent 4b2bab1725
commit ee2660d48e

@ -10,6 +10,8 @@
#import "message.h"
void replaceDictionaryContentsWithMessage(NSMutableDictionary *dict, message *message);
@interface NSMutableDictionary (PEP)
/**

@ -10,89 +10,94 @@
#import "PEPMessageUtil.h"
@implementation NSMutableDictionary (PEP)
- (void)replaceWithMessage:(message *)message
void replaceDictionaryContentsWithMessage(NSMutableDictionary *dict, message *message)
{
[self removeAllObjects];
[self setObject:(message->dir == PEP_dir_outgoing) ? @YES : @NO forKey:kPepOutgoing];
[dict removeAllObjects];
[dict setValue:(message->dir == PEP_dir_outgoing) ? @YES : @NO forKey:kPepOutgoing];
if (message->id) {
[self setObject:[NSString stringWithUTF8String:message->id] forKey:kPepID];
[dict setValue:[NSString stringWithUTF8String:message->id] forKey:kPepID];
}
if (message->shortmsg) {
[self setObject:[NSString stringWithUTF8String:message->shortmsg] forKey:kPepShortMessage];
[dict setValue:[NSString stringWithUTF8String:message->shortmsg] forKey:kPepShortMessage];
}
if (message->sent) {
[self setObject:[NSDate dateWithTimeIntervalSince1970:timegm(message->sent)]
forKey:kPepSent];
[dict setValue:[NSDate dateWithTimeIntervalSince1970:timegm(message->sent)]
forKey:kPepSent];
}
if (message->recv) {
[self setObject:[NSDate dateWithTimeIntervalSince1970:mktime(message->recv)]
forKey:kPepReceived];
[dict setValue:[NSDate dateWithTimeIntervalSince1970:mktime(message->recv)]
forKey:kPepReceived];
}
if (message->from) {
[self setObject:PEP_identityFromStruct(message->from) forKey:kPepFrom];
[dict setValue:PEP_identityFromStruct(message->from) forKey:kPepFrom];
}
if (message->to && message->to->ident) {
[self setObject:PEP_identityArrayFromList(message->to) forKey:kPepTo];
[dict setValue:PEP_identityArrayFromList(message->to) forKey:kPepTo];
}
if (message->recv_by) {
[self setObject:PEP_identityFromStruct(message->recv_by) forKey:kPepReceivedBy];
[dict setValue:PEP_identityFromStruct(message->recv_by) forKey:kPepReceivedBy];
}
if (message->cc && message->cc->ident) {
[self setObject:PEP_identityArrayFromList(message->cc) forKey:kPepCC];
[dict setValue:PEP_identityArrayFromList(message->cc) forKey:kPepCC];
}
if (message->bcc && message->bcc->ident) {
[self setObject:PEP_identityArrayFromList(message->bcc) forKey:kPepBCC];
[dict setValue:PEP_identityArrayFromList(message->bcc) forKey:kPepBCC];
}
if (message->reply_to && message->reply_to->ident) {
[self setObject:PEP_identityArrayFromList(message->reply_to) forKey:kPepReplyTo];
[dict setValue:PEP_identityArrayFromList(message->reply_to) forKey:kPepReplyTo];
}
if (message->in_reply_to) {
[self setObject:PEP_arrayFromStringlist(message->in_reply_to) forKey:kPepInReplyTo];
[dict setValue:PEP_arrayFromStringlist(message->in_reply_to) forKey:kPepInReplyTo];
}
if (message->references && message->references->value) {
[self setObject:PEP_arrayFromStringlist(message->references) forKey:kPepReferences];
[dict setValue:PEP_arrayFromStringlist(message->references) forKey:kPepReferences];
}
if (message->keywords && message->keywords->value) {
[self setObject:PEP_arrayFromStringlist(message->keywords) forKey:kPepKeywords];
[dict setValue:PEP_arrayFromStringlist(message->keywords) forKey:kPepKeywords];
}
if (message->opt_fields) {
[self setObject:PEP_arrayFromStringPairlist(message->opt_fields) forKey:kPepOptFields];
[dict setValue:PEP_arrayFromStringPairlist(message->opt_fields) forKey:kPepOptFields];
}
if (message->longmsg_formatted) {
[self setObject:[NSString stringWithUTF8String:message->longmsg_formatted]
forKey:kPepLongMessageFormatted];
[dict setValue:[NSString stringWithUTF8String:message->longmsg_formatted]
forKey:kPepLongMessageFormatted];
}
if (message->longmsg) {
[self setObject:[NSString stringWithUTF8String:message->longmsg] forKey:kPepLongMessage];
[dict setValue:[NSString stringWithUTF8String:message->longmsg] forKey:kPepLongMessage];
}
if (message->attachments && message->attachments->value) {
[self setObject: PEP_arrayFromBloblist(message->attachments) forKey:kPepAttachments];
[dict setValue: PEP_arrayFromBloblist(message->attachments) forKey:kPepAttachments];
}
if (message->rawmsg_size > 0 && *message->rawmsg_ref) {
NSData *data = [NSData dataWithBytes:message->rawmsg_ref length:message->rawmsg_size];
self[kPepRawMessage] = data;
dict[kPepRawMessage] = data;
}
}
@implementation NSMutableDictionary (PEP)
- (void)replaceWithMessage:(message *)message
{
replaceDictionaryContentsWithMessage(self, message);
}
@end

@ -19,6 +19,7 @@
#import "NSError+PEP.h"
#import "PEPAutoPointer.h"
#import "NSNumber+PEPRating.h"
#import "NSMutableDictionary+PEP.h"
@implementation PEPInternalSession
@ -158,8 +159,13 @@ void decryptMessageDictFree(message *src, message *dst, stringlist_t *extraKeys)
}
NSArray *keys_ = nil;
if (_keys)
if (_keys) {
keys_ = PEP_arrayFromStringlist(_keys);
}
if (theFlags & PEP_decrypt_flag_untrusted_server) {
[messageDict replaceWithMessage:_src];
}
decryptMessageDictFree(_src, _dst, _keys);

@ -10,6 +10,7 @@
#import "PEPIdentity.h"
#import "NSObject+Extension.h"
#import "NSMutableDictionary+PEP.h"
@implementation PEPMessage
@ -139,6 +140,33 @@
return (PEPMutableDict *) self;
}
- (void)removeAllObjects
{
self.messageID = nil;
self.from = nil;
self.to = nil;
self.cc = nil;
self.bcc = nil;
self.shortMessage = nil;
self.longMessage = nil;
self.longMessageFormatted = nil;
self.replyTo = nil;
self.inReplyTo = nil;
self.references = nil;
self.sentDate = nil;
self.receivedDate = nil;
self.attachments = nil;
self.optionalFields = nil;
self.keywords = nil;
self.receivedBy = nil;
self.direction = PEP_dir_incoming; // basically, 0
}
- (void)replaceWithMessage:(message *)message
{
replaceDictionaryContentsWithMessage(self.mutableDictionary, message);
}
// MARK: - NSDictionary - Helpers
- (NSArray<NSArray<NSString *> *> *)keyValuePairs

@ -911,7 +911,7 @@
XCTAssertEqual(rating, PEP_rating_unreliable);
// Since we're requesting re-encryption, src should have been changed
XCTAssertEqualObjects(msg, msgOriginal); // TODO
XCTAssertNotEqualObjects(msg, msgOriginal);
XCTAssertNotNil(pepDecryptedMail.longMessage);
}

Loading…
Cancel
Save