Avoid collision with iOS10 SSKeychain framework (#24)

Our pod SSKeychain was renamed to -> SAMKeychain to avoid collision with
the iOS10 library SSKeychain.

* log failure to write keychain (this seems to only happen on simulator)
* ensure we exit if we fail to set DB cipher key

// FREEBIE
pull/1/head
Michael Kirk 8 years ago committed by GitHub
parent 01ab8d132d
commit f3a91c2629

@ -34,22 +34,22 @@ PODS:
- Mantle/extobjc (2.0.7)
- ProtocolBuffers (1.9.10)
- Reachability (3.2)
- SignalServiceKit (0.0.7):
- SAMKeychain (1.5.0)
- SignalServiceKit (0.0.8):
- '25519'
- AFNetworking
- AxolotlKit
- CocoaLumberjack
- libPhoneNumber-iOS
- Mantle
- SAMKeychain
- SocketRocket
- SSKeychain
- TwistedOakCollapsingFutures
- YapDatabase/SQLCipher
- SocketRocket (0.5.1)
- SQLCipher/common (3.4.0)
- SQLCipher/fts (3.4.0):
- SQLCipher/common
- SSKeychain (1.4.0)
- TwistedOakCollapsingFutures (1.0.0):
- UnionFind (~> 1.0)
- UnionFind (1.0.1)
@ -129,10 +129,10 @@ SPEC CHECKSUMS:
Mantle: bc40bb061d8c2c6fb48d5083e04d928c3b7f73d9
ProtocolBuffers: d088180c10072b3d24a9939a6314b7b9bcc2340b
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
SignalServiceKit: e0bc81d12cef07b621403ff49e1c9c6f64d96109
SAMKeychain: 1fc9ae02f576365395758b12888c84704eebc423
SignalServiceKit: 9bdacbb1cb046836e9d601273fa4fad934ad3ecb
SocketRocket: 3f77ec2104cc113add553f817ad90a77114f5d43
SQLCipher: 4c768761421736a247ed6cf412d9045615d53dff
SSKeychain: c71293fa57216a40ab06c23f4085387583293de4
TwistedOakCollapsingFutures: f359b90f203e9ab13dfb92c9ff41842a7fe1cd0c
UnionFind: c33be5adb12983981d6e827ea94fc7f9e370f52d
YapDatabase: c00f4197bba2fea17bdbd82c8e8e3f7104b6fa67

@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = "SignalServiceKit"
s.version = "0.0.7"
s.version = "0.0.8"
s.summary = "An Objective-C library for communicating with the Signal messaging service."
s.description = <<-DESC
@ -42,6 +42,6 @@ An Objective-C library for communicating with the Signal messaging service.
# see Example/TSKitiOSTestApp/Podfile for details
s.dependency 'SocketRocket'
s.dependency 'libPhoneNumber-iOS'
s.dependency 'SSKeychain'
s.dependency 'SAMKeychain'
s.dependency 'TwistedOakCollapsingFutures'
end

@ -10,7 +10,7 @@
#import "TSInteraction.h"
#import "TSThread.h"
#import <25519/Randomness.h>
#import <SSKeychain/SSKeychain.h>
#import <SAMKeychain/SAMKeychain.h>
#import <YapDatabase/YapDatabaseRelationship.h>
NSString *const TSUIDatabaseConnectionDidUpdateNotification = @"TSUIDatabaseConnectionDidUpdateNotification";
@ -127,10 +127,11 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
return databasePath;
}
- (BOOL)databasePasswordAccessible {
[SSKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
- (BOOL)databasePasswordAccessible
{
[SAMKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
NSError *error;
NSString *dbPassword = [SSKeychain passwordForService:keychainService account:keychainDBPassAccount error:&error];
NSString *dbPassword = [SAMKeychain passwordForService:keychainService account:keychainDBPassAccount error:&error];
if (dbPassword && !error) {
return YES;
@ -143,14 +144,22 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
return NO;
}
- (NSData *)databasePassword {
[SSKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
NSString *dbPassword = [SSKeychain passwordForService:keychainService account:keychainDBPassAccount];
- (NSData *)databasePassword
{
[SAMKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
NSString *dbPassword = [SAMKeychain passwordForService:keychainService account:keychainDBPassAccount];
if (!dbPassword) {
dbPassword = [[Randomness generateRandomBytes:30] base64EncodedString];
[SSKeychain setPassword:dbPassword forService:keychainService account:keychainDBPassAccount];
DDLogError(@"Set new password from keychain ...");
NSError *error;
[SAMKeychain setPassword:dbPassword forService:keychainService account:keychainDBPassAccount error:&error];
if (error) {
// Sync log to ensure it logs before exiting
NSLog(@"Exiting because we failed to set new DB password. error: %@", error);
exit(1);
} else {
DDLogError(@"Succesfully set new DB password. First launch?");
}
}
return [dbPassword dataUsingEncoding:NSUTF8StringEncoding];
@ -255,7 +264,7 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
self.database = nil;
NSError *error;
[SSKeychain deletePasswordForService:keychainService account:keychainDBPassAccount];
[SAMKeychain deletePasswordForService:keychainService account:keychainDBPassAccount];
[[NSFileManager defaultManager] removeItemAtPath:[self dbPath] error:&error];

Loading…
Cancel
Save