Перейти к содержанию

Spatium SDK > ProtocolKotlin

ProtocolKotlin

interface ProtocolKotlin

Надежный MPC протокол подписания для ECDSA и EDDSA систем

Основан на Crypto и Transport Drivers, следовательно, полностью инкапсулирует криптографические данные и данные передачи сообщений внутри MPC алгоритмов. Сейчас поддерживается только 2-из-2 схема подписания, однако интерфейс должен остаться таким же для большего количества схем.

Пример

// Предполагаем что уже есть существующий секрет, связанный с secretId

// Генерируем случайный session ID для новой сессии синхронизации
val syncSessionId = UUID.randomUUID().toString()

// Выполняем ECDSA-over-secp256k1 процедуру синхронизации для ключа с путем ```m/44'/0'/0'/0'/0'```
val publicKey = syncDistributedEcdsaKey(driver, secretId, syncSessionId, EcdsaCurve.secp256k1 , 0, 0);

// К этому моменту данные синхронизации уже сохранены в хранилище и составной ключ доступен к получению
val _publicKey = getEcdsaPublicKey(driver, secretId, syncSessionId);

// Этот ключ, очевидно, является тем же ключом, который мы получаем из самой процедуры синхронизации
Assert.assertEquals(publicKey, _publicKey)

// Генерируем случайный session ID для новой сессии подписания
const signSessionId = UUID.randomUUID().toString()

// Сообщение к подписанию
val message = "7hJ9yN2OdIQo2kJu0arZgw2EKnMX5FGtQ6jlCWuLXCM="

// Генерируем ECDSA подпись
val signature = signEcdsaMessage(driver, secretId, syncSessionId, signSessionId, message, signatureToken)

// Верифицируем подпись к составному ключу
println(
 mapOf(
     "curve" to EcdsaCurve.secp256k1,
     "publicKey" to publicKey,
     "message" to message,
     "signature" to mapOf(
         "r" to signature.r,
         "s" to signature.s,
         "recovery" to signature.recovery
     )
 )
)

Наследники

SpatiumProtocol

Функции

Имя Описание
getEcdsaPublicKey [androidJvm]
abstract suspend fun getEcdsaPublicKey(secretId: String, syncSessionId: String): String
Получение составного публичного ключа из уже выполненного сеанса синхронизации
getEddsaPublicKey [androidJvm]
abstract suspend fun getEddsaPublicKey(secretId: String, syncSessionId: String): String
Получение составного публичного ключа из уже выполненного сеанса синхронизации
off [androidJvm]
abstract fun off()
Отписка от серверных событий
on [androidJvm]
abstract fun on(validateMessage: (message: String, signatureToken: String) -> Boolean)
Подписка на серверные события
removeDistributedEcdsaKey [androidJvm]
abstract suspend fun removeDistributedEcdsaKey(secretId: String, syncSessionId: String)
Удаляет уже существующую сессию синхронизации из хранилища
removeDistributedEddsaKey [androidJvm]
abstract suspend fun removeDistributedEddsaKey(secretId: String, syncSessionId: String)
Удаляет уже существующую сессию синхронизации из хранилища
signEcdsaMessage [androidJvm]
abstract suspend fun signEcdsaMessage(secretId: String, syncSessionId: String, signSessionId: String, message: String, signatureToken: String): EcdsaSignature
Генерирует распределенную ECDSA подпись для данного сообщения
signEddsaMessage [androidJvm]
abstract suspend fun signEddsaMessage(secretId: String, syncSessionId: String, signSessionId: String, message: String, signatureToken: String): EddsaSignature
Генерирует распределенную EDDSA подпись для данного сообщения
syncDistributedEcdsaKey [androidJvm]
abstract suspend fun syncDistributedEcdsaKey(secretId: String, syncSessionId: String, curve: EcdsaCurve, derivationCoin: UInt, derivationAccount: UInt): String
Выполняет процедуру синхронизации распределенного ключа
syncDistributedEddsaKey [androidJvm]
abstract suspend fun syncDistributedEddsaKey(secretId: String, syncSessionId: String, curve: EddsaCurve, derivationCoin: UInt, derivationAccount: UInt): String
Выполняет процедуру синхронизации распределенного ключа