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

Установка

На текущий момент установке подлежат следующие модули:

  • com.spatium:spatium-sdk - основной пакет Spatium SDK, содержащий логику протокола и основной криптографии.
  • com.spatium:signer-client-kotlin - вспомогательный пакет, содержащий специфические компоненты для работы SDK cо Spatium Signer Service

Access

Оба пакета доступны в приватном Maven репозитории Spatium (логин и пароль можно получить напрямую у команды Spatium):

В файле settings.gradle добавьте Spatium Maven репозиторий:

dependencyResolutionManagement {
    ...
    repositories {
        ...
        maven {
            url "https://registry.spatium.io/repository/maven-develop-spt/"
            credentials {
                username = 'YOUR_USERNAME'
                password = 'YOUR_PASSWORD'
            }
        }
    }
}

В файле gradle вашего модуля приложения добавьте зависимости:

dependencies {
    ...
    implementation 'com.spatium:spatium-sdk:1.0.2'
    implementation 'com.spatium:signer-client-kotlin:1.0.2'
}

Соединение

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

import com.spatium.signerclient.AuthorizationSession
import com.spatium.signerclient.SignerClient
import com.spatium.spatiumsdk.EcdsaCurve
import com.spatium.spatiumsdk.MemoryStorageDriver
import com.spatium.spatiumsdk.SpatiumCrypto
import com.spatium.spatiumsdk.syncDistributedEcdsaKey

suspend fun syncECDSA(username: String, password: String): String {
    val auth = AuthorizationSession(
        url = "https://api-cloud-dev.spatium.io/authorization/v1",
        tokenId = UUID.randomUUID().toString(),
        permissions = listOf("read", "secret")
    )

    val clientCache = MemoryStorageDriver()
    val clientStorage = MemoryStorageDriver()

    val clientCrypto = SpatiumCrypto(cache = clientCache, storage = clientStorage)

    val clientProtocol = SignerClient(
        url = "https://api-cloud-dev.spatium.io/signer/v1",
        auth = auth,
        crypto = clientCrypto,
        timeout = (60 * 1000).toUInt()
    )

    // Retrieve a securityToken for an existing user via Cloud API

    clientProtocol.auth.establish(listOf(securityToken))

    clientProtocol.connect((60*1000).toUInt())

    delay(4000)

    val secretId = UUID.randomUUID().toString()
    clientProtocol.generateDistributedSecret(
        secretId = secretId);

    val syncSessionId = UUID.randomUUID().toString()

    val publicKey = syncDistributedEcdsaKey(
        driver = clientProtocol,
        secretId = secretId,
        syncSessionId = syncSessionId,
        curve = EcdsaCurve.secp256k1,
        derivationCoin = 0U,
        derivationAccount = 0U
    )
    return publicKey
}