Code: Select all
// iosMain
import platform.Security.*
import kotlinx.cinterop.*
class SecureStorageIOS : SecureStorage {
override fun save(key: String, value: String) {
val data = value.encodeToByteArray().toNSData()
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecValueData to data
)
SecItemAdd(query, null)
}
override fun get(key: String): String? {
val query = mapOf(
kSecClass to kSecClassGenericPassword,
kSecAttrAccount to key,
kSecReturnData to kCFBooleanTrue!!,
kSecMatchLimit to kSecMatchLimitOne
)
memScoped {
val result = nativeHeap.alloc()
val status = SecItemCopyMatching(query, result.ptr)
if (status == errSecSuccess) {
val nsData = result.value as NSData
return nsData.toByteArray().decodeToString()
}
}
return null
}
}
Meine Fragen:
- Was ist der richtige Weg, ByteArray in NSData in
Kotlin/Native zu konvertieren? - Gibt es eine einfachere oder empfohlene Möglichkeit, den Schlüsselbund in KMP für
Sicherheit zu verwenden? Lagerung?
Mobile version