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
        }
    }

0 ответов

Другие вопросы по тегам