在基于OpenSSL的SSL服务器应用程序中,我们如何以编程方式加载PKCS#12文件?
另外,我可以在OpenSSL的同一文件中加载具有证书,密钥和CA的PKCS#12文件吗?
我正在尝试为Sundials CVODE库编写CFFI包装器.SWIG对Sundials标题感到窒息,因为它们相互关联,SWIG找不到正确的标题,所以我手工完成:有点费力,但我已经管理好了.
现在我正在尝试测试它是否正常工作.现在,只需创建"问题对象"并删除它.这就是问题开始的地方.因此,"问题对象"是通过函数分配的
SUNDIALS_EXPORT void *CVodeCreate(int lmm, int iter);
Run Code Online (Sandbox Code Playgroud)
为此我创建了包装器:
(cffi:defcfun "CVodeCreate" :pointer
(lmm :int)
(iter :int))
Run Code Online (Sandbox Code Playgroud)
PS.SUNDIALS_EXPORT(至少在Unix上)基本上没什么.
现在,为了销毁对象,Sundials使用它自己的功能:
SUNDIALS_EXPORT void CVodeFree(void **cvode_mem);
Run Code Online (Sandbox Code Playgroud)
所以,我需要将它的引用传递给它CVodeCreate.在C中,如果我的记忆没有错,我会做类似的事情CVodeFree(&problem_object).在CL我写了这个函数的包装器:
(cffi:defcfun "CVodeFree" :void
(cvode-mem :pointer))
Run Code Online (Sandbox Code Playgroud)
所以,这COVDE-MEM是一个指向指针的指针.问题是如何在CL/CFFI中获取指针的指针?这是代码的开头:
(defvar *p* (cvodecreate 1 2))
Run Code Online (Sandbox Code Playgroud)
(PS.不要担心传递的数字CVODECREATE,他们只是告诉使用哪些方法,仍然需要定义常量以使其更具可读性)
所以*P*是一样的东西
#.(SB-SYS:INT-SAP #X7FFFE0007060)
Run Code Online (Sandbox Code Playgroud)
如果我直接传递给它CVODEFREE,它最终会出错:
CL-USER> (cvodefree *p*)
; Evaluation aborted on #<SIMPLE-ERROR "bus error at #X~X" {1005EC9BD3}>.
Run Code Online (Sandbox Code Playgroud)
我试过传递,(CFFI:POINTER-ADDRESS *P*)但它导致类似的"总线错误......"(甚至不确定此函数是否返回我需要的).我也尝试过(CFFI:MAKE-POINTER (CFFI:POINTER-ADDRESS *P*)),再一次没有任何成功.
这个问题暗示了这种方法:
(cffi:with-foreign-object …Run Code Online (Sandbox Code Playgroud)