Add protocol context to protocol kit.

pull/1/head
Matthew Chen 7 years ago
parent d3e16583eb
commit bbd689bfd0

@ -699,7 +699,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
{ {
NSMutableArray<NSString *> *result = [NSMutableArray new]; NSMutableArray<NSString *> *result = [NSMutableArray new];
for (NSString *recipientId in self.thread.recipientIdentifiers) { for (NSString *recipientId in self.thread.recipientIdentifiers) {
if ([[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:recipientId] if ([[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
== OWSVerificationStateNoLongerVerified) { == OWSVerificationStateNoLongerVerified) {
[result addObject:recipientId]; [result addObject:recipientId];
} }
@ -1303,7 +1303,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
BOOL isVerified = YES; BOOL isVerified = YES;
for (NSString *recipientId in self.thread.recipientIdentifiers) { for (NSString *recipientId in self.thread.recipientIdentifiers) {
if ([[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:recipientId] if ([[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
!= OWSVerificationStateVerified) { != OWSVerificationStateVerified) {
isVerified = NO; isVerified = NO;
break; break;

@ -338,8 +338,7 @@ typedef void (^CustomLayoutBlock)(void);
{ {
OWSAssert(self.recipientId.length > 0); OWSAssert(self.recipientId.length > 0);
BOOL isVerified = BOOL isVerified = [[OWSIdentityManager sharedManager] verificationStateForRecipientId:self.recipientId]
[[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:self.recipientId]
== OWSVerificationStateVerified; == OWSVerificationStateVerified;
if (isVerified) { if (isVerified) {

@ -682,8 +682,7 @@ NS_ASSUME_NONNULL_BEGIN
} }
} }
BOOL isVerified = BOOL isVerified = [[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
[[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:recipientId]
== OWSVerificationStateVerified; == OWSVerificationStateVerified;
if (isVerified) { if (isVerified) {
NSMutableAttributedString *subtitle = [NSMutableAttributedString new]; NSMutableAttributedString *subtitle = [NSMutableAttributedString new];

@ -149,7 +149,7 @@ NS_ASSUME_NONNULL_BEGIN
// Optimistically set this flag. // Optimistically set this flag.
[OWSDeviceManager.sharedManager setMayHaveLinkedDevices]; [OWSDeviceManager.sharedManager setMayHaveLinkedDevices];
ECKeyPair *_Nullable identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPairWithoutProtocolContext]; ECKeyPair *_Nullable identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPair];
OWSAssert(identityKeyPair); OWSAssert(identityKeyPair);
NSData *myPublicKey = identityKeyPair.publicKey; NSData *myPublicKey = identityKeyPair.publicKey;
NSData *myPrivateKey = identityKeyPair.ows_privateKey; NSData *myPrivateKey = identityKeyPair.ows_privateKey;

@ -177,7 +177,7 @@ NS_ASSUME_NONNULL_BEGIN
ContactTableViewCell *cell = [ContactTableViewCell new]; ContactTableViewCell *cell = [ContactTableViewCell new];
SignalAccount *signalAccount = [helper signalAccountForRecipientId:recipientId]; SignalAccount *signalAccount = [helper signalAccountForRecipientId:recipientId];
OWSVerificationState verificationState = OWSVerificationState verificationState =
[[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:recipientId]; [[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId];
BOOL isVerified = verificationState == OWSVerificationStateVerified; BOOL isVerified = verificationState == OWSVerificationStateVerified;
BOOL isNoLongerVerified = verificationState == OWSVerificationStateNoLongerVerified; BOOL isNoLongerVerified = verificationState == OWSVerificationStateNoLongerVerified;
BOOL isBlocked = [helper isRecipientIdBlocked:recipientId]; BOOL isBlocked = [helper isRecipientIdBlocked:recipientId];
@ -244,10 +244,9 @@ NS_ASSUME_NONNULL_BEGIN
OWSIdentityManager *identityManger = [OWSIdentityManager sharedManager]; OWSIdentityManager *identityManger = [OWSIdentityManager sharedManager];
NSArray<NSString *> *recipientIds = [self noLongerVerifiedRecipientIds]; NSArray<NSString *> *recipientIds = [self noLongerVerifiedRecipientIds];
for (NSString *recipientId in recipientIds) { for (NSString *recipientId in recipientIds) {
OWSVerificationState verificationState = OWSVerificationState verificationState = [identityManger verificationStateForRecipientId:recipientId];
[identityManger verificationStateForRecipientIdWithoutTransaction:recipientId];
if (verificationState == OWSVerificationStateNoLongerVerified) { if (verificationState == OWSVerificationStateNoLongerVerified) {
NSData *identityKey = [identityManger identityKeyForRecipientIdWOT:recipientId]; NSData *identityKey = [identityManger identityKeyForRecipientId:recipientId];
if (identityKey.length < 1) { if (identityKey.length < 1) {
OWSFail(@"Missing identity key for: %@", recipientId); OWSFail(@"Missing identity key for: %@", recipientId);
continue; continue;
@ -271,7 +270,7 @@ NS_ASSUME_NONNULL_BEGIN
{ {
NSMutableArray<NSString *> *result = [NSMutableArray new]; NSMutableArray<NSString *> *result = [NSMutableArray new];
for (NSString *recipientId in self.thread.recipientIdentifiers) { for (NSString *recipientId in self.thread.recipientIdentifiers) {
if ([[OWSIdentityManager sharedManager] verificationStateForRecipientIdWithoutTransaction:recipientId] if ([[OWSIdentityManager sharedManager] verificationStateForRecipientId:recipientId]
== OWSVerificationStateNoLongerVerified) { == OWSVerificationStateNoLongerVerified) {
[result addObject:recipientId]; [result addObject:recipientId];
} }

@ -291,8 +291,7 @@ NSString *const kNotificationsManagerNewMesssageSoundName = @"NewMessage.aifc";
// "no longer verified". // "no longer verified".
BOOL isNoLongerVerified = NO; BOOL isNoLongerVerified = NO;
for (NSString *recipientId in thread.recipientIdentifiers) { for (NSString *recipientId in thread.recipientIdentifiers) {
if ([OWSIdentityManager.sharedManager if ([OWSIdentityManager.sharedManager verificationStateForRecipientId:recipientId]
verificationStateForRecipientIdWithoutTransaction:recipientId]
== OWSVerificationStateNoLongerVerified) { == OWSVerificationStateNoLongerVerified) {
isNoLongerVerified = YES; isNoLongerVerified = YES;
break; break;

@ -134,11 +134,11 @@ static const NSTimeInterval kSignedPreKeyUpdateFailureMaxFailureDuration = 10 *
RefreshPreKeysMode modeCopy = mode; RefreshPreKeysMode modeCopy = mode;
TSStorageManager *storageManager = [TSStorageManager sharedManager]; TSStorageManager *storageManager = [TSStorageManager sharedManager];
ECKeyPair *identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPairWithoutProtocolContext]; ECKeyPair *identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPair];
if (!identityKeyPair) { if (!identityKeyPair) {
[[OWSIdentityManager sharedManager] generateNewIdentityKey]; [[OWSIdentityManager sharedManager] generateNewIdentityKey];
identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPairWithoutProtocolContext]; identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPair];
// Switch modes if necessary. // Switch modes if necessary.
modeCopy = RefreshPreKeysMode_SignedAndOneTime; modeCopy = RefreshPreKeysMode_SignedAndOneTime;

@ -111,7 +111,7 @@ NS_ASSUME_NONNULL_BEGIN
- (BOOL)hasSafetyNumbers - (BOOL)hasSafetyNumbers
{ {
return !![[OWSIdentityManager sharedManager] identityKeyForRecipientIdWOT:self.contactIdentifier]; return !![[OWSIdentityManager sharedManager] identityKeyForRecipientId:self.contactIdentifier];
} }
- (NSString *)name - (NSString *)name

@ -30,8 +30,7 @@ extern const NSUInteger kIdentityKeyLength;
- (void)generateNewIdentityKey; - (void)generateNewIdentityKey;
// TODO: Rename to identityKeyForRecipientId. - (nullable NSData *)identityKeyForRecipientId:(NSString *)recipientId;
- (nullable NSData *)identityKeyForRecipientIdWOT:(NSString *)recipientId;
- (nullable NSData *)identityKeyForRecipientId:(NSString *)recipientId protocolContext:(nullable id)protocolContext; - (nullable NSData *)identityKeyForRecipientId:(NSString *)recipientId protocolContext:(nullable id)protocolContext;
@ -41,7 +40,7 @@ extern const NSUInteger kIdentityKeyLength;
isUserInitiatedChange:(BOOL)isUserInitiatedChange isUserInitiatedChange:(BOOL)isUserInitiatedChange
protocolContext:(nullable id)protocolContext; protocolContext:(nullable id)protocolContext;
- (OWSVerificationState)verificationStateForRecipientIdWithoutTransaction:(NSString *)recipientId; - (OWSVerificationState)verificationStateForRecipientId:(NSString *)recipientId;
- (OWSVerificationState)verificationStateForRecipientId:(NSString *)recipientId - (OWSVerificationState)verificationStateForRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadWriteTransaction *)transaction; transaction:(YapDatabaseReadWriteTransaction *)transaction;
@ -59,8 +58,7 @@ extern const NSUInteger kIdentityKeyLength;
#pragma mark - Debug #pragma mark - Debug
// TODO: - (nullable ECKeyPair *)identityKeyPair;
- (nullable ECKeyPair *)identityKeyPairWithoutProtocolContext;
#if DEBUG #if DEBUG
// Clears everything except the local identity key. // Clears everything except the local identity key.

@ -132,7 +132,7 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
inCollection:TSStorageManagerIdentityKeyStoreCollection]; inCollection:TSStorageManagerIdentityKeyStoreCollection];
} }
- (nullable NSData *)identityKeyForRecipientIdWOT:(NSString *)recipientId - (nullable NSData *)identityKeyForRecipientId:(NSString *)recipientId
{ {
__block NSData *_Nullable result = nil; __block NSData *_Nullable result = nil;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
@ -151,7 +151,7 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
return [OWSRecipientIdentity fetchObjectWithUniqueID:recipientId transaction:transaction].identityKey; return [OWSRecipientIdentity fetchObjectWithUniqueID:recipientId transaction:transaction].identityKey;
} }
- (nullable ECKeyPair *)identityKeyPairWithoutProtocolContext - (nullable ECKeyPair *)identityKeyPair
{ {
__block ECKeyPair *_Nullable identityKeyPair = nil; __block ECKeyPair *_Nullable identityKeyPair = nil;
[self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { [self.dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
@ -305,7 +305,7 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
[self fireIdentityStateChangeNotification]; [self fireIdentityStateChangeNotification];
} }
- (OWSVerificationState)verificationStateForRecipientIdWithoutTransaction:(NSString *)recipientId - (OWSVerificationState)verificationStateForRecipientId:(NSString *)recipientId
{ {
__block OWSVerificationState result; __block OWSVerificationState result;
// Use a read/write transaction to block on latest. // Use a read/write transaction to block on latest.

@ -36,8 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable OWSFingerprint *)fingerprintWithTheirSignalId:(NSString *)theirSignalId - (nullable OWSFingerprint *)fingerprintWithTheirSignalId:(NSString *)theirSignalId
{ {
NSData *_Nullable theirIdentityKey = NSData *_Nullable theirIdentityKey = [[OWSIdentityManager sharedManager] identityKeyForRecipientId:theirSignalId];
[[OWSIdentityManager sharedManager] identityKeyForRecipientIdWOT:theirSignalId];
if (theirIdentityKey == nil) { if (theirIdentityKey == nil) {
OWSFail(@"%@ Missing their identity key", self.logTag); OWSFail(@"%@ Missing their identity key", self.logTag);
@ -52,7 +51,7 @@ NS_ASSUME_NONNULL_BEGIN
NSString *theirName = [self.contactsManager displayNameForPhoneIdentifier:theirSignalId]; NSString *theirName = [self.contactsManager displayNameForPhoneIdentifier:theirSignalId];
NSString *mySignalId = [self.accountManager localNumber]; NSString *mySignalId = [self.accountManager localNumber];
NSData *myIdentityKey = [[OWSIdentityManager sharedManager] identityKeyPairWithoutProtocolContext].publicKey; NSData *myIdentityKey = [[OWSIdentityManager sharedManager] identityKeyPair].publicKey;
return [OWSFingerprint fingerprintWithMyStableId:mySignalId return [OWSFingerprint fingerprintWithMyStableId:mySignalId
myIdentityKey:myIdentityKey myIdentityKey:myIdentityKey

@ -3,6 +3,7 @@
// //
#import "OWSRecipientIdentity.h" #import "OWSRecipientIdentity.h"
#import "TSStorageManager+SessionStore.h"
#import "TSStorageManager.h" #import "TSStorageManager.h"
#import <YapDatabase/YapDatabase.h> #import <YapDatabase/YapDatabase.h>
@ -127,21 +128,21 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction - (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]); OWSAssert(!transaction.connection.objectCacheEnabled);
[super saveWithTransaction:transaction]; [super saveWithTransaction:transaction];
} }
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction - (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]); OWSAssert(!transaction.connection.objectCacheEnabled);
[super removeWithTransaction:transaction]; [super removeWithTransaction:transaction];
} }
- (void)touchWithTransaction:(YapDatabaseReadWriteTransaction *)transaction - (void)touchWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{ {
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]); OWSAssert(!transaction.connection.objectCacheEnabled);
[super touchWithTransaction:transaction]; [super touchWithTransaction:transaction];
} }
@ -149,7 +150,7 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
+ (nullable instancetype)fetchObjectWithUniqueID:(NSString *)uniqueID + (nullable instancetype)fetchObjectWithUniqueID:(NSString *)uniqueID
transaction:(YapDatabaseReadTransaction *)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadConnection]); OWSAssert(!transaction.connection.objectCacheEnabled);
return [super fetchObjectWithUniqueID:uniqueID transaction:transaction]; return [super fetchObjectWithUniqueID:uniqueID transaction:transaction];
} }
@ -161,25 +162,9 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
return self.dbReadWriteConnection; return self.dbReadWriteConnection;
} }
// TODO: Replace with protocol connection?
/**
* Override to disable the object cache to better enforce transaction semantics on the store.
* Note that it's still technically possible to access this collection from a different collection,
* but that should be considered a bug.
*/
+ (YapDatabaseConnection *)dbReadWriteConnection + (YapDatabaseConnection *)dbReadWriteConnection
{ {
static dispatch_once_t onceToken; return TSStorageManager.protocolStoreDBConnection;
static YapDatabaseConnection *sharedDBConnection;
dispatch_once(&onceToken, ^{
sharedDBConnection = [TSStorageManager sharedManager].newDatabaseConnection;
sharedDBConnection.objectCacheEnabled = NO;
#if DEBUG
sharedDBConnection.permittedTransactions = YDB_AnySyncTransaction;
#endif
});
return sharedDBConnection;
} }
- (YapDatabaseConnection *)dbReadConnection - (YapDatabaseConnection *)dbReadConnection

@ -27,9 +27,6 @@ NSString *const kSessionStoreDBConnectionKey = @"kSessionStoreDBConnectionKey";
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
protocolStoreDBConnection = [TSStorageManager sharedManager].newDatabaseConnection; protocolStoreDBConnection = [TSStorageManager sharedManager].newDatabaseConnection;
protocolStoreDBConnection.objectCacheEnabled = NO; protocolStoreDBConnection.objectCacheEnabled = NO;
#if DEBUG
protocolStoreDBConnection.permittedTransactions = YDB_AnySyncTransaction;
#endif
}); });
return protocolStoreDBConnection; return protocolStoreDBConnection;

@ -27,7 +27,7 @@ NSString *const TSStorageManagerKeyPrekeyCurrentSignedPrekeyId = @"currentSigned
// Signed prekey ids must be > 0. // Signed prekey ids must be > 0.
int preKeyId = 1 + arc4random_uniform(INT32_MAX - 1); int preKeyId = 1 + arc4random_uniform(INT32_MAX - 1);
ECKeyPair *_Nullable identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPairWithoutProtocolContext]; ECKeyPair *_Nullable identityKeyPair = [[OWSIdentityManager sharedManager] identityKeyPair];
return [[SignedPreKeyRecord alloc] return [[SignedPreKeyRecord alloc]
initWithId:preKeyId initWithId:preKeyId
keyPair:keyPair keyPair:keyPair

Loading…
Cancel
Save