Don't crash on clean install

Otherwise we'll error when retrieving non-existent password.

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent 44bbaeef5a
commit 938b9c85b8

@ -141,7 +141,7 @@ DEPENDENCIES:
- SocketRocket (from `https://github.com/facebook/SocketRocket.git`) - SocketRocket (from `https://github.com/facebook/SocketRocket.git`)
- SQLCipher (from `https://github.com/sqlcipher/sqlcipher.git`, commit `d5c2bec`) - SQLCipher (from `https://github.com/sqlcipher/sqlcipher.git`, commit `d5c2bec`)
- SSZipArchive - SSZipArchive
- YapDatabase/SQLCipher (from `https://github.com/WhisperSystems/YapDatabase.git`, branch `release/unencryptedHeaders`) - YapDatabase/SQLCipher (from `../YapDatabase`)
- YYImage - YYImage
EXTERNAL SOURCES: EXTERNAL SOURCES:
@ -167,8 +167,7 @@ EXTERNAL SOURCES:
:commit: d5c2bec :commit: d5c2bec
:git: https://github.com/sqlcipher/sqlcipher.git :git: https://github.com/sqlcipher/sqlcipher.git
YapDatabase: YapDatabase:
:branch: release/unencryptedHeaders :path: ../YapDatabase
:git: https://github.com/WhisperSystems/YapDatabase.git
CHECKOUT OPTIONS: CHECKOUT OPTIONS:
AxolotlKit: AxolotlKit:
@ -192,9 +191,6 @@ CHECKOUT OPTIONS:
SQLCipher: SQLCipher:
:commit: d5c2bec :commit: d5c2bec
:git: https://github.com/sqlcipher/sqlcipher.git :git: https://github.com/sqlcipher/sqlcipher.git
YapDatabase:
:commit: eaff655ebc774105e83f835ead71f8b7a02e4ac1
:git: https://github.com/WhisperSystems/YapDatabase.git
SPEC CHECKSUMS: SPEC CHECKSUMS:
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67 AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
@ -221,6 +217,6 @@ SPEC CHECKSUMS:
YapDatabase: 299a32de9d350d37a9ac5b0532609d87d5d2a5de YapDatabase: 299a32de9d350d37a9ac5b0532609d87d5d2a5de
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
PODFILE CHECKSUM: 0d804514eb2db34b9874b653e543255d8c2f5751 PODFILE CHECKSUM: bb32efdc239e2a93d6304d25de33a25dc4cdbab2
COCOAPODS: 1.3.1 COCOAPODS: 1.3.1

@ -251,6 +251,10 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
- (nullable NSError *)convertDatabaseIfNecessary - (nullable NSError *)convertDatabaseIfNecessary
{ {
NSString *databaseFilePath = [TSStorageManager legacyDatabaseFilePath]; NSString *databaseFilePath = [TSStorageManager legacyDatabaseFilePath];
if (![[NSFileManager defaultManager] fileExistsAtPath:databaseFilePath]) {
DDLogVerbose(@"%@ no legacy database file found", self.logTag);
return nil;
}
NSError *error; NSError *error;
NSData *_Nullable databasePassword = [OWSStorage tryToLoadDatabasePassword:&error]; NSData *_Nullable databasePassword = [OWSStorage tryToLoadDatabasePassword:&error];
@ -260,7 +264,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
OWSErrorCodeDatabaseConversionFatalError, @"Failed to load database password")); OWSErrorCodeDatabaseConversionFatalError, @"Failed to load database password"));
} }
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) { YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
DDLogVerbose(@"%@ saltData: %@", self.logTag, saltData.hexadecimalString); DDLogVerbose(@"%@ saltData: %@", self.logTag, saltData.hexadecimalString);
[OWSStorage storeDatabaseSalt:saltData]; [OWSStorage storeDatabaseSalt:saltData];
}; };
@ -271,8 +275,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
return [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath return [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
databasePassword:databasePassword databasePassword:databasePassword
saltBlock:saltBlock recordSaltBlock:recordSaltBlock];
keySpecBlock:keySpecBlock];
} }
- (void)startupLogging - (void)startupLogging

