diff --git a/Riot/Modules/Application/LegacyAppDelegate.m b/Riot/Modules/Application/LegacyAppDelegate.m index 236fd2cdd..4ed6ddf02 100644 --- a/Riot/Modules/Application/LegacyAppDelegate.m +++ b/Riot/Modules/Application/LegacyAppDelegate.m @@ -3753,7 +3753,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni - (void)keyVerificationCoordinatorBridgePresenterDelegateDidComplete:(KeyVerificationCoordinatorBridgePresenter *)coordinatorBridgePresenter otherUserId:(NSString * _Nonnull)otherUserId otherDeviceId:(NSString * _Nonnull)otherDeviceId { - MXCrypto *crypto = coordinatorBridgePresenter.session.crypto; + id crypto = coordinatorBridgePresenter.session.crypto; if (!crypto.backup.hasPrivateKeyInCryptoStore || !crypto.backup.enabled) { MXLogDebug(@"[AppDelegate][MXKeyVerification] requestAllPrivateKeys: Request key backup private keys"); @@ -3998,7 +3998,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni - (void)registerUserDidSignInOnNewDeviceNotificationForSession:(MXSession*)session { - MXCrossSigning *crossSigning = session.crypto.crossSigning; + id crossSigning = session.crypto.crossSigning; if (!crossSigning) { @@ -4089,7 +4089,7 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni - (void)registerDidChangeCrossSigningKeysNotificationForSession:(MXSession*)session { - MXCrossSigning *crossSigning = session.crypto.crossSigning; + id crossSigning = session.crypto.crossSigning; if (!crossSigning) { diff --git a/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m b/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m index 128e9b161..cec79f31c 100644 --- a/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m +++ b/Riot/Modules/MatrixKit/Models/Account/MXKAccount.m @@ -1743,8 +1743,18 @@ static NSArray *initialSyncSilentErrorsHTTPStatusCodes; return; } + if (![mxSession.crypto.crossSigning isKindOfClass:[MXLegacyCrossSigning class]]) { + MXLogFailure(@"Device dehydratation is currently only supported by legacy cross signing, add support to all implementations"); + if (failure) + { + failure(nil); + } + return; + } + MXLegacyCrossSigning *crossSigning = (MXLegacyCrossSigning *)mxSession.crypto.crossSigning;; + MXLogDebug(@"[MXKAccount] attemptDeviceDehydrationWithRetry: starting device dehydration"); - [[MXKAccountManager sharedManager].dehydrationService dehydrateDeviceWithMatrixRestClient:mxRestClient crypto:mxSession.crypto dehydrationKey:keyData success:^(NSString *deviceId) { + [[MXKAccountManager sharedManager].dehydrationService dehydrateDeviceWithMatrixRestClient:mxRestClient crossSigning:crossSigning dehydrationKey:keyData success:^(NSString *deviceId) { MXLogDebug(@"[MXKAccount] attemptDeviceDehydrationWithRetry: device successfully dehydrated"); if (success) diff --git a/Riot/Modules/Settings/Security/SecurityViewController.m b/Riot/Modules/Settings/Security/SecurityViewController.m index 2e7993c38..f76b891cb 100644 --- a/Riot/Modules/Settings/Security/SecurityViewController.m +++ b/Riot/Modules/Settings/Security/SecurityViewController.m @@ -627,7 +627,7 @@ TableViewSectionsDelegate> - (void)loadCrossSigning { - MXCrossSigning *crossSigning = self.mainSession.crypto.crossSigning; + id crossSigning = self.mainSession.crypto.crossSigning; [crossSigning refreshStateWithSuccess:^(BOOL stateUpdated) { if (stateUpdated) @@ -643,7 +643,7 @@ TableViewSectionsDelegate> { NSInteger numberOfRowsInCrossSigningSection; - MXCrossSigning *crossSigning = self.mainSession.crypto.crossSigning; + id crossSigning = self.mainSession.crypto.crossSigning; switch (crossSigning.state) { case MXCrossSigningStateNotBootstrapped: // Action: Bootstrap @@ -661,7 +661,7 @@ TableViewSectionsDelegate> - (NSAttributedString*)crossSigningInformation { - MXCrossSigning *crossSigning = self.mainSession.crypto.crossSigning; + id crossSigning = self.mainSession.crypto.crossSigning; NSString *crossSigningInformation; switch (crossSigning.state) @@ -708,7 +708,7 @@ TableViewSectionsDelegate> buttonCell.mxkButton.accessibilityIdentifier = nil; // And customise it - MXCrossSigning *crossSigning = self.mainSession.crypto.crossSigning; + id crossSigning = self.mainSession.crypto.crossSigning; switch (crossSigning.state) { case MXCrossSigningStateNotBootstrapped: // Action: Bootstrap diff --git a/RiotTests/UserSessionsDataProviderTests.swift b/RiotTests/UserSessionsDataProviderTests.swift index 85459347e..df504a992 100644 --- a/RiotTests/UserSessionsDataProviderTests.swift +++ b/RiotTests/UserSessionsDataProviderTests.swift @@ -111,7 +111,7 @@ private class MockSession: MXSession { } /// A mock `MXCrypto` that can override the `canCrossSign` state. -private class MockCrypto: MXCrypto { +private class MockCrypto: MXLegacyCrypto { let canCrossSign: Bool override var crossSigning: MXCrossSigning! { MockCrossSigning(canCrossSign: canCrossSign) } @@ -123,7 +123,7 @@ private class MockCrypto: MXCrypto { } /// A mock `MXCrossSigning` with an overridden `canCrossSign` property. -private class MockCrossSigning: MXCrossSigning { +private class MockCrossSigning: MXLegacyCrossSigning { let canCrossSignMock: Bool override var canCrossSign: Bool { canCrossSignMock } diff --git a/changelog.d/pr-6943.change b/changelog.d/pr-6943.change new file mode 100644 index 000000000..6e35736b1 --- /dev/null +++ b/changelog.d/pr-6943.change @@ -0,0 +1 @@ +Crypto: Define MXCrypto and MXCrossSigning as protocols