2018-10-16 15:51:31 +02:00
/ *
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 < XCTest / XCTest . h >
# import < OLMKit / OLMKit . h >
/ * *
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 [ ] = {
0 x77 , 0 x07 , 0 x6D , 0 x0A , 0 x73 , 0 x18 , 0 xA5 , 0 x7D ,
0 x3C , 0 x16 , 0 xC1 , 0 x72 , 0 x51 , 0 xB2 , 0 x66 , 0 x45 ,
0 xDF , 0 x4C , 0 x2F , 0 x87 , 0 xEB , 0 xC0 , 0 x99 , 0 x2A ,
0 xB1 , 0 x77 , 0 xFB , 0 xA5 , 0 x1D , 0 xB9 , 0 x2C , 0 x2A
} ;
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 ) ;
}
2019-04-10 23:15:27 +02:00
- ( void ) testSignAndVerify {
UInt8 seedBytes [ ] = {
0 x77 , 0 x07 , 0 x6D , 0 x0A , 0 x73 , 0 x18 , 0 xA5 , 0 x7D ,
0 x3C , 0 x16 , 0 xC1 , 0 x72 , 0 x51 , 0 xB2 , 0 x66 , 0 x45 ,
0 xDF , 0 x4C , 0 x2F , 0 x87 , 0 xEB , 0 xC0 , 0 x99 , 0 x2A ,
0 xB1 , 0 x77 , 0 xFB , 0 xA5 , 0 x1D , 0 xB9 , 0 x2C , 0 x2A
} ;
NSData * seed = [ NSData dataWithBytes : seedBytes length : sizeof ( seedBytes ) ] ;
NSString * TEST_TEXT = @ "We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness." ;
OLMPkSigning * signing = [ OLMPkSigning new ] ;
NSError * error ;
NSString * pubKey = [ signing doInitWithSeed : seed error : & error ] ;
XCTAssertNotNil ( pubKey ) ;
XCTAssertNil ( error ) ;
NSString * sig = [ signing sign : TEST_TEXT error : & error ] ;
XCTAssertNotNil ( sig ) ;
XCTAssertNil ( error ) ;
OLMUtility * util = [ OLMUtility new ] ;
BOOL verify = [ util verifyEd25519Signature : sig key : pubKey message : [ TEST_TEXT dataUsingEncoding : NSUTF8StringEncoding ] error : & error ] ;
XCTAssertTrue ( verify ) ;
XCTAssertNil ( error ) ;
NSString * badSig = [ sig stringByReplacingCharactersInRange : NSMakeRange ( 0 , 1 ) withString : @ "p" ] ;
verify = [ util verifyEd25519Signature : badSig key : pubKey message : [ TEST_TEXT dataUsingEncoding : NSUTF8StringEncoding ] error : & error ] ;
XCTAssertFalse ( verify ) ;
XCTAssertNotNil ( error ) ;
}
2018-10-16 15:51:31 +02:00
@ end