Ошибка при выполнении функции rt_eng_p11_key_pair_wrap на swift. iOS
Добрый день, коллеги.
Подскажите, пожалуйста, как сделать корректный вызов функции rt_eng_p11_key_pair_wrap на swift?
Скачал последнюю версию SDK и пытался собрать Ваш пример из гитхаб для iOS на swift (https://github.com/AktivCo/rutoken-demoshift-ios), перед этим подложив в проект нужные framework'и (openssl 1.1, engine - 1.1). Но наткнулся на проблему отсутствия rt_eng_init / rt_eng_final / rt_eng_p11_session_new и так далее (https://github.com/AktivCo/rutoken-demo … .swift#L54). Посмотрев на другой Ваш проект для iOS на Objc обнаружил, что вместо вышеуказанных функции там используется rt_eng_load_engine / rt_eng_unload_engine / rt_eng_p11_session_wrap и так далее. Поэтому заменил часть функций engine из swift проекта на функции из Objc проекта.
Пример кода:
let publicHandle: CK_OBJECT_HANDLE = findObject(CKO_PUBLIC_KEY, ...)
let privateHandle: CK_OBJECT_HANDLE = findObject(CKO_PRIVATE_KEY, ...)
var functionList = CK_FUNCTION_LIST()
try withUnsafeMutablePointer(to: &functionList) { pointer in
var functionListPointer: UnsafeMutablePointer<CK_FUNCTION_LIST>? = pointer
let rv = C_GetFunctionList(&functionListPointer)
guard rv == CKR_OK else {
throw "Error"
}
guard let wrappedSession = rt_eng_p11_session_wrap(functionListPointer, token.session, 0, nil) else {
throw "Error"
}
defer {
rt_eng_p11_session_free(wrappedSession)
}
guard let evpPKey = rt_eng_p11_key_pair_wrap(wrappedSession, privateHandle, publicHandle) else {
throw "Error" // получаю ошибку
}
defer {
EVP_PKEY_free(evpPKey)
}
...
}
Предполагаю, что получение handle'ов ключей валидно, так как вызов функции C_EX_PKCS7Sign с использованием этих ключей выполняется успешно.