gpt4 book ai didi

c++ - 如何使用 Openssl 编码 ASN.1 上下文特定

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:48 25 4
gpt4 key购买 nike

我正在尝试对 pkcs7 封装的内容信息进行编码:

Sequence:
OID
[0] Context-specific
OCTET STRING

我的第一个问题是编码特定上下文:

[0] Context-specific

所以我尝试用“Octet String”创建一个“SET Context-specific”,但没有成功:

// Create ASN1_OCTET
ASN1_OCTET_STRING *obj = ASN1_OCTET_STRING_new();
const BYTE* ptr = dataToSign.getData();
ASN1_OCTET_STRING_set(obj, ptr, dataToSign.getSize());

// Create ASN1_TYPE using ASN1_OCTET
ASN1_TYPE *asn1Type = ASN1_TYPE_new();
asn1Type->type = V_ASN1_OCTET_STRING;
asn1Type->value.octet_string = obj;

// Using i2d_ASN1_SET_OF_ASN1_TYPE
stack_st_ASN1_TYPE* sk = sk_ASN1_TYPE_new_null();
sk_ASN1_TYPE_push(sk,asn1Type);
int tamanho = i2d_ASN1_SET_OF_ASN1_TYPE(sk,(unsigned char **) NULL, i2d_ASN1_TYPE,V_ASN1_SET, V_ASN1_CONTEXT_SPECIFIC, IS_SET);
unsigned char* data = new BYTE[tamanho];
tamanho = i2d_ASN1_SET_OF_ASN1_TYPE(sk,(unsigned char **) &data, i2d_ASN1_TYPE,V_ASN1_SET, V_ASN1_CONTEXT_SPECIFIC, IS_SET);

我在openssl的网站上没有找到文档.这个地方比较好umich - Openssl documentation

我走在正确的轨道上吗?

最佳答案

使用 i2d_ASN1_bytes 函数:

// Initialize ASN1_STRING inplace (no need to free)
ASN1_STRING s = { 0, 0, NULL, 0};
// Initialize with our data
ASN1_STRING_set0(&obj, dataToSign.getData(), dataToSign.getSize());

// Get resulting object length
int data_len = i2d_ASN1_bytes(obj, NULL, 0, V_ASN1_CONTEXT_SPECIFIC)
// Encode object with context tag 0
unsigned char* data = new BYTE[data_len];
unsigned char* p = data;
i2d_ASN1_bytes(obj, &p, 0, V_ASN1_CONTEXT_SPECIFIC);

关于c++ - 如何使用 Openssl 编码 ASN.1 上下文特定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19528000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com