Import
Import takes a previously exported blob and runs an internal keygen that derives a fresh device-side share from the encrypted material. The output is a wallet with the same keyId, public key, and blockchain address as the original — but the on-disk share bytes are new.
For the SDK contract see Import Key (Kotlin) and Import Key (Swift).
How the example does it
- Android
- iOS / macOS
vault/.../session/VaultSessionManager.kt
suspend fun importKeyshare(privateKey: ByteArray, keyType: KeyType): KeyResult {
val keyshare = sessionFor(keyType).import(
keysharePrivateKey = privateKey,
rootChainCode = DEFAULT_CHAIN_CODE
).getOrThrow()
val keyId = extractKeyId(keyType, keyshare)
val publicKey = extractPublicKey(keyType, keyshare)
return KeyResult(keyId, publicKey)
}
Vault/Session/VaultSessionManager.swift
func importKeyshare(privateKey: Data, type: KeyType) async throws -> KeygenResult {
let keyshare = try await sessionForKeyType(type).import(
privateKey: privateKey,
rootChainCode: Self.defaultChainCode
).get()
let keyId = try await extractKeyId(type, keyshare: keyshare)
let publicKey = try await extractPublicKey(type, keyshare: keyshare)
return KeygenResult(keyId: keyId, publicKey: publicKey)
}
The SDK auto-persists the new keyshare via the registered storage client, same as keygen. The privateKey parameter is the raw hex bytes from the export blob's exportDataHex field, and keyType comes from the JSON entry's keyType string.