将 C 头文件添加到 Swift 项目,以便 PKCS11 与 Safenet 5110 接口

问题描述 投票:0回答:0

我有一个 Safenet 5110 加密狗。我正在使用 MacOS ventura 13.2.1(带有 Swift 5.7 和 Xcode 14.2)。我已经下载了驱动程序以使用加密狗(Safenet 身份验证令牌 - SAC)进行身份验证。在那里,我找到了

libeTPkcs11.dylib
,可以用来与他们的加密狗进行通信。

这是我的代码:

import Foundation

let pkcs11LibPath = "/usr/local/lib/libeTPkcs11.dylib"
let pkcs11LibHandle = dlopen(pkcs11LibPath, RTLD_NOW)

if pkcs11LibHandle == nil {
    let errorMsg = String(cString: dlerror())
    print("Failed to load PKCS#11 library: \(errorMsg)")
    exit(1)
}

// Get a pointer to the C_GetInfo function
let cGetInfoPtr = dlsym(pkcs11LibHandle, "C_GetInfo")
typealias C_GetInfo_Type = @convention(c) (UnsafeMutableRawPointer?, UnsafeMutablePointer<CK_INFO>?) -> CK_RV
let cGetInfo = unsafeBitCast(cGetInfoPtr, to: C_GetInfo_Type.self)

// Call the C_GetInfo function to get information about the token
var info = CK_INFO()
let rv = cGetInfo(nil, &info)

if rv != CKR_OK {
    print("Failed to get token info: \(rv)")
    exit(1)
}

print("Manufacturer ID: \(String(cString: &info.manufacturerID))")
print("Model: \(String(cString: &info.model))")
print("Serial number: \(String(cString: &info.serialNumber))")

我尝试编译代码时出现以下错误:

  • 在范围内找不到类型“CK_RV”
  • 在范围内找不到类型“CK_INFO”

我认为,这些来自 OASIS 规范的 pkcs11.h 头文件。

我创建了一个桥接头

caclient-Bridging-Header.h
。我在那里包含了文件
pkcs11.h
。但我认为 xcode 将头文件识别为 objective-c 头文件(不是 c99 头文件)。

c swift objective-c macos pkcs#11
© www.soinside.com 2019 - 2024. All rights reserved.