Don't crash on clean install
Otherwise we'll error when retrieving non-existent password. // FREEBIE
This commit is contained in:
parent
44bbaeef5a
commit
938b9c85b8
10
Podfile.lock
10
Podfile.lock
|
@ -141,7 +141,7 @@ DEPENDENCIES:
|
|||
- SocketRocket (from `https://github.com/facebook/SocketRocket.git`)
|
||||
- SQLCipher (from `https://github.com/sqlcipher/sqlcipher.git`, commit `d5c2bec`)
|
||||
- SSZipArchive
|
||||
- YapDatabase/SQLCipher (from `https://github.com/WhisperSystems/YapDatabase.git`, branch `release/unencryptedHeaders`)
|
||||
- YapDatabase/SQLCipher (from `../YapDatabase`)
|
||||
- YYImage
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
|
@ -167,8 +167,7 @@ EXTERNAL SOURCES:
|
|||
:commit: d5c2bec
|
||||
:git: https://github.com/sqlcipher/sqlcipher.git
|
||||
YapDatabase:
|
||||
:branch: release/unencryptedHeaders
|
||||
:git: https://github.com/WhisperSystems/YapDatabase.git
|
||||
:path: ../YapDatabase
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
AxolotlKit:
|
||||
|
@ -192,9 +191,6 @@ CHECKOUT OPTIONS:
|
|||
SQLCipher:
|
||||
:commit: d5c2bec
|
||||
:git: https://github.com/sqlcipher/sqlcipher.git
|
||||
YapDatabase:
|
||||
:commit: eaff655ebc774105e83f835ead71f8b7a02e4ac1
|
||||
:git: https://github.com/WhisperSystems/YapDatabase.git
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AFNetworking: 5e0e199f73d8626b11e79750991f5d173d1f8b67
|
||||
|
@ -221,6 +217,6 @@ SPEC CHECKSUMS:
|
|||
YapDatabase: 299a32de9d350d37a9ac5b0532609d87d5d2a5de
|
||||
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
|
||||
|
||||
PODFILE CHECKSUM: 0d804514eb2db34b9874b653e543255d8c2f5751
|
||||
PODFILE CHECKSUM: bb32efdc239e2a93d6304d25de33a25dc4cdbab2
|
||||
|
||||
COCOAPODS: 1.3.1
|
||||
|
|
|
@ -251,6 +251,10 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
- (nullable NSError *)convertDatabaseIfNecessary
|
||||
{
|
||||
NSString *databaseFilePath = [TSStorageManager legacyDatabaseFilePath];
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:databaseFilePath]) {
|
||||
DDLogVerbose(@"%@ no legacy database file found", self.logTag);
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSError *error;
|
||||
NSData *_Nullable databasePassword = [OWSStorage tryToLoadDatabasePassword:&error];
|
||||
|
@ -260,7 +264,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
OWSErrorCodeDatabaseConversionFatalError, @"Failed to load database password"));
|
||||
}
|
||||
|
||||
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) {
|
||||
YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
|
||||
DDLogVerbose(@"%@ saltData: %@", self.logTag, saltData.hexadecimalString);
|
||||
[OWSStorage storeDatabaseSalt:saltData];
|
||||
};
|
||||
|
@ -271,8 +275,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|||
|
||||
return [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
|
||||
databasePassword:databasePassword
|
||||
saltBlock:saltBlock
|
||||
keySpecBlock:keySpecBlock];
|
||||
recordSaltBlock:recordSaltBlock];
|
||||
}
|
||||
|
||||
- (void)startupLogging
|
||||
|
|
|
@ -298,7 +298,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
|
||||
|
||||
__block NSData *_Nullable databaseSalt = nil;
|
||||
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) {
|
||||
YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
|
||||
OWSAssert(!databaseSalt);
|
||||
OWSAssert(saltData);
|
||||
|
||||
|
@ -313,8 +313,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
};
|
||||
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
|
||||
databasePassword:databasePassword
|
||||
saltBlock:saltBlock
|
||||
keySpecBlock:keySpecBlock];
|
||||
recordSaltBlock:recordSaltBlock];
|
||||
if (error) {
|
||||
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
|
||||
}
|
||||
|
@ -355,8 +354,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
};
|
||||
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
|
||||
databasePassword:databasePassword
|
||||
saltBlock:saltBlock
|
||||
keySpecBlock:keySpecBlock];
|
||||
recordSaltBlock:recordSaltBlock];
|
||||
if (error) {
|
||||
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
|
||||
}
|
||||
|
@ -400,7 +398,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
XCTAssertTrue([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
|
||||
|
||||
__block NSData *_Nullable databaseSalt = nil;
|
||||
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) {
|
||||
YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
|
||||
OWSAssert(!databaseSalt);
|
||||
OWSAssert(saltData);
|
||||
|
||||
|
@ -450,7 +448,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec];
|
||||
XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
|
||||
|
||||
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) {
|
||||
YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
|
||||
OWSAssert(saltData);
|
||||
|
||||
XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__);
|
||||
|
@ -463,8 +461,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
|
||||
databasePassword:databasePassword
|
||||
saltBlock:saltBlock
|
||||
keySpecBlock:keySpecBlock];
|
||||
recordSaltBlock:recordSaltBlock];
|
||||
if (error) {
|
||||
DDLogError(@"%s error: %@", __PRETTY_FUNCTION__, error);
|
||||
}
|
||||
|
@ -488,7 +485,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
[self createDatabase:databasePassword databaseSalt:databaseSalt databaseKeySpec:databaseKeySpec];
|
||||
XCTAssertFalse([YapDatabaseCryptoUtils doesDatabaseNeedToBeConverted:databaseFilePath]);
|
||||
|
||||
YapDatabaseSaltBlock saltBlock = ^(NSData *saltData) {
|
||||
YapDatabaseSaltBlock recordSaltBlock = ^(NSData *saltData) {
|
||||
OWSAssert(saltData);
|
||||
|
||||
XCTFail(@"%s No conversion should be necessary", __PRETTY_FUNCTION__);
|
||||
|
@ -501,8 +498,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
NSError *_Nullable error = [YapDatabaseCryptoUtils convertDatabaseIfNecessary:databaseFilePath
|
||||
databasePassword:databasePassword
|
||||
saltBlock:saltBlock
|
||||
keySpecBlock:keySpecBlock];
|
||||
recordSaltBlock:recordSaltBlock];
|
||||
if (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,
|
||||
// we use their accessors to ensure that all three exist in the keychain
|
||||
// and can be loaded or that we reset the database & keychain.
|
||||
NSData *databasePassword = [self databasePassword];
|
||||
OWSAssert(databasePassword.length > 0);
|
||||
NSData *databaseSalt = [self databaseSalt];
|
||||
OWSAssert(databaseSalt.length > 0);
|
||||
// NSData *databasePassword = [self databasePassword];
|
||||
// OWSAssert(databasePassword.length > 0);
|
||||
// NSData *databaseSalt = [self databaseSalt];
|
||||
// OWSAssert(databaseSalt.length > 0);
|
||||
NSData *databaseKeySpec = [self databaseKeySpec];
|
||||
OWSAssert(databaseKeySpec.length == kSQLCipherKeySpecLength);
|
||||
|
||||
|
@ -608,6 +608,8 @@ typedef NSData *_Nullable (^CreateDatabaseMetadataBlock)(void);
|
|||
|
||||
- (NSData *)databaseKeySpec
|
||||
{
|
||||
// Get or generate salt and cipherKeyData
|
||||
|
||||
return [self loadMetadataOrClearDatabase:^(NSError **_Nullable errorHandle) {
|
||||
return [OWSStorage tryToLoadDatabaseKeySpec:errorHandle];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue