Ignore Makefile.save
[openssl.git] / doc / openssl.txt
1
2 This is some preliminary documentation for OpenSSL.
3
4 ==============================================================================
5                             BUFFER Library
6 ==============================================================================
7
8 The buffer library handles simple character arrays. Buffers are used for various
9 purposes in the library, most notably memory BIOs.
10
11 The library uses the BUF_MEM structure defined in buffer.h:
12
13 typedef struct buf_mem_st
14 {
15         int length;     /* current number of bytes */
16         char *data;
17         int max;        /* size of buffer */
18 } BUF_MEM;
19
20 'length' is the current size of the buffer in bytes, 'max' is the amount of
21 memory allocated to the buffer. There are three functions which handle these
22 and one "miscelanous" function.
23
24 BUF_MEM *BUF_MEM_new()
25
26 This allocates a new buffer of zero size. Returns the buffer or NULL on error.
27
28 void BUF_MEM_free(BUF_MEM *a)
29
30 This frees up an already existing buffer. The data is zeroed before freeing
31 up in case the buffer contains sensitive data.
32
33 int BUF_MEM_grow(BUF_MEM *str, int len)
34
35 This changes the size of an already existing buffer. It returns zero on error
36 or the new size (i.e. 'len'). Any data already in the buffer is preserved if
37 it increases in size.
38
39 char * BUF_strdup(char *str)
40
41 This is the previously mentioned strdup function: like the standard library
42 strdup() it copies a null terminated string into a block of allocated memory
43 and returns a pointer to the allocated block.
44
45 Unlike the standard C library strdup() this function uses Malloc() and so
46 should be used in preference to the standard library strdup() because it can
47 be used for memory leak checking or replacing the malloc() function.
48
49 The memory allocated from BUF_strdup() should be freed up using the Free()
50 function.
51
52 ==============================================================================
53                OpenSSL X509V3 extension configuration
54 ==============================================================================
55
56 OpenSSL X509V3 extension configuration: preliminary documentation.
57
58 INTRODUCTION.
59
60 For OpenSSL 0.9.2 the extension code has be considerably enhanced. It is now
61 possible to add and print out common X509 V3 certificate and CRL extensions.
62
63 For more information about the meaning of extensions see:
64
65 http://www.imc.org/ietf-pkix/
66 http://home.netscape.com/eng/security/certs.html
67
68 PRINTING EXTENSIONS.
69
70 Extension values are automatically printed out for supported extensions.
71
72 openssl x509 -in cert.pem -text
73 openssl crl -in crl.pem -text
74
75 will give information in the extension printout, for example:
76
77
78         X509v3 extensions:
79             X509v3 Basic Constraints: 
80                 CA:TRUE
81             X509v3 Subject Key Identifier: 
82                 73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15
83             X509v3 Authority Key Identifier: 
84                 keyid:73:FE:F7:59:A7:E1:26:84:44:D6:44:36:EE:79:1A:95:7C:B1:4B:15, DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/Email=email@1.address/Email=email@2.address, serial:00
85             X509v3 Key Usage: 
86                 Certificate Sign, CRL Sign
87             X509v3 Subject Alternative Name: 
88                 email:email@1.address, email:email@2.address
89
90 CONFIGURATION FILES.
91
92 The OpenSSL utilities 'ca' and 'req' can now have extension sections listing
93 which certificate extensions to include. In each case a line:
94
95 x509_extensions = extension_section
96
97 indicates which section contains the extensions. In the case of 'req' the
98 extension section is used when the -x509 option is present to create a
99 self signed root certificate.
100
101 You can also add extensions to CRLs: a line
102
103 crl_extensions = crl_extension_section
104
105 will include extensions when the -gencrl option is used with the 'ca' utility.
106 You can add any extension to a CRL but of the supported extensions only
107 issuerAltName and authorityKeyIdentifier make any real sense. Note: these are
108 CRL extensions NOT CRL *entry* extensions which cannot currently be generated.
109 CRL entry extensions can be displayed.
110
111 EXTENSION SYNTAX.
112
113 Extensions have the basic form:
114
115 extension_name=[critical,] extension_options
116
117 the use of the critical option makes the extension critical. Extreme caution
118 should be made when using the critical flag. If an extension is marked
119 as critical then any client that does not understand the extension should
120 reject it as invalid. Some broken software will reject certificates which
121 have *any* critical extensions (these violates PKIX but we have to live
122 with it).
123
124 There are three main types of extension, string extensions, multi valued
125 extensions, and raw extensions.
126
127 String extensions simply have a string which defines the value of the or how
128 it is obtained.
129
130 For example:
131
132 nsComment="This is a Comment"
133
134 Multi valued extensions have a short form and a long form. The short form
135 is a list of names and values:
136
137 basicConstraints=critical,CA:true,pathlen:1
138
139 The long form allows the values to be placed in a separate section:
140
141 basicConstraints=critical,@bs_section
142
143 [bs_section]
144
145 CA=true
146 pathlen=1
147
148 Both forms are equivalent. However it should be noted that in some cases the
149 same name can appear multiple times, for example,
150
151 subjectAltName=email:steve@here,email:steve@there
152
153 in this case an equivalent long form is:
154
155 subjectAltName=@alt_section
156
157 [alt_section]
158
159 email.1=steve@here
160 email.2=steve@there
161
162 This is because the configuration file code cannot handle the same name
163 occurring twice in the same extension.
164
165 Raw extensions allow arbitrary data to be placed in an extension. For
166 example
167
168 1.2.3.4=critical,RAW:01:02:03:04
169 1.2.3.4=RAW:01020304
170
171 The value following RAW is a hex dump of the extension contents. Any extension
172 can be placed in this form to override the default behaviour. For example:
173
174 basicConstraints=critical,RAW:00:01:02:03
175
176 WARNING: raw extensions should be used with caution. It is possible to create
177 totally invalid extensions unless care is taken.
178
179 CURRENTLY SUPPORTED EXTENSIONS.
180
181 Literal String extensions.
182
183 In each case the 'value' of the extension is placed directly in the extension.
184 Currently supported extensions in this category are: nsBaseUrl, nsRevocationUrl
185 nsCaRevocationUrl, nsRenewalUrl, nsCaPolicyUrl, nsSslServerName and nsComment.
186
187 For example:
188
189 nsComment="This is a test comment"
190
191 Bit Strings.
192
193 Bit string extensions just consist of a list of suppported bits, currently
194 two extensions are in this category: PKIX keyUsage and the Netscape specific
195 nsCertType.
196
197 nsCertType (netscape certificate type) takes the flags: client, server, email,
198 objsign, reserved, sslCA, emailCA, objCA.
199
200 keyUsage (PKIX key usage) takes the flags: digitalSignature, nonRepudiation,
201 keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign,
202 encipherOnly, decipherOnly.
203
204 For example:
205
206 nsCertType=server
207
208 keyUsage=critical, digitalSignature, nonRepudiation
209
210
211 Basic Constraints.
212
213 Basic constraints is a multi valued extension that supports a CA and an
214 optional pathlen option. The CA option takes the values true and false and
215 pathlen takes an integer. Note if the CA option is false the pathlen option
216 should be omitted.
217
218 Examples:
219
220 basicConstraints=CA:TRUE
221 basicConstraints=critical,CA:TRUE, pathlen:10
222
223 NOTE: for a CA to be considered valid it must have the CA option set to
224 TRUE. An end user certificate MUST NOT have the CA value set to true.
225 According to PKIX recommendations it should exclude the extension entirely,
226 however some software may require CA set to FALSE for end entity certificates.
227
228 Subject Key Identifier.
229
230 This is really a string extension and can take two possible values. Either
231 a hex string giving details of the extension value to include or the word
232 'hash' which then automatically follow PKIX guidelines in selecting and
233 appropriate key identifier. The use of the hex string is strongly discouraged.
234
235 Example: subjectKeyIdentifier=hash
236
237 Authority Key Identifier.
238
239 The authority key identifier extension permits two options. keyid and issuer:
240 both can take the optional value "always".
241
242 If the keyid option is present an attempt is made to copy the subject key
243 identifier from the parent certificate. If the value "always" is present
244 then an error is returned if the option fails.
245
246 The issuer option copies the issuer and serial number from the issuer
247 certificate. Normally this will only be done if the keyid option fails or
248 is not included: the "always" flag will always include the value.
249
250 Subject Alternative Name.
251
252 The subject alternative name extension allows various literal values to be
253 included in the configuration file. These include "email" (an email address)
254 "URI" a uniform resource indicator, "DNS" (a DNS domain name), RID (a
255 registered ID: OBJECT IDENTIFIER) and IP (and IP address).
256
257 Also the email option include a special 'copy' value. This will automatically
258 include and email addresses contained in the certificate subject name in
259 the extension.
260
261 Examples:
262
263 subjectAltName=email:copy,email:my@other.address,URL:http://my.url.here/
264 subjectAltName=email:my@other.address,RID:1.2.3.4
265
266 Issuer Alternative Name.
267
268 The issuer alternative name option supports all the literal options of
269 subject alternative name. It does *not* support the email:copy option because
270 that would not make sense. It does support an additional issuer:copy option
271 that will copy all the subject alternative name values from the issuer 
272 certificate (if possible).
273
274 CRL distribution points.
275
276 This is a multivalued extension that supports all the literal options of
277 subject alternative name. Of the few software packages that currently interpret
278 this extension most only interpret the URI option.
279
280 Currently each option will set a new DistributionPoint with the fullName
281 field set to the given value.
282
283 Other fields like cRLissuer and reasons cannot currently be set or displayed:
284 at this time no examples were available that used these fields.
285
286 If you see this extension with <UNSUPPORTED> when you attempt to print it out
287 or it doesn't appear to display correctly then let me know, including the
288 certificate (mail me at steve@openssl.org) .
289
290 Examples:
291
292 crlDistributionPoints=URI:http://www.myhost.com/myca.crl
293 crlDistributionPoints=URI:http://www.my.com/my.crl,URI:http://www.oth.com/my.crl
294
295 Certificate Policies.
296
297 This is a RAW extension. It attempts to display the contents of this extension:
298 unfortuntately this extension is often improperly encoded.
299
300 The certificate policies extension will rarely be used in practice: few
301 software packages interpret it correctly or at all.
302
303 All the fields of this extension can be set by using the appropriate syntax.
304
305 If you follow the PKIX recommendations of not including any qualifiers and just
306 using only one OID then you just include the value of that OID. Multiple OIDs
307 can be set separated by commas, for example:
308
309 certificatePolicies= 1.2.4.5, 1.1.3.4
310
311 If you wish to include qualifiers then the policy OID and qualifiers need to
312 be specified in a separate section: this is done by using the @section syntax
313 instead of a literal OID value.
314
315 The section referred to must include the policy OID using the name
316 policyIdentifier, cPSuri qualifiers can be included using the syntax:
317
318 CPS.nnn=value
319
320 userNotice qualifiers can be set using the syntax:
321
322 userNotice.nnn=@notice
323
324 The value of the userNotice qualifier is specified in the relevant section. This
325 section can include explicitText, organization and noticeNumbers options. 
326 explicitText and organization are text strings, noticeNumbers is a comma
327 separated list of numbers. The organization and noticeNumbers options (if
328 included) must BOTH be present.
329
330 Example:
331
332 certificatePolicies=1.2.3.4,1.5.6.7.8,@polsect
333
334 [polsect]
335
336 policyIdentifier = 1.3.5.8
337 CPS.1="http://my.host.name/"
338 CPS.2="http://my.your.name/"
339 userNotice.1=@notice
340
341 [notice]
342
343 explicitText="Explicit Text Here"
344 organization="Organisation Name"
345 noticeNumbers=1,2,3,4
346
347 Display only extensions.
348
349 Some extensions are only partially supported and currently are only displayed
350 but cannot be set. These include private key usage period, CRL number, and
351 CRL reason.
352
353 ==============================================================================
354                             PKCS#12 Library
355 ==============================================================================
356
357 This section describes the internal PKCS#12 support. There are very few
358 differences between the old external library and the new internal code at
359 present. This may well change because the external library will not be updated
360 much in future.
361
362 This version now includes a couple of high level PKCS#12 functions which
363 generally "do the right thing" and should make it much easier to handle PKCS#12
364 structures.
365
366 HIGH LEVEL FUNCTIONS.
367
368 For most applications you only need concern yourself with the high level
369 functions. They can parse and generate simple PKCS#12 files as produced by
370 Netscape and MSIE or indeed any compliant PKCS#12 file containing a single
371 private key and certificate pair.
372
373 1. Initialisation and cleanup.
374
375 No special initialisation is needed for the internal PKCS#12 library: the 
376 standard SSLeay_add_all_algorithms() is sufficient. If you do not wish to
377 add all algorithms then you can manually initialise the PKCS#12 library with:
378
379 PKSC12_PBE_add();
380
381 The memory allocated by the PKCS#12 libray is freed up when EVP_cleanup() is
382 called or it can be directly freed with:
383
384 EVP_PBE_cleanup();
385
386 after this call (or EVP_cleanup() ) no more PKCS#12 library functions should
387 be called.
388
389 2. I/O functions.
390
391 i2d_PKCS12_bio(bp, p12)
392
393 This writes out a PKCS12 structure to a BIO.
394
395 i2d_PKCS12_fp(fp, p12)
396
397 This is the same but for a FILE pointer.
398
399 d2i_PKCS12_bio(bp, p12)
400
401 This reads in a PKCS12 structure from a BIO.
402
403 d2i_PKCS12_fp(fp, p12)
404
405 This is the same but for a FILE pointer.
406
407 3. Parsing and creation functions.
408
409 3.1 Parsing with PKCS12_parse().
410
411 int PKCS12_parse(PKCS12 *p12, char *pass, EVP_PKEY **pkey, X509 **cert,
412                                                                  STACK **ca);
413
414 This function takes a PKCS12 structure and a password (ASCII, null terminated)
415 and returns the private key, the corresponding certificate and any CA
416 certificates. If any of these is not required it can be passed as a NULL.
417 The 'ca' parameter should be either NULL, a pointer to NULL or a valid STACK
418 structure. Typically to read in a PKCS#12 file you might do:
419
420 p12 = d2i_PKCS12_fp(fp, NULL);
421 PKCS12_parse(p12, password, &pkey, &cert, NULL);        /* CAs not wanted */
422 PKCS12_free(p12);
423
424 3.2 PKCS#12 creation with PKCS12_create().
425
426 PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert,
427                         STACK *ca, int nid_key, int nid_cert, int iter,
428                                                  int mac_iter, int keytype);
429
430 This function will create a PKCS12 structure from a given password, name,
431 private key, certificate and optional STACK of CA certificates. The remaining
432 5 parameters can be set to 0 and sensible defaults will be used.
433
434 The parameters nid_key and nid_cert are the key and certificate encryption
435 algorithms, iter is the encryption iteration count, mac_iter is the MAC
436 iteration count and keytype is the type of private key. If you really want
437 to know what these last 5 parameters do then read the low level section.
438
439 Typically to create a PKCS#12 file the following could be used:
440
441 p12 = PKCS12_create(pass, "My Certificate", pkey, cert, NULL, 0,0,0,0,0);
442 i2d_PKCS12_fp(fp, p12);
443 PKCS12_free(p12);
444
445 LOW LEVEL FUNCTIONS.
446
447 In some cases the high level functions do not provide the necessary
448 functionality. For example if you want to generate or parse more complex PKCS#12
449 files. The sample pkcs12 application uses the low level functions to display
450 details about the internal structure of a PKCS#12 file.
451
452 Introduction.
453
454 This is a brief description of how a PKCS#12 file is represented internally:
455 some knowledge of PKCS#12 is assumed.
456
457 A PKCS#12 object contains several levels.
458
459 At the lowest level is a PKCS12_SAFEBAG. This can contain a certificate, a
460 CRL, a private key, encrypted or unencrypted, a set of safebags (so the
461 structure can be nested) or other secrets (not documented at present). 
462 A safebag can optionally have attributes, currently these are: a unicode
463 friendlyName (a Unicode string) or a localKeyID (a string of bytes).
464
465 At the next level is an authSafe which is a set of safebags collected into
466 a PKCS#7 ContentInfo. This can be just plain data, or encrypted itself.
467
468 At the top level is the PKCS12 structure itself which contains a set of
469 authSafes in an embedded PKCS#7 Contentinfo of type data. In addition it
470 contains a MAC which is a kind of password protected digest to preserve
471 integrity (so any unencrypted stuff below can't be tampered with).
472
473 The reason for these levels is so various objects can be encrypted in various
474 ways. For example you might want to encrypt a set of private keys with
475 triple-DES and then include the related certificates either unencrypted or with
476 lower encryption. Yes it's the dreaded crypto laws at work again which
477 allow strong encryption on private keys and only weak encryption on other stuff.
478
479 To build one of these things you turn all certificates and keys into safebags
480 (with optional attributes). You collect the safebags into (one or more) STACKS
481 and convert these into authsafes (encrypted or unencrypted).  The authsafes are
482 collected into a STACK and added to a PKCS12 structure.  Finally a MAC inserted.
483
484 Pulling one apart is basically the reverse process. The MAC is verified against
485 the given password. The authsafes are extracted and each authsafe split into
486 a set of safebags (possibly involving decryption). Finally the safebags are
487 decomposed into the original keys and certificates and the attributes used to
488 match up private key and certificate pairs.
489
490 Anyway here are the functions that do the dirty work.
491
492 1. Construction functions.
493
494 1.1 Safebag functions.
495
496 M_PKCS12_x5092certbag(x509)
497
498 This macro takes an X509 structure and returns a certificate bag. The
499 X509 structure can be freed up after calling this function.
500
501 M_PKCS12_x509crl2certbag(crl)
502
503 As above but for a CRL.
504
505 PKCS8_PRIV_KEY_INFO *PKEY2PKCS8(EVP_PKEY *pkey)
506
507 Take a private key and convert it into a PKCS#8 PrivateKeyInfo structure.
508 Works for both RSA and DSA private keys. NB since the PKCS#8 PrivateKeyInfo
509 structure contains a private key data in plain text form it should be free'd up
510 as soon as it has been encrypted for security reasons (freeing up the structure
511 zeros out the sensitive data). This can be done with PKCS8_PRIV_KEY_INFO_free().
512
513 PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage)
514
515 This sets the key type when a key is imported into MSIE or Outlook 98. Two
516 values are currently supported: KEY_EX and KEY_SIG. KEY_EX is an exchange type
517 key that can also be used for signing but its size is limited in the export
518 versions of MS software to 512 bits, it is also the default. KEY_SIG is a
519 signing only key but the keysize is unlimited (well 16K is supposed to work).
520 If you are using the domestic version of MSIE then you can ignore this because
521 KEY_EX is not limited and can be used for both.
522
523 PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8)
524
525 Convert a PKCS8 private key structure into a keybag. This routine embeds the p8
526 structure in the keybag so p8 should not be freed up or used after it is called.
527 The p8 structure will be freed up when the safebag is freed.
528
529 PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8)
530
531 Convert a PKCS#8 structure into a shrouded key bag (encrypted). p8 is not
532 embedded and can be freed up after use.
533
534 int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen)
535 int PKCS12_add_friendlyname(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen)
536
537 Add a local key id or a friendlyname to a safebag.
538
539 1.2 Authsafe functions.
540
541 PKCS7 *PKCS12_pack_p7data(STACK *sk)
542 Take a stack of safebags and convert them into an unencrypted authsafe. The
543 stack of safebags can be freed up after calling this function.
544
545 PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK *bags);
546
547 As above but encrypted.
548
549 1.3 PKCS12 functions.
550
551 PKCS12 *PKCS12_init(int mode)
552
553 Initialise a PKCS12 structure (currently mode should be NID_pkcs7_data).
554
555 M_PKCS12_pack_authsafes(p12, safes)
556
557 This macro takes a STACK of authsafes and adds them to a PKCS#12 structure.
558
559 int PKCS12_set_mac(PKCS12 *p12, unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int iter, EVP_MD *md_type);
560
561 Add a MAC to a PKCS12 structure. If EVP_MD is NULL use SHA-1, the spec suggests
562 that SHA-1 should be used.
563
564 2. Extraction Functions.
565
566 2.1 Safebags.
567
568 M_PKCS12_bag_type(bag)
569
570 Return the type of "bag". Returns one of the following
571
572 NID_keyBag
573 NID_pkcs8ShroudedKeyBag                 7
574 NID_certBag                             8
575 NID_crlBag                              9
576 NID_secretBag                           10
577 NID_safeContentsBag                     11
578
579 M_PKCS12_cert_bag_type(bag)
580
581 Returns type of certificate bag, following are understood.
582
583 NID_x509Certificate                     14
584 NID_sdsiCertificate                     15
585
586 M_PKCS12_crl_bag_type(bag)
587
588 Returns crl bag type, currently only NID_crlBag is recognised.
589
590 M_PKCS12_certbag2x509(bag)
591
592 This macro extracts an X509 certificate from a certificate bag.
593
594 M_PKCS12_certbag2x509crl(bag)
595
596 As above but for a CRL.
597
598 EVP_PKEY * PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8)
599
600 Extract a private key from a PKCS8 private key info structure.
601
602 M_PKCS12_decrypt_skey(bag, pass, passlen) 
603
604 Decrypt a shrouded key bag and return a PKCS8 private key info structure.
605 Works with both RSA and DSA keys
606
607 char *PKCS12_get_friendlyname(bag)
608
609 Returns the friendlyName of a bag if present or NULL if none. The returned
610 string is a null terminated ASCII string allocated with Malloc(). It should 
611 thus be freed up with Free() after use.
612
613 2.2 AuthSafe functions.
614
615 M_PKCS12_unpack_p7data(p7)
616
617 Extract a STACK of safe bags from a PKCS#7 data ContentInfo.
618
619 #define M_PKCS12_unpack_p7encdata(p7, pass, passlen)
620
621 As above but for an encrypted content info.
622
623 2.3 PKCS12 functions.
624
625 M_PKCS12_unpack_authsafes(p12)
626
627 Extract a STACK of authsafes from a PKCS12 structure.
628
629 M_PKCS12_mac_present(p12)
630
631 Check to see if a MAC is present.
632
633 int PKCS12_verify_mac(PKCS12 *p12, unsigned char *pass, int passlen)
634
635 Verify a MAC on a PKCS12 structure. Returns an error if MAC not present.
636
637
638 Notes.
639
640 1. All the function return 0 or NULL on error.
641 2. Encryption based functions take a common set of parameters. These are
642 described below.
643
644 pass, passlen
645 ASCII password and length. The password on the MAC is called the "integrity
646 password" the encryption password is called the "privacy password" in the
647 PKCS#12 documentation. The passwords do not have to be the same. If -1 is
648 passed for the length it is worked out by the function itself (currently
649 this is sometimes done whatever is passed as the length but that may change).
650
651 salt, saltlen
652 A 'salt' if salt is NULL a random salt is used. If saltlen is also zero a
653 default length is used.
654
655 iter
656 Iteration count. This is a measure of how many times an internal function is
657 called to encrypt the data. The larger this value is the longer it takes, it
658 makes dictionary attacks on passwords harder. NOTE: Some implementations do
659 not support an iteration count on the MAC. If the password for the MAC and
660 encryption is the same then there is no point in having a high iteration
661 count for encryption if the MAC has no count. The MAC could be attacked
662 and the password used for the main decryption.
663
664 pbe_nid
665 This is the NID of the password based encryption method used. The following are
666 supported.
667 NID_pbe_WithSHA1And128BitRC4
668 NID_pbe_WithSHA1And40BitRC4
669 NID_pbe_WithSHA1And3_Key_TripleDES_CBC
670 NID_pbe_WithSHA1And2_Key_TripleDES_CBC
671 NID_pbe_WithSHA1And128BitRC2_CBC
672 NID_pbe_WithSHA1And40BitRC2_CBC
673
674 Which you use depends on the implementation you are exporting to. "Export grade"(i.e. cryptograhically challenged) products cannot support all algorithms.
675 Typically you may be able to use any encryption on shrouded key bags but they
676 must then be placed in an unencrypted authsafe. Other authsafes may only support
677 40bit encryption. Of course if you are using SSLeay throughout you can strongly
678 encrypt everything and have high iteration counts on everything.
679
680 3. For decryption routines only the password and length are needed.
681
682 4. Unlike the external version the nid's of objects are the values of the
683 constants: that is NID_certBag is the real nid, therefore there is no 
684 PKCS12_obj_offset() function.  Note the object constants are not the same as
685 those of the external version. If you use these constants then you will need
686 to recompile your code.
687
688 5. With the exception of PKCS12_MAKE_KEYBAG(), after calling any function or 
689 macro of the form PKCS12_MAKE_SOMETHING(other) the "other" structure can be
690 reused or freed up safely.
691