使用openssl解析自定义asn1数据失败
我现有一段asn1结构体数据如下:
现在我用openssl自定义了对应的结构体,并用代码去解析但是返回了错误:
//对应的结构定义
typedef struct Data_st
{
ASN1_OBJECT* type;
ASN1_BOOLEAN* critical;
ASN1_OCTET_STRING* extnValue;
}Data;
DECLARE_ASN1_FUNCTIONS(Data)
ASN1_SEQUENCE(Data) = {
ASN1_SIMPLE(Data, type, ASN1_OBJECT),
ASN1_SIMPLE(Data, critical, ASN1_BOOLEAN),
ASN1_SIMPLE(Data, extnValue, ASN1_OCTET_STRING)
} ASN1_SEQUENCE_END(Data)
IMPLEMENT_ASN1_FUNCTIONS(Data)
typedef struct Datas_st
{
STACK_OF(Data)* list;
} Datas;
DECLARE_ASN1_FUNCTIONS(Datas)
ASN1_SEQUENCE(Datas) = {
ASN1_SEQUENCE_OF(Datas, list, Data)
} ASN1_SEQUENCE_END(Datas)
IMPLEMENT_ASN1_FUNCTIONS(Datas)
//解析的代码:
void func()
{
unsigned char* ucData = NULL;
int nDataLen = 0;
FILE* pf = fopen("Datas", "rb");
if (pf)
{
fseek(pf, 0, SEEK_END);
nDataLen = ftell(pf);
fseek(pf, 0, SEEK_SET);
ucData = new unsigned char[nDataLen];
fread(ucData, 1, nDataLen, pf);
fclose(pf);
}
else
{
std::cout << "read err\n";
return;
}
const unsigned char* ucDataTmp = ucData;
Datas* p = d2i_Datas(NULL, &ucDataTmp, nDataLen);
if (p)
{
}
else
{
unsigned long ul = ERR_get_error();
std::cout << ERR_error_string(ul, NULL) << std::endl;
std::cout << "parse err\n";
delete[] ucData ;
return;
}
delete[] ucData ;
}
因为Data对象可能有多个,所以用了STACK_OF
以上代码解析会走到parse err,得到的openssl错误信息是:
error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag
请帮忙看看是哪里弄错了