如何在C ++中使用openssl从ASN1 ENUMERATED中获取值

时间:2012-06-12 14:35:12

标签: c++ cryptography openssl asn.1

我没有在openssl页面上找到有关如何使用ASN1_ENUMERATED的文档。

使用BERViewer可视化结构:
enter image description here

所以我用过:

ASN1_SEQUENCE_ANY *asn1SequenceAny = sk_ASN1_TYPE_new_null();
asn1SequenceAny = d2i_ASN1_SEQUENCE_ANY(&asn1SequenceAny, (const unsigned char**)&data,len);

ASN1_TYPE *asn1Type = NULL;
asn1Type = sk_ASN1_TYPE_pop(asn1SequenceAny);
if(asn1Type->type == V_ASN1_ENUMERATED)
{
    asn1Type->value.enumerated->data; // How to get sequence inside [0] ?
}

磁盘上的枚举数据" asn1Type-> value.enumerated-> data"看起来像:
enter image description here

如何从[0]获取ASN1_SEQUENCE_ANY:

SEQUENCE
     |__SEQUENCE
     |__SEQUENCE

我试过了: ASN1_ENUMERATED_get,返回-1。为什么不归零?

非常欢迎文章。

1 个答案:

答案 0 :(得分:0)

OpenSSL提供了许多解码这些消息的功能。您必须知道编码它的相应函数是什么,因为解码例程还解析输出以确保解码的消息与您调用的解码方法隐含的预期类型匹配。你似乎想要:

d2i_ASN1_OBJECT (3ssl) - ASN1 OBJECT IDENTIFIER functions

但是如果这不对,你可以搜索d2i的OpenSSL文档,你会发现很多函数要尝试。

如果您下载OpenSSL source code,请在解压缩后查看apps子目录,并阅读asn1pars.c文件。或者,您可以按this link在线查看。希望这有帮助!