| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  | ASN1_item_d2i_ex, ASN1_item_d2i, ASN1_item_d2i_bio_ex, ASN1_item_d2i_bio, | 
					
						
							|  |  |  | ASN1_item_d2i_fp_ex, ASN1_item_d2i_fp, ASN1_item_i2d_mem_bio | 
					
						
							| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  | - decode and encode DER-encoded ASN.1 structures | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/asn1.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 09:13:20 +08:00
										 |  |  |  ASN1_VALUE *ASN1_item_d2i_ex(ASN1_VALUE **pval, const unsigned char **in, | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  |                               long len, const ASN1_ITEM *it, | 
					
						
							|  |  |  |                               OSSL_LIB_CTX *libctx, const char *propq); | 
					
						
							| 
									
										
										
										
											2021-09-08 09:13:20 +08:00
										 |  |  |  ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, const unsigned char **in, | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  |                            long len, const ASN1_ITEM *it); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-08 09:13:20 +08:00
										 |  |  |  void *ASN1_item_d2i_bio_ex(const ASN1_ITEM *it, BIO *in, void *x, | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  |                             OSSL_LIB_CTX *libctx, const char *propq); | 
					
						
							| 
									
										
										
										
											2021-09-08 09:13:20 +08:00
										 |  |  |  void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  void *ASN1_item_d2i_fp_ex(const ASN1_ITEM *it, FILE *in, void *x, | 
					
						
							|  |  |  |                            OSSL_LIB_CTX *libctx, const char *propq); | 
					
						
							|  |  |  |  void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  |  BIO *ASN1_item_i2d_mem_bio(const ASN1_ITEM *it, const ASN1_VALUE *val); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  | ASN1_item_d2i_ex() decodes the contents of the data stored in I<*in> of length | 
					
						
							|  |  |  | I<len> which must be a DER-encoded ASN.1 structure, using the ASN.1 template | 
					
						
							|  |  |  | I<it>. It places the result in I<*pval> unless I<pval> is NULL. If I<*pval> is | 
					
						
							|  |  |  | non-NULL on entry then the B<ASN1_VALUE> present there will be reused. Otherwise | 
					
						
							|  |  |  | a new B<ASN1_VALUE> will be allocated. If any algorithm fetches are required | 
					
						
							|  |  |  | during the process then they will use the B<OSSL_LIB_CTX>provided in the | 
					
						
							|  |  |  | I<libctx> parameter and the property query string in I<propq>. See | 
					
						
							|  |  |  | L<crypto(7)/ALGORITHM FETCHING> for more information about algorithm fetching. | 
					
						
							|  |  |  | On exit I<*in> will be updated to point to the next byte in the buffer after the | 
					
						
							|  |  |  | decoded structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i() is the same as ASN1_item_d2i_ex() except that the default | 
					
						
							|  |  |  | OSSL_LIB_CTX is used (i.e. NULL) and with a NULL property query string. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i_bio_ex() decodes the contents of its input BIO I<in>, | 
					
						
							| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  | which must be a DER-encoded ASN.1 structure, using the ASN.1 template I<it> | 
					
						
							|  |  |  | and places the result in I<*pval> unless I<pval> is NULL. | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  | If I<in> is NULL it returns NULL, else a pointer to the parsed structure. If any | 
					
						
							|  |  |  | algorithm fetches are required during the process then they will use the | 
					
						
							|  |  |  | B<OSSL_LIB_CTX> provided in the I<libctx> parameter and the property query | 
					
						
							|  |  |  | string in I<propq>. See L<crypto(7)/ALGORITHM FETCHING> for more information | 
					
						
							|  |  |  | about algorithm fetching. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i_bio() is the same as ASN1_item_d2i_bio_ex() except that the | 
					
						
							|  |  |  | default B<OSSL_LIB_CTX> is used (i.e. NULL) and with a NULL property query | 
					
						
							|  |  |  | string. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i_fp_ex() is the same as ASN1_item_d2i_bio_ex() except that a FILE | 
					
						
							|  |  |  | pointer is provided instead of a BIO. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i_fp() is the same as ASN1_item_d2i_fp_ex() except that the | 
					
						
							|  |  |  | default B<OSSL_LIB_CTX> is used (i.e. NULL) and with a NULL property query | 
					
						
							|  |  |  | string. | 
					
						
							| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_i2d_mem_bio() encodes the given ASN.1 value I<val> | 
					
						
							|  |  |  | using the ASN.1 template I<it> and returns the result in a memory BIO. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_d2i_bio() returns a pointer to an B<ASN1_VALUE> or NULL. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASN1_item_i2d_mem_bio() returns a pointer to a memory BIO or NULL on error. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 HISTORY | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-01 22:17:38 +08:00
										 |  |  | The functions ASN1_item_d2i_ex(), ASN1_item_d2i_bio_ex(), ASN1_item_d2i_fp_ex() | 
					
						
							|  |  |  | and ASN1_item_i2d_mem_bio() were added in OpenSSL 3.0. | 
					
						
							| 
									
										
										
										
											2021-05-07 23:16:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							|  |  |  | this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  | in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  | L<https://www.openssl.org/source/license.html>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =cut |