From a4d843726622e4e3c5282c7592999ec8f35a3a5b Mon Sep 17 00:00:00 2001 From: Alexander Osokin Date: Fri, 17 Jan 2025 18:46:41 +0000 Subject: [PATCH] IOS-8934 Add additional attestation on backup card linking --- .../Backup/StartBackupCardLinkingTask.swift | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/TangemSdk/TangemSdk/Operations/Backup/StartBackupCardLinkingTask.swift b/TangemSdk/TangemSdk/Operations/Backup/StartBackupCardLinkingTask.swift index 6315184d..58f4a0ce 100644 --- a/TangemSdk/TangemSdk/Operations/Backup/StartBackupCardLinkingTask.swift +++ b/TangemSdk/TangemSdk/Operations/Backup/StartBackupCardLinkingTask.swift @@ -23,7 +23,6 @@ final class StartBackupCardLinkingTask: CardSessionRunnable { private let primaryCard: PrimaryCard private let addedBackupCards: [String] private let skipCompatibilityChecks: Bool - private var linkingCommand: StartBackupCardLinkingCommand? = nil init(primaryCard: PrimaryCard, addedBackupCards: [String], skipCompatibilityChecks: Bool = false) { self.primaryCard = primaryCard @@ -93,19 +92,36 @@ final class StartBackupCardLinkingTask: CardSessionRunnable { } } - linkingCommand = StartBackupCardLinkingCommand(primaryCardLinkingKey: primaryCard.linkingKey) - linkingCommand!.run(in: session) { result in + let linkingCommand = StartBackupCardLinkingCommand(primaryCardLinkingKey: primaryCard.linkingKey) + linkingCommand.run(in: session) { result in switch result { case .success(let backupCard): guard let card = session.environment.card else { completion(.failure(.missingPreflightRead)) return } - - completion(.success(.init(backupCard: backupCard, card: card))) + + let response = StartBackupCardLinkingTaskResponse(backupCard: backupCard, card: card) + self.runAttestation(session, response: response, completion: completion) + case .failure(let error): + completion(.failure(error)) + } + + withExtendedLifetime(linkingCommand) {} + } + } + + private func runAttestation(_ session: CardSession, response: StartBackupCardLinkingTaskResponse, completion: @escaping CompletionResult) { + let attestationTask = AttestationTask(mode: session.environment.config.attestationMode) + attestationTask.run(in: session) { result in + switch result { + case .success: + completion(.success(response)) case .failure(let error): completion(.failure(error)) } + + withExtendedLifetime(attestationTask) {} } }