在 Swift 中使用 OpenSSL BN_hex2bn 4 - 如何构建句柄

Use of OpenSSL BN_hex2bn in Swift 4 - How to build the handle

我要把int BN_hex2bn(BIGNUM **a, const char *str);改成Swiftclass;我实际上准备了以下代码:

class Test {
    var N : UnsafeMutablePointer<BIGNUM>
    var N_hex: String = "...HEX VALUE...";
    init() {
        self.N = BN_new()
    }
    use() {
        var Nhandle: UnsafeMutablePointer<UnsafeMutablePointer<BIGNUM>?>? = [???]
        BN_hex2bn(Nhandle, self.N_hex);
    }
}

好吧,如您所知,我在初始化句柄时遇到了一些问题! :-)

更好:在Swift中使用这种功能是正确的方法吗?有不同的方法吗?如何初始化句柄?

感谢您的解答!

BN_hex2bn() 期望 BIGNUM * 的地址作为第一个参数,在 Swift 中是 UnsafeMutablePointer<BIGNUM>? 变量的地址。您“仅”必须声明该变量(可选值自动用 nil 初始化)并将其作为带有 & 的输入参数传递给函数。示例:

let hexString = "123456789abcdef"

var bn: UnsafeMutablePointer<BIGNUM>?
BN_hex2bn(&bn, hexString)

// Do something with `bn` ...   

// Eventually free the memory:
BN_free(bn)

如果你把它包装在Swift class中,那么释放资源可以在deinit方法中完成:

class BN {
    var bn: UnsafeMutablePointer<BIGNUM>?

    init(hexString: String) {
        BN_hex2bn(&bn, hexString)
    }

    deinit {
        if let bn = bn { BN_free(bn) }
    }
}