C语言 openssl - what is STACK_OF?


static STACK_OF(CMS_RevocationInfoChoice)
**cms_get0_revocation_choices(CMS_ContentInfo *cms)
{
switch (OBJ_obj2nid(cms->contentType)) {
case NID_pkcs7_signed:
return &cms->d.signedData->crls;

来源另一个问题说是

#define STACK_OF(type) struct stack_st_##type

但是当我用regex#defines*STACK_OF搜索openssl代码时,我没有找到任何条目。

STACK_OF是什么?

STACK_OF()宏定义为:

# define STACK_OF(type) struct stack_st_##type

对于X509类型,结构定义为:

struct x509_st {
X509_CINF cert_info;
X509_ALGOR sig_alg;
.
.
.
char *propq;
} /* X509 */ ;

根据OpenSSL Wiki:

堆栈API

堆栈库提供了处理类的集合的通用方法对象在OpenSSL。可以注册比较函数来排序收集。

接口分为两个头,和& lt; openssl/safestack.h>。前者声明了C函数对象上执行插入、删除、弹出、推送和其他操作栈,而后者声明了一堆宏来强制执行由编译器进行类型检查;这些宏大多是自动生成的mkstack.pl。

中声明的C函数是非常不建议使用的& lt; openssl/stack.h>。中定义的宏& lt; openssl/safestack.h>用于OpenSSL内置堆栈,并声明您的为您的自定义堆栈提供自己的类型检查包装器。

基本使用

堆栈类型是用DECLARE_STACK_OF()宏及其实例是用STACK_OF()宏声明的。

最新更新