| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_ACCESS_DESCRIPTION, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | d2i_ADMISSIONS, | 
					
						
							|  |  |  | d2i_ADMISSION_SYNTAX, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_ASIdOrRange, | 
					
						
							|  |  |  | d2i_ASIdentifierChoice, | 
					
						
							|  |  |  | d2i_ASIdentifiers, | 
					
						
							|  |  |  | d2i_ASN1_BIT_STRING, | 
					
						
							|  |  |  | d2i_ASN1_BMPSTRING, | 
					
						
							|  |  |  | d2i_ASN1_ENUMERATED, | 
					
						
							|  |  |  | d2i_ASN1_GENERALIZEDTIME, | 
					
						
							|  |  |  | d2i_ASN1_GENERALSTRING, | 
					
						
							|  |  |  | d2i_ASN1_IA5STRING, | 
					
						
							|  |  |  | d2i_ASN1_INTEGER, | 
					
						
							|  |  |  | d2i_ASN1_NULL, | 
					
						
							|  |  |  | d2i_ASN1_OBJECT, | 
					
						
							|  |  |  | d2i_ASN1_OCTET_STRING, | 
					
						
							|  |  |  | d2i_ASN1_PRINTABLE, | 
					
						
							|  |  |  | d2i_ASN1_PRINTABLESTRING, | 
					
						
							|  |  |  | d2i_ASN1_SEQUENCE_ANY, | 
					
						
							|  |  |  | d2i_ASN1_SET_ANY, | 
					
						
							|  |  |  | d2i_ASN1_T61STRING, | 
					
						
							|  |  |  | d2i_ASN1_TIME, | 
					
						
							|  |  |  | d2i_ASN1_TYPE, | 
					
						
							|  |  |  | d2i_ASN1_UINTEGER, | 
					
						
							|  |  |  | d2i_ASN1_UNIVERSALSTRING, | 
					
						
							|  |  |  | d2i_ASN1_UTCTIME, | 
					
						
							|  |  |  | d2i_ASN1_UTF8STRING, | 
					
						
							|  |  |  | d2i_ASN1_VISIBLESTRING, | 
					
						
							|  |  |  | d2i_ASRange, | 
					
						
							|  |  |  | d2i_AUTHORITY_INFO_ACCESS, | 
					
						
							|  |  |  | d2i_AUTHORITY_KEYID, | 
					
						
							|  |  |  | d2i_BASIC_CONSTRAINTS, | 
					
						
							|  |  |  | d2i_CERTIFICATEPOLICIES, | 
					
						
							|  |  |  | d2i_CMS_ContentInfo, | 
					
						
							|  |  |  | d2i_CMS_ReceiptRequest, | 
					
						
							|  |  |  | d2i_CMS_bio, | 
					
						
							|  |  |  | d2i_CRL_DIST_POINTS, | 
					
						
							|  |  |  | d2i_DHxparams, | 
					
						
							|  |  |  | d2i_DIRECTORYSTRING, | 
					
						
							|  |  |  | d2i_DISPLAYTEXT, | 
					
						
							|  |  |  | d2i_DIST_POINT, | 
					
						
							|  |  |  | d2i_DIST_POINT_NAME, | 
					
						
							|  |  |  | d2i_DSAPrivateKey, | 
					
						
							|  |  |  | d2i_DSAPrivateKey_bio, | 
					
						
							|  |  |  | d2i_DSAPrivateKey_fp, | 
					
						
							|  |  |  | d2i_DSAPublicKey, | 
					
						
							| 
									
										
										
										
											2017-10-26 05:53:50 +08:00
										 |  |  | d2i_DSA_PUBKEY, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_DSA_PUBKEY_bio, | 
					
						
							|  |  |  | d2i_DSA_PUBKEY_fp, | 
					
						
							|  |  |  | d2i_DSA_SIG, | 
					
						
							|  |  |  | d2i_DSAparams, | 
					
						
							| 
									
										
										
										
											2019-08-05 23:13:24 +08:00
										 |  |  | d2i_ECDSA_SIG, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_ECPKParameters, | 
					
						
							|  |  |  | d2i_ECParameters, | 
					
						
							|  |  |  | d2i_ECPrivateKey, | 
					
						
							|  |  |  | d2i_ECPrivateKey_bio, | 
					
						
							|  |  |  | d2i_ECPrivateKey_fp, | 
					
						
							|  |  |  | d2i_EC_PUBKEY, | 
					
						
							|  |  |  | d2i_EC_PUBKEY_bio, | 
					
						
							|  |  |  | d2i_EC_PUBKEY_fp, | 
					
						
							|  |  |  | d2i_EDIPARTYNAME, | 
					
						
							|  |  |  | d2i_ESS_CERT_ID, | 
					
						
							| 
									
										
										
										
											2019-07-31 17:14:12 +08:00
										 |  |  | d2i_ESS_CERT_ID_V2, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_ESS_ISSUER_SERIAL, | 
					
						
							|  |  |  | d2i_ESS_SIGNING_CERT, | 
					
						
							| 
									
										
										
										
											2019-07-31 17:14:12 +08:00
										 |  |  | d2i_ESS_SIGNING_CERT_V2, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_EXTENDED_KEY_USAGE, | 
					
						
							|  |  |  | d2i_GENERAL_NAME, | 
					
						
							|  |  |  | d2i_GENERAL_NAMES, | 
					
						
							|  |  |  | d2i_IPAddressChoice, | 
					
						
							|  |  |  | d2i_IPAddressFamily, | 
					
						
							|  |  |  | d2i_IPAddressOrRange, | 
					
						
							|  |  |  | d2i_IPAddressRange, | 
					
						
							| 
									
										
										
										
											2020-05-15 03:32:59 +08:00
										 |  |  | d2i_ISSUER_SIGN_TOOL, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_ISSUING_DIST_POINT, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | d2i_NAMING_AUTHORITY, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_NETSCAPE_CERT_SEQUENCE, | 
					
						
							|  |  |  | d2i_NETSCAPE_SPKAC, | 
					
						
							|  |  |  | d2i_NETSCAPE_SPKI, | 
					
						
							|  |  |  | d2i_NOTICEREF, | 
					
						
							|  |  |  | d2i_OCSP_BASICRESP, | 
					
						
							|  |  |  | d2i_OCSP_CERTID, | 
					
						
							|  |  |  | d2i_OCSP_CERTSTATUS, | 
					
						
							|  |  |  | d2i_OCSP_CRLID, | 
					
						
							|  |  |  | d2i_OCSP_ONEREQ, | 
					
						
							|  |  |  | d2i_OCSP_REQINFO, | 
					
						
							|  |  |  | d2i_OCSP_REQUEST, | 
					
						
							|  |  |  | d2i_OCSP_RESPBYTES, | 
					
						
							|  |  |  | d2i_OCSP_RESPDATA, | 
					
						
							|  |  |  | d2i_OCSP_RESPID, | 
					
						
							|  |  |  | d2i_OCSP_RESPONSE, | 
					
						
							|  |  |  | d2i_OCSP_REVOKEDINFO, | 
					
						
							|  |  |  | d2i_OCSP_SERVICELOC, | 
					
						
							|  |  |  | d2i_OCSP_SIGNATURE, | 
					
						
							|  |  |  | d2i_OCSP_SINGLERESP, | 
					
						
							| 
									
										
										
										
											2019-04-02 17:16:53 +08:00
										 |  |  | d2i_OSSL_CMP_MSG, | 
					
						
							|  |  |  | d2i_OSSL_CMP_PKIHEADER, | 
					
						
							| 
									
										
										
										
											2020-03-10 17:29:46 +08:00
										 |  |  | d2i_OSSL_CMP_PKISI, | 
					
						
							| 
									
										
										
										
											2019-04-02 17:16:53 +08:00
										 |  |  | d2i_OSSL_CRMF_CERTID, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_CERTTEMPLATE, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_ENCRYPTEDVALUE, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_MSG, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_MSGS, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_PBMPARAMETER, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_PKIPUBLICATIONINFO, | 
					
						
							|  |  |  | d2i_OSSL_CRMF_SINGLEPUBINFO, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_OTHERNAME, | 
					
						
							|  |  |  | d2i_PBE2PARAM, | 
					
						
							|  |  |  | d2i_PBEPARAM, | 
					
						
							|  |  |  | d2i_PBKDF2PARAM, | 
					
						
							|  |  |  | d2i_PKCS12, | 
					
						
							|  |  |  | d2i_PKCS12_BAGS, | 
					
						
							|  |  |  | d2i_PKCS12_MAC_DATA, | 
					
						
							|  |  |  | d2i_PKCS12_SAFEBAG, | 
					
						
							|  |  |  | d2i_PKCS12_bio, | 
					
						
							|  |  |  | d2i_PKCS12_fp, | 
					
						
							|  |  |  | d2i_PKCS7, | 
					
						
							|  |  |  | d2i_PKCS7_DIGEST, | 
					
						
							|  |  |  | d2i_PKCS7_ENCRYPT, | 
					
						
							|  |  |  | d2i_PKCS7_ENC_CONTENT, | 
					
						
							|  |  |  | d2i_PKCS7_ENVELOPE, | 
					
						
							|  |  |  | d2i_PKCS7_ISSUER_AND_SERIAL, | 
					
						
							|  |  |  | d2i_PKCS7_RECIP_INFO, | 
					
						
							|  |  |  | d2i_PKCS7_SIGNED, | 
					
						
							|  |  |  | d2i_PKCS7_SIGNER_INFO, | 
					
						
							|  |  |  | d2i_PKCS7_SIGN_ENVELOPE, | 
					
						
							|  |  |  | d2i_PKCS7_bio, | 
					
						
							|  |  |  | d2i_PKCS7_fp, | 
					
						
							|  |  |  | d2i_PKCS8_PRIV_KEY_INFO, | 
					
						
							|  |  |  | d2i_PKCS8_PRIV_KEY_INFO_bio, | 
					
						
							|  |  |  | d2i_PKCS8_PRIV_KEY_INFO_fp, | 
					
						
							|  |  |  | d2i_PKCS8_bio, | 
					
						
							|  |  |  | d2i_PKCS8_fp, | 
					
						
							|  |  |  | d2i_PKEY_USAGE_PERIOD, | 
					
						
							|  |  |  | d2i_POLICYINFO, | 
					
						
							|  |  |  | d2i_POLICYQUALINFO, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | d2i_PROFESSION_INFO, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_PROXY_CERT_INFO_EXTENSION, | 
					
						
							|  |  |  | d2i_PROXY_POLICY, | 
					
						
							|  |  |  | d2i_RSAPrivateKey, | 
					
						
							|  |  |  | d2i_RSAPrivateKey_bio, | 
					
						
							|  |  |  | d2i_RSAPrivateKey_fp, | 
					
						
							|  |  |  | d2i_RSAPublicKey, | 
					
						
							|  |  |  | d2i_RSAPublicKey_bio, | 
					
						
							|  |  |  | d2i_RSAPublicKey_fp, | 
					
						
							|  |  |  | d2i_RSA_OAEP_PARAMS, | 
					
						
							|  |  |  | d2i_RSA_PSS_PARAMS, | 
					
						
							|  |  |  | d2i_RSA_PUBKEY, | 
					
						
							|  |  |  | d2i_RSA_PUBKEY_bio, | 
					
						
							|  |  |  | d2i_RSA_PUBKEY_fp, | 
					
						
							| 
									
										
										
										
											2017-07-26 20:26:16 +08:00
										 |  |  | d2i_SCRYPT_PARAMS, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_SCT_LIST, | 
					
						
							|  |  |  | d2i_SXNET, | 
					
						
							|  |  |  | d2i_SXNETID, | 
					
						
							|  |  |  | d2i_TS_ACCURACY, | 
					
						
							|  |  |  | d2i_TS_MSG_IMPRINT, | 
					
						
							|  |  |  | d2i_TS_MSG_IMPRINT_bio, | 
					
						
							|  |  |  | d2i_TS_MSG_IMPRINT_fp, | 
					
						
							|  |  |  | d2i_TS_REQ, | 
					
						
							|  |  |  | d2i_TS_REQ_bio, | 
					
						
							|  |  |  | d2i_TS_REQ_fp, | 
					
						
							|  |  |  | d2i_TS_RESP, | 
					
						
							|  |  |  | d2i_TS_RESP_bio, | 
					
						
							|  |  |  | d2i_TS_RESP_fp, | 
					
						
							|  |  |  | d2i_TS_STATUS_INFO, | 
					
						
							|  |  |  | d2i_TS_TST_INFO, | 
					
						
							|  |  |  | d2i_TS_TST_INFO_bio, | 
					
						
							|  |  |  | d2i_TS_TST_INFO_fp, | 
					
						
							|  |  |  | d2i_USERNOTICE, | 
					
						
							|  |  |  | d2i_X509, | 
					
						
							|  |  |  | d2i_X509_ALGOR, | 
					
						
							|  |  |  | d2i_X509_ALGORS, | 
					
						
							|  |  |  | d2i_X509_ATTRIBUTE, | 
					
						
							|  |  |  | d2i_X509_CERT_AUX, | 
					
						
							|  |  |  | d2i_X509_CINF, | 
					
						
							|  |  |  | d2i_X509_CRL, | 
					
						
							|  |  |  | d2i_X509_CRL_INFO, | 
					
						
							|  |  |  | d2i_X509_CRL_bio, | 
					
						
							|  |  |  | d2i_X509_CRL_fp, | 
					
						
							|  |  |  | d2i_X509_EXTENSION, | 
					
						
							|  |  |  | d2i_X509_EXTENSIONS, | 
					
						
							|  |  |  | d2i_X509_NAME, | 
					
						
							|  |  |  | d2i_X509_NAME_ENTRY, | 
					
						
							|  |  |  | d2i_X509_PUBKEY, | 
					
						
							| 
									
										
										
										
											2019-11-18 08:54:11 +08:00
										 |  |  | d2i_X509_PUBKEY_bio, | 
					
						
							|  |  |  | d2i_X509_PUBKEY_fp, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | d2i_X509_REQ, | 
					
						
							|  |  |  | d2i_X509_REQ_INFO, | 
					
						
							|  |  |  | d2i_X509_REQ_bio, | 
					
						
							|  |  |  | d2i_X509_REQ_fp, | 
					
						
							|  |  |  | d2i_X509_REVOKED, | 
					
						
							|  |  |  | d2i_X509_SIG, | 
					
						
							|  |  |  | d2i_X509_VAL, | 
					
						
							|  |  |  | i2d_ACCESS_DESCRIPTION, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | i2d_ADMISSIONS, | 
					
						
							|  |  |  | i2d_ADMISSION_SYNTAX, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_ASIdOrRange, | 
					
						
							|  |  |  | i2d_ASIdentifierChoice, | 
					
						
							|  |  |  | i2d_ASIdentifiers, | 
					
						
							|  |  |  | i2d_ASN1_BIT_STRING, | 
					
						
							|  |  |  | i2d_ASN1_BMPSTRING, | 
					
						
							|  |  |  | i2d_ASN1_ENUMERATED, | 
					
						
							|  |  |  | i2d_ASN1_GENERALIZEDTIME, | 
					
						
							|  |  |  | i2d_ASN1_GENERALSTRING, | 
					
						
							|  |  |  | i2d_ASN1_IA5STRING, | 
					
						
							|  |  |  | i2d_ASN1_INTEGER, | 
					
						
							|  |  |  | i2d_ASN1_NULL, | 
					
						
							|  |  |  | i2d_ASN1_OBJECT, | 
					
						
							|  |  |  | i2d_ASN1_OCTET_STRING, | 
					
						
							|  |  |  | i2d_ASN1_PRINTABLE, | 
					
						
							|  |  |  | i2d_ASN1_PRINTABLESTRING, | 
					
						
							|  |  |  | i2d_ASN1_SEQUENCE_ANY, | 
					
						
							|  |  |  | i2d_ASN1_SET_ANY, | 
					
						
							|  |  |  | i2d_ASN1_T61STRING, | 
					
						
							|  |  |  | i2d_ASN1_TIME, | 
					
						
							|  |  |  | i2d_ASN1_TYPE, | 
					
						
							|  |  |  | i2d_ASN1_UNIVERSALSTRING, | 
					
						
							|  |  |  | i2d_ASN1_UTCTIME, | 
					
						
							|  |  |  | i2d_ASN1_UTF8STRING, | 
					
						
							|  |  |  | i2d_ASN1_VISIBLESTRING, | 
					
						
							|  |  |  | i2d_ASN1_bio_stream, | 
					
						
							|  |  |  | i2d_ASRange, | 
					
						
							|  |  |  | i2d_AUTHORITY_INFO_ACCESS, | 
					
						
							|  |  |  | i2d_AUTHORITY_KEYID, | 
					
						
							|  |  |  | i2d_BASIC_CONSTRAINTS, | 
					
						
							|  |  |  | i2d_CERTIFICATEPOLICIES, | 
					
						
							|  |  |  | i2d_CMS_ContentInfo, | 
					
						
							|  |  |  | i2d_CMS_ReceiptRequest, | 
					
						
							|  |  |  | i2d_CMS_bio, | 
					
						
							|  |  |  | i2d_CRL_DIST_POINTS, | 
					
						
							|  |  |  | i2d_DHxparams, | 
					
						
							|  |  |  | i2d_DIRECTORYSTRING, | 
					
						
							|  |  |  | i2d_DISPLAYTEXT, | 
					
						
							|  |  |  | i2d_DIST_POINT, | 
					
						
							|  |  |  | i2d_DIST_POINT_NAME, | 
					
						
							|  |  |  | i2d_DSAPrivateKey, | 
					
						
							|  |  |  | i2d_DSAPrivateKey_bio, | 
					
						
							|  |  |  | i2d_DSAPrivateKey_fp, | 
					
						
							|  |  |  | i2d_DSAPublicKey, | 
					
						
							| 
									
										
										
										
											2017-10-26 05:53:50 +08:00
										 |  |  | i2d_DSA_PUBKEY, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_DSA_PUBKEY_bio, | 
					
						
							|  |  |  | i2d_DSA_PUBKEY_fp, | 
					
						
							|  |  |  | i2d_DSA_SIG, | 
					
						
							|  |  |  | i2d_DSAparams, | 
					
						
							| 
									
										
										
										
											2019-08-05 23:13:24 +08:00
										 |  |  | i2d_ECDSA_SIG, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_ECPKParameters, | 
					
						
							|  |  |  | i2d_ECParameters, | 
					
						
							|  |  |  | i2d_ECPrivateKey, | 
					
						
							|  |  |  | i2d_ECPrivateKey_bio, | 
					
						
							|  |  |  | i2d_ECPrivateKey_fp, | 
					
						
							|  |  |  | i2d_EC_PUBKEY, | 
					
						
							|  |  |  | i2d_EC_PUBKEY_bio, | 
					
						
							|  |  |  | i2d_EC_PUBKEY_fp, | 
					
						
							|  |  |  | i2d_EDIPARTYNAME, | 
					
						
							|  |  |  | i2d_ESS_CERT_ID, | 
					
						
							| 
									
										
										
										
											2019-07-31 17:14:12 +08:00
										 |  |  | i2d_ESS_CERT_ID_V2, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_ESS_ISSUER_SERIAL, | 
					
						
							|  |  |  | i2d_ESS_SIGNING_CERT, | 
					
						
							| 
									
										
										
										
											2019-07-31 17:14:12 +08:00
										 |  |  | i2d_ESS_SIGNING_CERT_V2, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_EXTENDED_KEY_USAGE, | 
					
						
							|  |  |  | i2d_GENERAL_NAME, | 
					
						
							|  |  |  | i2d_GENERAL_NAMES, | 
					
						
							|  |  |  | i2d_IPAddressChoice, | 
					
						
							|  |  |  | i2d_IPAddressFamily, | 
					
						
							|  |  |  | i2d_IPAddressOrRange, | 
					
						
							|  |  |  | i2d_IPAddressRange, | 
					
						
							| 
									
										
										
										
											2020-05-15 03:32:59 +08:00
										 |  |  | i2d_ISSUER_SIGN_TOOL, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_ISSUING_DIST_POINT, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | i2d_NAMING_AUTHORITY, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_NETSCAPE_CERT_SEQUENCE, | 
					
						
							|  |  |  | i2d_NETSCAPE_SPKAC, | 
					
						
							|  |  |  | i2d_NETSCAPE_SPKI, | 
					
						
							|  |  |  | i2d_NOTICEREF, | 
					
						
							|  |  |  | i2d_OCSP_BASICRESP, | 
					
						
							|  |  |  | i2d_OCSP_CERTID, | 
					
						
							|  |  |  | i2d_OCSP_CERTSTATUS, | 
					
						
							|  |  |  | i2d_OCSP_CRLID, | 
					
						
							|  |  |  | i2d_OCSP_ONEREQ, | 
					
						
							|  |  |  | i2d_OCSP_REQINFO, | 
					
						
							|  |  |  | i2d_OCSP_REQUEST, | 
					
						
							|  |  |  | i2d_OCSP_RESPBYTES, | 
					
						
							|  |  |  | i2d_OCSP_RESPDATA, | 
					
						
							|  |  |  | i2d_OCSP_RESPID, | 
					
						
							|  |  |  | i2d_OCSP_RESPONSE, | 
					
						
							|  |  |  | i2d_OCSP_REVOKEDINFO, | 
					
						
							|  |  |  | i2d_OCSP_SERVICELOC, | 
					
						
							|  |  |  | i2d_OCSP_SIGNATURE, | 
					
						
							|  |  |  | i2d_OCSP_SINGLERESP, | 
					
						
							| 
									
										
										
										
											2019-04-02 17:16:53 +08:00
										 |  |  | i2d_OSSL_CMP_MSG, | 
					
						
							|  |  |  | i2d_OSSL_CMP_PKIHEADER, | 
					
						
							| 
									
										
										
										
											2020-03-10 17:29:46 +08:00
										 |  |  | i2d_OSSL_CMP_PKISI, | 
					
						
							| 
									
										
										
										
											2019-04-02 17:16:53 +08:00
										 |  |  | i2d_OSSL_CRMF_CERTID, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_CERTTEMPLATE, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_ENCRYPTEDVALUE, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_MSG, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_MSGS, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_PBMPARAMETER, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_PKIPUBLICATIONINFO, | 
					
						
							|  |  |  | i2d_OSSL_CRMF_SINGLEPUBINFO, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_OTHERNAME, | 
					
						
							|  |  |  | i2d_PBE2PARAM, | 
					
						
							|  |  |  | i2d_PBEPARAM, | 
					
						
							|  |  |  | i2d_PBKDF2PARAM, | 
					
						
							|  |  |  | i2d_PKCS12, | 
					
						
							|  |  |  | i2d_PKCS12_BAGS, | 
					
						
							|  |  |  | i2d_PKCS12_MAC_DATA, | 
					
						
							|  |  |  | i2d_PKCS12_SAFEBAG, | 
					
						
							|  |  |  | i2d_PKCS12_bio, | 
					
						
							|  |  |  | i2d_PKCS12_fp, | 
					
						
							|  |  |  | i2d_PKCS7, | 
					
						
							|  |  |  | i2d_PKCS7_DIGEST, | 
					
						
							|  |  |  | i2d_PKCS7_ENCRYPT, | 
					
						
							|  |  |  | i2d_PKCS7_ENC_CONTENT, | 
					
						
							|  |  |  | i2d_PKCS7_ENVELOPE, | 
					
						
							|  |  |  | i2d_PKCS7_ISSUER_AND_SERIAL, | 
					
						
							|  |  |  | i2d_PKCS7_NDEF, | 
					
						
							|  |  |  | i2d_PKCS7_RECIP_INFO, | 
					
						
							|  |  |  | i2d_PKCS7_SIGNED, | 
					
						
							|  |  |  | i2d_PKCS7_SIGNER_INFO, | 
					
						
							|  |  |  | i2d_PKCS7_SIGN_ENVELOPE, | 
					
						
							|  |  |  | i2d_PKCS7_bio, | 
					
						
							|  |  |  | i2d_PKCS7_fp, | 
					
						
							|  |  |  | i2d_PKCS8PrivateKeyInfo_bio, | 
					
						
							|  |  |  | i2d_PKCS8PrivateKeyInfo_fp, | 
					
						
							|  |  |  | i2d_PKCS8_PRIV_KEY_INFO, | 
					
						
							|  |  |  | i2d_PKCS8_PRIV_KEY_INFO_bio, | 
					
						
							|  |  |  | i2d_PKCS8_PRIV_KEY_INFO_fp, | 
					
						
							|  |  |  | i2d_PKCS8_bio, | 
					
						
							|  |  |  | i2d_PKCS8_fp, | 
					
						
							|  |  |  | i2d_PKEY_USAGE_PERIOD, | 
					
						
							|  |  |  | i2d_POLICYINFO, | 
					
						
							|  |  |  | i2d_POLICYQUALINFO, | 
					
						
							| 
									
										
										
										
											2017-10-06 07:52:12 +08:00
										 |  |  | i2d_PROFESSION_INFO, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_PROXY_CERT_INFO_EXTENSION, | 
					
						
							|  |  |  | i2d_PROXY_POLICY, | 
					
						
							|  |  |  | i2d_RSAPrivateKey, | 
					
						
							|  |  |  | i2d_RSAPrivateKey_bio, | 
					
						
							|  |  |  | i2d_RSAPrivateKey_fp, | 
					
						
							|  |  |  | i2d_RSAPublicKey, | 
					
						
							|  |  |  | i2d_RSAPublicKey_bio, | 
					
						
							|  |  |  | i2d_RSAPublicKey_fp, | 
					
						
							|  |  |  | i2d_RSA_OAEP_PARAMS, | 
					
						
							|  |  |  | i2d_RSA_PSS_PARAMS, | 
					
						
							|  |  |  | i2d_RSA_PUBKEY, | 
					
						
							|  |  |  | i2d_RSA_PUBKEY_bio, | 
					
						
							|  |  |  | i2d_RSA_PUBKEY_fp, | 
					
						
							| 
									
										
										
										
											2017-07-26 20:26:16 +08:00
										 |  |  | i2d_SCRYPT_PARAMS, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_SCT_LIST, | 
					
						
							|  |  |  | i2d_SXNET, | 
					
						
							|  |  |  | i2d_SXNETID, | 
					
						
							|  |  |  | i2d_TS_ACCURACY, | 
					
						
							|  |  |  | i2d_TS_MSG_IMPRINT, | 
					
						
							|  |  |  | i2d_TS_MSG_IMPRINT_bio, | 
					
						
							|  |  |  | i2d_TS_MSG_IMPRINT_fp, | 
					
						
							|  |  |  | i2d_TS_REQ, | 
					
						
							|  |  |  | i2d_TS_REQ_bio, | 
					
						
							|  |  |  | i2d_TS_REQ_fp, | 
					
						
							|  |  |  | i2d_TS_RESP, | 
					
						
							|  |  |  | i2d_TS_RESP_bio, | 
					
						
							|  |  |  | i2d_TS_RESP_fp, | 
					
						
							|  |  |  | i2d_TS_STATUS_INFO, | 
					
						
							|  |  |  | i2d_TS_TST_INFO, | 
					
						
							|  |  |  | i2d_TS_TST_INFO_bio, | 
					
						
							|  |  |  | i2d_TS_TST_INFO_fp, | 
					
						
							|  |  |  | i2d_USERNOTICE, | 
					
						
							|  |  |  | i2d_X509, | 
					
						
							|  |  |  | i2d_X509_ALGOR, | 
					
						
							|  |  |  | i2d_X509_ALGORS, | 
					
						
							|  |  |  | i2d_X509_ATTRIBUTE, | 
					
						
							|  |  |  | i2d_X509_CERT_AUX, | 
					
						
							|  |  |  | i2d_X509_CINF, | 
					
						
							|  |  |  | i2d_X509_CRL, | 
					
						
							|  |  |  | i2d_X509_CRL_INFO, | 
					
						
							|  |  |  | i2d_X509_CRL_bio, | 
					
						
							|  |  |  | i2d_X509_CRL_fp, | 
					
						
							|  |  |  | i2d_X509_EXTENSION, | 
					
						
							|  |  |  | i2d_X509_EXTENSIONS, | 
					
						
							|  |  |  | i2d_X509_NAME, | 
					
						
							|  |  |  | i2d_X509_NAME_ENTRY, | 
					
						
							|  |  |  | i2d_X509_PUBKEY, | 
					
						
							| 
									
										
										
										
											2019-11-18 08:54:11 +08:00
										 |  |  | i2d_X509_PUBKEY_bio, | 
					
						
							|  |  |  | i2d_X509_PUBKEY_fp, | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | i2d_X509_REQ, | 
					
						
							|  |  |  | i2d_X509_REQ_INFO, | 
					
						
							|  |  |  | i2d_X509_REQ_bio, | 
					
						
							|  |  |  | i2d_X509_REQ_fp, | 
					
						
							|  |  |  | i2d_X509_REVOKED, | 
					
						
							|  |  |  | i2d_X509_SIG, | 
					
						
							|  |  |  | i2d_X509_VAL, | 
					
						
							|  |  |  | - convert objects from/to ASN.1/DER representation | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-29 23:10:59 +08:00
										 |  |  | =for openssl generic | 
					
						
							| 
									
										
										
										
											2016-11-11 16:33:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-14 19:21:26 +08:00
										 |  |  |  TYPE *d2i_TYPE(TYPE **a, unsigned char **ppin, long length); | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a); | 
					
						
							|  |  |  |  TYPE *d2i_TYPE_fp(FILE *fp, TYPE **a); | 
					
						
							| 
									
										
										
										
											2002-10-06 20:34:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-16 04:51:25 +08:00
										 |  |  |  int i2d_TYPE(const TYPE *a, unsigned char **ppout); | 
					
						
							| 
									
										
										
										
											2018-02-14 19:21:26 +08:00
										 |  |  |  int i2d_TYPE(TYPE *a, unsigned char **ppout); | 
					
						
							| 
									
										
										
										
											2019-01-16 04:51:25 +08:00
										 |  |  |  int i2d_TYPE_fp(FILE *fp, const TYPE *a); | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  int i2d_TYPE_fp(FILE *fp, TYPE *a); | 
					
						
							| 
									
										
										
										
											2019-01-16 04:51:25 +08:00
										 |  |  |  int i2d_TYPE_bio(BIO *bp, const TYPE *a); | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  int i2d_TYPE_bio(BIO *bp, TYPE *a); | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | In the description here, B<I<TYPE>> is used a placeholder | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | for any of the OpenSSL datatypes, such as I<X509_CRL>. | 
					
						
							| 
									
										
										
										
											2018-02-14 19:21:26 +08:00
										 |  |  | The function parameters I<ppin> and I<ppout> are generally | 
					
						
							|  |  |  | either both named I<pp> in the headers, or I<in> and I<out>. | 
					
						
							| 
									
										
										
										
											2014-09-05 21:25:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | These functions convert OpenSSL objects to and from their ASN.1/DER | 
					
						
							|  |  |  | encoding.  Unlike the C structures which can have pointers to sub-objects | 
					
						
							|  |  |  | within, the DER is a serialized encoding, suitable for sending over the | 
					
						
							|  |  |  | network, writing to a file, and so on. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<d2i_I<TYPE>>() attempts to decode I<len> bytes at I<*ppin>. If successful a | 
					
						
							|  |  |  | pointer to the B<I<TYPE>> structure is returned and I<*ppin> is incremented to | 
					
						
							|  |  |  | the byte following the parsed data.  If I<a> is not NULL then a pointer | 
					
						
							|  |  |  | to the returned structure is also written to I<*a>.  If an error occurred | 
					
						
							|  |  |  | then NULL is returned. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | On a successful return, if I<*a> is not NULL then it is assumed that I<*a> | 
					
						
							|  |  |  | contains a valid B<I<TYPE>> structure and an attempt is made to reuse it. This | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | "reuse" capability is present for historical compatibility but its use is | 
					
						
							|  |  |  | B<strongly discouraged> (see BUGS below, and the discussion in the RETURN | 
					
						
							|  |  |  | VALUES section). | 
					
						
							| 
									
										
										
										
											2015-02-11 00:08:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<d2i_I<TYPE>_bio>() is similar to B<d2i_I<TYPE>>() except it attempts | 
					
						
							|  |  |  | to parse data from BIO I<bp>. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<d2i_I<TYPE>_fp>() is similar to B<d2i_I<TYPE>>() except it attempts | 
					
						
							|  |  |  | to parse data from FILE pointer I<fp>. | 
					
						
							| 
									
										
										
										
											2016-05-03 02:46:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>>() encodes the structure pointed to by I<a> into DER format. | 
					
						
							|  |  |  | If I<ppout> is not NULL, it writes the DER encoded data to the buffer | 
					
						
							|  |  |  | at I<*ppout>, and increments it to point after the data just written. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | If the return value is negative an error occurred, otherwise it | 
					
						
							| 
									
										
										
										
											2016-05-20 20:11:46 +08:00
										 |  |  | returns the length of the encoded data. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | If I<*ppout> is NULL memory will be allocated for a buffer and the encoded | 
					
						
							|  |  |  | data written to it. In this case I<*ppout> is not incremented and it points | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | to the start of the data just written. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>_bio>() is similar to B<i2d_I<TYPE>>() except it writes | 
					
						
							|  |  |  | the encoding of the structure I<a> to BIO I<bp> and it | 
					
						
							| 
									
										
										
										
											2002-11-15 02:15:52 +08:00
										 |  |  | returns 1 for success and 0 for failure. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>_fp>() is similar to B<i2d_I<TYPE>>() except it writes | 
					
						
							|  |  |  | the encoding of the structure I<a> to BIO I<bp> and it | 
					
						
							| 
									
										
										
										
											2002-11-15 02:15:52 +08:00
										 |  |  | returns 1 for success and 0 for failure. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | These routines do not encrypt private keys and therefore offer no | 
					
						
							|  |  |  | security; use L<PEM_write_PrivateKey(3)> or similar for writing to files. | 
					
						
							| 
									
										
										
										
											2014-09-05 21:25:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | The letters B<i> and B<d> in B<i2d_I<TYPE>>() stand for | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | "internal" (that is, an internal C structure) and "DER" respectively. | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | So B<i2d_I<TYPE>>() converts from internal to DER. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The functions can also understand B<BER> forms. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | The actual TYPE structure passed to B<i2d_I<TYPE>>() must be a valid | 
					
						
							|  |  |  | populated B<I<TYPE>> structure -- it B<cannot> simply be fed with an | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | empty structure such as that returned by TYPE_new(). | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 01:17:09 +08:00
										 |  |  | The encoded data is in binary form and may contain embedded zeros. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | Therefore any FILE pointers or BIOs should be opened in binary mode. | 
					
						
							| 
									
										
										
										
											2015-11-20 04:49:30 +08:00
										 |  |  | Functions such as strlen() will B<not> return the correct length | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | of the encoded structure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | The ways that I<*ppin> and I<*ppout> are incremented after the operation | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | can trap the unwary. See the B<WARNINGS> section for some common | 
					
						
							|  |  |  | errors. | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | The reason for this-auto increment behaviour is to reflect a typical | 
					
						
							| 
									
										
										
										
											2015-02-20 17:18:29 +08:00
										 |  |  | usage of ASN1 functions: after one structure is encoded or decoded | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | another will be processed after it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following points about the data types might be useful: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 03:39:09 +08:00
										 |  |  | =over 4 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<ASN1_OBJECT> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents an ASN1 OBJECT IDENTIFIER. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<DHparams> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents a PKCS#3 DH parameters structure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-23 09:07:18 +08:00
										 |  |  | =item B<DHxparams> | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-11 02:13:23 +08:00
										 |  |  | Represents an ANSI X9.42 DH parameters structure. | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =item B<DSA_PUBKEY> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents a DSA public key using a B<SubjectPublicKeyInfo> structure. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | =item B<DSAPublicKey>, B<DSAPrivateKey> | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Use a non-standard OpenSSL format and should be avoided; use B<DSA_PUBKEY>, | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | L<PEM_write_PrivateKey(3)>, or similar instead. | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-05 23:13:24 +08:00
										 |  |  | =item B<ECDSA_SIG> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents an ECDSA signature. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | =item B<RSAPublicKey> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents a PKCS#1 RSA public key structure. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<X509_ALGOR> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-19 08:16:38 +08:00
										 |  |  | Represents an B<AlgorithmIdentifier> structure as used in IETF RFC 6960 and | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | elsewhere. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<X509_Name> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents a B<Name> type as used for subject and issuer names in | 
					
						
							|  |  |  | IETF RFC 6960 and elsewhere. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<X509_REQ> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents a PKCS#10 certificate request. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =item B<X509_SIG> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Represents the B<DigestInfo> structure defined in PKCS#1 and PKCS#7. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =back | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 13:11:10 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<d2i_I<TYPE>>(), B<d2i_I<TYPE>_bio>() and B<d2i_I<TYPE>_fp>() return a valid | 
					
						
							|  |  |  | B<I<TYPE>> structure or NULL if an error occurs.  If the "reuse" capability has | 
					
						
							|  |  |  | been used with a valid structure being passed in via I<a>, then the object is | 
					
						
							|  |  |  | freed in the event of error and I<*a> is set to NULL. | 
					
						
							| 
									
										
										
										
											2019-02-26 13:11:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>>() returns the number of bytes successfully encoded or a negative | 
					
						
							| 
									
										
										
										
											2019-02-26 13:11:10 +08:00
										 |  |  | value if an error occurs. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>_bio>() and B<i2d_I<TYPE>_fp>() return 1 for success and 0 if an | 
					
						
							|  |  |  | error occurs. | 
					
						
							| 
									
										
										
										
											2019-02-26 13:11:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | =head1 EXAMPLES | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Allocate and encode the DER encoding of an X509 structure: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  int len; | 
					
						
							|  |  |  |  unsigned char *buf; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  buf = NULL; | 
					
						
							|  |  |  |  len = i2d_X509(x, &buf); | 
					
						
							|  |  |  |  if (len < 0) | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |      /* error */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Attempt to decode a buffer: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  X509 *x; | 
					
						
							|  |  |  |  unsigned char *buf, *p; | 
					
						
							|  |  |  |  int len; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  /* Set up buf and len to point to the input buffer. */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  |  p = buf; | 
					
						
							|  |  |  |  x = d2i_X509(NULL, &p, len); | 
					
						
							|  |  |  |  if (x == NULL) | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |      /* error */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Alternative technique: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  X509 *x; | 
					
						
							|  |  |  |  unsigned char *buf, *p; | 
					
						
							|  |  |  |  int len; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  /* Set up buf and len to point to the input buffer. */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  |  p = buf; | 
					
						
							|  |  |  |  x = NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  if (d2i_X509(&x, &p, len) == NULL) | 
					
						
							|  |  |  |      /* error */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 WARNINGS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | Using a temporary variable is mandatory. A common | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | mistake is to attempt to use a buffer directly as follows: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  int len; | 
					
						
							|  |  |  |  unsigned char *buf; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  len = i2d_X509(x, NULL); | 
					
						
							|  |  |  |  buf = OPENSSL_malloc(len); | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  ... | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  |  i2d_X509(x, &buf); | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  ... | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  |  OPENSSL_free(buf); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | This code will result in I<buf> apparently containing garbage because | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | it was incremented after the call to point after the data just written. | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | Also I<buf> will no longer contain the pointer allocated by OPENSSL_malloc() | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | and the subsequent call to OPENSSL_free() is likely to crash. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | Another trap to avoid is misuse of the I<a> argument to B<d2i_I<TYPE>>(): | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |  X509 *x; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  |  if (d2i_X509(&x, &p, len) == NULL) | 
					
						
							|  |  |  |      /* error */ | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-20 04:49:30 +08:00
										 |  |  | This will probably crash somewhere in d2i_X509(). The reason for this | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | is that the variable I<x> is uninitialized and an attempt will be made to | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | interpret its (invalid) value as an B<X509> structure, typically causing | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | a segmentation violation. If I<x> is set to NULL first then this will not | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | happen. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 BUGS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | In some versions of OpenSSL the "reuse" behaviour of B<d2i_I<TYPE>>() when | 
					
						
							|  |  |  | I<*a> is valid is broken and some parts of the reused structure may | 
					
						
							| 
									
										
										
										
											2019-06-12 19:12:07 +08:00
										 |  |  | persist if they are not present in the new one. Additionally, in versions of | 
					
						
							|  |  |  | OpenSSL prior to 1.1.0, when the "reuse" behaviour is used and an error occurs | 
					
						
							|  |  |  | the behaviour is inconsistent. Some functions behaved as described here, while | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | some did not free I<*a> on error and did not set I<*a> to NULL. | 
					
						
							| 
									
										
										
										
											2019-06-12 19:12:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | As a result of the above issues the "reuse" behaviour is strongly discouraged. | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | B<i2d_I<TYPE>>() will not return an error in many versions of OpenSSL, | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | if mandatory fields are not initialized due to a programming error | 
					
						
							| 
									
										
										
										
											2015-02-20 17:18:29 +08:00
										 |  |  | then the encoded structure may contain invalid data or omit the | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | fields entirely and will not be parsed by B<d2i_I<TYPE>>(). This may be | 
					
						
							|  |  |  | fixed in future so code should not assume that B<i2d_I<TYPE>>() will | 
					
						
							| 
									
										
										
										
											2002-10-06 07:30:10 +08:00
										 |  |  | always succeed. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 13:33:38 +08:00
										 |  |  | Any function which encodes a structure (B<i2d_I<TYPE>>(), | 
					
						
							|  |  |  | B<i2d_I<TYPE>>() or B<i2d_I<TYPE>>()) may return a stale encoding if the | 
					
						
							| 
									
										
										
										
											2016-06-08 03:49:08 +08:00
										 |  |  | structure has been modified after deserialization or previous | 
					
						
							|  |  |  | serialization. This is because some objects cache the encoding for | 
					
						
							|  |  |  | efficiency reasons. | 
					
						
							| 
									
										
										
										
											2014-09-05 21:25:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-23 20:55:52 +08:00
										 |  |  | Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 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 |