Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOS-8008 Sign hashes with different sizes #382

Merged
merged 1 commit into from
Nov 2, 2024

Conversation

tureck1y
Copy link
Collaborator

@tureck1y tureck1y commented Nov 1, 2024

У текущей реализации команды подписи было ограничение, она ожидала хеши одного размера, иначе кидала ошибку. Это связано с техничеакой реализацией подписи - мы передаем на карту конкатенированную подпись и размер хеша, а карта уже сама нарезает, подпись возвращается в таком же виде.

Из дополнительных ограничений - макс 10 хешей за операцию и макс 2 хеша для старых девайсов

Я перерработал чанкование, чтобы хеши объединялись в группы по размерам, с учетом ограничений выше и с сохранением порядка. Порядок респонса с подписями соответствуют порядку переданных хешей. У тому же может быть несколько одинаковых хешей с разными подписями

@@ -125,10 +125,7 @@ public enum TangemSdkError: Error, LocalizedError, Encodable {

/// This error is returned when a `SignCommand` receives only empty hashes for signature.
case emptyHashes

/// This error is returned when a `SignCommand` receives hashes of different lengths for signature.
case hashSizeMustBeEqual
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

больше не актуально, карта конечно все равно вернет свою ошибку, но посредством сдк эту ошибку получить более невозможно

@@ -0,0 +1,56 @@
//
// ChunkHashesUtil.swift
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Перенес старую логику чанкования из команды в отдельную утилиту ради тестируемости и добавил сюда новый чанкинг

// ChunkedHashesContainer.swift
// TangemSdk
//
// Created by Alexander Osokin on 31.10.2024.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сюда перенес стейт менеджмент чанков из команды опять же ради тестируемости. Логика чуть поменялась. Раньше я оперировал ренджами, вычисляя чанки на лету, а теперь сразу чанками

do {
let signatures = try self.processSignatures(with: session.environment)

if let remainingSignatures = session.environment.card?.wallets[self.walletPublicKey]?.remainingSignatures {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

просто перенос пониже, чтобы был доступ к количеству подписей

@@ -20,45 +20,25 @@ public struct SignResponse: JSONStringConvertible {

/// Signs transaction hashes using a wallet private key, stored on the card.
class SignCommand: Command {
typealias Response = SignResponse
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

пришлось поделить, чтобы не делать лишнего в функции десериализации

@tureck1y tureck1y marked this pull request as ready for review November 1, 2024 11:41
@tureck1y tureck1y requested a review from a team as a code owner November 1, 2024 11:41
@tureck1y tureck1y merged commit 7c6f60d into develop Nov 2, 2024
3 checks passed
@tureck1y tureck1y deleted the IOS-8008_sign_hashes_multiple_sizes branch November 2, 2024 15:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants