From 9fd50c8eb50b788009be4f23729f2924e64349f5 Mon Sep 17 00:00:00 2001 From: manuroe Date: Tue, 16 Oct 2018 15:51:31 +0200 Subject: OLMKit: Add objc wrappers for pk encryption/decryption --- xcode/OLMKitTests/OLMKitPkTests.m | 107 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 xcode/OLMKitTests/OLMKitPkTests.m (limited to 'xcode/OLMKitTests') diff --git a/xcode/OLMKitTests/OLMKitPkTests.m b/xcode/OLMKitTests/OLMKitPkTests.m new file mode 100644 index 0000000..04d2e30 --- /dev/null +++ b/xcode/OLMKitTests/OLMKitPkTests.m @@ -0,0 +1,107 @@ +/* + 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 +#import + +/** + Tests are inspired from js tests. + */ +@interface OLMKitPkTests : XCTestCase { + OLMPkEncryption *encryption; + OLMPkDecryption *decryption; +} + +@end + +@implementation OLMKitPkTests + +- (void)setUp { + encryption = [OLMPkEncryption new]; + decryption = [OLMPkDecryption new]; +} + +- (void)tearDown { + encryption = nil; + decryption = nil; +} + +- (void)testImportExportKeys { + UInt8 alicePrivateBytes[] = { + 0x77, 0x07, 0x6D, 0x0A, 0x73, 0x18, 0xA5, 0x7D, + 0x3C, 0x16, 0xC1, 0x72, 0x51, 0xB2, 0x66, 0x45, + 0xDF, 0x4C, 0x2F, 0x87, 0xEB, 0xC0, 0x99, 0x2A, + 0xB1, 0x77, 0xFB, 0xA5, 0x1D, 0xB9, 0x2C, 0x2A + }; + + NSData *alicePrivate = [NSData dataWithBytes:alicePrivateBytes length:sizeof(alicePrivateBytes)]; + + NSError *error; + NSString *alicePublic = [decryption setPrivateKey:alicePrivate error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(alicePublic, @"hSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo"); + + NSData *alicePrivateOut = decryption.privateKey; + XCTAssertNil(error); + XCTAssertEqualObjects(alicePrivateOut, alicePrivate); +} + +- (void)testEncryptAndDecrypt { + + NSString *pubKey = [decryption generateKey:nil]; + NSLog(@"Ephemeral Key: %@", pubKey); + XCTAssertNotNil(pubKey); + + NSString *TEST_TEXT = @"têst1"; + NSError *error; + [encryption setRecipientKey:pubKey]; + OLMPkMessage *message = [encryption encryptMessage:TEST_TEXT error:&error]; + NSLog(@"message: %@ %@ %@", message.ciphertext, message.mac, message.ephemeralKey); + XCTAssertNil(error); + XCTAssertNotNil(message); + XCTAssertNotNil(message.ciphertext); + XCTAssertNotNil(message.mac); + XCTAssertNotNil(message.ephemeralKey); + + NSString *decrypted = [decryption decryptMessage:message error:&error]; + XCTAssertNil(error); + XCTAssertEqualObjects(decrypted, TEST_TEXT); + + TEST_TEXT = @"hot beverage: ☕"; + [encryption setRecipientKey:pubKey]; + message = [encryption encryptMessage:TEST_TEXT error:&error]; + decrypted = [decryption decryptMessage:message error:&error]; + XCTAssertEqualObjects(decrypted, TEST_TEXT); +} + +- (void)testOLMPkDecryptionSerialization { + NSString *TEST_TEXT = @"têst1"; + NSString *pubKey = [decryption generateKey:nil]; + [encryption setRecipientKey:pubKey]; + OLMPkMessage *encrypted = [encryption encryptMessage:TEST_TEXT error:nil]; + + + NSData *pickle = [NSKeyedArchiver archivedDataWithRootObject:decryption]; + decryption = nil; + + OLMPkDecryption *newDecryption = [NSKeyedUnarchiver unarchiveObjectWithData:pickle]; + + NSError *error; + NSString *decrypted = [newDecryption decryptMessage:encrypted error:&error]; + XCTAssertEqualObjects(decrypted, TEST_TEXT); +} + +@end -- cgit v1.2.3