0ac0f16f495ddc0c579852d12ca560588f473442
[openssl.git] / doc / crypto / ASN1_generate_nconf.pod
1 =pod
2
3 =head1 NAME
4
5 ASN1_generate_nconf, ASN1_generate_v3 - ASN1 generation functions
6
7 =head1 SYNOPSIS
8
9  ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf);
10  ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf);
11
12 =head1 DESCRIPTION
13
14 These functions generate the ASN1 encoding of a string
15 in an B<ASN1_TYPE> structure.
16
17 B<str> contains the string to encode B<nconf> or B<cnf> contains
18 the optional configuration information where additional strings
19 will be read from. B<nconf> will typically come from a config
20 file wherease B<cnf> is obtained from an B<X509V3_CTX> structure
21 which will typically be used by X509 v3 certificate extension
22 functions. B<cnf> or B<nconf> can be set to B<NULL> if no additional
23 configuration will be used.
24
25 =head1 GENERATION STRING FORMAT
26
27 The actual data encoded is determined by the string B<str> and
28 the configuration information. The general format of the string
29 is:
30
31  B<[modifier,]type[:value]>
32
33 That is zero or more comma separated modifiers followed by a type
34 followed by an optional colon and a value. The formats of B<type>,
35 B<value> and B<modifier> are explained below.
36
37 =head2 SUPPORTED TYPES
38
39 The supported types are listed below. Unless otherwise specified
40 only the B<ASCII> format is permissible.
41
42 =over 2
43
44 =item B<BOOLEAN>, B<BOOL>
45
46 This encodes a boolean type. The B<value> string is mandatory and
47 should be B<TRUE> or B<FALSE>. Additionally B<TRUE>, B<true>, B<Y>,
48 B<y>, B<YES>, B<yes>, B<FALSE>, B<false>, B<N>, B<n>, B<NO> and B<no>
49 are acceptable. 
50
51 =item B<NULL>
52
53 Encode the B<NULL> type, the B<value> string must not be present.
54
55 =item B<INTEGER>, B<INT>
56
57 Encodes an ASN1 B<INTEGER> type. The B<value> string represents
58 the value of the integer, it can be preceeded by a minus sign and
59 is normally interpreted as a decimal value unless the prefix B<0x>
60 is included.
61
62 =item B<ENUMERATED>, B<ENUM>
63
64 Encodes the ASN1 B<ENUMERATED> type, it is otherwise identical to
65 B<INTEGER>.
66
67 =item B<OBJECT>, B<OID>
68
69 Encodes an ASN1 B<OBJECT IDENTIFIER>, the B<value> string can be
70 a short name, a long name or numerical format.
71
72 =item B<UTCTIME>, B<UTC>
73
74 Encodes an ASN1 B<UTCTime> structure, the value should be in
75 the format B<YYMMDDHHMMSSZ>. 
76
77 =item B<GENERALIZEDTIME>, B<GENTIME>
78
79 Encodes an ASN1 B<GeneralizedTime> structure, the value should be in
80 the format B<YYYYMMDDHHMMSSZ>. 
81
82 =item B<OCTETSTRING>, B<OCT>
83
84 Emcodes an ASN1 B<OCTET STRING>. B<value> represents the contents
85 of this structure, the format strings B<ASCII> and B<HEX> can be
86 used to specify the format of B<value>.
87
88 =item B<BITSRING>, B<BITSTR>
89
90 Emcodes an ASN1 B<BIT STRING>. B<value> represents the contents
91 of this structure, the format strings B<ASCII>, B<HEX> and B<BITLIST>
92 can be used to specify the format of B<value>.
93
94 If the format is anything other than B<BITLIST> the number of unused
95 bits is set to zero.
96
97 =item B<UNIVERSALSTRING>, B<UNIV>, B<IA5>, B<IA5STRING>, B<UTF8>,
98 B<UTF8String>, B<BMP>, B<BMPSTRING>, B<VISIBLESTRING>,
99 B<VISIBLE>, B<PRINTABLESTRING>, B<PRINTABLE>, B<T61>,
100 B<T61STRING>, B<TELETEXSTRING>, B<GeneralString>, B<NUMERICSTRING>,
101 B<NUMERIC>
102
103 These encode the corresponding string types. B<value> represents the
104 contents of this structure. The format can be B<ASCII> or B<UTF8>.
105
106 =item B<SEQUENCE>, B<SEQ>, B<SET>
107
108 Formats the result as an ASN1 B<SEQUENCE> or B<SET> type. B<value>
109 should be a section name which will contain the contents. The
110 field names in the section are ignored and the values are in the
111 generated string format. If B<value> is absent then an empty SEQUENCE
112 will be encoded.
113
114 =back
115
116 =head2 MODIFIERS
117
118 Modifiers affect the following structure, they can be used to
119 add EXPLICIT or IMPLICIT tagging, add wrappers or to change
120 the string format of the final type and value. The supported
121 formats are documented below.
122
123 =over 2
124
125 =item B<EXPLICIT>, B<EXP>
126
127 Add an explicit tag to the following structure. This string
128 should be followed by a colon and the tag value to use as a
129 decimal value.
130
131 By following the number with B<U>, B<A>, B<P> or B<C> UNIVERSAL,
132 APPLICATION, PRIVATE or CONTEXT SPECIFIC tagging can be used,
133 the default is CONTEXT SPECIFIC.
134
135 =item B<IMPLICIT>, B<IMP>
136
137 This is the same as B<EXPLICIT> except IMPLICIT tagging is used
138 instead.
139
140 =item B<OCTWRAP>, B<SEQWRAP>, B<SETWRAP>, B<BITWRAP>
141
142 The following structure is surrounded by an OCTET STRING, a SEQUENCE,
143 a SET or a BIT STRING respectively. For a BIT STRING the number of unused
144 bits is set to zero.
145
146 =item B<FORMAT>
147
148 This specifies the format of the ultimate value. It should be followed
149 by a colon and one of the strings B<ASCII>, B<UTF8>, B<HEX> or B<BITLIST>.
150
151 If no format specifier is included then B<ASCII> is used. If B<UTF8> is specified
152 then the value string must be a valid B<UTF8> string. For B<HEX> the output must
153 be a set of hex digits. B<BITLIST> (which is only valid for a BIT STRING) is a
154 comma separated list of set bits.
155
156 =back
157
158 =head1 EXAMPLES
159
160 A simple IA5String:
161
162  IA5STRING:Hello World
163
164 An IA5String explicitly tagged:
165
166  EXPLICIT:0,IA5STRING:Hello World
167
168 An IA5String explicitly tagged using APPLICATION tagging:
169
170  EXPLICIT:0A,IA5STRING:Hello World
171
172 A more complex example using a config file to produce a
173 SEQUENCE consiting of a BOOL an OID and a UTF8String:
174
175 asn1 = SEQUENCE:seq_section
176
177 [seq_section]
178
179 field1 = BOOLEAN:TRUE
180 field2 = OID:commonName
181 field3 = UTF8:Third field
182
183 This example produces an RSAPrivateKey structure, this is the
184 key contained in the file client.pem in all OpenSSL distributions
185 (note: the field names such as 'coeff' are ignored and are present just
186 for clarity):
187
188  asn1=SEQUENCE:private_key
189  [private_key]
190  version=INTEGER:0
191
192  n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
193  D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
194
195  e=INTEGER:0x010001
196
197  d=INTEGER:0x6F05EAD2F27FFAEC84BEC360C4B928FD5F3A9865D0FCAAD291E2A52F4A\
198  F810DC6373278C006A0ABBA27DC8C63BF97F7E666E27C5284D7D3B1FFFE16B7A87B51D
199
200  p=INTEGER:0xF3929B9435608F8A22C208D86795271D54EBDFB09DDEF539AB083DA912\
201  D4BD57
202
203  q=INTEGER:0xC50016F89DFF2561347ED1186A46E150E28BF2D0F539A1594BBD7FE467\
204  46EC4F
205
206  exp1=INTEGER:0x9E7D4326C924AFC1DEA40B45650134966D6F9DFA3A7F9D698CD4ABEA\
207  9C0A39B9
208
209  exp2=INTEGER:0xBA84003BB95355AFB7C50DF140C60513D0BA51D637272E355E397779\
210  E7B2458F
211
212  coeff=INTEGER:0x30B9E4F2AFA5AC679F920FC83F1F2DF1BAF1779CF989447FABC2F5\
213  628657053A
214
215 This example is the corresponding public key in a SubjectPublicKeyInfo
216 structure:
217
218  # Start with a SEQUENCE
219  asn1=SEQUENCE:pubkeyinfo
220
221  # pubkeyinfo contains an algorithm identifier and the public key wrapped
222  # in a BIT STRING
223  [pubkeyinfo]
224  algorithm=SEQUENCE:rsa_alg
225  pubkey=BITWRAP,SEQUENCE:rsapubkey
226
227  # algorithm ID for RSA is just an OID and a NULL
228  [rsa_alg]
229  algorithm=OID:rsaEncryption
230  parameter=NULL
231
232  # Actual public key: modulus and exponent
233  [rsapubkey]
234  n=INTEGER:0xBB6FE79432CC6EA2D8F970675A5A87BFBE1AFF0BE63E879F2AFFB93644\
235  D4D2C6D000430DEC66ABF47829E74B8C5108623A1C0EE8BE217B3AD8D36D5EB4FCA1D9
236
237  e=INTEGER:0x010001
238
239 =head1 RETURN VALUES
240
241 ASN1_generate_nconf() and ASN1_generate_v3() return the encoded
242 data as an B<ASN1_TYPE> structure or B<NULL> if an error occurred.
243
244 The error codes that can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
245
246 =head1 SEE ALSO
247
248 L<ERR_get_error(3)|ERR_get_error(3)>
249
250 =head1 HISTORY
251
252 ASN1_generate_nconf() and ASN1_generate_v3() were added to OpenSSL 0.9.8
253
254 =cut