]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/d2i_X509.pod
Fix typos and repeated words
[thirdparty/openssl.git] / doc / man3 / d2i_X509.pod
CommitLineData
9946fceb
DSH
1=pod
2
3=head1 NAME
4
4692340e 5d2i_ACCESS_DESCRIPTION,
fa743582
RS
6d2i_ADMISSIONS,
7d2i_ADMISSION_SYNTAX,
4692340e
RS
8d2i_ASIdOrRange,
9d2i_ASIdentifierChoice,
10d2i_ASIdentifiers,
11d2i_ASN1_BIT_STRING,
12d2i_ASN1_BMPSTRING,
13d2i_ASN1_ENUMERATED,
14d2i_ASN1_GENERALIZEDTIME,
15d2i_ASN1_GENERALSTRING,
16d2i_ASN1_IA5STRING,
17d2i_ASN1_INTEGER,
18d2i_ASN1_NULL,
19d2i_ASN1_OBJECT,
20d2i_ASN1_OCTET_STRING,
21d2i_ASN1_PRINTABLE,
22d2i_ASN1_PRINTABLESTRING,
23d2i_ASN1_SEQUENCE_ANY,
24d2i_ASN1_SET_ANY,
25d2i_ASN1_T61STRING,
26d2i_ASN1_TIME,
27d2i_ASN1_TYPE,
28d2i_ASN1_UINTEGER,
29d2i_ASN1_UNIVERSALSTRING,
30d2i_ASN1_UTCTIME,
31d2i_ASN1_UTF8STRING,
32d2i_ASN1_VISIBLESTRING,
33d2i_ASRange,
34d2i_AUTHORITY_INFO_ACCESS,
35d2i_AUTHORITY_KEYID,
36d2i_BASIC_CONSTRAINTS,
37d2i_CERTIFICATEPOLICIES,
38d2i_CMS_ContentInfo,
39d2i_CMS_ReceiptRequest,
40d2i_CMS_bio,
41d2i_CRL_DIST_POINTS,
42d2i_DHxparams,
43d2i_DIRECTORYSTRING,
44d2i_DISPLAYTEXT,
45d2i_DIST_POINT,
46d2i_DIST_POINT_NAME,
47d2i_DSAPrivateKey,
48d2i_DSAPrivateKey_bio,
49d2i_DSAPrivateKey_fp,
50d2i_DSAPublicKey,
82d89ef7 51d2i_DSA_PUBKEY,
4692340e
RS
52d2i_DSA_PUBKEY_bio,
53d2i_DSA_PUBKEY_fp,
54d2i_DSA_SIG,
55d2i_DSAparams,
bbda7997 56d2i_ECDSA_SIG,
4692340e
RS
57d2i_ECPKParameters,
58d2i_ECParameters,
59d2i_ECPrivateKey,
60d2i_ECPrivateKey_bio,
61d2i_ECPrivateKey_fp,
62d2i_EC_PUBKEY,
63d2i_EC_PUBKEY_bio,
64d2i_EC_PUBKEY_fp,
65d2i_EDIPARTYNAME,
66d2i_ESS_CERT_ID,
8c00f267 67d2i_ESS_CERT_ID_V2,
4692340e
RS
68d2i_ESS_ISSUER_SERIAL,
69d2i_ESS_SIGNING_CERT,
8c00f267 70d2i_ESS_SIGNING_CERT_V2,
4692340e
RS
71d2i_EXTENDED_KEY_USAGE,
72d2i_GENERAL_NAME,
73d2i_GENERAL_NAMES,
74d2i_IPAddressChoice,
75d2i_IPAddressFamily,
76d2i_IPAddressOrRange,
77d2i_IPAddressRange,
d9321c09 78d2i_ISSUER_SIGN_TOOL,
4692340e 79d2i_ISSUING_DIST_POINT,
fa743582 80d2i_NAMING_AUTHORITY,
4692340e
RS
81d2i_NETSCAPE_CERT_SEQUENCE,
82d2i_NETSCAPE_SPKAC,
83d2i_NETSCAPE_SPKI,
84d2i_NOTICEREF,
85d2i_OCSP_BASICRESP,
86d2i_OCSP_CERTID,
87d2i_OCSP_CERTSTATUS,
88d2i_OCSP_CRLID,
89d2i_OCSP_ONEREQ,
90d2i_OCSP_REQINFO,
91d2i_OCSP_REQUEST,
92d2i_OCSP_RESPBYTES,
93d2i_OCSP_RESPDATA,
94d2i_OCSP_RESPID,
95d2i_OCSP_RESPONSE,
96d2i_OCSP_REVOKEDINFO,
97d2i_OCSP_SERVICELOC,
98d2i_OCSP_SIGNATURE,
99d2i_OCSP_SINGLERESP,
8869ad4a
AK
100d2i_OSSL_CMP_MSG,
101d2i_OSSL_CMP_PKIHEADER,
62dcd2aa 102d2i_OSSL_CMP_PKISI,
8869ad4a
AK
103d2i_OSSL_CRMF_CERTID,
104d2i_OSSL_CRMF_CERTTEMPLATE,
105d2i_OSSL_CRMF_ENCRYPTEDVALUE,
106d2i_OSSL_CRMF_MSG,
107d2i_OSSL_CRMF_MSGS,
108d2i_OSSL_CRMF_PBMPARAMETER,
109d2i_OSSL_CRMF_PKIPUBLICATIONINFO,
110d2i_OSSL_CRMF_SINGLEPUBINFO,
4692340e
RS
111d2i_OTHERNAME,
112d2i_PBE2PARAM,
113d2i_PBEPARAM,
114d2i_PBKDF2PARAM,
115d2i_PKCS12,
116d2i_PKCS12_BAGS,
117d2i_PKCS12_MAC_DATA,
118d2i_PKCS12_SAFEBAG,
119d2i_PKCS12_bio,
120d2i_PKCS12_fp,
121d2i_PKCS7,
122d2i_PKCS7_DIGEST,
123d2i_PKCS7_ENCRYPT,
124d2i_PKCS7_ENC_CONTENT,
125d2i_PKCS7_ENVELOPE,
126d2i_PKCS7_ISSUER_AND_SERIAL,
127d2i_PKCS7_RECIP_INFO,
128d2i_PKCS7_SIGNED,
129d2i_PKCS7_SIGNER_INFO,
130d2i_PKCS7_SIGN_ENVELOPE,
131d2i_PKCS7_bio,
132d2i_PKCS7_fp,
133d2i_PKCS8_PRIV_KEY_INFO,
134d2i_PKCS8_PRIV_KEY_INFO_bio,
135d2i_PKCS8_PRIV_KEY_INFO_fp,
136d2i_PKCS8_bio,
137d2i_PKCS8_fp,
138d2i_PKEY_USAGE_PERIOD,
139d2i_POLICYINFO,
140d2i_POLICYQUALINFO,
fa743582 141d2i_PROFESSION_INFO,
4692340e
RS
142d2i_PROXY_CERT_INFO_EXTENSION,
143d2i_PROXY_POLICY,
4692340e
RS
144d2i_RSAPrivateKey,
145d2i_RSAPrivateKey_bio,
146d2i_RSAPrivateKey_fp,
147d2i_RSAPublicKey,
148d2i_RSAPublicKey_bio,
149d2i_RSAPublicKey_fp,
150d2i_RSA_OAEP_PARAMS,
151d2i_RSA_PSS_PARAMS,
152d2i_RSA_PUBKEY,
153d2i_RSA_PUBKEY_bio,
154d2i_RSA_PUBKEY_fp,
00606b06 155d2i_SCRYPT_PARAMS,
4692340e
RS
156d2i_SCT_LIST,
157d2i_SXNET,
158d2i_SXNETID,
159d2i_TS_ACCURACY,
160d2i_TS_MSG_IMPRINT,
161d2i_TS_MSG_IMPRINT_bio,
162d2i_TS_MSG_IMPRINT_fp,
163d2i_TS_REQ,
164d2i_TS_REQ_bio,
165d2i_TS_REQ_fp,
166d2i_TS_RESP,
167d2i_TS_RESP_bio,
168d2i_TS_RESP_fp,
169d2i_TS_STATUS_INFO,
170d2i_TS_TST_INFO,
171d2i_TS_TST_INFO_bio,
172d2i_TS_TST_INFO_fp,
173d2i_USERNOTICE,
174d2i_X509,
175d2i_X509_ALGOR,
176d2i_X509_ALGORS,
177d2i_X509_ATTRIBUTE,
178d2i_X509_CERT_AUX,
179d2i_X509_CINF,
180d2i_X509_CRL,
181d2i_X509_CRL_INFO,
182d2i_X509_CRL_bio,
183d2i_X509_CRL_fp,
184d2i_X509_EXTENSION,
185d2i_X509_EXTENSIONS,
186d2i_X509_NAME,
187d2i_X509_NAME_ENTRY,
188d2i_X509_PUBKEY,
cb58d81e
RL
189d2i_X509_PUBKEY_bio,
190d2i_X509_PUBKEY_fp,
4692340e
RS
191d2i_X509_REQ,
192d2i_X509_REQ_INFO,
193d2i_X509_REQ_bio,
194d2i_X509_REQ_fp,
195d2i_X509_REVOKED,
196d2i_X509_SIG,
197d2i_X509_VAL,
198i2d_ACCESS_DESCRIPTION,
fa743582
RS
199i2d_ADMISSIONS,
200i2d_ADMISSION_SYNTAX,
4692340e
RS
201i2d_ASIdOrRange,
202i2d_ASIdentifierChoice,
203i2d_ASIdentifiers,
204i2d_ASN1_BIT_STRING,
205i2d_ASN1_BMPSTRING,
206i2d_ASN1_ENUMERATED,
207i2d_ASN1_GENERALIZEDTIME,
208i2d_ASN1_GENERALSTRING,
209i2d_ASN1_IA5STRING,
210i2d_ASN1_INTEGER,
211i2d_ASN1_NULL,
212i2d_ASN1_OBJECT,
213i2d_ASN1_OCTET_STRING,
214i2d_ASN1_PRINTABLE,
215i2d_ASN1_PRINTABLESTRING,
216i2d_ASN1_SEQUENCE_ANY,
217i2d_ASN1_SET_ANY,
218i2d_ASN1_T61STRING,
219i2d_ASN1_TIME,
220i2d_ASN1_TYPE,
221i2d_ASN1_UNIVERSALSTRING,
222i2d_ASN1_UTCTIME,
223i2d_ASN1_UTF8STRING,
224i2d_ASN1_VISIBLESTRING,
225i2d_ASN1_bio_stream,
226i2d_ASRange,
227i2d_AUTHORITY_INFO_ACCESS,
228i2d_AUTHORITY_KEYID,
229i2d_BASIC_CONSTRAINTS,
230i2d_CERTIFICATEPOLICIES,
231i2d_CMS_ContentInfo,
232i2d_CMS_ReceiptRequest,
233i2d_CMS_bio,
234i2d_CRL_DIST_POINTS,
235i2d_DHxparams,
236i2d_DIRECTORYSTRING,
237i2d_DISPLAYTEXT,
238i2d_DIST_POINT,
239i2d_DIST_POINT_NAME,
240i2d_DSAPrivateKey,
241i2d_DSAPrivateKey_bio,
242i2d_DSAPrivateKey_fp,
243i2d_DSAPublicKey,
82d89ef7 244i2d_DSA_PUBKEY,
4692340e
RS
245i2d_DSA_PUBKEY_bio,
246i2d_DSA_PUBKEY_fp,
247i2d_DSA_SIG,
248i2d_DSAparams,
bbda7997 249i2d_ECDSA_SIG,
4692340e
RS
250i2d_ECPKParameters,
251i2d_ECParameters,
252i2d_ECPrivateKey,
253i2d_ECPrivateKey_bio,
254i2d_ECPrivateKey_fp,
255i2d_EC_PUBKEY,
256i2d_EC_PUBKEY_bio,
257i2d_EC_PUBKEY_fp,
258i2d_EDIPARTYNAME,
259i2d_ESS_CERT_ID,
8c00f267 260i2d_ESS_CERT_ID_V2,
4692340e
RS
261i2d_ESS_ISSUER_SERIAL,
262i2d_ESS_SIGNING_CERT,
8c00f267 263i2d_ESS_SIGNING_CERT_V2,
4692340e
RS
264i2d_EXTENDED_KEY_USAGE,
265i2d_GENERAL_NAME,
266i2d_GENERAL_NAMES,
267i2d_IPAddressChoice,
268i2d_IPAddressFamily,
269i2d_IPAddressOrRange,
270i2d_IPAddressRange,
d9321c09 271i2d_ISSUER_SIGN_TOOL,
4692340e 272i2d_ISSUING_DIST_POINT,
fa743582 273i2d_NAMING_AUTHORITY,
4692340e
RS
274i2d_NETSCAPE_CERT_SEQUENCE,
275i2d_NETSCAPE_SPKAC,
276i2d_NETSCAPE_SPKI,
277i2d_NOTICEREF,
278i2d_OCSP_BASICRESP,
279i2d_OCSP_CERTID,
280i2d_OCSP_CERTSTATUS,
281i2d_OCSP_CRLID,
282i2d_OCSP_ONEREQ,
283i2d_OCSP_REQINFO,
284i2d_OCSP_REQUEST,
285i2d_OCSP_RESPBYTES,
286i2d_OCSP_RESPDATA,
287i2d_OCSP_RESPID,
288i2d_OCSP_RESPONSE,
289i2d_OCSP_REVOKEDINFO,
290i2d_OCSP_SERVICELOC,
291i2d_OCSP_SIGNATURE,
292i2d_OCSP_SINGLERESP,
8869ad4a
AK
293i2d_OSSL_CMP_MSG,
294i2d_OSSL_CMP_PKIHEADER,
62dcd2aa 295i2d_OSSL_CMP_PKISI,
8869ad4a
AK
296i2d_OSSL_CRMF_CERTID,
297i2d_OSSL_CRMF_CERTTEMPLATE,
298i2d_OSSL_CRMF_ENCRYPTEDVALUE,
299i2d_OSSL_CRMF_MSG,
300i2d_OSSL_CRMF_MSGS,
301i2d_OSSL_CRMF_PBMPARAMETER,
302i2d_OSSL_CRMF_PKIPUBLICATIONINFO,
303i2d_OSSL_CRMF_SINGLEPUBINFO,
4692340e
RS
304i2d_OTHERNAME,
305i2d_PBE2PARAM,
306i2d_PBEPARAM,
307i2d_PBKDF2PARAM,
308i2d_PKCS12,
309i2d_PKCS12_BAGS,
310i2d_PKCS12_MAC_DATA,
311i2d_PKCS12_SAFEBAG,
312i2d_PKCS12_bio,
313i2d_PKCS12_fp,
314i2d_PKCS7,
315i2d_PKCS7_DIGEST,
316i2d_PKCS7_ENCRYPT,
317i2d_PKCS7_ENC_CONTENT,
318i2d_PKCS7_ENVELOPE,
319i2d_PKCS7_ISSUER_AND_SERIAL,
320i2d_PKCS7_NDEF,
321i2d_PKCS7_RECIP_INFO,
322i2d_PKCS7_SIGNED,
323i2d_PKCS7_SIGNER_INFO,
324i2d_PKCS7_SIGN_ENVELOPE,
325i2d_PKCS7_bio,
326i2d_PKCS7_fp,
327i2d_PKCS8PrivateKeyInfo_bio,
328i2d_PKCS8PrivateKeyInfo_fp,
329i2d_PKCS8_PRIV_KEY_INFO,
330i2d_PKCS8_PRIV_KEY_INFO_bio,
331i2d_PKCS8_PRIV_KEY_INFO_fp,
332i2d_PKCS8_bio,
333i2d_PKCS8_fp,
334i2d_PKEY_USAGE_PERIOD,
335i2d_POLICYINFO,
336i2d_POLICYQUALINFO,
fa743582 337i2d_PROFESSION_INFO,
4692340e
RS
338i2d_PROXY_CERT_INFO_EXTENSION,
339i2d_PROXY_POLICY,
4692340e
RS
340i2d_RSAPrivateKey,
341i2d_RSAPrivateKey_bio,
342i2d_RSAPrivateKey_fp,
343i2d_RSAPublicKey,
344i2d_RSAPublicKey_bio,
345i2d_RSAPublicKey_fp,
346i2d_RSA_OAEP_PARAMS,
347i2d_RSA_PSS_PARAMS,
348i2d_RSA_PUBKEY,
349i2d_RSA_PUBKEY_bio,
350i2d_RSA_PUBKEY_fp,
00606b06 351i2d_SCRYPT_PARAMS,
4692340e
RS
352i2d_SCT_LIST,
353i2d_SXNET,
354i2d_SXNETID,
355i2d_TS_ACCURACY,
356i2d_TS_MSG_IMPRINT,
357i2d_TS_MSG_IMPRINT_bio,
358i2d_TS_MSG_IMPRINT_fp,
359i2d_TS_REQ,
360i2d_TS_REQ_bio,
361i2d_TS_REQ_fp,
362i2d_TS_RESP,
363i2d_TS_RESP_bio,
364i2d_TS_RESP_fp,
365i2d_TS_STATUS_INFO,
366i2d_TS_TST_INFO,
367i2d_TS_TST_INFO_bio,
368i2d_TS_TST_INFO_fp,
369i2d_USERNOTICE,
370i2d_X509,
371i2d_X509_ALGOR,
372i2d_X509_ALGORS,
373i2d_X509_ATTRIBUTE,
374i2d_X509_CERT_AUX,
375i2d_X509_CINF,
376i2d_X509_CRL,
377i2d_X509_CRL_INFO,
378i2d_X509_CRL_bio,
379i2d_X509_CRL_fp,
380i2d_X509_EXTENSION,
381i2d_X509_EXTENSIONS,
382i2d_X509_NAME,
383i2d_X509_NAME_ENTRY,
384i2d_X509_PUBKEY,
cb58d81e
RL
385i2d_X509_PUBKEY_bio,
386i2d_X509_PUBKEY_fp,
4692340e
RS
387i2d_X509_REQ,
388i2d_X509_REQ_INFO,
389i2d_X509_REQ_bio,
390i2d_X509_REQ_fp,
391i2d_X509_REVOKED,
392i2d_X509_SIG,
393i2d_X509_VAL,
394- convert objects from/to ASN.1/DER representation
395
9946fceb
DSH
396=head1 SYNOPSIS
397
bb82531f 398=for openssl generic
b97fdb57 399
7c60a968 400 TYPE *d2i_TYPE(TYPE **a, unsigned char **ppin, long length);
4692340e
RS
401 TYPE *d2i_TYPE_bio(BIO *bp, TYPE **a);
402 TYPE *d2i_TYPE_fp(FILE *fp, TYPE **a);
842d8e20 403
9fdcc21f 404 int i2d_TYPE(const TYPE *a, unsigned char **ppout);
7c60a968 405 int i2d_TYPE(TYPE *a, unsigned char **ppout);
9fdcc21f 406 int i2d_TYPE_fp(FILE *fp, const TYPE *a);
4692340e 407 int i2d_TYPE_fp(FILE *fp, TYPE *a);
9fdcc21f 408 int i2d_TYPE_bio(BIO *bp, const TYPE *a);
4692340e 409 int i2d_TYPE_bio(BIO *bp, TYPE *a);
9946fceb 410
4692340e 411=head1 DESCRIPTION
9946fceb 412
bbecf04e 413In the description here, B<I<TYPE>> is used a placeholder
4692340e 414for any of the OpenSSL datatypes, such as I<X509_CRL>.
7c60a968
DMSP
415The function parameters I<ppin> and I<ppout> are generally
416either both named I<pp> in the headers, or I<in> and I<out>.
95b1752c 417
4692340e
RS
418These functions convert OpenSSL objects to and from their ASN.1/DER
419encoding. Unlike the C structures which can have pointers to sub-objects
420within, the DER is a serialized encoding, suitable for sending over the
421network, writing to a file, and so on.
9946fceb 422
bbecf04e
RL
423B<d2i_I<TYPE>>() attempts to decode I<len> bytes at I<*ppin>. If successful a
424pointer to the B<I<TYPE>> structure is returned and I<*ppin> is incremented to
425the byte following the parsed data. If I<a> is not NULL then a pointer
426to the returned structure is also written to I<*a>. If an error occurred
427then NULL is returned.
9946fceb 428
bbecf04e
RL
429On a successful return, if I<*a> is not NULL then it is assumed that I<*a>
430contains a valid B<I<TYPE>> structure and an attempt is made to reuse it. This
4692340e
RS
431"reuse" capability is present for historical compatibility but its use is
432B<strongly discouraged> (see BUGS below, and the discussion in the RETURN
433VALUES section).
09f278f9 434
bbecf04e
RL
435B<d2i_I<TYPE>_bio>() is similar to B<d2i_I<TYPE>>() except it attempts
436to parse data from BIO I<bp>.
9946fceb 437
bbecf04e
RL
438B<d2i_I<TYPE>_fp>() is similar to B<d2i_I<TYPE>>() except it attempts
439to parse data from FILE pointer I<fp>.
fde2257f 440
bbecf04e
RL
441B<i2d_I<TYPE>>() encodes the structure pointed to by I<a> into DER format.
442If I<ppout> is not NULL, it writes the DER encoded data to the buffer
443at I<*ppout>, and increments it to point after the data just written.
9946fceb 444If the return value is negative an error occurred, otherwise it
1bc74519 445returns the length of the encoded data.
9946fceb 446
bbecf04e
RL
447If I<*ppout> is NULL memory will be allocated for a buffer and the encoded
448data written to it. In this case I<*ppout> is not incremented and it points
4692340e 449to the start of the data just written.
9946fceb 450
bbecf04e
RL
451B<i2d_I<TYPE>_bio>() is similar to B<i2d_I<TYPE>>() except it writes
452the encoding of the structure I<a> to BIO I<bp> and it
cfae3d94 453returns 1 for success and 0 for failure.
9946fceb 454
bbecf04e 455B<i2d_I<TYPE>_fp>() is similar to B<i2d_I<TYPE>>() except it writes
bb2d726d 456the encoding of the structure I<a> to FILE pointer I<fp> and it
cfae3d94 457returns 1 for success and 0 for failure.
9946fceb 458
4692340e
RS
459These routines do not encrypt private keys and therefore offer no
460security; use L<PEM_write_PrivateKey(3)> or similar for writing to files.
95b1752c 461
9946fceb
DSH
462=head1 NOTES
463
bbecf04e 464The letters B<i> and B<d> in B<i2d_I<TYPE>>() stand for
4692340e 465"internal" (that is, an internal C structure) and "DER" respectively.
bbecf04e 466So B<i2d_I<TYPE>>() converts from internal to DER.
9946fceb
DSH
467
468The functions can also understand B<BER> forms.
469
bbecf04e
RL
470The actual TYPE structure passed to B<i2d_I<TYPE>>() must be a valid
471populated B<I<TYPE>> structure -- it B<cannot> simply be fed with an
4692340e 472empty structure such as that returned by TYPE_new().
9946fceb 473
9c0586d5 474The encoded data is in binary form and may contain embedded zeros.
8c1cbc72 475Therefore, any FILE pointers or BIOs should be opened in binary mode.
35cb565a 476Functions such as strlen() will B<not> return the correct length
9946fceb
DSH
477of the encoded structure.
478
bbecf04e 479The ways that I<*ppin> and I<*ppout> are incremented after the operation
9946fceb
DSH
480can trap the unwary. See the B<WARNINGS> section for some common
481errors.
4692340e 482The reason for this-auto increment behaviour is to reflect a typical
12e0ea30 483usage of ASN1 functions: after one structure is encoded or decoded
4692340e
RS
484another will be processed after it.
485
486The following points about the data types might be useful:
487
e1271ac2 488=over 4
4692340e
RS
489
490=item B<ASN1_OBJECT>
491
492Represents an ASN1 OBJECT IDENTIFIER.
493
494=item B<DHparams>
495
496Represents a PKCS#3 DH parameters structure.
497
68229aeb 498=item B<DHxparams>
4692340e 499
3266cf58 500Represents an ANSI X9.42 DH parameters structure.
4692340e
RS
501
502=item B<DSA_PUBKEY>
503
504Represents a DSA public key using a B<SubjectPublicKeyInfo> structure.
505
bbecf04e 506=item B<DSAPublicKey>, B<DSAPrivateKey>
4692340e
RS
507
508Use a non-standard OpenSSL format and should be avoided; use B<DSA_PUBKEY>,
bbecf04e 509L<PEM_write_PrivateKey(3)>, or similar instead.
4692340e 510
bbda7997
MC
511=item B<ECDSA_SIG>
512
513Represents an ECDSA signature.
514
4692340e
RS
515=item B<RSAPublicKey>
516
517Represents a PKCS#1 RSA public key structure.
518
519=item B<X509_ALGOR>
520
27b138e9 521Represents an B<AlgorithmIdentifier> structure as used in IETF RFC 6960 and
4692340e
RS
522elsewhere.
523
524=item B<X509_Name>
525
526Represents a B<Name> type as used for subject and issuer names in
527IETF RFC 6960 and elsewhere.
528
529=item B<X509_REQ>
530
531Represents a PKCS#10 certificate request.
532
533=item B<X509_SIG>
534
535Represents the B<DigestInfo> structure defined in PKCS#1 and PKCS#7.
536
537=back
9946fceb 538
4564e77a
PY
539=head1 RETURN VALUES
540
bbecf04e
RL
541B<d2i_I<TYPE>>(), B<d2i_I<TYPE>_bio>() and B<d2i_I<TYPE>_fp>() return a valid
542B<I<TYPE>> structure or NULL if an error occurs. If the "reuse" capability has
543been used with a valid structure being passed in via I<a>, then the object is
544freed in the event of error and I<*a> is set to NULL.
4564e77a 545
bbecf04e 546B<i2d_I<TYPE>>() returns the number of bytes successfully encoded or a negative
4564e77a
PY
547value if an error occurs.
548
bbecf04e
RL
549B<i2d_I<TYPE>_bio>() and B<i2d_I<TYPE>_fp>() return 1 for success and 0 if an
550error occurs.
4564e77a 551
9946fceb
DSH
552=head1 EXAMPLES
553
554Allocate and encode the DER encoding of an X509 structure:
555
9946fceb
DSH
556 int len;
557 unsigned char *buf;
558
559 buf = NULL;
9946fceb 560 len = i2d_X509(x, &buf);
9946fceb 561 if (len < 0)
4692340e 562 /* error */
9946fceb
DSH
563
564Attempt to decode a buffer:
565
566 X509 *x;
9946fceb 567 unsigned char *buf, *p;
9946fceb
DSH
568 int len;
569
4692340e 570 /* Set up buf and len to point to the input buffer. */
9946fceb 571 p = buf;
9946fceb 572 x = d2i_X509(NULL, &p, len);
9946fceb 573 if (x == NULL)
4692340e 574 /* error */
9946fceb
DSH
575
576Alternative technique:
577
578 X509 *x;
9946fceb 579 unsigned char *buf, *p;
9946fceb
DSH
580 int len;
581
4692340e 582 /* Set up buf and len to point to the input buffer. */
9946fceb 583 p = buf;
9946fceb
DSH
584 x = NULL;
585
4692340e
RS
586 if (d2i_X509(&x, &p, len) == NULL)
587 /* error */
9946fceb
DSH
588
589=head1 WARNINGS
590
4692340e 591Using a temporary variable is mandatory. A common
9946fceb
DSH
592mistake is to attempt to use a buffer directly as follows:
593
594 int len;
595 unsigned char *buf;
596
597 len = i2d_X509(x, NULL);
9946fceb 598 buf = OPENSSL_malloc(len);
4692340e 599 ...
9946fceb 600 i2d_X509(x, &buf);
4692340e 601 ...
9946fceb
DSH
602 OPENSSL_free(buf);
603
bbecf04e 604This code will result in I<buf> apparently containing garbage because
9946fceb 605it was incremented after the call to point after the data just written.
bbecf04e 606Also I<buf> will no longer contain the pointer allocated by OPENSSL_malloc()
4692340e 607and the subsequent call to OPENSSL_free() is likely to crash.
9946fceb 608
bbecf04e 609Another trap to avoid is misuse of the I<a> argument to B<d2i_I<TYPE>>():
9946fceb
DSH
610
611 X509 *x;
612
4692340e
RS
613 if (d2i_X509(&x, &p, len) == NULL)
614 /* error */
9946fceb 615
35cb565a 616This will probably crash somewhere in d2i_X509(). The reason for this
bbecf04e 617is that the variable I<x> is uninitialized and an attempt will be made to
9946fceb 618interpret its (invalid) value as an B<X509> structure, typically causing
bbecf04e 619a segmentation violation. If I<x> is set to NULL first then this will not
9946fceb
DSH
620happen.
621
622=head1 BUGS
623
bbecf04e
RL
624In some versions of OpenSSL the "reuse" behaviour of B<d2i_I<TYPE>>() when
625I<*a> is valid is broken and some parts of the reused structure may
b1d14c41
MC
626persist if they are not present in the new one. Additionally, in versions of
627OpenSSL prior to 1.1.0, when the "reuse" behaviour is used and an error occurs
628the behaviour is inconsistent. Some functions behaved as described here, while
bbecf04e 629some did not free I<*a> on error and did not set I<*a> to NULL.
b1d14c41
MC
630
631As a result of the above issues the "reuse" behaviour is strongly discouraged.
9946fceb 632
bbecf04e 633B<i2d_I<TYPE>>() will not return an error in many versions of OpenSSL,
9946fceb 634if mandatory fields are not initialized due to a programming error
12e0ea30 635then the encoded structure may contain invalid data or omit the
bbecf04e
RL
636fields entirely and will not be parsed by B<d2i_I<TYPE>>(). This may be
637fixed in future so code should not assume that B<i2d_I<TYPE>>() will
9946fceb
DSH
638always succeed.
639
bbecf04e
RL
640Any function which encodes a structure (B<i2d_I<TYPE>>(),
641B<i2d_I<TYPE>>() or B<i2d_I<TYPE>>()) may return a stale encoding if the
4692340e
RS
642structure has been modified after deserialization or previous
643serialization. This is because some objects cache the encoding for
644efficiency reasons.
95b1752c 645
e2f92610
RS
646=head1 COPYRIGHT
647
33388b44 648Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 649
4746f25a 650Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
651this file except in compliance with the License. You can obtain a copy
652in the file LICENSE in the source distribution or at
653L<https://www.openssl.org/source/license.html>.
654
655=cut