aboutsummaryrefslogtreecommitdiff
path: root/xcode/OLMKit
diff options
context:
space:
mode:
Diffstat (limited to 'xcode/OLMKit')
-rw-r--r--xcode/OLMKit/Info.plist26
-rw-r--r--xcode/OLMKit/OLMAccount.h51
-rw-r--r--xcode/OLMKit/OLMAccount.m268
-rw-r--r--xcode/OLMKit/OLMAccount_Private.h25
-rw-r--r--xcode/OLMKit/OLMInboundGroupSession.h38
-rw-r--r--xcode/OLMKit/OLMInboundGroupSession.m301
-rw-r--r--xcode/OLMKit/OLMKit.h39
-rw-r--r--xcode/OLMKit/OLMKit.m33
-rw-r--r--xcode/OLMKit/OLMMessage.h38
-rw-r--r--xcode/OLMKit/OLMMessage.m34
-rw-r--r--xcode/OLMKit/OLMOutboundGroupSession.h32
-rw-r--r--xcode/OLMKit/OLMOutboundGroupSession.m222
-rw-r--r--xcode/OLMKit/OLMPkDecryption.h71
-rw-r--r--xcode/OLMKit/OLMPkDecryption.m299
-rw-r--r--xcode/OLMKit/OLMPkEncryption.h42
-rw-r--r--xcode/OLMKit/OLMPkEncryption.m111
-rw-r--r--xcode/OLMKit/OLMPkMessage.h31
-rw-r--r--xcode/OLMKit/OLMPkMessage.m32
-rw-r--r--xcode/OLMKit/OLMPkSigning.h49
-rw-r--r--xcode/OLMKit/OLMPkSigning.m125
-rw-r--r--xcode/OLMKit/OLMSAS.h70
-rw-r--r--xcode/OLMKit/OLMSAS.m174
-rw-r--r--xcode/OLMKit/OLMSerializable.h29
-rw-r--r--xcode/OLMKit/OLMSession.h44
-rw-r--r--xcode/OLMKit/OLMSession.m383
-rw-r--r--xcode/OLMKit/OLMSession_Private.h26
-rw-r--r--xcode/OLMKit/OLMUtility.h49
-rw-r--r--xcode/OLMKit/OLMUtility.m121
28 files changed, 0 insertions, 2763 deletions
diff --git a/xcode/OLMKit/Info.plist b/xcode/OLMKit/Info.plist
deleted file mode 100644
index d3de8ee..0000000
--- a/xcode/OLMKit/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleExecutable</key>
- <string>$(EXECUTABLE_NAME)</string>
- <key>CFBundleIdentifier</key>
- <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>$(PRODUCT_NAME)</string>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>$(CURRENT_PROJECT_VERSION)</string>
- <key>NSPrincipalClass</key>
- <string></string>
-</dict>
-</plist>
diff --git a/xcode/OLMKit/OLMAccount.h b/xcode/OLMKit/OLMAccount.h
deleted file mode 100644
index c8d65cd..0000000
--- a/xcode/OLMKit/OLMAccount.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "OLMSerializable.h"
-
-@class OLMSession;
-
-@interface OLMAccount : NSObject <OLMSerializable, NSSecureCoding>
-
-/** Creates new account */
-- (instancetype) initNewAccount;
-
-/** public identity keys. base64 encoded in "curve25519" and "ed25519" keys */
-- (NSDictionary*) identityKeys;
-
-/** signs message with ed25519 key for account */
-- (NSString*) signMessage:(NSData*)messageData;
-
-/** Public parts of the unpublished one time keys for the account */
-- (NSDictionary*) oneTimeKeys;
-
-- (BOOL) removeOneTimeKeysForSession:(OLMSession*)session;
-
-/** Marks the current set of one time keys as being published. */
-- (void) markOneTimeKeysAsPublished;
-
-/** The largest number of one time keys this account can store. */
-- (NSUInteger) maxOneTimeKeys;
-
-/** Generates a number of new one time keys. If the total number of keys stored
- * by this account exceeds -maxOneTimeKeys then the old keys are
- * discarded. */
-- (void) generateOneTimeKeys:(NSUInteger)numberOfKeys;
-
-@end
diff --git a/xcode/OLMKit/OLMAccount.m b/xcode/OLMKit/OLMAccount.m
deleted file mode 100644
index 9e48c2d..0000000
--- a/xcode/OLMKit/OLMAccount.m
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMAccount.h"
-#import "OLMAccount_Private.h"
-#import "OLMSession.h"
-#import "OLMSession_Private.h"
-#import "OLMUtility.h"
-
-@import Security;
-
-@implementation OLMAccount
-
-- (void) dealloc {
- olm_clear_account(_account);
- free(_account);
-}
-
-- (BOOL) initializeAccountMemory {
- size_t accountSize = olm_account_size();
- _account = malloc(accountSize);
- NSParameterAssert(_account != nil);
- if (!_account) {
- return NO;
- }
- _account = olm_account(_account);
- NSParameterAssert(_account != nil);
- if (!_account) {
- return NO;
- }
- return YES;
-}
-
-- (instancetype) init {
- self = [super init];
- if (!self) {
- return nil;
- }
- BOOL success = [self initializeAccountMemory];
- if (!success) {
- return nil;
- }
- return self;
-}
-
-- (instancetype) initNewAccount {
- self = [self init];
- if (!self) {
- return nil;
- }
- size_t randomLength = olm_create_account_random_length(_account);
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- size_t accountResult = olm_create_account(_account, random.mutableBytes, random.length);
- [random resetBytesInRange:NSMakeRange(0, random.length)];
- if (accountResult == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"error creating account: %s", error);
- return nil;
- }
- return self;
-}
-
-- (NSUInteger) maxOneTimeKeys {
- return olm_account_max_number_of_one_time_keys(_account);
-}
-
-
-/** public identity keys */
-- (NSDictionary*) identityKeys {
- size_t identityKeysLength = olm_account_identity_keys_length(_account);
- uint8_t *identityKeysBytes = malloc(identityKeysLength);
- if (!identityKeysBytes) {
- return nil;
- }
- size_t result = olm_account_identity_keys(_account, identityKeysBytes, identityKeysLength);
- if (result == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"error getting id keys: %s", error);
- free(identityKeysBytes);
- return nil;
- }
- NSData *idKeyData = [NSData dataWithBytesNoCopy:identityKeysBytes length:identityKeysLength freeWhenDone:YES];
- NSError *error = nil;
- NSDictionary *keysDictionary = [NSJSONSerialization JSONObjectWithData:idKeyData options:0 error:&error];
- if (error) {
- NSLog(@"Could not decode JSON: %@", error.localizedDescription);
- }
- return keysDictionary;
-}
-
-- (NSString *)signMessage:(NSData *)messageData {
- size_t signatureLength = olm_account_signature_length(_account);
- uint8_t *signatureBytes = malloc(signatureLength);
- if (!signatureBytes) {
- return nil;
- }
-
- size_t result = olm_account_sign(_account, messageData.bytes, messageData.length, signatureBytes, signatureLength);
- if (result == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"error signing message: %s", error);
- free(signatureBytes);
- return nil;
- }
-
- NSData *signatureData = [NSData dataWithBytesNoCopy:signatureBytes length:signatureLength freeWhenDone:YES];
- return [[NSString alloc] initWithData:signatureData encoding:NSUTF8StringEncoding];
-}
-
-- (NSDictionary*) oneTimeKeys {
- size_t otkLength = olm_account_one_time_keys_length(_account);
- uint8_t *otkBytes = malloc(otkLength);
- if (!otkBytes) {
- return nil;
- }
- size_t result = olm_account_one_time_keys(_account, otkBytes, otkLength);
- if (result == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"error getting id keys: %s", error);
- free(otkBytes);
- return nil;
- }
- NSData *otk = [NSData dataWithBytesNoCopy:otkBytes length:otkLength freeWhenDone:YES];
- NSError *error = nil;
- NSDictionary *keysDictionary = [NSJSONSerialization JSONObjectWithData:otk options:0 error:&error];
- if (error) {
- NSLog(@"Could not decode JSON: %@", error.localizedDescription);
- }
- return keysDictionary;
-}
-
-
-- (void) generateOneTimeKeys:(NSUInteger)numberOfKeys {
- size_t randomLength = olm_account_generate_one_time_keys_random_length(_account, numberOfKeys);
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- size_t result = olm_account_generate_one_time_keys(_account, numberOfKeys, random.mutableBytes, random.length);
- [random resetBytesInRange:NSMakeRange(0, random.length)];
- if (result == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"error generating keys: %s", error);
- }
-}
-
-- (BOOL) removeOneTimeKeysForSession:(OLMSession *)session {
- NSParameterAssert(session != nil);
- if (!session) {
- return NO;
- }
- size_t result = olm_remove_one_time_keys(self.account, session.session);
- if (result == olm_error()) {
- const char *error = olm_account_last_error(_account);
- NSLog(@"olm_remove_one_time_keys error: %s", error);
- return NO;
- }
- return YES;
-}
-
-- (void)markOneTimeKeysAsPublished
-{
- olm_account_mark_keys_as_published(self.account);
-}
-
-#pragma mark OLMSerializable
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString*)serializedData key:(NSData*)key error:(NSError**)error {
- self = [self init];
- if (!self) {
- return nil;
- }
- NSParameterAssert(key.length > 0);
- NSParameterAssert(serializedData.length > 0);
- if (key.length == 0 || serializedData.length == 0) {
- if (error) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Bad length."}];
- }
- return nil;
- }
- NSMutableData *pickle = [serializedData dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- size_t result = olm_unpickle_account(_account, key.bytes, key.length, pickle.mutableBytes, pickle.length);
- [pickle resetBytesInRange:NSMakeRange(0, pickle.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_account_last_error(_account);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- return self;
-}
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error {
- NSParameterAssert(key.length > 0);
- size_t length = olm_pickle_account_length(_account);
- NSMutableData *pickled = [NSMutableData dataWithLength:length];
- size_t result = olm_pickle_account(_account, key.bytes, key.length, pickled.mutableBytes, pickled.length);
- if (result == olm_error()) {
- const char *olm_error = olm_account_last_error(_account);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- NSString *pickleString = [[NSString alloc] initWithData:pickled encoding:NSUTF8StringEncoding];
- [pickled resetBytesInRange:NSMakeRange(0, pickled.length)];
- return pickleString;
-}
-
-#pragma mark NSSecureCoding
-
-+ (BOOL) supportsSecureCoding {
- return YES;
-}
-
-#pragma mark NSCoding
-
-- (id)initWithCoder:(NSCoder *)decoder {
- NSString *version = [decoder decodeObjectOfClass:[NSString class] forKey:@"version"];
-
- NSError *error = nil;
-
- if ([version isEqualToString:@"1"]) {
- NSString *pickle = [decoder decodeObjectOfClass:[NSString class] forKey:@"pickle"];
- NSData *key = [decoder decodeObjectOfClass:[NSData class] forKey:@"key"];
-
- self = [self initWithSerializedData:pickle key:key error:&error];
- }
-
- NSParameterAssert(error == nil);
- NSParameterAssert(self != nil);
- if (!self) {
- return nil;
- }
-
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)encoder {
- NSData *key = [OLMUtility randomBytesOfLength:32];
- NSError *error = nil;
- NSString *pickle = [self serializeDataWithKey:key error:&error];
- NSParameterAssert(pickle.length > 0 && error == nil);
-
- [encoder encodeObject:pickle forKey:@"pickle"];
- [encoder encodeObject:key forKey:@"key"];
- [encoder encodeObject:@"1" forKey:@"version"];
-}
-
-
-@end
diff --git a/xcode/OLMKit/OLMAccount_Private.h b/xcode/OLMKit/OLMAccount_Private.h
deleted file mode 100644
index 313ab71..0000000
--- a/xcode/OLMKit/OLMAccount_Private.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#include "olm/olm.h"
-
-@interface OLMAccount()
-
-@property (nonatomic) OlmAccount *account;
-
-@end
diff --git a/xcode/OLMKit/OLMInboundGroupSession.h b/xcode/OLMKit/OLMInboundGroupSession.h
deleted file mode 100644
index c0d2c59..0000000
--- a/xcode/OLMKit/OLMInboundGroupSession.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "OLMSerializable.h"
-
-@interface OLMInboundGroupSession : NSObject <OLMSerializable, NSSecureCoding>
-
-- (instancetype)initInboundGroupSessionWithSessionKey:(NSString*)sessionKey error:(NSError**)error;
-
-- (instancetype)initInboundGroupSessionWithImportedSession:(NSString*)sessionKey error:(NSError**)error;
-
-- (NSString*)sessionIdentifier;
-
-/** base64 ciphertext -> UTF-8 plaintext */
-- (NSString*)decryptMessage:(NSString*)message messageIndex:(NSUInteger*)messageIndex error:(NSError**)error;
-
-- (NSUInteger)firstKnownIndex;
-
-- (BOOL)isVerified;
-
-- (NSString*)exportSessionAtMessageIndex:(NSUInteger)messageIndex error:(NSError**)error;
-
-@end
diff --git a/xcode/OLMKit/OLMInboundGroupSession.m b/xcode/OLMKit/OLMInboundGroupSession.m
deleted file mode 100644
index 9e57741..0000000
--- a/xcode/OLMKit/OLMInboundGroupSession.m
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMInboundGroupSession.h"
-
-#import "OLMUtility.h"
-#include "olm/olm.h"
-
-@interface OLMInboundGroupSession ()
-{
- OlmInboundGroupSession *session;
-}
-@end
-
-
-@implementation OLMInboundGroupSession
-
-- (void)dealloc {
- olm_clear_inbound_group_session(session);
- free(session);
-}
-
-- (instancetype)init {
- self = [super init];
- if (self)
- {
- session = malloc(olm_inbound_group_session_size());
- if (session) {
- session = olm_inbound_group_session(session);
- }
-
- if (!session) {
- return nil;
- }
- }
- return self;
-}
-
-- (instancetype)initInboundGroupSessionWithSessionKey:(NSString *)sessionKey error:(NSError**)error {
- self = [self init];
- if (self) {
- NSData *sessionKeyData = [sessionKey dataUsingEncoding:NSUTF8StringEncoding];
- size_t result = olm_init_inbound_group_session(session, sessionKeyData.bytes, sessionKeyData.length);
- if (result == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_init_inbound_group_session error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_init_inbound_group_session error: %@", errorString]
- }];
- }
-
- return nil;
- }
- }
- return self;
-}
-
-- (instancetype)initInboundGroupSessionWithImportedSession:(NSString *)sessionKey error:(NSError *__autoreleasing *)error
-{
- self = [self init];
- if (self) {
- NSData *sessionKeyData = [sessionKey dataUsingEncoding:NSUTF8StringEncoding];
- size_t result = olm_import_inbound_group_session(session, sessionKeyData.bytes, sessionKeyData.length);
- if (result == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_import_inbound_group_session error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_import_inbound_group_session error: %@", errorString]
- }];
- }
-
- return nil;
- }
- }
- return self;
-}
-
-- (NSString *)sessionIdentifier {
- size_t length = olm_inbound_group_session_id_length(session);
- NSMutableData *idData = [NSMutableData dataWithLength:length];
- if (!idData) {
- return nil;
- }
- size_t result = olm_inbound_group_session_id(session, idData.mutableBytes, idData.length);
- if (result == olm_error()) {
- const char *error = olm_inbound_group_session_last_error(session);
- NSLog(@"olm_inbound_group_session_id error: %s", error);
- return nil;
- }
- NSString *idString = [[NSString alloc] initWithData:idData encoding:NSUTF8StringEncoding];
- return idString;
-}
-
-- (NSString *)decryptMessage:(NSString *)message messageIndex:(NSUInteger*)messageIndex error:(NSError**)error
-{
- NSParameterAssert(message != nil);
- NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
- if (!messageData) {
- return nil;
- }
- NSMutableData *mutMessage = messageData.mutableCopy;
- size_t maxPlaintextLength = olm_group_decrypt_max_plaintext_length(session, mutMessage.mutableBytes, mutMessage.length);
- if (maxPlaintextLength == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_group_decrypt_max_plaintext_length error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_group_decrypt_max_plaintext_length error: %@", errorString]
- }];
- }
-
- return nil;
- }
- // message buffer is destroyed by olm_group_decrypt_max_plaintext_length
- mutMessage = messageData.mutableCopy;
- NSMutableData *plaintextData = [NSMutableData dataWithLength:maxPlaintextLength];
-
- uint32_t message_index;
- size_t plaintextLength = olm_group_decrypt(session, mutMessage.mutableBytes, mutMessage.length, plaintextData.mutableBytes, plaintextData.length, &message_index);
- if (plaintextLength == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_group_decrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_group_decrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
- plaintextData.length = plaintextLength;
- NSString *plaintext = [[NSString alloc] initWithData:plaintextData encoding:NSUTF8StringEncoding];
- [plaintextData resetBytesInRange:NSMakeRange(0, plaintextData.length)];
-
- if (messageIndex)
- {
- *messageIndex = message_index;
- }
-
- return plaintext;
-}
-
-- (NSUInteger)firstKnownIndex
-{
- return olm_inbound_group_session_first_known_index(session);
-}
-
-- (BOOL)isVerified
-{
- return (0 != olm_inbound_group_session_is_verified(session));
-}
-
-- (NSString*)exportSessionAtMessageIndex:(NSUInteger)messageIndex error:(NSError**)error;
-{
- size_t length = olm_export_inbound_group_session_length(session);
- NSMutableData *key = [NSMutableData dataWithLength:length];
- size_t result = olm_export_inbound_group_session(session, key.mutableBytes, key.length, (uint32_t)messageIndex);
- if (result == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- NSString *keyString = [[NSString alloc] initWithData:key encoding:NSUTF8StringEncoding];
- [key resetBytesInRange:NSMakeRange(0, key.length)];
- return keyString;
-}
-
-
-#pragma mark OLMSerializable
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString *)serializedData key:(NSData *)key error:(NSError *__autoreleasing *)error {
- self = [self init];
- if (!self) {
- return nil;
- }
- NSParameterAssert(key.length > 0);
- NSParameterAssert(serializedData.length > 0);
- if (key.length == 0 || serializedData.length == 0) {
- if (error) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Bad length."}];
- }
- return nil;
- }
- NSMutableData *pickle = [serializedData dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- size_t result = olm_unpickle_inbound_group_session(session, key.bytes, key.length, pickle.mutableBytes, pickle.length);
- [pickle resetBytesInRange:NSMakeRange(0, pickle.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- return self;
-}
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error {
- NSParameterAssert(key.length > 0);
- size_t length = olm_pickle_inbound_group_session_length(session);
- NSMutableData *pickled = [NSMutableData dataWithLength:length];
- size_t result = olm_pickle_inbound_group_session(session, key.bytes, key.length, pickled.mutableBytes, pickled.length);
- if (result == olm_error()) {
- const char *olm_error = olm_inbound_group_session_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- NSString *pickleString = [[NSString alloc] initWithData:pickled encoding:NSUTF8StringEncoding];
- [pickled resetBytesInRange:NSMakeRange(0, pickled.length)];
- return pickleString;
-}
-
-#pragma mark NSSecureCoding
-
-+ (BOOL) supportsSecureCoding {
- return YES;
-}
-
-#pragma mark NSCoding
-
-- (id)initWithCoder:(NSCoder *)decoder {
- NSString *version = [decoder decodeObjectOfClass:[NSString class] forKey:@"version"];
-
- NSError *error = nil;
-
- if ([version isEqualToString:@"1"]) {
- NSString *pickle = [decoder decodeObjectOfClass:[NSString class] forKey:@"pickle"];
- NSData *key = [decoder decodeObjectOfClass:[NSData class] forKey:@"key"];
-
- self = [self initWithSerializedData:pickle key:key error:&error];
- }
-
- NSParameterAssert(error == nil);
- NSParameterAssert(self != nil);
- if (!self) {
- return nil;
- }
-
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)encoder {
- NSData *key = [OLMUtility randomBytesOfLength:32];
- NSError *error = nil;
- NSString *pickle = [self serializeDataWithKey:key error:&error];
- NSParameterAssert(pickle.length > 0 && error == nil);
-
- [encoder encodeObject:pickle forKey:@"pickle"];
- [encoder encodeObject:key forKey:@"key"];
- [encoder encodeObject:@"1" forKey:@"version"];
-}
-
-@end
diff --git a/xcode/OLMKit/OLMKit.h b/xcode/OLMKit/OLMKit.h
deleted file mode 100644
index 54496a0..0000000
--- a/xcode/OLMKit/OLMKit.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-// In this header, you should import all the public headers of your framework using statements like #import <OLMKit/PublicHeader.h>
-
-#import <OLMKit/OLMAccount.h>
-#import <OLMKit/OLMSession.h>
-#import <OLMKit/OLMMessage.h>
-#import <OLMKit/OLMUtility.h>
-#import <OLMKit/OLMInboundGroupSession.h>
-#import <OLMKit/OLMOutboundGroupSession.h>
-#import <OLMKit/OLMPkEncryption.h>
-#import <OLMKit/OLMPkDecryption.h>
-#import <OLMKit/OLMPkSigning.h>
-#import <OLMKit/OLMSAS.h>
-
-@interface OLMKit : NSObject
-
-//! Project version string for OLMKit, the same as libolm.
-+ (NSString*)versionString;
-
-@end
diff --git a/xcode/OLMKit/OLMKit.m b/xcode/OLMKit/OLMKit.m
deleted file mode 100644
index c383650..0000000
--- a/xcode/OLMKit/OLMKit.m
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMKit.h"
-
-#include "olm/olm.h"
-
-@implementation OLMKit
-
-+ (NSString*)versionString
-{
- uint8_t major, minor, patch;
-
- olm_get_library_version(&major, &minor, &patch);
-
- return [NSString stringWithFormat:@"%tu.%tu.%tu", major, minor, patch];
-}
-
-@end
diff --git a/xcode/OLMKit/OLMMessage.h b/xcode/OLMKit/OLMMessage.h
deleted file mode 100644
index b6e8c8f..0000000
--- a/xcode/OLMKit/OLMMessage.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-/*
- from olm.hh
- static const size_t OLM_MESSAGE_TYPE_PRE_KEY = 0;
- static const size_t OLM_MESSAGE_TYPE_MESSAGE = 1;
- */
-typedef NS_ENUM(NSInteger, OLMMessageType) {
- OLMMessageTypePreKey = 0,
- OLMMessageTypeMessage = 1
-};
-
-@interface OLMMessage : NSObject
-
-@property (nonatomic, copy, readonly, nonnull) NSString *ciphertext;
-@property (readonly) OLMMessageType type;
-
-- (nullable instancetype) initWithCiphertext:(nonnull NSString*)ciphertext type:(OLMMessageType)type;
-
-@end
diff --git a/xcode/OLMKit/OLMMessage.m b/xcode/OLMKit/OLMMessage.m
deleted file mode 100644
index 949f834..0000000
--- a/xcode/OLMKit/OLMMessage.m
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMMessage.h"
-
-@implementation OLMMessage
-
-- (nullable instancetype) initWithCiphertext:(nonnull NSString*)ciphertext type:(OLMMessageType)type {
- NSParameterAssert(ciphertext != nil);
- self = [super init];
- if (!self) {
- return nil;
- }
- _ciphertext = [ciphertext copy];
- _type = type;
- return self;
-}
-
-@end
diff --git a/xcode/OLMKit/OLMOutboundGroupSession.h b/xcode/OLMKit/OLMOutboundGroupSession.h
deleted file mode 100644
index c979b61..0000000
--- a/xcode/OLMKit/OLMOutboundGroupSession.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "OLMSerializable.h"
-
-@interface OLMOutboundGroupSession : NSObject <OLMSerializable, NSSecureCoding>
-
-- (instancetype) initOutboundGroupSession;
-
-- (NSString*)sessionIdentifier;
-- (NSUInteger)messageIndex;
-- (NSString*)sessionKey;
-
-/** UTF-8 plaintext -> base64 ciphertext */
-- (NSString*)encryptMessage:(NSString*)message error:(NSError**)error;
-
-@end
diff --git a/xcode/OLMKit/OLMOutboundGroupSession.m b/xcode/OLMKit/OLMOutboundGroupSession.m
deleted file mode 100644
index a0a7cc6..0000000
--- a/xcode/OLMKit/OLMOutboundGroupSession.m
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMOutboundGroupSession.h"
-
-#import "OLMUtility.h"
-#include "olm/olm.h"
-
-@interface OLMOutboundGroupSession ()
-{
- OlmOutboundGroupSession *session;
-}
-@end
-
-@implementation OLMOutboundGroupSession
-
-- (void)dealloc {
- olm_clear_outbound_group_session(session);
- free(session);
-}
-
-- (instancetype)init {
- self = [super init];
- if (self)
- {
- session = malloc(olm_outbound_group_session_size());
- if (session) {
- session = olm_outbound_group_session(session);
- }
-
- if (!session) {
- return nil;
- }
- }
- return self;
-}
-
-- (instancetype)initOutboundGroupSession {
- self = [self init];
- if (self) {
- NSMutableData *random = [OLMUtility randomBytesOfLength:olm_init_outbound_group_session_random_length(session)];
-
- size_t result = olm_init_outbound_group_session(session, random.mutableBytes, random.length);
- [random resetBytesInRange:NSMakeRange(0, random.length)];
- if (result == olm_error()) {
- const char *error = olm_outbound_group_session_last_error(session);
- NSLog(@"olm_init_outbound_group_session error: %s", error);
- return nil;
- }
- }
- return self;
-}
-
-- (NSString *)sessionIdentifier {
- size_t length = olm_outbound_group_session_id_length(session);
- NSMutableData *idData = [NSMutableData dataWithLength:length];
- if (!idData) {
- return nil;
- }
- size_t result = olm_outbound_group_session_id(session, idData.mutableBytes, idData.length);
- if (result == olm_error()) {
- const char *error = olm_outbound_group_session_last_error(session);
- NSLog(@"olm_outbound_group_session_id error: %s", error);
- return nil;
- }
- NSString *idString = [[NSString alloc] initWithData:idData encoding:NSUTF8StringEncoding];
- return idString;
-}
-
-- (NSUInteger)messageIndex {
- return olm_outbound_group_session_message_index(session);
-}
-
-- (NSString *)sessionKey {
- size_t length = olm_outbound_group_session_key_length(session);
- NSMutableData *sessionKeyData = [NSMutableData dataWithLength:length];
- if (!sessionKeyData) {
- return nil;
- }
- size_t result = olm_outbound_group_session_key(session, sessionKeyData.mutableBytes, sessionKeyData.length);
- if (result == olm_error()) {
- const char *error = olm_outbound_group_session_last_error(session);
- NSLog(@"olm_outbound_group_session_key error: %s", error);
- return nil;
- }
- NSString *sessionKey = [[NSString alloc] initWithData:sessionKeyData encoding:NSUTF8StringEncoding];
- [sessionKeyData resetBytesInRange:NSMakeRange(0, sessionKeyData.length)];
- return sessionKey;
-}
-
-- (NSString *)encryptMessage:(NSString *)message error:(NSError**)error {
- NSData *plaintextData = [message dataUsingEncoding:NSUTF8StringEncoding];
- size_t ciphertextLength = olm_group_encrypt_message_length(session, plaintextData.length);
- NSMutableData *ciphertext = [NSMutableData dataWithLength:ciphertextLength];
- if (!ciphertext) {
- return nil;
- }
- size_t result = olm_group_encrypt(session, plaintextData.bytes, plaintextData.length, ciphertext.mutableBytes, ciphertext.length);
- if (result == olm_error()) {
- const char *olm_error = olm_outbound_group_session_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_group_encrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_group_encrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
- return [[NSString alloc] initWithData:ciphertext encoding:NSUTF8StringEncoding];
-}
-
-#pragma mark OLMSerializable
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString *)serializedData key:(NSData *)key error:(NSError *__autoreleasing *)error {
- self = [self init];
- if (!self) {
- return nil;
- }
- NSParameterAssert(key.length > 0);
- NSParameterAssert(serializedData.length > 0);
- if (key.length == 0 || serializedData.length == 0) {
- if (error) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Bad length."}];
- }
- return nil;
- }
- NSMutableData *pickle = [serializedData dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- size_t result = olm_unpickle_outbound_group_session(session, key.bytes, key.length, pickle.mutableBytes, pickle.length);
- [pickle resetBytesInRange:NSMakeRange(0, pickle.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_outbound_group_session_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- return self;
-}
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error {
- NSParameterAssert(key.length > 0);
- size_t length = olm_pickle_outbound_group_session_length(session);
- NSMutableData *pickled = [NSMutableData dataWithLength:length];
- size_t result = olm_pickle_outbound_group_session(session, key.bytes, key.length, pickled.mutableBytes, pickled.length);
- if (result == olm_error()) {
- const char *olm_error = olm_outbound_group_session_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- NSString *pickleString = [[NSString alloc] initWithData:pickled encoding:NSUTF8StringEncoding];
- [pickled resetBytesInRange:NSMakeRange(0, pickled.length)];
- return pickleString;
-}
-
-#pragma mark NSSecureCoding
-
-+ (BOOL) supportsSecureCoding {
- return YES;
-}
-
-#pragma mark NSCoding
-
-- (id)initWithCoder:(NSCoder *)decoder {
- NSString *version = [decoder decodeObjectOfClass:[NSString class] forKey:@"version"];
-
- NSError *error = nil;
-
- if ([version isEqualToString:@"1"]) {
- NSString *pickle = [decoder decodeObjectOfClass:[NSString class] forKey:@"pickle"];
- NSData *key = [decoder decodeObjectOfClass:[NSData class] forKey:@"key"];
-
- self = [self initWithSerializedData:pickle key:key error:&error];
- }
-
- NSParameterAssert(error == nil);
- NSParameterAssert(self != nil);
- if (!self) {
- return nil;
- }
-
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)encoder {
- NSData *key = [OLMUtility randomBytesOfLength:32];
- NSError *error = nil;
- NSString *pickle = [self serializeDataWithKey:key error:&error];
- NSParameterAssert(pickle.length > 0 && error == nil);
-
- [encoder encodeObject:pickle forKey:@"pickle"];
- [encoder encodeObject:key forKey:@"key"];
- [encoder encodeObject:@"1" forKey:@"version"];
-}
-
-@end
diff --git a/xcode/OLMKit/OLMPkDecryption.h b/xcode/OLMKit/OLMPkDecryption.h
deleted file mode 100644
index 823dc78..0000000
--- a/xcode/OLMKit/OLMPkDecryption.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "OLMSerializable.h"
-#import "OLMPkMessage.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface OLMPkDecryption : NSObject <OLMSerializable, NSSecureCoding>
-
-/**
- Initialise the key from the private part of a key as returned by `privateKey`.
-
- Note that the pubkey is a base64 encoded string, but the private key is
- an unencoded byte array.
-
- @param privateKey the private key part.
- @param error the error if any.
- @return the associated public key.
- */
-- (NSString *)setPrivateKey:(NSData*)privateKey error:(NSError* _Nullable *)error;
-
-/**
- Generate a new key to use for decrypting messages.
-
- @param error the error if any.
- @return the public part of the generated key.
- */
-- (NSString *)generateKey:(NSError* _Nullable *)error;
-
-/**
- Get the private key.
-
- @return the private key;
- */
-- (NSData *)privateKey;
-
-/**
- Decrypt a ciphertext.
-
- @param message the cipher message to decrypt.
- @param error the error if any.
- @return the decrypted message.
- */
-- (NSString *)decryptMessage:(OLMPkMessage*)message error:(NSError* _Nullable *)error;
-
-/**
- Private key length.
-
- @return the length in bytes.
- */
-+ (NSUInteger)privateKeyLength;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/xcode/OLMKit/OLMPkDecryption.m b/xcode/OLMKit/OLMPkDecryption.m
deleted file mode 100644
index 4af2c71..0000000
--- a/xcode/OLMKit/OLMPkDecryption.m
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMPkDecryption.h"
-
-#include "olm/olm.h"
-#include "olm/pk.h"
-#include "OLMUtility.h"
-
-@interface OLMPkDecryption ()
-{
- OlmPkDecryption *session;
-}
-@end
-
-@implementation OLMPkDecryption
-
-- (void)dealloc {
- olm_clear_pk_decryption(session);
- free(session);
-}
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- session = (OlmPkDecryption *)malloc(olm_pk_decryption_size());
- olm_pk_decryption(session);
- }
- return self;
-}
-
-- (NSString *)setPrivateKey:(NSData *)privateKey error:(NSError *__autoreleasing _Nullable *)error {
- size_t publicKeyLength = olm_pk_key_length();
- NSMutableData *publicKeyData = [NSMutableData dataWithLength:publicKeyLength];
- if (!publicKeyData) {
- return nil;
- }
-
- size_t result = olm_pk_key_from_private(session,
- publicKeyData.mutableBytes, publicKeyLength,
- (void*)privateKey.bytes, privateKey.length);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
- NSLog(@"[OLMPkDecryption] setPrivateKey: olm_pk_key_from_private error: %s", olm_error);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_pk_key_from_private error: %@", errorString]
- }];
- }
- return nil;
- }
-
- NSString *publicKey = [[NSString alloc] initWithData:publicKeyData encoding:NSUTF8StringEncoding];
- return publicKey;
-}
-
-- (NSString *)generateKey:(NSError *__autoreleasing _Nullable *)error {
- size_t randomLength = olm_pk_private_key_length();
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- if (!random) {
- return nil;
- }
-
- size_t publicKeyLength = olm_pk_key_length();
- NSMutableData *publicKeyData = [NSMutableData dataWithLength:publicKeyLength];
- if (!publicKeyData) {
- return nil;
- }
-
- size_t result = olm_pk_key_from_private(session,
- publicKeyData.mutableBytes, publicKeyData.length,
- random.mutableBytes, randomLength);
- [random resetBytesInRange:NSMakeRange(0, randomLength)];
- if (result == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
- NSLog(@"[OLMPkDecryption] generateKey: olm_pk_key_from_private error: %s", olm_error);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_pk_key_from_private error: %@", errorString]
- }];
- }
- return nil;
- }
-
- NSString *publicKey = [[NSString alloc] initWithData:publicKeyData encoding:NSUTF8StringEncoding];
- return publicKey;
-}
-
-- (NSData *)privateKey {
- size_t privateKeyLength = olm_pk_private_key_length();
- NSMutableData *privateKeyData = [NSMutableData dataWithLength:privateKeyLength];
- if (!privateKeyData) {
- return nil;
- }
-
- size_t result = olm_pk_get_private_key(session,
- privateKeyData.mutableBytes, privateKeyLength);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
- NSLog(@"[OLMPkDecryption] privateKey: olm_pk_get_private_key error: %s", olm_error);
- return nil;
- }
-
- NSData *privateKey = [privateKeyData copy];
- [privateKeyData resetBytesInRange:NSMakeRange(0, privateKeyData.length)];
-
- return privateKey;
-}
-
-- (NSString *)decryptMessage:(OLMPkMessage *)message error:(NSError *__autoreleasing _Nullable *)error {
- NSData *messageData = [message.ciphertext dataUsingEncoding:NSUTF8StringEncoding];
- NSData *macData = [message.mac dataUsingEncoding:NSUTF8StringEncoding];
- NSData *ephemeralKeyData = [message.ephemeralKey dataUsingEncoding:NSUTF8StringEncoding];
- if (!messageData || !macData || !ephemeralKeyData) {
- return nil;
- }
-
- NSMutableData *mutMessage = messageData.mutableCopy;
- size_t maxPlaintextLength = olm_pk_max_plaintext_length(session, mutMessage.length);
- if (maxPlaintextLength == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"[OLMPkDecryption] decryptMessage: olm_pk_max_plaintext_length error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_pk_max_plaintext_length error: %@", errorString]
- }];
- }
-
- return nil;
- }
-
- mutMessage = messageData.mutableCopy;
- NSMutableData *plaintextData = [NSMutableData dataWithLength:maxPlaintextLength];
- size_t plaintextLength = olm_pk_decrypt(session,
- ephemeralKeyData.bytes, ephemeralKeyData.length,
- macData.bytes, macData.length,
- mutMessage.mutableBytes, mutMessage.length,
- plaintextData.mutableBytes, plaintextData.length);
- if (plaintextLength == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"[OLMPkDecryption] decryptMessage: olm_pk_decrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_decrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
-
- plaintextData.length = plaintextLength;
- NSString *plaintext = [[NSString alloc] initWithData:plaintextData encoding:NSUTF8StringEncoding];
- [plaintextData resetBytesInRange:NSMakeRange(0, plaintextData.length)];
- return plaintext;
-}
-
-+ (NSUInteger)privateKeyLength {
- return olm_pk_private_key_length();
-}
-
-#pragma mark OLMSerializable
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString *)serializedData key:(NSData *)key error:(NSError *__autoreleasing *)error {
- self = [self init];
- if (!self) {
- return nil;
- }
-
- NSParameterAssert(key.length > 0);
- NSParameterAssert(serializedData.length > 0);
- if (key.length == 0 || serializedData.length == 0) {
- if (error) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Bad length."}];
- }
- return nil;
- }
-
- size_t ephemeralLength = olm_pk_key_length();
- NSMutableData *ephemeralBuffer = [NSMutableData dataWithLength:ephemeralLength];
-
- NSMutableData *pickle = [serializedData dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- size_t result = olm_unpickle_pk_decryption(session,
- key.bytes, key.length,
- pickle.mutableBytes, pickle.length,
- ephemeralBuffer.mutableBytes, ephemeralLength);
- [pickle resetBytesInRange:NSMakeRange(0, pickle.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- return self;
-}
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error {
- NSParameterAssert(key.length > 0);
- size_t length = olm_pickle_pk_decryption_length(session);
- NSMutableData *pickled = [NSMutableData dataWithLength:length];
-
- size_t result = olm_pickle_pk_decryption(session,
- key.bytes, key.length,
- pickled.mutableBytes, pickled.length);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_decryption_last_error(session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
-
- NSString *pickleString = [[NSString alloc] initWithData:pickled encoding:NSUTF8StringEncoding];
- [pickled resetBytesInRange:NSMakeRange(0, pickled.length)];
-
- return pickleString;
-}
-
-#pragma mark NSSecureCoding
-
-+ (BOOL) supportsSecureCoding {
- return YES;
-}
-
-#pragma mark NSCoding
-
-- (id)initWithCoder:(NSCoder *)decoder {
- NSString *version = [decoder decodeObjectOfClass:[NSString class] forKey:@"version"];
-
- NSError *error = nil;
-
- if ([version isEqualToString:@"1"]) {
- NSString *pickle = [decoder decodeObjectOfClass:[NSString class] forKey:@"pickle"];
- NSData *key = [decoder decodeObjectOfClass:[NSData class] forKey:@"key"];
-
- self = [self initWithSerializedData:pickle key:key error:&error];
- }
-
- NSParameterAssert(error == nil);
- NSParameterAssert(self != nil);
- if (!self) {
- return nil;
- }
-
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)encoder {
- NSData *key = [OLMUtility randomBytesOfLength:32];
- NSError *error = nil;
-
- NSString *pickle = [self serializeDataWithKey:key error:&error];
- NSParameterAssert(pickle.length > 0 && error == nil);
-
- [encoder encodeObject:pickle forKey:@"pickle"];
- [encoder encodeObject:key forKey:@"key"];
- [encoder encodeObject:@"1" forKey:@"version"];
-}
-
-@end
diff --git a/xcode/OLMKit/OLMPkEncryption.h b/xcode/OLMKit/OLMPkEncryption.h
deleted file mode 100644
index 6ae767c..0000000
--- a/xcode/OLMKit/OLMPkEncryption.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "OLMPkMessage.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface OLMPkEncryption : NSObject
-
-/**
- Set the recipient's public key for encrypting to.
-
- @param recipientKey the recipient's public key.
- */
-- (void)setRecipientKey:(NSString*)recipientKey;
-
-/**
- Encrypt a plaintext for the recipient.
-
- @param message the message to encrypt.
- @param error the error if any.
- @return the encrypted message.
- */
-- (OLMPkMessage *)encryptMessage:(NSString*)message error:(NSError* _Nullable *)error;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/xcode/OLMKit/OLMPkEncryption.m b/xcode/OLMKit/OLMPkEncryption.m
deleted file mode 100644
index 34ad57c..0000000
--- a/xcode/OLMKit/OLMPkEncryption.m
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMPkEncryption.h"
-
-#include "olm/olm.h"
-#include "olm/pk.h"
-#include "OLMUtility.h"
-
-@interface OLMPkEncryption ()
-{
- OlmPkEncryption *session;
-}
-@end
-
-@implementation OLMPkEncryption
-
-- (void)dealloc {
- olm_clear_pk_encryption(session);
- free(session);
-}
-
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- session = (OlmPkEncryption *)malloc(olm_pk_encryption_size());
- olm_pk_encryption(session);
- }
- return self;
-}
-
-- (void)setRecipientKey:(NSString*)recipientKey {
- NSData *recipientKeyData = [recipientKey dataUsingEncoding:NSUTF8StringEncoding];
- olm_pk_encryption_set_recipient_key(session, recipientKeyData.bytes, recipientKeyData.length);
-}
-
-- (OLMPkMessage *)encryptMessage:(NSString *)message error:(NSError *__autoreleasing _Nullable *)error {
- NSData *plaintextData = [message dataUsingEncoding:NSUTF8StringEncoding];
-
- size_t randomLength = olm_pk_encrypt_random_length(session);
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- if (!random) {
- return nil;
- }
-
- size_t ciphertextLength = olm_pk_ciphertext_length(session, plaintextData.length);
- NSMutableData *ciphertext = [NSMutableData dataWithLength:ciphertextLength];
- if (!ciphertext) {
- return nil;
- }
-
- size_t macLength = olm_pk_mac_length(session);
- NSMutableData *macData = [NSMutableData dataWithLength:macLength];
- if (!macData) {
- return nil;
- }
-
- size_t ephemeralKeyLength = olm_pk_key_length();
- NSMutableData *ephemeralKeyData = [NSMutableData dataWithLength:ephemeralKeyLength];
- if (!ephemeralKeyData) {
- return nil;
- }
-
- size_t result = olm_pk_encrypt(session,
- plaintextData.bytes, plaintextData.length,
- ciphertext.mutableBytes, ciphertext.length,
- macData.mutableBytes, macLength,
- ephemeralKeyData.mutableBytes, ephemeralKeyLength,
- random.mutableBytes, randomLength);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_encryption_last_error(session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"[OLMPkEncryption] encryptMessage: olm_group_encrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_group_encrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
-
- OLMPkMessage *encryptedMessage = [[OLMPkMessage alloc]
- initWithCiphertext:[[NSString alloc] initWithData:ciphertext encoding:NSUTF8StringEncoding]
- mac:[[NSString alloc] initWithData:macData encoding:NSUTF8StringEncoding]
- ephemeralKey:[[NSString alloc] initWithData:ephemeralKeyData encoding:NSUTF8StringEncoding]];
-
-
- return encryptedMessage;
-}
-
-@end
diff --git a/xcode/OLMKit/OLMPkMessage.h b/xcode/OLMKit/OLMPkMessage.h
deleted file mode 100644
index 1559fca..0000000
--- a/xcode/OLMKit/OLMPkMessage.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface OLMPkMessage : NSObject
-
-@property (nonatomic, copy, readonly) NSString *ciphertext;
-@property (nonatomic, copy, readonly,) NSString *mac;
-@property (nonatomic, copy, readonly) NSString *ephemeralKey;
-
-- (instancetype) initWithCiphertext:(NSString*)ciphertext mac:(NSString*)mac ephemeralKey:(NSString*)ephemeralKey;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/xcode/OLMKit/OLMPkMessage.m b/xcode/OLMKit/OLMPkMessage.m
deleted file mode 100644
index 0f24512..0000000
--- a/xcode/OLMKit/OLMPkMessage.m
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMPkMessage.h"
-
-@implementation OLMPkMessage
-
-- (instancetype)initWithCiphertext:(NSString *)ciphertext mac:(NSString *)mac ephemeralKey:(NSString *)ephemeralKey {
- self = [super init];
- if (!self) {
- return nil;
- }
- _ciphertext = [ciphertext copy];
- _mac = [mac copy];
- _ephemeralKey = [ephemeralKey copy];
- return self;
-}
-
-@end
diff --git a/xcode/OLMKit/OLMPkSigning.h b/xcode/OLMKit/OLMPkSigning.h
deleted file mode 100644
index 09724e1..0000000
--- a/xcode/OLMKit/OLMPkSigning.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Copyright 2019 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface OLMPkSigning : NSObject
-
-/**
- Initialise the signing object with a public/private keypair from a seed.
-
- @param seed the seed.
- @param error the error if any.
- @return the public key
- */
-- (NSString *)doInitWithSeed:(NSData*)seed error:(NSError* _Nullable *)error;
-
-/**
- Sign a message.
-
- @param message the message to sign.
- @param error the error if any.
- @return the signature.
- */
-- (NSString *)sign:(NSString*)message error:(NSError* _Nullable *)error;
-
-/**
- Generate a seed.
-
- @return the generated seed.
- */
-+ (NSData *)generateSeed;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/xcode/OLMKit/OLMPkSigning.m b/xcode/OLMKit/OLMPkSigning.m
deleted file mode 100644
index d5c7d09..0000000
--- a/xcode/OLMKit/OLMPkSigning.m
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- Copyright 2019 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMPkSigning.h"
-
-#include "olm/olm.h"
-#include "olm/pk.h"
-#include "OLMUtility.h"
-
-@interface OLMPkSigning ()
-{
- OlmPkSigning *sign;
-}
-@end
-
-@implementation OLMPkSigning
-
-- (void)dealloc {
- olm_clear_pk_signing(sign);
- free(sign);
-}
-
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- sign = (OlmPkSigning *)malloc(olm_pk_signing_size());
- olm_pk_signing(sign);
- }
- return self;
-}
-
-- (NSString *)doInitWithSeed:(NSData *)seed error:(NSError *__autoreleasing _Nullable *)error {
- size_t publicKeyLength = olm_pk_signing_public_key_length();
- NSMutableData *publicKeyData = [NSMutableData dataWithLength:publicKeyLength];
- if (!publicKeyData) {
- return nil;
- }
-
- NSMutableData *mutableSeed = [NSMutableData dataWithData:seed];
-
- size_t result = olm_pk_signing_key_from_seed(sign,
- publicKeyData.mutableBytes, publicKeyLength,
- mutableSeed.mutableBytes, mutableSeed.length);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_signing_last_error(sign);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"[OLMPkSigning] doInitWithSeed: olm_pk_signing_key_from_seed error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_pk_signing_key_from_seed error: %@", errorString]
- }];
- }
-
- return nil;
- }
-
- [mutableSeed resetBytesInRange:NSMakeRange(0, mutableSeed.length)];
-
- NSString *publicKey = [[NSString alloc] initWithData:publicKeyData encoding:NSUTF8StringEncoding];
- return publicKey;
-}
-
-- (NSString *)sign:(NSString *)message error:(NSError *__autoreleasing _Nullable *)error {
- NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];
-
- size_t signatureLength = olm_pk_signature_length();
- NSMutableData *signatureData = [NSMutableData dataWithLength:signatureLength];
- if (!signatureData) {
- return nil;
- }
-
- size_t result = olm_pk_sign(sign,
- messageData.bytes, messageData.length,
- signatureData.mutableBytes, signatureLength);
- if (result == olm_error()) {
- const char *olm_error = olm_pk_signing_last_error(sign);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"[OLMPkSigning] sign: olm_pk_sign error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_pk_sign error: %@", errorString]
- }];
- }
-
- return nil;
- }
-
- NSString *signature = [[NSString alloc] initWithData:signatureData encoding:NSUTF8StringEncoding];
- return signature;
-}
-
-+ (NSData *)generateSeed {
- size_t seedLength = olm_pk_signing_seed_length();
- NSMutableData *seed = [OLMUtility randomBytesOfLength:seedLength];
- if (!seed) {
- return nil;
- }
-
- return seed;
-}
-
-@end
diff --git a/xcode/OLMKit/OLMSAS.h b/xcode/OLMKit/OLMSAS.h
deleted file mode 100644
index 3785b03..0000000
--- a/xcode/OLMKit/OLMSAS.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- Copyright 2019 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- Short Authentication String verification utility class.
- */
-@interface OLMSAS : NSObject
-
-/**
- Get the public key of the SAS object.
- */
-- (NSString * _Nullable)publicKey;
-
-/**
- Set the public key of other user.
-
- @param theirPublicKey the other user's public key.
- @return error the error if any.
- */
-- (NSError* _Nullable)setTheirPublicKey:(NSString*)theirPublicKey;
-
-/**
- Generate bytes to use for the short authentication string.
-
- @param info extra information to mix in when generating the bytes, as per the Matrix spec.
- @param length the size of the output buffer. For hex-based SAS as in the Matrix spec, this will be 5.
- @return generated bytes
- */
-- (NSData *)generateBytes:(NSString*)info length:(NSUInteger)length;
-
-/**
- Generate a message authentication code (MAC) based on the shared secret.
-
- @param input the message to produce the authentication code for.
- @param info extra information to mix in when generating the MAC, as per the Matrix spec.
- @param error the error if any.
- @return the MAC.
- */
-- (NSString *)calculateMac:(NSString*)input info:(NSString*)info error:(NSError* _Nullable *)error;
-
-/**
- Generate a message authentication code (MAC) based on the shared secret.
- For compatibility with an old version of olm.js.
-
- @param input the message to produce the authentication code for.
- @param info extra information to mix in when generating the MAC, as per the Matrix spec.
- @param error the error if any.
- @return the MAC.
- */
-- (NSString *)calculateMacLongKdf:(NSString*)input info:(NSString*)info error:(NSError* _Nullable *)error;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/xcode/OLMKit/OLMSAS.m b/xcode/OLMKit/OLMSAS.m
deleted file mode 100644
index fed370b..0000000
--- a/xcode/OLMKit/OLMSAS.m
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- Copyright 2018 New Vector Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMSAS.h"
-
-#include "olm/olm.h"
-#include "olm/sas.h"
-#include "OLMUtility.h"
-
-@interface OLMSAS () {
- void *olmSASbuffer;
- OlmSAS *olmSAS;
-}
-@end
-
-@implementation OLMSAS
-
-- (void)dealloc {
- olm_clear_sas(olmSAS);
- free(olmSASbuffer);
-}
-
-- (instancetype)init {
- self = [super init];
- if (self) {
- olmSASbuffer = malloc(olm_sas_size());
- olmSAS = olm_sas(olmSASbuffer);
-
- size_t randomLength = olm_create_sas_random_length(olmSAS);
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- if (!random) {
- return nil;
- }
-
- olm_create_sas(olmSAS, random.mutableBytes, randomLength);
-
- [random resetBytesInRange:NSMakeRange(0, randomLength)];
- }
- return self;
-}
-
-- (NSString * _Nullable)publicKey {
- size_t publicKeyLength = olm_sas_pubkey_length(olmSAS);
- NSMutableData *publicKeyData = [NSMutableData dataWithLength:publicKeyLength];
- if (!publicKeyData) {
- return nil;
- }
-
- size_t result = olm_sas_get_pubkey(olmSAS, publicKeyData.mutableBytes, publicKeyLength);
- if (result == olm_error()) {
- const char *olm_error = olm_sas_last_error(olmSAS);
- NSLog(@"[OLMSAS] publicKey: olm_sas_get_pubkey error: %s", olm_error);
- return nil;
- }
-
- NSString *publicKey = [[NSString alloc] initWithData:publicKeyData encoding:NSUTF8StringEncoding];
- return publicKey;
-}
-
-- (NSError * _Nullable)setTheirPublicKey:(NSString*)theirPublicKey {
- NSMutableData *theirPublicKeyData = [theirPublicKey dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
-
- size_t result = olm_sas_set_their_key(olmSAS, theirPublicKeyData.mutableBytes, theirPublicKeyData.length);
- if (result == olm_error()) {
- const char *olm_error = olm_sas_last_error(olmSAS);
- NSLog(@"[OLMSAS] setTheirPublicKey: olm_sas_set_their_key error: %s", olm_error);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (olm_error && errorString) {
- return [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_sas_set_their_key error: %@", errorString]
- }];
- }
- }
-
- return nil;
-}
-
-- (NSData *)generateBytes:(NSString *)info length:(NSUInteger)length {
- NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
-
- NSMutableData *bytes = [NSMutableData dataWithLength:length];
- if (!bytes) {
- return nil;
- }
-
- olm_sas_generate_bytes(olmSAS, infoData.bytes, infoData.length, bytes.mutableBytes, length);
- return bytes;
-}
-
-- (NSString *)calculateMac:(NSString *)input info:(NSString *)info error:(NSError *__autoreleasing _Nullable *)error {
- NSMutableData *inputData = [input dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
-
- size_t macLength = olm_sas_mac_length(olmSAS);
- NSMutableData *macData = [NSMutableData dataWithLength:macLength];
- if (!macData) {
- return nil;
- }
-
- size_t result = olm_sas_calculate_mac(olmSAS,
- inputData.mutableBytes, inputData.length,
- infoData.bytes, infoData.length,
- macData.mutableBytes, macLength);
- if (result == olm_error()) {
- const char *olm_error = olm_sas_last_error(olmSAS);
- NSLog(@"[OLMSAS] calculateMac: olm_sas_calculate_mac error: %s", olm_error);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_sas_calculate_mac error: %@", errorString]
- }];
- }
- return nil;
- }
-
- NSString *mac = [[NSString alloc] initWithData:macData encoding:NSUTF8StringEncoding];
- return mac;
-}
-
-- (NSString *)calculateMacLongKdf:(NSString *)input info:(NSString *)info error:(NSError *__autoreleasing _Nullable *)error {
- NSMutableData *inputData = [input dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
-
- size_t macLength = olm_sas_mac_length(olmSAS);
- NSMutableData *macData = [NSMutableData dataWithLength:macLength];
- if (!macData) {
- return nil;
- }
-
- size_t result = olm_sas_calculate_mac_long_kdf(olmSAS,
- inputData.mutableBytes, inputData.length,
- infoData.bytes, infoData.length,
- macData.mutableBytes, macLength);
- if (result == olm_error()) {
- const char *olm_error = olm_sas_last_error(olmSAS);
- NSLog(@"[OLMSAS] calculateMacLongKdf: olm_sas_calculate_mac error: %s", olm_error);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_sas_calculate_mac_long_kdf error: %@", errorString]
- }];
- }
- return nil;
- }
-
- NSString *mac = [[NSString alloc] initWithData:macData encoding:NSUTF8StringEncoding];
- return mac;
-}
-
-@end
diff --git a/xcode/OLMKit/OLMSerializable.h b/xcode/OLMKit/OLMSerializable.h
deleted file mode 100644
index e929903..0000000
--- a/xcode/OLMKit/OLMSerializable.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-@protocol OLMSerializable <NSObject>
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString*)serializedData key:(NSData*)key error:(NSError**)error;
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error;
-
-@end
diff --git a/xcode/OLMKit/OLMSession.h b/xcode/OLMKit/OLMSession.h
deleted file mode 100644
index 0446f98..0000000
--- a/xcode/OLMKit/OLMSession.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-#import "OLMSerializable.h"
-#import "OLMAccount.h"
-#import "OLMMessage.h"
-
-@interface OLMSession : NSObject <OLMSerializable, NSSecureCoding>
-
-- (instancetype) initOutboundSessionWithAccount:(OLMAccount*)account theirIdentityKey:(NSString*)theirIdentityKey theirOneTimeKey:(NSString*)theirOneTimeKey error:(NSError**)error;
-
-- (instancetype) initInboundSessionWithAccount:(OLMAccount*)account oneTimeKeyMessage:(NSString*)oneTimeKeyMessage error:(NSError**)error;
-
-- (instancetype) initInboundSessionWithAccount:(OLMAccount*)account theirIdentityKey:(NSString*)theirIdentityKey oneTimeKeyMessage:(NSString*)oneTimeKeyMessage error:(NSError**)error;
-
-- (NSString*) sessionIdentifier;
-
-- (BOOL) matchesInboundSession:(NSString*)oneTimeKeyMessage;
-
-- (BOOL) matchesInboundSessionFrom:(NSString*)theirIdentityKey oneTimeKeyMessage:(NSString *)oneTimeKeyMessage;
-
-/** UTF-8 plaintext -> base64 ciphertext */
-- (OLMMessage*) encryptMessage:(NSString*)message error:(NSError**)error;
-
-/** base64 ciphertext -> UTF-8 plaintext */
-- (NSString*) decryptMessage:(OLMMessage*)message error:(NSError**)error;
-
-@end
diff --git a/xcode/OLMKit/OLMSession.m b/xcode/OLMKit/OLMSession.m
deleted file mode 100644
index fc58a08..0000000
--- a/xcode/OLMKit/OLMSession.m
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMSession.h"
-#import "OLMUtility.h"
-#import "OLMAccount_Private.h"
-#import "OLMSession_Private.h"
-#include "olm/olm.h"
-
-@implementation OLMSession
-
-- (void) dealloc {
- olm_clear_session(_session);
- free(_session);
-}
-
-- (BOOL) initializeSessionMemory {
- size_t size = olm_session_size();
- _session = malloc(size);
- NSParameterAssert(_session != nil);
- if (!_session) {
- return NO;
- }
- _session = olm_session(_session);
- NSParameterAssert(_session != nil);
- if (!_session) {
- return NO;
- }
- return YES;
-}
-
-- (instancetype) init {
- self = [super init];
- if (!self) {
- return nil;
- }
- BOOL success = [self initializeSessionMemory];
- if (!success) {
- return nil;
- }
- return self;
-}
-
-- (instancetype) initWithAccount:(OLMAccount*)account {
- self = [self init];
- if (!self) {
- return nil;
- }
- NSParameterAssert(account != nil && account.account != NULL);
- if (account == nil || account.account == NULL) {
- return nil;
- }
- _account = account;
- return self;
-}
-
-- (instancetype) initOutboundSessionWithAccount:(OLMAccount*)account theirIdentityKey:(NSString*)theirIdentityKey theirOneTimeKey:(NSString*)theirOneTimeKey error:(NSError**)error {
- self = [self initWithAccount:account];
- if (!self) {
- return nil;
- }
- NSMutableData *random = [OLMUtility randomBytesOfLength:olm_create_outbound_session_random_length(_session)];
- NSData *idKey = [theirIdentityKey dataUsingEncoding:NSUTF8StringEncoding];
- NSData *otKey = [theirOneTimeKey dataUsingEncoding:NSUTF8StringEncoding];
- size_t result = olm_create_outbound_session(_session, account.account, idKey.bytes, idKey.length, otKey.bytes, otKey.length, random.mutableBytes, random.length);
- [random resetBytesInRange:NSMakeRange(0, random.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_create_outbound_session error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_create_outbound_session error: %@", errorString]
- }];
- }
-
- return nil;
- }
- return self;
-}
-
-- (instancetype) initInboundSessionWithAccount:(OLMAccount*)account oneTimeKeyMessage:(NSString*)oneTimeKeyMessage error:(NSError**)error {
- self = [self initWithAccount:account];
- if (!self) {
- return nil;
- }
- NSMutableData *otk = [NSMutableData dataWithData:[oneTimeKeyMessage dataUsingEncoding:NSUTF8StringEncoding]];
- size_t result = olm_create_inbound_session(_session, account.account, otk.mutableBytes, oneTimeKeyMessage.length);
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_create_inbound_session error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_create_inbound_session error: %@", errorString]
- }];
- }
-
- return nil;
- }
- return self;
-}
-
-- (instancetype) initInboundSessionWithAccount:(OLMAccount*)account theirIdentityKey:(NSString*)theirIdentityKey oneTimeKeyMessage:(NSString*)oneTimeKeyMessage error:(NSError**)error {
- self = [self initWithAccount:account];
- if (!self) {
- return nil;
- }
- NSData *idKey = [theirIdentityKey dataUsingEncoding:NSUTF8StringEncoding];
- NSMutableData *otk = [NSMutableData dataWithData:[oneTimeKeyMessage dataUsingEncoding:NSUTF8StringEncoding]];
- size_t result = olm_create_inbound_session_from(_session, account.account, idKey.bytes, idKey.length, otk.mutableBytes, otk.length);
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_create_inbound_session_from error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_create_inbound_session_from error: %@", errorString]
- }];
- }
-
- return nil;
- }
- return self;
-}
-
-- (NSString*) sessionIdentifier {
- size_t length = olm_session_id_length(_session);
- NSMutableData *idData = [NSMutableData dataWithLength:length];
- if (!idData) {
- return nil;
- }
- size_t result = olm_session_id(_session, idData.mutableBytes, idData.length);
- if (result == olm_error()) {
- const char *error = olm_session_last_error(_session);
- NSLog(@"olm_session_id error: %s", error);
- return nil;
- }
- NSString *idString = [[NSString alloc] initWithData:idData encoding:NSUTF8StringEncoding];
- return idString;
-}
-
-- (BOOL)matchesInboundSession:(NSString *)oneTimeKeyMessage {
- NSMutableData *otk = [NSMutableData dataWithData:[oneTimeKeyMessage dataUsingEncoding:NSUTF8StringEncoding]];
-
- size_t result = olm_matches_inbound_session(_session, otk.mutableBytes, otk.length);
- if (result == 1) {
- return YES;
- }
- else {
- if (result == olm_error()) {
- const char *error = olm_session_last_error(_session);
- NSLog(@"olm_matches_inbound_session error: %s", error);
- }
- return NO;
- }
-}
-
-- (BOOL)matchesInboundSessionFrom:(NSString *)theirIdentityKey oneTimeKeyMessage:(NSString *)oneTimeKeyMessage {
- NSData *idKey = [theirIdentityKey dataUsingEncoding:NSUTF8StringEncoding];
- NSMutableData *otk = [NSMutableData dataWithData:[oneTimeKeyMessage dataUsingEncoding:NSUTF8StringEncoding]];
-
- size_t result = olm_matches_inbound_session_from(_session,
- idKey.bytes, idKey.length,
- otk.mutableBytes, otk.length);
- if (result == 1) {
- return YES;
- }
- else {
- if (result == olm_error()) {
- const char *error = olm_session_last_error(_session);
- NSLog(@"olm_matches_inbound_session error: %s", error);
- }
- return NO;
- }
-}
-
-- (OLMMessage*) encryptMessage:(NSString*)message error:(NSError**)error {
- size_t messageType = olm_encrypt_message_type(_session);
- size_t randomLength = olm_encrypt_random_length(_session);
- NSMutableData *random = [OLMUtility randomBytesOfLength:randomLength];
- NSData *plaintextData = [message dataUsingEncoding:NSUTF8StringEncoding];
- size_t ciphertextLength = olm_encrypt_message_length(_session, plaintextData.length);
- NSMutableData *ciphertext = [NSMutableData dataWithLength:ciphertextLength];
- if (!ciphertext) {
- return nil;
- }
- size_t result = olm_encrypt(_session, plaintextData.bytes, plaintextData.length, random.mutableBytes, random.length, ciphertext.mutableBytes, ciphertext.length);
- [random resetBytesInRange:NSMakeRange(0, random.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_encrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_encrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
- NSString *ciphertextString = [[NSString alloc] initWithData:ciphertext encoding:NSUTF8StringEncoding];
- OLMMessage *encryptedMessage = [[OLMMessage alloc] initWithCiphertext:ciphertextString type:messageType];
- return encryptedMessage;
-}
-
-- (NSString*) decryptMessage:(OLMMessage*)message error:(NSError**)error {
- NSParameterAssert(message != nil);
- NSData *messageData = [message.ciphertext dataUsingEncoding:NSUTF8StringEncoding];
- if (!messageData) {
- return nil;
- }
- NSMutableData *mutMessage = messageData.mutableCopy;
- size_t maxPlaintextLength = olm_decrypt_max_plaintext_length(_session, message.type, mutMessage.mutableBytes, mutMessage.length);
- if (maxPlaintextLength == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_decrypt_max_plaintext_length error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_decrypt_max_plaintext_length error: %@", errorString]
- }];
- }
-
- return nil;
- }
- // message buffer is destroyed by olm_decrypt_max_plaintext_length
- mutMessage = messageData.mutableCopy;
- NSMutableData *plaintextData = [NSMutableData dataWithLength:maxPlaintextLength];
- size_t plaintextLength = olm_decrypt(_session, message.type, mutMessage.mutableBytes, mutMessage.length, plaintextData.mutableBytes, plaintextData.length);
- if (plaintextLength == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
-
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- NSLog(@"olm_decrypt error: %@", errorString);
-
- if (error && olm_error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain
- code:0
- userInfo:@{
- NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"olm_decrypt error: %@", errorString]
- }];
- }
-
- return nil;
- }
- plaintextData.length = plaintextLength;
- NSString *plaintext = [[NSString alloc] initWithData:plaintextData encoding:NSUTF8StringEncoding];
- [plaintextData resetBytesInRange:NSMakeRange(0, plaintextData.length)];
- return plaintext;
-}
-
-#pragma mark OLMSerializable
-
-/** Initializes from encrypted serialized data. Will throw error if invalid key or invalid base64. */
-- (instancetype) initWithSerializedData:(NSString*)serializedData key:(NSData*)key error:(NSError**)error {
- self = [self init];
- if (!self) {
- return nil;
- }
- NSParameterAssert(key.length > 0);
- NSParameterAssert(serializedData.length > 0);
- if (key.length == 0 || serializedData.length == 0) {
- if (error) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Bad length."}];
- }
- return nil;
- }
- NSMutableData *pickle = [serializedData dataUsingEncoding:NSUTF8StringEncoding].mutableCopy;
- size_t result = olm_unpickle_session(_session, key.bytes, key.length, pickle.mutableBytes, pickle.length);
- [pickle resetBytesInRange:NSMakeRange(0, pickle.length)];
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- return self;
-}
-
-/** Serializes and encrypts object data, outputs base64 blob */
-- (NSString*) serializeDataWithKey:(NSData*)key error:(NSError**)error {
- NSParameterAssert(key.length > 0);
- size_t length = olm_pickle_session_length(_session);
- NSMutableData *pickled = [NSMutableData dataWithLength:length];
- size_t result = olm_pickle_session(_session, key.bytes, key.length, pickled.mutableBytes, pickled.length);
- if (result == olm_error()) {
- const char *olm_error = olm_session_last_error(_session);
- NSString *errorString = [NSString stringWithUTF8String:olm_error];
- if (error && errorString) {
- *error = [NSError errorWithDomain:OLMErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: errorString}];
- }
- return nil;
- }
- NSString *pickleString = [[NSString alloc] initWithData:pickled encoding:NSUTF8StringEncoding];
- [pickled resetBytesInRange:NSMakeRange(0, pickled.length)];
- return pickleString;
-}
-
-#pragma mark NSSecureCoding
-
-+ (BOOL) supportsSecureCoding {
- return YES;
-}
-
-#pragma mark NSCoding
-
-- (id)initWithCoder:(NSCoder *)decoder {
- NSString *version = [decoder decodeObjectOfClass:[NSString class] forKey:@"version"];
-
- NSError *error = nil;
-
- if ([version isEqualToString:@"1"]) {
- NSString *pickle = [decoder decodeObjectOfClass:[NSString class] forKey:@"pickle"];
- NSData *key = [decoder decodeObjectOfClass:[NSData class] forKey:@"key"];
-
- self = [self initWithSerializedData:pickle key:key error:&error];
- }
-
- NSParameterAssert(error == nil);
- NSParameterAssert(self != nil);
- if (!self) {
- return nil;
- }
-
- return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)encoder {
- NSData *key = [OLMUtility randomBytesOfLength:32];
- NSError *error = nil;
- NSString *pickle = [self serializeDataWithKey:key error:&error];
- NSParameterAssert(pickle.length > 0 && error == nil);
-
- [encoder encodeObject:pickle forKey:@"pickle"];
- [encoder encodeObject:key forKey:@"key"];
- [encoder encodeObject:@"1" forKey:@"version"];
-}
-
-@end
diff --git a/xcode/OLMKit/OLMSession_Private.h b/xcode/OLMKit/OLMSession_Private.h
deleted file mode 100644
index 28ba5e1..0000000
--- a/xcode/OLMKit/OLMSession_Private.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#include "olm/olm.h"
-
-@interface OLMSession()
-
-@property (nonatomic) OlmSession *session;
-@property (nonatomic, strong) OLMAccount *account;
-
-@end
diff --git a/xcode/OLMKit/OLMUtility.h b/xcode/OLMKit/OLMUtility.h
deleted file mode 100644
index 3041da9..0000000
--- a/xcode/OLMKit/OLMUtility.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import <Foundation/Foundation.h>
-
-FOUNDATION_EXPORT NSString *const OLMErrorDomain;
-
-@interface OLMUtility : NSObject
-
-/**
- Calculate the SHA-256 hash of the input and encodes it as base64.
-
- @param message the message to hash.
- @return the base64-encoded hash value.
- */
-- (NSString*)sha256:(NSData*)message;
-
-/**
- Verify an ed25519 signature.
-
- @param signature the base64-encoded signature to be checked.
- @param key the ed25519 key.
- @param message the message which was signed.
- @param error if there is a problem with the verification.
- If the key was too small then the message will be "OLM.INVALID_BASE64".
- If the signature was invalid then the message will be "OLM.BAD_MESSAGE_MAC".
-
- @return YES if valid.
- */
-- (BOOL)verifyEd25519Signature:(NSString*)signature key:(NSString*)key message:(NSData*)message error:(NSError**)error;
-
-+ (NSMutableData*) randomBytesOfLength:(NSUInteger)length;
-
-@end
diff --git a/xcode/OLMKit/OLMUtility.m b/xcode/OLMKit/OLMUtility.m
deleted file mode 100644
index 936785a..0000000
--- a/xcode/OLMKit/OLMUtility.m
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- Copyright 2016 Chris Ballinger
- Copyright 2016 OpenMarket Ltd
- Copyright 2016 Vector Creations Ltd
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
-#import "OLMUtility.h"
-
-#include "olm/olm.h"
-
-NSString *const OLMErrorDomain = @"org.matrix.olm";
-
-@interface OLMUtility()
-
-@property (nonatomic) OlmUtility *utility;
-
-@end
-
-@implementation OLMUtility
-
-- (void) dealloc {
- olm_clear_utility(_utility);
- free(_utility);
-}
-
-- (BOOL) initializeUtilityMemory {
- size_t utilitySize = olm_utility_size();
- _utility = malloc(utilitySize);
- NSParameterAssert(_utility != nil);
- if (!_utility) {
- return NO;
- }
- _utility = olm_utility(_utility);
- NSParameterAssert(_utility != nil);
- if (!_utility) {
- return NO;
- }
- return YES;
-}
-
-- (instancetype) init {
- self = [super init];
- if (!self) {
- return nil;
- }
- BOOL success = [self initializeUtilityMemory];
- if (!success) {
- return nil;
- }
- return self;
-}
-
-- (NSString *)sha256:(NSData *)message {
- size_t length = olm_sha256_length(_utility);
-
- NSMutableData *shaData = [NSMutableData dataWithLength:length];
- if (!shaData) {
- return nil;
- }
-
- size_t result = olm_sha256(_utility, message.bytes, message.length, shaData.mutableBytes, shaData.length);
- if (result == olm_error()) {
- const char *error = olm_utility_last_error(_utility);
- NSLog(@"olm_sha256 error: %s", error);
- return nil;
- }
-
- NSString *sha = [[NSString alloc] initWithData:shaData encoding:NSUTF8StringEncoding];
- return sha;
-}
-
-- (BOOL)verifyEd25519Signature:(NSString*)signature key:(NSString*)key message:(NSData*)message error:(NSError**)error {
-
- NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
- NSData *signatureData = [signature dataUsingEncoding:NSUTF8StringEncoding];
-
- size_t result = olm_ed25519_verify(_utility,
- keyData.bytes, keyData.length,
- message.bytes, message.length,
- (void*)signatureData.bytes, signatureData.length
- );
-
- if (result == olm_error()) {
- if (error) {
- NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: [NSString stringWithUTF8String:olm_utility_last_error(_utility)]};
-
- // @TODO
- *error = [[NSError alloc] initWithDomain:@"OLMKitErrorDomain" code:0 userInfo:userInfo];
- }
- return NO;
- }
- else {
- return YES;
- }
-}
-
-+ (NSMutableData*) randomBytesOfLength:(NSUInteger)length {
- NSMutableData *randomData = [NSMutableData dataWithLength:length];
- if (!randomData) {
- return nil;
- }
- int result = SecRandomCopyBytes(kSecRandomDefault, randomData.length, randomData.mutableBytes);
- if (result != 0) {
- return nil;
- }
- return randomData;
-}
-
-@end