Add protocol context to protocol kit.

This commit is contained in:
Matthew Chen 2018-01-30 16:41:25 -05:00
parent d3e16583eb
commit bbd689bfd0
14 changed files with 28 additions and 53 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,6 +3,7 @@
//
#import "OWSRecipientIdentity.h"
#import "TSStorageManager+SessionStore.h"
#import "TSStorageManager.h"
#import <YapDatabase/YapDatabase.h>
@ -127,21 +128,21 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]);
OWSAssert(!transaction.connection.objectCacheEnabled);
[super saveWithTransaction:transaction];
}
- (void)removeWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]);
OWSAssert(!transaction.connection.objectCacheEnabled);
[super removeWithTransaction:transaction];
}
- (void)touchWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
{
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadWriteConnection]);
OWSAssert(!transaction.connection.objectCacheEnabled);
[super touchWithTransaction:transaction];
}
@ -149,7 +150,7 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
+ (nullable instancetype)fetchObjectWithUniqueID:(NSString *)uniqueID
transaction:(YapDatabaseReadTransaction *)transaction
{
OWSAssert(transaction.connection == [OWSRecipientIdentity dbReadConnection]);
OWSAssert(!transaction.connection.objectCacheEnabled);
return [super fetchObjectWithUniqueID:uniqueID transaction:transaction];
}
@ -161,25 +162,9 @@ OWSSignalServiceProtosVerifiedState OWSVerificationStateToProtoState(OWSVerifica
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
{
static dispatch_once_t onceToken;
static YapDatabaseConnection *sharedDBConnection;
dispatch_once(&onceToken, ^{
sharedDBConnection = [TSStorageManager sharedManager].newDatabaseConnection;
sharedDBConnection.objectCacheEnabled = NO;
#if DEBUG
sharedDBConnection.permittedTransactions = YDB_AnySyncTransaction;
#endif
});
return sharedDBConnection;
return TSStorageManager.protocolStoreDBConnection;
}
- (YapDatabaseConnection *)dbReadConnection

View File

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

View File

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