Установка
На текущий момент установке подлежат следующие модули:
- 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
}