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 Выполняет процедуру синхронизации распределенного ключа |