int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); 怎么使用

时间: 2024-02-27 15:57:58 浏览: 24
函数ASN1_parse()的作用是解析ASN.1格式的数据,其中参数含义如下: - bp:BIO对象,用于从内存或文件中读取数据。 - pp:指向ASN.1格式数据的指针。 - len:数据长度。 - indent:缩进量,用于输出解析结果时对格式化输出的支持。 你可以使用以下代码调用该函数: ```c #include <openssl/asn1.h> BIO *bp = BIO_new_file("data.asn1", "rb"); unsigned char *buf = NULL; long len = BIO_get_mem_data(bp, &buf); ASN1_parse(bp, buf, len, 0); ``` 这段代码打开名为"data.asn1"的ASN.1格式文件,并读取其中的数据。然后,使用缓冲区中的数据调用ASN1_parse()函数进行解析,indent参数为0,表示不使用缩进。
相关问题

int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent)这个接口应该怎么使用,请使用这个接口解析下列数据-----BEGIN TR34 Sample KDH 1 IssuerAndSerialNumber PEM File----- MEowQTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFRSMzQgU2FtcGxlczEbMBkGA1UE AxMSVFIzNCBTYW1wbGUgQ0EgS0RIAgU0AAAABg== -----END TR34 Sample KDH 1 IssuerAndSerialNumber PEM File-----规定使用linux c代码

这个接口是用来解析 ASN.1 编码的数据的,可以在 OpenSSL 库中使用。ASN.1 是一种用于描述数据结构和编码的标准。在这个具体的问题中,要使用这个接口来解析以下数据: -----BEGIN TR34 Sample KDH 1 IssuerAndSerialNumber PEM File----- MEowQTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFRSMzQgU2FtcGxlczEbMBkGA1UEAxMSVFIzNCBTYW1wbGUgQ0EgS0RIAgU0AAAABg== -----END TR34 Sample KDH 1 IssuerAndSerialNumber PEM File----- 具体的使用步骤如下: 1. 首先,需要将数据从 PEM 格式转换为 DER 格式,可以使用 OpenSSL 库中的 PEM_read_bio_X509() 函数将数据读入 BIO 中,并使用 d2i_X509_bio() 函数将数据转换为 DER 格式。 2. 然后,可以调用 ASN1_parse() 函数来解析 DER 格式的数据。这个函数的第一个参数是一个 BIO 对象,第二个参数是一个指向要解析的数据的指针,第三个参数是数据的长度,第四个参数是缩进的级别。 下面是一个简单的示例程序,演示了如何使用 ASN1_parse() 函数解析 DER 格式的数据: ```c #include <openssl/asn1.h> #include <openssl/bio.h> #include <openssl/x509.h> int main() { // 读入 PEM 格式的数据 const char *data = "-----BEGIN TR34 Sample KDH 1 IssuerAndSerialNumber PEM File-----\n" "MEowQTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDFRSMzQgU2FtcGxlczEbMBkGA1UE\n" "AxMSVFIzNCBTYW1wbGUgQ0EgS0RIAgU0AAAABg==\n" "-----END TR34 Sample KDH 1 IssuerAndSerialNumber PEM File-----\n"; BIO *bp = BIO_new_mem_buf((void *)data, strlen(data)); X509 *x509 = PEM_read_bio_X509(bp, NULL, NULL, NULL); unsigned char *der_data = NULL; int der_len = i2d_X509(x509, &der_data); // 解析 DER 格式的数据 ASN1_parse(NULL, der_data, der_len, 0); // 释放资源 OPENSSL_free(der_data); X509_free(x509); BIO_free(bp); return 0; } ``` 在这个示例程序中,首先将 PEM 格式的数据读入 BIO 中,然后使用 PEM_read_bio_X509() 函数将数据转换为 X509 对象,再使用 i2d_X509() 函数将数据转换为 DER 格式。最后,调用 ASN1_parse() 函数解析 DER 格式的数据,并释放资源。

int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len );

mbedtls_asn1_write_len是mbedTLS库中的一个函数,用于将ASN.1长度编码写入给定的缓冲区。参数p是一个指向缓冲区的指针,start是缓冲区的开始地址,len是要编码的长度。函数会更新p指针的值,指向编码后的长度的末尾。

