From 6c9996dfa17228cf23222c4994805aff898e29d1 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Thu, 15 Nov 2018 15:08:39 -0800 Subject: [PATCH] Encrypted server response --- MessagesBridge.xcodeproj/project.pbxproj | 6 ++++ .../Crypto/GCDWebServerDataResponse+Crypto.h | 20 +++++++++++ .../Crypto/GCDWebServerDataResponse+Crypto.m | 36 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 kordophone/Crypto/GCDWebServerDataResponse+Crypto.h create mode 100644 kordophone/Crypto/GCDWebServerDataResponse+Crypto.m diff --git a/MessagesBridge.xcodeproj/project.pbxproj b/MessagesBridge.xcodeproj/project.pbxproj index 4147485..a86c464 100644 --- a/MessagesBridge.xcodeproj/project.pbxproj +++ b/MessagesBridge.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ CD14F185219E2A6800E7DD22 /* NSData+AES.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F184219E2A6800E7DD22 /* NSData+AES.m */; }; CD14F18E219E2DB400E7DD22 /* CryptoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F18D219E2DB400E7DD22 /* CryptoTests.m */; }; CD14F194219E2F9C00E7DD22 /* NSData+AES.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F184219E2A6800E7DD22 /* NSData+AES.m */; }; + CD14F19E219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m in Sources */ = {isa = PBXBuildFile; fileRef = CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */; }; CD602056219B5DFD0024D9C5 /* MBIMBridgeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD602055219B5DFD0024D9C5 /* MBIMBridgeOperation.m */; }; CD60205C219B623F0024D9C5 /* MBIMMessagesListOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD60205B219B623F0024D9C5 /* MBIMMessagesListOperation.m */; }; CD60205F219B674B0024D9C5 /* MBIMConversationListOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD60205E219B674B0024D9C5 /* MBIMConversationListOperation.m */; }; @@ -122,6 +123,8 @@ CD14F18B219E2DB400E7DD22 /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; CD14F18D219E2DB400E7DD22 /* CryptoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CryptoTests.m; sourceTree = ""; }; CD14F18F219E2DB400E7DD22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD14F19C219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GCDWebServerDataResponse+Crypto.h"; sourceTree = ""; }; + CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "GCDWebServerDataResponse+Crypto.m"; sourceTree = ""; }; CD602054219B5DFD0024D9C5 /* MBIMBridgeOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMBridgeOperation.h; sourceTree = ""; }; CD602055219B5DFD0024D9C5 /* MBIMBridgeOperation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBIMBridgeOperation.m; sourceTree = ""; }; CD60205A219B623F0024D9C5 /* MBIMMessagesListOperation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBIMMessagesListOperation.h; sourceTree = ""; }; @@ -244,6 +247,8 @@ children = ( CD14F183219E2A6800E7DD22 /* NSData+AES.h */, CD14F184219E2A6800E7DD22 /* NSData+AES.m */, + CD14F19C219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.h */, + CD14F19D219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m */, ); path = Crypto; sourceTree = ""; @@ -517,6 +522,7 @@ CDF62335219A895D00690038 /* main.m in Sources */, CD60205C219B623F0024D9C5 /* MBIMMessagesListOperation.m in Sources */, CD14F185219E2A6800E7DD22 /* NSData+AES.m in Sources */, + CD14F19E219E306C00E7DD22 /* GCDWebServerDataResponse+Crypto.m in Sources */, CD602062219B68950024D9C5 /* MBIMSendMessageOperation.m in Sources */, CD602056219B5DFD0024D9C5 /* MBIMBridgeOperation.m in Sources */, CD60205F219B674B0024D9C5 /* MBIMConversationListOperation.m in Sources */, diff --git a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h new file mode 100644 index 0000000..6b9ab04 --- /dev/null +++ b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.h @@ -0,0 +1,20 @@ +// +// GCDWebServerDataResponse+Crypto.h +// kordophoned +// +// Created by James Magahern on 11/15/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GCDWebServerDataResponse (Crypto) + ++ (nullable instancetype)encryptedResponseWithJSONObject:(id)object; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m new file mode 100644 index 0000000..99a76dd --- /dev/null +++ b/kordophone/Crypto/GCDWebServerDataResponse+Crypto.m @@ -0,0 +1,36 @@ +// +// GCDWebServerDataResponse+Crypto.m +// kordophoned +// +// Created by James Magahern on 11/15/18. +// Copyright © 2018 James Magahern. All rights reserved. +// + +#import "GCDWebServerDataResponse+Crypto.h" + +#import "NSData+AES.h" + +// TEMP!! +static NSString *const kSymmetricKey = @"axPy0nljtG/TOVJSVwVXag=="; + +@implementation GCDWebServerDataResponse (Crypto) + ++ (nullable instancetype)encryptedResponseWithJSONObject:(id)object +{ + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:NULL]; + if (data == nil) { + return nil; + } + + NSError *error = nil; + NSData *ivData = [[[NSUUID UUID] UUIDString] dataUsingEncoding:NSUTF8StringEncoding]; + NSData *keyData = [[NSData alloc] initWithBase64EncodedString:kSymmetricKey options:0]; + NSData *encryptedData = [data encryptedDataWithKey:keyData iv:ivData error:&error]; + if (error) { + NSLog(@"Error encrypting response: %@", error); + } + + return [[self alloc] initWithData:encryptedData contentType:@"application/octet-stream"]; +} + +@end