@ -298,7 +298,7 @@ NS_ASSUME_NONNULL_BEGIN
XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]); XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
__block NSData *_Nullable databaseSalt = nil; __block NSData *_Nullable databaseSalt = nil;
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) { YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
OWSAssert(!databaseSalt); OWSAssert(!databaseSalt);
OWSAssert(saltData); OWSAssert(saltData);
@ -313,8 +313,7 @@ NS_ASSUME_NONNULL_BEGIN
}; };
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
databasePassword:databasePassword databasePassword:databasePassword
saltBlock:saltBlock recordSaltBlock:recordSaltBlock];
keySpecBlock:keySpecBlock];
if (error) { if (error) {
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error); DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
} }
@ -355,8 +354,7 @@ NS_ASSUME_NONNULL_BEGIN
}; };
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
databasePassword:databasePassword databasePassword:databasePassword
saltBlock:saltBlock recordSaltBlock:recordSaltBlock];
keySpecBlock:keySpecBlock];
if (error) { if (error) {
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error); DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
} }
@ -400,7 +398,7 @@ NS_ASSUME_NONNULL_BEGIN
XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]); XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
__block NSData *_Nullable databaseSalt = nil; __block NSData *_Nullable databaseSalt = nil;
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) { YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
OWSAssert(!databaseSalt); OWSAssert(!databaseSalt);
OWSAssert(saltData); OWSAssert(saltData);
@ -450,7 +448,7 @@ NS_ASSUME_NONNULL_BEGIN
[self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec]; [self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec];
XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]); XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) { YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
OWSAssert(saltData); OWSAssert(saltData);
XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__); XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__);
@ -463,8 +461,7 @@ NS_ASSUME_NONNULL_BEGIN
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
databasePassword:databasePassword databasePassword:databasePassword
saltBlock:saltBlock recordSaltBlock:recordSaltBlock];
keySpecBlock:keySpecBlock];
if (error) { if (error) {
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error); DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
} }
@ -488,7 +485,7 @@ NS_ASSUME_NONNULL_BEGIN
[self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec]; [self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec];
XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]); XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) { YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
OWSAssert(saltData); OWSAssert(saltData);
XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__); XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__);
@ -501,8 +498,7 @@ NS_ASSUME_NONNULL_BEGIN
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
databasePassword:databasePassword databasePassword:databasePassword
saltBlock:saltBlock recordSaltBlock:recordSaltBlock];
keySpecBlock:keySpecBlock];
if (error) { if (error) {
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error); DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
} }

@ -388,10 +388,10 @@ typedef NSData *_Nullable (^CreateDatabaseMetadataBlock)(void);
// Although we don't use databasePassword or databaseSalt in this method, // Although we don't use databasePassword or databaseSalt in this method,
// we use their accessors to ensure that all three exist in the keychain // we use their accessors to ensure that all three exist in the keychain
// and can be loaded or that we reset the database & keychain. // and can be loaded or that we reset the database & keychain.
NSData *databasePassword = [self databasePassword]; // NSData *databasePassword = [self databasePassword];
OWSAssert(databasePassword.length > 0); // OWSAssert(databasePassword.length > 0);
NSData *databaseSalt = [self databaseSalt]; // NSData *databaseSalt = [self databaseSalt];
OWSAssert(databaseSalt.length > 0); // OWSAssert(databaseSalt.length > 0);
NSData *databaseKeySpec = [self databaseKeySpec]; NSData *databaseKeySpec = [self databaseKeySpec];
OWSAssert(databaseKeySpec.length == kSQLCipherKeySpecLength); OWSAssert(databaseKeySpec.length == kSQLCipherKeySpecLength);
@ -608,6 +608,8 @@ typedef NSData *_Nullable (^CreateDatabaseMetadataBlock)(void);
- (NSData *)databaseKeySpec - (NSData *)databaseKeySpec
{ {
// Get or generate salt and cipherKeyData
return [self loadMetadataOrClearDatabase:^(NSError **_Nullable errorHandle) { return [self loadMetadataOrClearDatabase:^(NSError **_Nullable errorHandle) {
return [OWSStorage tryToLoadDatabaseKeySpec:errorHandle]; return [OWSStorage tryToLoadDatabaseKeySpec:errorHandle];
} }

Loading…
Cancel
Save