相关推荐

typedef struct pkcs9_attribute_st { ASN1_OBJECT *object; ASN1_STRING *randomvalues; }PKCS9_ATTRIBUTE; ASN1_SEQUENCE(PKCS9_ATTRIBUTE) = { ASN1_SIMPLE(PKCS9_ATTRIBUTE, object, ASN1_OBJECT), ASN1_SET_OF(PKCS9_ATTRIBUTE, randomvalues, ASN1_ANY) } ASN1_SEQUENCE_END(PKCS9_ATTRIBUTE) IMPLEMENT_ASN1_FUNCTIONS(PKCS9_ATTRIBUTE) IMPLEMENT_ASN1_DUP_FUNCTION(PKCS9_ATTRIBUTE) #if 1 int PKCS9_ATTRIBUTE_set1_object(PKCS9_ATTRIBUTE *attr, const ASN1_OBJECT *obj) { if ((attr == NULL) || (obj == NULL)) return 0; ASN1_OBJECT_free(attr->object); attr->object = OBJ_dup(obj); return attr->object != NULL; } int PKCS9_ATTRIBUTE_set1_randomvalues(PKCS9_ATTRIBUTE *attr, int attrtype, const void *data, int len) { ASN1_TYPE *ttmp = NULL; ASN1_STRING *stmp = NULL; int atype = 0; if (!attr) return 0; if (attrtype & MBSTRING_FLAG) { stmp = ASN1_STRING_set_by_NID(NULL, data, len, attrtype, OBJ_obj2nid(attr->object)); if (!stmp) { printf("PKCS9_F_PKCS9_ATTRIBUTE_SET1_DATA\n"); return 0; } atype = stmp->type; } else if (len != -1) { if ((stmp = ASN1_STRING_type_new(attrtype)) == NULL) goto err; if (!ASN1_STRING_set(stmp, data, len)) goto err; atype = attrtype; } /* * This is a bit naughty because the attribute should really have at * least one value but some types use and zero length SET and require * this. */ if (attrtype == 0) { ASN1_STRING_free(stmp); return 1; } if ((ttmp = ASN1_TYPE_new()) == NULL) goto err; if ((len == -1) && !(attrtype & MBSTRING_FLAG)) { if (!ASN1_TYPE_set1(ttmp, attrtype, data)) goto err; } else { ASN1_TYPE_set(ttmp, atype, stmp); stmp = NULL; } if (!sk_ASN1_TYPE_push(attr->randomvalues, ttmp)) goto err; return 1; err: ASN1_TYPE_free(ttmp); ASN1_STRING_free(stmp); return 0; } #endif使用以上代码定义了一个PKCS9_ATTRIBUTE结构,请根据以上定义,将-----BEGIN RKRD.der----- MCAGCiqGSIb3DQEJGQMxEgQQFn6w5yeB5JQBEiM0RVZneA== -----END RKRD.der-----数据进行解码成PKCS9_ATTRIBUTE结构的数据

最新推荐

recommend-type

ASN.1编码规则详解(最全最经典).doc

本章的内容主要翻译自《ASN.1 Communication between Heterogeneous Systems》和《ASN.1 Complete》
recommend-type

MT7668AUN_MT7668AEN_MT7668ASN_Datasheet

MT7668AUN_MT7668AEN_MT7668ASN_Datasheet.1
recommend-type

openssl之ASN.1

ASN.1 作为一个数字对象描述标准,包括了两部分,分别为数据描述语言(ISO8824)和数据编码规则(ISO8825)ASN.1的数据描述语言标准允许用户自定义基本数据类型,并可以通过简单的数据类型组成更复杂的数据类型。...
recommend-type

c069981_ISO_IEC_8825-7_2015.pdf

ASN.1 OER编码,英文版 Information technology — ASN.1 encoding rules: Specification of Octet Encoding Rules (OER)
recommend-type

ASN.1编译码规则技术总结

ASN.1(Abstract Syntax Notation One)是一种类型描述语言具有类似于面向对象程序设计语言中所提供的类型机制,它可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。 标准包括:ISO 8824-1|...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。