Kotlin kmm создает переменную с типом: CValuesRef <CCCryptorRefVar>
var cryptor: CValuesRef<CCCryptorRefVar>
С kotlin KMM, в проекте iosMain
Я не могу инициализировать данные для шифровальщика.
Мне нужны данные инициализации для var, потому что мне нужно использовать func CCCryptorCreateWithMode
я попробую
var cryptor: CValuesRef<CCCryptorRefVar> = memScoped { cValue() }
но когда я получаю значение после запуска func CCCryptorCreateWithMode
cryptor.getPointer(MemScope()).pointed.value
он всегда NULL, мне нужно, чтобы он имел значение
пожалуйста, помогите мне.
Полный код
fun encryptOrDecryptData(data: NSData, key: Any, iv: Any): NSData? {
var status: CCCryptorStatus
if (key is NSData || key is NSString) {
//validate ok
} else {
println("key class type invalid (valid: NSData || NSString)")
return null
}
if (iv is NSData || iv is NSString) {
//validate ok
} else {
println("iv class type invalid (valid: NSData || NSString)")
return null
}
var keyData: NSMutableData?
var ivData: NSMutableData?
if (key is NSData) {
keyData = key.mutableCopy() as NSMutableData?
} else {
keyData = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding)?.mutableCopy() as NSMutableData?
}
if (iv is NSData) {
ivData = iv.mutableCopy() as NSMutableData?
} else {
ivData = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding)?.mutableCopy() as NSMutableData?
}
var cryptor: CValuesRef<CCCryptorRefVar> = memScoped { cValue() }
status = CCCryptorCreateWithMode(
op = kCCEncrypt,
mode = kCCModeCTR,
alg = kCCAlgorithmAES128,
padding = ccNoPadding,
iv = ivData?.bytes(),
key = keyData?.bytes(),
keyLength = 16,
tweak = null,
tweakLength = 0,
numRounds = 0,
options = kCCModeOptionCTR_BE,
cryptorRef = cryptor)
if (status != kCCSuccess) {
println("ERROR: CCCryptorCreateWithMode error: status = " + status)
return null
}
var cryptorRef = cryptor.getPointer(MemScope()).pointed.value
if (cryptorRef != null) {
var result: NSData? = _runCryptor(cryptorRef, data)
return result
} else {
println("ERROR: cryptorRef == null")
return null
}
}