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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)