summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509/x509.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509/x509.h')
-rw-r--r--src/lib/libcrypto/x509/x509.h1161
1 files changed, 634 insertions, 527 deletions
diff --git a/src/lib/libcrypto/x509/x509.h b/src/lib/libcrypto/x509/x509.h
index 95114f7c43..c75aa0c717 100644
--- a/src/lib/libcrypto/x509/x509.h
+++ b/src/lib/libcrypto/x509/x509.h
@@ -59,32 +59,46 @@
59#ifndef HEADER_X509_H 59#ifndef HEADER_X509_H
60#define HEADER_X509_H 60#define HEADER_X509_H
61 61
62#ifdef __cplusplus 62#include <openssl/symhacks.h>
63extern "C" { 63#ifndef OPENSSL_NO_BUFFER
64#include <openssl/buffer.h>
65#endif
66#ifndef OPENSSL_NO_EVP
67#include <openssl/evp.h>
64#endif 68#endif
69#ifndef OPENSSL_NO_BIO
70#include <openssl/bio.h>
71#endif
72#include <openssl/stack.h>
73#include <openssl/asn1.h>
74#include <openssl/safestack.h>
65 75
66#include "stack.h" 76#ifndef OPENSSL_NO_RSA
67#include "asn1.h" 77#include <openssl/rsa.h>
78#endif
68 79
69#ifndef NO_RSA 80#ifndef OPENSSL_NO_DSA
70#include "rsa.h" 81#include <openssl/dsa.h>
71#else
72#define RSA long
73#endif 82#endif
74 83
75#ifndef NO_DSA 84#ifndef OPENSSL_NO_DH
76#include "dsa.h" 85#include <openssl/dh.h>
77#else 86#endif
78#define DSA long 87#ifndef OPENSSL_NO_SHA
88#include <openssl/sha.h>
79#endif 89#endif
90#include <openssl/evp.h>
91#include <openssl/e_os2.h>
92#include <openssl/ossl_typ.h>
80 93
81#ifndef NO_DH 94#ifdef __cplusplus
82#include "dh.h" 95extern "C" {
83#else
84#define DH long
85#endif 96#endif
86 97
87#include "evp.h" 98#ifdef OPENSSL_SYS_WIN32
99/* Under Win32 this is defined in wincrypt.h */
100#undef X509_NAME
101#endif
88 102
89#define X509_FILETYPE_PEM 1 103#define X509_FILETYPE_PEM 1
90#define X509_FILETYPE_ASN1 2 104#define X509_FILETYPE_ASN1 2
@@ -108,23 +122,26 @@ typedef struct X509_objects_st
108 int (*i2a)(); 122 int (*i2a)();
109 } X509_OBJECTS; 123 } X509_OBJECTS;
110 124
111typedef struct X509_algor_st 125struct X509_algor_st
112 { 126 {
113 ASN1_OBJECT *algorithm; 127 ASN1_OBJECT *algorithm;
114 ASN1_TYPE *parameter; 128 ASN1_TYPE *parameter;
115 } X509_ALGOR; 129 } /* X509_ALGOR */;
130
131DECLARE_STACK_OF(X509_ALGOR)
132DECLARE_ASN1_SET_OF(X509_ALGOR)
116 133
117typedef struct X509_val_st 134typedef struct X509_val_st
118 { 135 {
119 ASN1_UTCTIME *notBefore; 136 ASN1_TIME *notBefore;
120 ASN1_UTCTIME *notAfter; 137 ASN1_TIME *notAfter;
121 } X509_VAL; 138 } X509_VAL;
122 139
123typedef struct X509_pubkey_st 140typedef struct X509_pubkey_st
124 { 141 {
125 X509_ALGOR *algor; 142 X509_ALGOR *algor;
126 ASN1_BIT_STRING *public_key; 143 ASN1_BIT_STRING *public_key;
127 struct evp_pkey_st /* EVP_PKEY*/ *pkey; 144 EVP_PKEY *pkey;
128 } X509_PUBKEY; 145 } X509_PUBKEY;
129 146
130typedef struct X509_sig_st 147typedef struct X509_sig_st
@@ -141,58 +158,60 @@ typedef struct X509_name_entry_st
141 int size; /* temp variable */ 158 int size; /* temp variable */
142 } X509_NAME_ENTRY; 159 } X509_NAME_ENTRY;
143 160
161DECLARE_STACK_OF(X509_NAME_ENTRY)
162DECLARE_ASN1_SET_OF(X509_NAME_ENTRY)
163
144/* we always keep X509_NAMEs in 2 forms. */ 164/* we always keep X509_NAMEs in 2 forms. */
145typedef struct X509_name_st 165struct X509_name_st
146 { 166 {
147 STACK *entries; /* of X509_NAME_ENTRY */ 167 STACK_OF(X509_NAME_ENTRY) *entries;
148 int modified; /* true if 'bytes' needs to be built */ 168 int modified; /* true if 'bytes' needs to be built */
149#ifdef HEADER_BUFFER_H 169#ifndef OPENSSL_NO_BUFFER
150 BUF_MEM *bytes; 170 BUF_MEM *bytes;
151#else 171#else
152 char *bytes; 172 char *bytes;
153#endif 173#endif
154 unsigned long hash; /* Keep the hash around for lookups */ 174 unsigned long hash; /* Keep the hash around for lookups */
155 } X509_NAME; 175 } /* X509_NAME */;
176
177DECLARE_STACK_OF(X509_NAME)
156 178
157#define X509_EX_V_NETSCAPE_HACK 0x8000 179#define X509_EX_V_NETSCAPE_HACK 0x8000
158#define X509_EX_V_INIT 0x0001 180#define X509_EX_V_INIT 0x0001
159typedef struct X509_extension_st 181typedef struct X509_extension_st
160 { 182 {
161 ASN1_OBJECT *object; 183 ASN1_OBJECT *object;
162 short critical; 184 ASN1_BOOLEAN critical;
163 short netscape_hack;
164 ASN1_OCTET_STRING *value; 185 ASN1_OCTET_STRING *value;
165 long argl; /* used when decoding */
166 char *argp; /* used when decoding */
167 void (*ex_free)(); /* clear argp stuff */
168 } X509_EXTENSION; 186 } X509_EXTENSION;
169 187
170/* #if 1 */ 188DECLARE_STACK_OF(X509_EXTENSION)
171typedef struct x509_extension_method_st 189DECLARE_ASN1_SET_OF(X509_EXTENSION)
190
191/* a sequence of these are used */
192typedef struct x509_attributes_st
172 { 193 {
173 int nid; 194 ASN1_OBJECT *object;
174 int data_type; 195 int single; /* 0 for a set, 1 for a single item (which is wrong) */
175 int pack_type; 196 union {
176 void (*ex_clear)(); 197 char *ptr;
177 int (*ex_get_bool)(); 198/* 0 */ STACK_OF(ASN1_TYPE) *set;
178 int (*ex_set_bool)(); 199/* 1 */ ASN1_TYPE *single;
179 int (*ex_get_str)(); 200 } value;
180 int (*ex_set_str)(); 201 } X509_ATTRIBUTE;
181 char *(*ex_get_struct)(); 202
182 int (*ex_set_struct)(); 203DECLARE_STACK_OF(X509_ATTRIBUTE)
183 int (*a2i)(); 204DECLARE_ASN1_SET_OF(X509_ATTRIBUTE)
184 int (*i2a)(); 205
185 } X509_EXTENSION_METHOD;
186/* #endif */
187 206
188typedef struct X509_req_info_st 207typedef struct X509_req_info_st
189 { 208 {
209 ASN1_ENCODING enc;
190 ASN1_INTEGER *version; 210 ASN1_INTEGER *version;
191 X509_NAME *subject; 211 X509_NAME *subject;
192 X509_PUBKEY *pubkey; 212 X509_PUBKEY *pubkey;
193 /* d=2 hl=2 l= 0 cons: cont: 00 */ 213 /* d=2 hl=2 l= 0 cons: cont: 00 */
194 STACK /* X509_ATTRIBUTE */ *attributes; /* [ 0 ] */ 214 STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
195 int req_kludge;
196 } X509_REQ_INFO; 215 } X509_REQ_INFO;
197 216
198typedef struct X509_req_st 217typedef struct X509_req_st
@@ -214,10 +233,25 @@ typedef struct x509_cinf_st
214 X509_PUBKEY *key; 233 X509_PUBKEY *key;
215 ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ 234 ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
216 ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ 235 ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
217 STACK /* X509_EXTENSION */ *extensions; /* [ 3 ] optional in v3 */ 236 STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
218 } X509_CINF; 237 } X509_CINF;
219 238
220typedef struct x509_st 239/* This stuff is certificate "auxiliary info"
240 * it contains details which are useful in certificate
241 * stores and databases. When used this is tagged onto
242 * the end of the certificate itself
243 */
244
245typedef struct x509_cert_aux_st
246 {
247 STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */
248 STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */
249 ASN1_UTF8STRING *alias; /* "friendly name" */
250 ASN1_OCTET_STRING *keyid; /* key id of private key */
251 STACK_OF(X509_ALGOR) *other; /* other unspecified info */
252 } X509_CERT_AUX;
253
254struct x509_st
221 { 255 {
222 X509_CINF *cert_info; 256 X509_CINF *cert_info;
223 X509_ALGOR *sig_alg; 257 X509_ALGOR *sig_alg;
@@ -225,47 +259,170 @@ typedef struct x509_st
225 int valid; 259 int valid;
226 int references; 260 int references;
227 char *name; 261 char *name;
228 } X509; 262 CRYPTO_EX_DATA ex_data;
263 /* These contain copies of various extension values */
264 long ex_pathlen;
265 unsigned long ex_flags;
266 unsigned long ex_kusage;
267 unsigned long ex_xkusage;
268 unsigned long ex_nscert;
269 ASN1_OCTET_STRING *skid;
270 struct AUTHORITY_KEYID_st *akid;
271#ifndef OPENSSL_NO_SHA
272 unsigned char sha1_hash[SHA_DIGEST_LENGTH];
273#endif
274 X509_CERT_AUX *aux;
275 } /* X509 */;
276
277DECLARE_STACK_OF(X509)
278DECLARE_ASN1_SET_OF(X509)
279
280/* This is used for a table of trust checking functions */
281
282typedef struct x509_trust_st {
283 int trust;
284 int flags;
285 int (*check_trust)(struct x509_trust_st *, X509 *, int);
286 char *name;
287 int arg1;
288 void *arg2;
289} X509_TRUST;
290
291DECLARE_STACK_OF(X509_TRUST)
292
293/* standard trust ids */
294
295#define X509_TRUST_DEFAULT -1 /* Only valid in purpose settings */
296
297#define X509_TRUST_COMPAT 1
298#define X509_TRUST_SSL_CLIENT 2
299#define X509_TRUST_SSL_SERVER 3
300#define X509_TRUST_EMAIL 4
301#define X509_TRUST_OBJECT_SIGN 5
302#define X509_TRUST_OCSP_SIGN 6
303#define X509_TRUST_OCSP_REQUEST 7
304
305/* Keep these up to date! */
306#define X509_TRUST_MIN 1
307#define X509_TRUST_MAX 7
308
309
310/* trust_flags values */
311#define X509_TRUST_DYNAMIC 1
312#define X509_TRUST_DYNAMIC_NAME 2
313
314/* check_trust return codes */
315
316#define X509_TRUST_TRUSTED 1
317#define X509_TRUST_REJECTED 2
318#define X509_TRUST_UNTRUSTED 3
319
320/* Flags for X509_print_ex() */
321
322#define X509_FLAG_COMPAT 0
323#define X509_FLAG_NO_HEADER 1L
324#define X509_FLAG_NO_VERSION (1L << 1)
325#define X509_FLAG_NO_SERIAL (1L << 2)
326#define X509_FLAG_NO_SIGNAME (1L << 3)
327#define X509_FLAG_NO_ISSUER (1L << 4)
328#define X509_FLAG_NO_VALIDITY (1L << 5)
329#define X509_FLAG_NO_SUBJECT (1L << 6)
330#define X509_FLAG_NO_PUBKEY (1L << 7)
331#define X509_FLAG_NO_EXTENSIONS (1L << 8)
332#define X509_FLAG_NO_SIGDUMP (1L << 9)
333#define X509_FLAG_NO_AUX (1L << 10)
334
335/* Flags specific to X509_NAME_print_ex() */
336
337/* The field separator information */
338
339#define XN_FLAG_SEP_MASK (0xf << 16)
340
341#define XN_FLAG_COMPAT 0 /* Traditional SSLeay: use old X509_NAME_print */
342#define XN_FLAG_SEP_COMMA_PLUS (1 << 16) /* RFC2253 ,+ */
343#define XN_FLAG_SEP_CPLUS_SPC (2 << 16) /* ,+ spaced: more readable */
344#define XN_FLAG_SEP_SPLUS_SPC (3 << 16) /* ;+ spaced */
345#define XN_FLAG_SEP_MULTILINE (4 << 16) /* One line per field */
346
347#define XN_FLAG_DN_REV (1 << 20) /* Reverse DN order */
348
349/* How the field name is shown */
350
351#define XN_FLAG_FN_MASK (0x3 << 21)
352
353#define XN_FLAG_FN_SN 0 /* Object short name */
354#define XN_FLAG_FN_LN (1 << 21) /* Object long name */
355#define XN_FLAG_FN_OID (2 << 21) /* Always use OIDs */
356#define XN_FLAG_FN_NONE (3 << 21) /* No field names */
357
358#define XN_FLAG_SPC_EQ (1 << 23) /* Put spaces round '=' */
359
360/* This determines if we dump fields we don't recognise:
361 * RFC2253 requires this.
362 */
363
364#define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)
365
366#define XN_FLAG_FN_ALIGN (1 << 25) /* Align field names to 20 characters */
367
368/* Complete set of RFC2253 flags */
369
370#define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
371 XN_FLAG_SEP_COMMA_PLUS | \
372 XN_FLAG_DN_REV | \
373 XN_FLAG_FN_SN | \
374 XN_FLAG_DUMP_UNKNOWN_FIELDS)
375
376/* readable oneline form */
377
378#define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
379 ASN1_STRFLGS_ESC_QUOTE | \
380 XN_FLAG_SEP_CPLUS_SPC | \
381 XN_FLAG_SPC_EQ | \
382 XN_FLAG_FN_SN)
383
384/* readable multiline form */
385
386#define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
387 ASN1_STRFLGS_ESC_MSB | \
388 XN_FLAG_SEP_MULTILINE | \
389 XN_FLAG_SPC_EQ | \
390 XN_FLAG_FN_LN | \
391 XN_FLAG_FN_ALIGN)
229 392
230typedef struct X509_revoked_st 393typedef struct X509_revoked_st
231 { 394 {
232 ASN1_INTEGER *serialNumber; 395 ASN1_INTEGER *serialNumber;
233 ASN1_UTCTIME *revocationDate; 396 ASN1_TIME *revocationDate;
234 STACK /* optional X509_EXTENSION */ *extensions; 397 STACK_OF(X509_EXTENSION) /* optional */ *extensions;
235 int sequence; /* load sequence */ 398 int sequence; /* load sequence */
236 } X509_REVOKED; 399 } X509_REVOKED;
237 400
401DECLARE_STACK_OF(X509_REVOKED)
402DECLARE_ASN1_SET_OF(X509_REVOKED)
403
238typedef struct X509_crl_info_st 404typedef struct X509_crl_info_st
239 { 405 {
240 ASN1_INTEGER *version; 406 ASN1_INTEGER *version;
241 X509_ALGOR *sig_alg; 407 X509_ALGOR *sig_alg;
242 X509_NAME *issuer; 408 X509_NAME *issuer;
243 ASN1_UTCTIME *lastUpdate; 409 ASN1_TIME *lastUpdate;
244 ASN1_UTCTIME *nextUpdate; 410 ASN1_TIME *nextUpdate;
245 STACK /* X509_REVOKED */ *revoked; 411 STACK_OF(X509_REVOKED) *revoked;
246 STACK /* [0] X509_EXTENSION */ *extensions; 412 STACK_OF(X509_EXTENSION) /* [0] */ *extensions;
247 } X509_CRL_INFO; 413 } X509_CRL_INFO;
248 414
249typedef struct X509_crl_st 415struct X509_crl_st
250 { 416 {
251 /* actual signature */ 417 /* actual signature */
252 X509_CRL_INFO *crl; 418 X509_CRL_INFO *crl;
253 X509_ALGOR *sig_alg; 419 X509_ALGOR *sig_alg;
254 ASN1_BIT_STRING *signature; 420 ASN1_BIT_STRING *signature;
255 int references; 421 int references;
256 } X509_CRL; 422 } /* X509_CRL */;
257 423
258/* a sequence of these are used */ 424DECLARE_STACK_OF(X509_CRL)
259typedef struct x509_attributes_st 425DECLARE_ASN1_SET_OF(X509_CRL)
260 {
261 ASN1_OBJECT *object;
262 int set; /* 1 for a set, 0 for a single item (which is wrong) */
263 union {
264 char *ptr;
265/* 1 */ STACK /* ASN1_TYPE */ *set;
266/* 0 */ ASN1_TYPE *single;
267 } value;
268 } X509_ATTRIBUTE;
269 426
270typedef struct private_key_st 427typedef struct private_key_st
271 { 428 {
@@ -288,7 +445,7 @@ typedef struct private_key_st
288 int references; 445 int references;
289 } X509_PKEY; 446 } X509_PKEY;
290 447
291#ifdef HEADER_ENVELOPE_H 448#ifndef OPENSSL_NO_EVP
292typedef struct X509_info_st 449typedef struct X509_info_st
293 { 450 {
294 X509 *x509; 451 X509 *x509;
@@ -301,11 +458,13 @@ typedef struct X509_info_st
301 458
302 int references; 459 int references;
303 } X509_INFO; 460 } X509_INFO;
461
462DECLARE_STACK_OF(X509_INFO)
304#endif 463#endif
305 464
306/* The next 2 structures and their 8 routines were sent to me by 465/* The next 2 structures and their 8 routines were sent to me by
307 * Pat Richard <patr@x509.com> and are used to manipulate 466 * Pat Richard <patr@x509.com> and are used to manipulate
308 * Netscapes spki strucutres - usefull if you are writing a CA web page 467 * Netscapes spki structures - useful if you are writing a CA web page
309 */ 468 */
310typedef struct Netscape_spkac_st 469typedef struct Netscape_spkac_st
311 { 470 {
@@ -320,17 +479,65 @@ typedef struct Netscape_spki_st
320 ASN1_BIT_STRING *signature; 479 ASN1_BIT_STRING *signature;
321 } NETSCAPE_SPKI; 480 } NETSCAPE_SPKI;
322 481
323#ifndef HEADER_BN_H 482/* Netscape certificate sequence structure */
324#define BIGNUM char 483typedef struct Netscape_certificate_sequence
325#endif 484 {
485 ASN1_OBJECT *type;
486 STACK_OF(X509) *certs;
487 } NETSCAPE_CERT_SEQUENCE;
326 488
327typedef struct CBCParameter_st 489typedef struct CBCParameter_st
328 { 490 {
329 unsigned char iv[8]; 491 unsigned char iv[8];
330 } CBC_PARAM; 492 } CBC_PARAM;
331 493
332#include "x509_vfy.h" 494/* Password based encryption structure */
333#include "pkcs7.h" 495
496typedef struct PBEPARAM_st {
497ASN1_OCTET_STRING *salt;
498ASN1_INTEGER *iter;
499} PBEPARAM;
500
501/* Password based encryption V2 structures */
502
503typedef struct PBE2PARAM_st {
504X509_ALGOR *keyfunc;
505X509_ALGOR *encryption;
506} PBE2PARAM;
507
508typedef struct PBKDF2PARAM_st {
509ASN1_TYPE *salt; /* Usually OCTET STRING but could be anything */
510ASN1_INTEGER *iter;
511ASN1_INTEGER *keylength;
512X509_ALGOR *prf;
513} PBKDF2PARAM;
514
515
516/* PKCS#8 private key info structure */
517
518typedef struct pkcs8_priv_key_info_st
519 {
520 int broken; /* Flag for various broken formats */
521#define PKCS8_OK 0
522#define PKCS8_NO_OCTET 1
523#define PKCS8_EMBEDDED_PARAM 2
524#define PKCS8_NS_DB 3
525 ASN1_INTEGER *version;
526 X509_ALGOR *pkeyalg;
527 ASN1_TYPE *pkey; /* Should be OCTET STRING but some are broken */
528 STACK_OF(X509_ATTRIBUTE) *attributes;
529 } PKCS8_PRIV_KEY_INFO;
530
531#ifdef __cplusplus
532}
533#endif
534
535#include <openssl/x509_vfy.h>
536#include <openssl/pkcs7.h>
537
538#ifdef __cplusplus
539extern "C" {
540#endif
334 541
335#ifdef SSLEAY_MACROS 542#ifdef SSLEAY_MACROS
336#define X509_verify(a,r) ASN1_verify((int (*)())i2d_X509_CINF,a->sig_alg,\ 543#define X509_verify(a,r) ASN1_verify((int (*)())i2d_X509_CINF,a->sig_alg,\
@@ -355,6 +562,9 @@ typedef struct CBCParameter_st
355 562
356#define X509_dup(x509) (X509 *)ASN1_dup((int (*)())i2d_X509, \ 563#define X509_dup(x509) (X509 *)ASN1_dup((int (*)())i2d_X509, \
357 (char *(*)())d2i_X509,(char *)x509) 564 (char *(*)())d2i_X509,(char *)x509)
565#define X509_ATTRIBUTE_dup(xa) (X509_ATTRIBUTE *)ASN1_dup(\
566 (int (*)())i2d_X509_ATTRIBUTE, \
567 (char *(*)())d2i_X509_ATTRIBUTE,(char *)xa)
358#define X509_EXTENSION_dup(ex) (X509_EXTENSION *)ASN1_dup( \ 568#define X509_EXTENSION_dup(ex) (X509_EXTENSION *)ASN1_dup( \
359 (int (*)())i2d_X509_EXTENSION, \ 569 (int (*)())i2d_X509_EXTENSION, \
360 (char *(*)())d2i_X509_EXTENSION,(char *)ex) 570 (char *(*)())d2i_X509_EXTENSION,(char *)ex)
@@ -442,6 +652,9 @@ typedef struct CBCParameter_st
442#define i2d_DSAPrivateKey_bio(bp,dsa) ASN1_i2d_bio(i2d_DSAPrivateKey,bp, \ 652#define i2d_DSAPrivateKey_bio(bp,dsa) ASN1_i2d_bio(i2d_DSAPrivateKey,bp, \
443 (unsigned char *)dsa) 653 (unsigned char *)dsa)
444 654
655#define X509_ALGOR_dup(xn) (X509_ALGOR *)ASN1_dup((int (*)())i2d_X509_ALGOR,\
656 (char *(*)())d2i_X509_ALGOR,(char *)xn)
657
445#define X509_NAME_dup(xn) (X509_NAME *)ASN1_dup((int (*)())i2d_X509_NAME, \ 658#define X509_NAME_dup(xn) (X509_NAME *)ASN1_dup((int (*)())i2d_X509_NAME, \
446 (char *(*)())d2i_X509_NAME,(char *)xn) 659 (char *(*)())d2i_X509_NAME,(char *)xn)
447#define X509_NAME_ENTRY_dup(ne) (X509_NAME_ENTRY *)ASN1_dup( \ 660#define X509_NAME_ENTRY_dup(ne) (X509_NAME_ENTRY *)ASN1_dup( \
@@ -453,10 +666,12 @@ typedef struct CBCParameter_st
453 ASN1_digest((int (*)())i2d_X509,type,(char *)data,md,len) 666 ASN1_digest((int (*)())i2d_X509,type,(char *)data,md,len)
454#define X509_NAME_digest(data,type,md,len) \ 667#define X509_NAME_digest(data,type,md,len) \
455 ASN1_digest((int (*)())i2d_X509_NAME,type,(char *)data,md,len) 668 ASN1_digest((int (*)())i2d_X509_NAME,type,(char *)data,md,len)
669#ifndef PKCS7_ISSUER_AND_SERIAL_digest
456#define PKCS7_ISSUER_AND_SERIAL_digest(data,type,md,len) \ 670#define PKCS7_ISSUER_AND_SERIAL_digest(data,type,md,len) \
457 ASN1_digest((int (*)())i2d_PKCS7_ISSUER_AND_SERIAL,type,\ 671 ASN1_digest((int (*)())i2d_PKCS7_ISSUER_AND_SERIAL,type,\
458 (char *)data,md,len) 672 (char *)data,md,len)
459#endif 673#endif
674#endif
460 675
461#define X509_EXT_PACK_UNKNOWN 1 676#define X509_EXT_PACK_UNKNOWN 1
462#define X509_EXT_PACK_STRING 2 677#define X509_EXT_PACK_STRING 2
@@ -472,193 +687,225 @@ typedef struct CBCParameter_st
472#define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) 687#define X509_name_cmp(a,b) X509_NAME_cmp((a),(b))
473#define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) 688#define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm))
474 689
690#define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version)
691#define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate)
692#define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate)
693#define X509_CRL_get_issuer(x) ((x)->crl->issuer)
694#define X509_CRL_get_REVOKED(x) ((x)->crl->revoked)
695
475/* This one is only used so that a binary form can output, as in 696/* This one is only used so that a binary form can output, as in
476 * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) */ 697 * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) */
477#define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) 698#define X509_get_X509_PUBKEY(x) ((x)->cert_info->key)
478 699
479#ifndef NOPROTO 700
701const char *X509_verify_cert_error_string(long n);
480 702
481#ifndef SSLEAY_MACROS 703#ifndef SSLEAY_MACROS
482#ifdef HEADER_ENVELOPE_H 704#ifndef OPENSSL_NO_EVP
483int X509_verify(X509 *a, EVP_PKEY *r); 705int X509_verify(X509 *a, EVP_PKEY *r);
484char *X509_verify_cert_error_string(long n);
485 706
486int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); 707int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
487int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); 708int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
488int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); 709int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);
489 710
490int X509_sign(X509 *x, EVP_PKEY *pkey, EVP_MD *md); 711NETSCAPE_SPKI * NETSCAPE_SPKI_b64_decode(const char *str, int len);
491int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, EVP_MD *md); 712char * NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
492int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, EVP_MD *md); 713EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
493int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, EVP_MD *md); 714int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);
494 715
495int X509_digest(X509 *data,EVP_MD *type,unsigned char *md,unsigned int *len); 716int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);
496int X509_NAME_digest(X509_NAME *data,EVP_MD *type, 717
497 unsigned char *md,unsigned int *len); 718int X509_signature_print(BIO *bp,X509_ALGOR *alg, ASN1_STRING *sig);
719
720int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
721int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
722int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
723int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
724
725int X509_pubkey_digest(const X509 *data,const EVP_MD *type,
726 unsigned char *md, unsigned int *len);
727int X509_digest(const X509 *data,const EVP_MD *type,
728 unsigned char *md, unsigned int *len);
729int X509_CRL_digest(const X509_CRL *data,const EVP_MD *type,
730 unsigned char *md, unsigned int *len);
731int X509_REQ_digest(const X509_REQ *data,const EVP_MD *type,
732 unsigned char *md, unsigned int *len);
733int X509_NAME_digest(const X509_NAME *data,const EVP_MD *type,
734 unsigned char *md, unsigned int *len);
498#endif 735#endif
499 736
500#ifndef NO_FP_API 737#ifndef OPENSSL_NO_FP_API
501X509 *d2i_X509_fp(FILE *fp, X509 *x509); 738X509 *d2i_X509_fp(FILE *fp, X509 **x509);
502int i2d_X509_fp(FILE *fp,X509 *x509); 739int i2d_X509_fp(FILE *fp,X509 *x509);
503X509_CRL *d2i_X509_CRL_fp(FILE *fp,X509_CRL *crl); 740X509_CRL *d2i_X509_CRL_fp(FILE *fp,X509_CRL **crl);
504int i2d_X509_CRL_fp(FILE *fp,X509_CRL *crl); 741int i2d_X509_CRL_fp(FILE *fp,X509_CRL *crl);
505X509_REQ *d2i_X509_REQ_fp(FILE *fp,X509_REQ *req); 742X509_REQ *d2i_X509_REQ_fp(FILE *fp,X509_REQ **req);
506int i2d_X509_REQ_fp(FILE *fp,X509_REQ *req); 743int i2d_X509_REQ_fp(FILE *fp,X509_REQ *req);
507RSA *d2i_RSAPrivateKey_fp(FILE *fp,RSA *rsa); 744#ifndef OPENSSL_NO_RSA
745RSA *d2i_RSAPrivateKey_fp(FILE *fp,RSA **rsa);
508int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa); 746int i2d_RSAPrivateKey_fp(FILE *fp,RSA *rsa);
509DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA *dsa); 747RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA **rsa);
510int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
511RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA *rsa);
512int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa); 748int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa);
749RSA *d2i_RSA_PUBKEY_fp(FILE *fp,RSA **rsa);
750int i2d_RSA_PUBKEY_fp(FILE *fp,RSA *rsa);
751#endif
752#ifndef OPENSSL_NO_DSA
753DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
754int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
755DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
756int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
757#endif
758X509_SIG *d2i_PKCS8_fp(FILE *fp,X509_SIG **p8);
759int i2d_PKCS8_fp(FILE *fp,X509_SIG *p8);
760PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
761 PKCS8_PRIV_KEY_INFO **p8inf);
762int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,PKCS8_PRIV_KEY_INFO *p8inf);
763int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);
764int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);
765EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
766int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
767EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
513#endif 768#endif
514 769
515#ifdef HEADER_BIO_H 770#ifndef OPENSSL_NO_BIO
516X509 *d2i_X509_bio(BIO *bp,X509 *x509); 771X509 *d2i_X509_bio(BIO *bp,X509 **x509);
517int i2d_X509_bio(BIO *bp,X509 *x509); 772int i2d_X509_bio(BIO *bp,X509 *x509);
518X509_CRL *d2i_X509_CRL_bio(BIO *bp,X509_CRL *crl); 773X509_CRL *d2i_X509_CRL_bio(BIO *bp,X509_CRL **crl);
519int i2d_X509_CRL_bio(BIO *bp,X509_CRL *crl); 774int i2d_X509_CRL_bio(BIO *bp,X509_CRL *crl);
520X509_REQ *d2i_X509_REQ_bio(BIO *bp,X509_REQ *req); 775X509_REQ *d2i_X509_REQ_bio(BIO *bp,X509_REQ **req);
521int i2d_X509_REQ_bio(BIO *bp,X509_REQ *req); 776int i2d_X509_REQ_bio(BIO *bp,X509_REQ *req);
522RSA *d2i_RSAPrivateKey_bio(BIO *bp,RSA *rsa); 777#ifndef OPENSSL_NO_RSA
778RSA *d2i_RSAPrivateKey_bio(BIO *bp,RSA **rsa);
523int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa); 779int i2d_RSAPrivateKey_bio(BIO *bp,RSA *rsa);
524DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA *dsa); 780RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA **rsa);
525int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
526RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA *rsa);
527int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa); 781int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa);
782RSA *d2i_RSA_PUBKEY_bio(BIO *bp,RSA **rsa);
783int i2d_RSA_PUBKEY_bio(BIO *bp,RSA *rsa);
784#endif
785#ifndef OPENSSL_NO_DSA
786DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
787int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
788DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
789int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
790#endif
791X509_SIG *d2i_PKCS8_bio(BIO *bp,X509_SIG **p8);
792int i2d_PKCS8_bio(BIO *bp,X509_SIG *p8);
793PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
794 PKCS8_PRIV_KEY_INFO **p8inf);
795int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,PKCS8_PRIV_KEY_INFO *p8inf);
796int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);
797int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);
798EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
799int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
800EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
528#endif 801#endif
529 802
530X509 *X509_dup(X509 *x509); 803X509 *X509_dup(X509 *x509);
804X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
531X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); 805X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);
532X509_CRL *X509_CRL_dup(X509_CRL *crl); 806X509_CRL *X509_CRL_dup(X509_CRL *crl);
533X509_REQ *X509_REQ_dup(X509_REQ *req); 807X509_REQ *X509_REQ_dup(X509_REQ *req);
808X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
534X509_NAME *X509_NAME_dup(X509_NAME *xn); 809X509_NAME *X509_NAME_dup(X509_NAME *xn);
535X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); 810X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);
811#ifndef OPENSSL_NO_RSA
536RSA *RSAPublicKey_dup(RSA *rsa); 812RSA *RSAPublicKey_dup(RSA *rsa);
537RSA *RSAPrivateKey_dup(RSA *rsa); 813RSA *RSAPrivateKey_dup(RSA *rsa);
814#endif
538 815
539#endif /* !SSLEAY_MACROS */ 816#endif /* !SSLEAY_MACROS */
540 817
541int X509_cmp_current_time(ASN1_UTCTIME *s); 818int X509_cmp_time(ASN1_TIME *s, time_t *t);
542ASN1_UTCTIME * X509_gmtime_adj(ASN1_UTCTIME *s, long adj); 819int X509_cmp_current_time(ASN1_TIME *s);
820ASN1_TIME * X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
821ASN1_TIME * X509_gmtime_adj(ASN1_TIME *s, long adj);
543 822
544char * X509_get_default_cert_area(void ); 823const char * X509_get_default_cert_area(void );
545char * X509_get_default_cert_dir(void ); 824const char * X509_get_default_cert_dir(void );
546char * X509_get_default_cert_file(void ); 825const char * X509_get_default_cert_file(void );
547char * X509_get_default_cert_dir_env(void ); 826const char * X509_get_default_cert_dir_env(void );
548char * X509_get_default_cert_file_env(void ); 827const char * X509_get_default_cert_file_env(void );
549char * X509_get_default_private_dir(void ); 828const char * X509_get_default_private_dir(void );
550 829
551X509_REQ * X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, EVP_MD *md); 830X509_REQ * X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
552X509 * X509_REQ_to_X509(X509_REQ *r, int days,EVP_PKEY *pkey); 831X509 * X509_REQ_to_X509(X509_REQ *r, int days,EVP_PKEY *pkey);
553void ERR_load_X509_strings(void );
554 832
555X509_ALGOR * X509_ALGOR_new(void ); 833DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
556void X509_ALGOR_free(X509_ALGOR *a); 834DECLARE_ASN1_FUNCTIONS(X509_VAL)
557int i2d_X509_ALGOR(X509_ALGOR *a,unsigned char **pp);
558X509_ALGOR * d2i_X509_ALGOR(X509_ALGOR **a,unsigned char **pp,
559 long length);
560 835
561X509_VAL * X509_VAL_new(void ); 836DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)
562void X509_VAL_free(X509_VAL *a);
563int i2d_X509_VAL(X509_VAL *a,unsigned char **pp);
564X509_VAL * d2i_X509_VAL(X509_VAL **a,unsigned char **pp,
565 long length);
566 837
567X509_PUBKEY * X509_PUBKEY_new(void );
568void X509_PUBKEY_free(X509_PUBKEY *a);
569int i2d_X509_PUBKEY(X509_PUBKEY *a,unsigned char **pp);
570X509_PUBKEY * d2i_X509_PUBKEY(X509_PUBKEY **a,unsigned char **pp,
571 long length);
572int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); 838int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
573EVP_PKEY * X509_PUBKEY_get(X509_PUBKEY *key); 839EVP_PKEY * X509_PUBKEY_get(X509_PUBKEY *key);
574int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK *chain); 840int X509_get_pubkey_parameters(EVP_PKEY *pkey,
575 841 STACK_OF(X509) *chain);
576 842int i2d_PUBKEY(EVP_PKEY *a,unsigned char **pp);
577X509_SIG * X509_SIG_new(void ); 843EVP_PKEY * d2i_PUBKEY(EVP_PKEY **a,unsigned char **pp,
578void X509_SIG_free(X509_SIG *a);
579int i2d_X509_SIG(X509_SIG *a,unsigned char **pp);
580X509_SIG * d2i_X509_SIG(X509_SIG **a,unsigned char **pp,long length);
581
582X509_REQ_INFO *X509_REQ_INFO_new(void);
583void X509_REQ_INFO_free(X509_REQ_INFO *a);
584int i2d_X509_REQ_INFO(X509_REQ_INFO *a,unsigned char **pp);
585X509_REQ_INFO *d2i_X509_REQ_INFO(X509_REQ_INFO **a,unsigned char **pp,
586 long length); 844 long length);
845#ifndef OPENSSL_NO_RSA
846int i2d_RSA_PUBKEY(RSA *a,unsigned char **pp);
847RSA * d2i_RSA_PUBKEY(RSA **a,unsigned char **pp,
848 long length);
849#endif
850#ifndef OPENSSL_NO_DSA
851int i2d_DSA_PUBKEY(DSA *a,unsigned char **pp);
852DSA * d2i_DSA_PUBKEY(DSA **a,unsigned char **pp,
853 long length);
854#endif
587 855
588X509_REQ * X509_REQ_new(void); 856DECLARE_ASN1_FUNCTIONS(X509_SIG)
589void X509_REQ_free(X509_REQ *a); 857DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
590int i2d_X509_REQ(X509_REQ *a,unsigned char **pp); 858DECLARE_ASN1_FUNCTIONS(X509_REQ)
591X509_REQ * d2i_X509_REQ(X509_REQ **a,unsigned char **pp,long length);
592 859
593X509_ATTRIBUTE *X509_ATTRIBUTE_new(void ); 860DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
594void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a); 861X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);
595int i2d_X509_ATTRIBUTE(X509_ATTRIBUTE *a,unsigned char **pp);
596X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a,unsigned char **pp,
597 long length);
598 862
599X509_EXTENSION *X509_EXTENSION_new(void ); 863DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
600void X509_EXTENSION_free(X509_EXTENSION *a);
601int i2d_X509_EXTENSION(X509_EXTENSION *a,unsigned char **pp);
602X509_EXTENSION *d2i_X509_EXTENSION(X509_EXTENSION **a,unsigned char **pp,
603 long length);
604 864
605X509_NAME_ENTRY *X509_NAME_ENTRY_new(void); 865DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)
606void X509_NAME_ENTRY_free(X509_NAME_ENTRY *a); 866
607int i2d_X509_NAME_ENTRY(X509_NAME_ENTRY *a,unsigned char **pp); 867DECLARE_ASN1_FUNCTIONS(X509_NAME)
608X509_NAME_ENTRY *d2i_X509_NAME_ENTRY(X509_NAME_ENTRY **a,unsigned char **pp,
609 long length);
610 868
611X509_NAME * X509_NAME_new(void);
612void X509_NAME_free(X509_NAME *a);
613int i2d_X509_NAME(X509_NAME *a,unsigned char **pp);
614X509_NAME * d2i_X509_NAME(X509_NAME **a,unsigned char **pp,long length);
615int X509_NAME_set(X509_NAME **xn, X509_NAME *name); 869int X509_NAME_set(X509_NAME **xn, X509_NAME *name);
616 870
871DECLARE_ASN1_FUNCTIONS(X509_CINF)
617 872
618X509_CINF * X509_CINF_new(void); 873DECLARE_ASN1_FUNCTIONS(X509)
619void X509_CINF_free(X509_CINF *a); 874DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)
620int i2d_X509_CINF(X509_CINF *a,unsigned char **pp);
621X509_CINF * d2i_X509_CINF(X509_CINF **a,unsigned char **pp,long length);
622 875
623X509 * X509_new(void); 876int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
624void X509_free(X509 *a); 877 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
625int i2d_X509(X509 *a,unsigned char **pp); 878int X509_set_ex_data(X509 *r, int idx, void *arg);
626X509 * d2i_X509(X509 **a,unsigned char **pp,long length); 879void *X509_get_ex_data(X509 *r, int idx);
880int i2d_X509_AUX(X509 *a,unsigned char **pp);
881X509 * d2i_X509_AUX(X509 **a,unsigned char **pp,long length);
627 882
628X509_REVOKED * X509_REVOKED_new(void); 883int X509_alias_set1(X509 *x, unsigned char *name, int len);
629void X509_REVOKED_free(X509_REVOKED *a); 884int X509_keyid_set1(X509 *x, unsigned char *id, int len);
630int i2d_X509_REVOKED(X509_REVOKED *a,unsigned char **pp); 885unsigned char * X509_alias_get0(X509 *x, int *len);
631X509_REVOKED * d2i_X509_REVOKED(X509_REVOKED **a,unsigned char **pp,long length); 886int (*X509_TRUST_set_default(int (*trust)(int , X509 *, int)))(int, X509 *, int);
887int X509_TRUST_set(int *t, int trust);
888int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);
889int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj);
890void X509_trust_clear(X509 *x);
891void X509_reject_clear(X509 *x);
632 892
633X509_CRL_INFO *X509_CRL_INFO_new(void); 893DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
634void X509_CRL_INFO_free(X509_CRL_INFO *a); 894DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
635int i2d_X509_CRL_INFO(X509_CRL_INFO *a,unsigned char **pp); 895DECLARE_ASN1_FUNCTIONS(X509_CRL)
636X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a,unsigned char **pp,
637 long length);
638 896
639X509_CRL * X509_CRL_new(void); 897int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
640void X509_CRL_free(X509_CRL *a);
641int i2d_X509_CRL(X509_CRL *a,unsigned char **pp);
642X509_CRL * d2i_X509_CRL(X509_CRL **a,unsigned char **pp,long length);
643 898
644X509_PKEY * X509_PKEY_new(void ); 899X509_PKEY * X509_PKEY_new(void );
645void X509_PKEY_free(X509_PKEY *a); 900void X509_PKEY_free(X509_PKEY *a);
646int i2d_X509_PKEY(X509_PKEY *a,unsigned char **pp); 901int i2d_X509_PKEY(X509_PKEY *a,unsigned char **pp);
647X509_PKEY * d2i_X509_PKEY(X509_PKEY **a,unsigned char **pp,long length); 902X509_PKEY * d2i_X509_PKEY(X509_PKEY **a,unsigned char **pp,long length);
648 903
649NETSCAPE_SPKI * NETSCAPE_SPKI_new(void ); 904DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
650void NETSCAPE_SPKI_free(NETSCAPE_SPKI *a); 905DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
651int i2d_NETSCAPE_SPKI(NETSCAPE_SPKI *a,unsigned char **pp); 906DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)
652NETSCAPE_SPKI * d2i_NETSCAPE_SPKI(NETSCAPE_SPKI **a,unsigned char **pp,
653 long length);
654 907
655NETSCAPE_SPKAC *NETSCAPE_SPKAC_new(void ); 908#ifndef OPENSSL_NO_EVP
656void NETSCAPE_SPKAC_free(NETSCAPE_SPKAC *a);
657int i2d_NETSCAPE_SPKAC(NETSCAPE_SPKAC *a,unsigned char **pp);
658NETSCAPE_SPKAC *d2i_NETSCAPE_SPKAC(NETSCAPE_SPKAC **a,unsigned char **pp,
659 long length);
660
661#ifdef HEADER_ENVELOPE_H
662X509_INFO * X509_INFO_new(void); 909X509_INFO * X509_INFO_new(void);
663void X509_INFO_free(X509_INFO *a); 910void X509_INFO_free(X509_INFO *a);
664char * X509_NAME_oneline(X509_NAME *a,char *buf,int size); 911char * X509_NAME_oneline(X509_NAME *a,char *buf,int size);
@@ -666,12 +913,22 @@ char * X509_NAME_oneline(X509_NAME *a,char *buf,int size);
666int ASN1_verify(int (*i2d)(), X509_ALGOR *algor1, 913int ASN1_verify(int (*i2d)(), X509_ALGOR *algor1,
667 ASN1_BIT_STRING *signature,char *data,EVP_PKEY *pkey); 914 ASN1_BIT_STRING *signature,char *data,EVP_PKEY *pkey);
668 915
669int ASN1_digest(int (*i2d)(),EVP_MD *type,char *data, 916int ASN1_digest(int (*i2d)(),const EVP_MD *type,char *data,
670 unsigned char *md,unsigned int *len); 917 unsigned char *md,unsigned int *len);
671 918
672int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2, 919int ASN1_sign(int (*i2d)(), X509_ALGOR *algor1, X509_ALGOR *algor2,
673 ASN1_BIT_STRING *signature, 920 ASN1_BIT_STRING *signature,
674 char *data,EVP_PKEY *pkey, EVP_MD *type); 921 char *data,EVP_PKEY *pkey, const EVP_MD *type);
922
923int ASN1_item_digest(const ASN1_ITEM *it,const EVP_MD *type,void *data,
924 unsigned char *md,unsigned int *len);
925
926int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1,
927 ASN1_BIT_STRING *signature,void *data,EVP_PKEY *pkey);
928
929int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2,
930 ASN1_BIT_STRING *signature,
931 void *data, EVP_PKEY *pkey, const EVP_MD *type);
675#endif 932#endif
676 933
677int X509_set_version(X509 *x,long version); 934int X509_set_version(X509 *x,long version);
@@ -681,40 +938,83 @@ int X509_set_issuer_name(X509 *x, X509_NAME *name);
681X509_NAME * X509_get_issuer_name(X509 *a); 938X509_NAME * X509_get_issuer_name(X509 *a);
682int X509_set_subject_name(X509 *x, X509_NAME *name); 939int X509_set_subject_name(X509 *x, X509_NAME *name);
683X509_NAME * X509_get_subject_name(X509 *a); 940X509_NAME * X509_get_subject_name(X509 *a);
684int X509_set_notBefore(X509 *x, ASN1_UTCTIME *tm); 941int X509_set_notBefore(X509 *x, ASN1_TIME *tm);
685int X509_set_notAfter(X509 *x, ASN1_UTCTIME *tm); 942int X509_set_notAfter(X509 *x, ASN1_TIME *tm);
686int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); 943int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
687EVP_PKEY * X509_get_pubkey(X509 *x); 944EVP_PKEY * X509_get_pubkey(X509 *x);
945ASN1_BIT_STRING * X509_get0_pubkey_bitstr(const X509 *x);
688int X509_certificate_type(X509 *x,EVP_PKEY *pubkey /* optional */); 946int X509_certificate_type(X509 *x,EVP_PKEY *pubkey /* optional */);
689 947
690int X509_REQ_set_version(X509_REQ *x,long version); 948int X509_REQ_set_version(X509_REQ *x,long version);
691int X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name); 949int X509_REQ_set_subject_name(X509_REQ *req,X509_NAME *name);
692int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); 950int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
693EVP_PKEY * X509_REQ_get_pubkey(X509_REQ *req); 951EVP_PKEY * X509_REQ_get_pubkey(X509_REQ *req);
952int X509_REQ_extension_nid(int nid);
953int * X509_REQ_get_extension_nids(void);
954void X509_REQ_set_extension_nids(int *nids);
955STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
956int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,
957 int nid);
958int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts);
959int X509_REQ_get_attr_count(const X509_REQ *req);
960int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid,
961 int lastpos);
962int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,
963 int lastpos);
964X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
965X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
966int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
967int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
968 const ASN1_OBJECT *obj, int type,
969 const unsigned char *bytes, int len);
970int X509_REQ_add1_attr_by_NID(X509_REQ *req,
971 int nid, int type,
972 const unsigned char *bytes, int len);
973int X509_REQ_add1_attr_by_txt(X509_REQ *req,
974 const char *attrname, int type,
975 const unsigned char *bytes, int len);
976
977int X509_CRL_set_version(X509_CRL *x, long version);
978int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
979int X509_CRL_set_lastUpdate(X509_CRL *x, ASN1_TIME *tm);
980int X509_CRL_set_nextUpdate(X509_CRL *x, ASN1_TIME *tm);
981int X509_CRL_sort(X509_CRL *crl);
982
983int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
984int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
694 985
695int X509_check_private_key(X509 *x509,EVP_PKEY *pkey); 986int X509_check_private_key(X509 *x509,EVP_PKEY *pkey);
696 987
697int X509_issuer_and_serial_cmp(X509 *a, X509 *b); 988int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
698unsigned long X509_issuer_and_serial_hash(X509 *a); 989unsigned long X509_issuer_and_serial_hash(X509 *a);
699 990
700int X509_issuer_name_cmp(X509 *a, X509 *b); 991int X509_issuer_name_cmp(const X509 *a, const X509 *b);
701unsigned long X509_issuer_name_hash(X509 *a); 992unsigned long X509_issuer_name_hash(X509 *a);
702 993
703int X509_subject_name_cmp(X509 *a,X509 *b); 994int X509_subject_name_cmp(const X509 *a, const X509 *b);
704unsigned long X509_subject_name_hash(X509 *x); 995unsigned long X509_subject_name_hash(X509 *x);
705 996
706int X509_NAME_cmp (X509_NAME *a, X509_NAME *b); 997int X509_cmp(const X509 *a, const X509 *b);
998int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
707unsigned long X509_NAME_hash(X509_NAME *x); 999unsigned long X509_NAME_hash(X509_NAME *x);
708 1000
709int X509_CRL_cmp(X509_CRL *a,X509_CRL *b); 1001int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
710#ifndef NO_FP_API 1002#ifndef OPENSSL_NO_FP_API
1003int X509_print_ex_fp(FILE *bp,X509 *x, unsigned long nmflag, unsigned long cflag);
711int X509_print_fp(FILE *bp,X509 *x); 1004int X509_print_fp(FILE *bp,X509 *x);
1005int X509_CRL_print_fp(FILE *bp,X509_CRL *x);
712int X509_REQ_print_fp(FILE *bp,X509_REQ *req); 1006int X509_REQ_print_fp(FILE *bp,X509_REQ *req);
1007int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags);
713#endif 1008#endif
714 1009
715#ifdef HEADER_BIO_H 1010#ifndef OPENSSL_NO_BIO
716int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); 1011int X509_NAME_print(BIO *bp, X509_NAME *name, int obase);
1012int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags);
1013int X509_print_ex(BIO *bp,X509 *x, unsigned long nmflag, unsigned long cflag);
717int X509_print(BIO *bp,X509 *x); 1014int X509_print(BIO *bp,X509 *x);
1015int X509_ocspid_print(BIO *bp,X509 *x);
1016int X509_CERT_AUX_print(BIO *bp,X509_CERT_AUX *x, int indent);
1017int X509_CRL_print(BIO *bp,X509_CRL *x);
718int X509_REQ_print(BIO *bp,X509_REQ *req); 1018int X509_REQ_print(BIO *bp,X509_REQ *req);
719#endif 1019#endif
720 1020
@@ -725,7 +1025,7 @@ int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
725 char *buf,int len); 1025 char *buf,int len);
726 1026
727/* NOTE: you should be passsing -1, not 0 as lastpos. The functions that use 1027/* NOTE: you should be passsing -1, not 0 as lastpos. The functions that use
728 * lastpos, seach after that position on. */ 1028 * lastpos, search after that position on. */
729int X509_NAME_get_index_by_NID(X509_NAME *name,int nid,int lastpos); 1029int X509_NAME_get_index_by_NID(X509_NAME *name,int nid,int lastpos);
730int X509_NAME_get_index_by_OBJ(X509_NAME *name,ASN1_OBJECT *obj, 1030int X509_NAME_get_index_by_OBJ(X509_NAME *name,ASN1_OBJECT *obj,
731 int lastpos); 1031 int lastpos);
@@ -733,8 +1033,16 @@ X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc);
733X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); 1033X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
734int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne, 1034int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne,
735 int loc, int set); 1035 int loc, int set);
1036int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
1037 unsigned char *bytes, int len, int loc, int set);
1038int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
1039 unsigned char *bytes, int len, int loc, int set);
1040X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
1041 char *field, int type, unsigned char *bytes, int len);
736X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, 1042X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
737 int type,unsigned char *bytes, int len); 1043 int type,unsigned char *bytes, int len);
1044int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type,
1045 unsigned char *bytes, int len, int loc, int set);
738X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, 1046X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
739 ASN1_OBJECT *obj, int type,unsigned char *bytes, 1047 ASN1_OBJECT *obj, int type,unsigned char *bytes,
740 int len); 1048 int len);
@@ -745,18 +1053,17 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
745ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); 1053ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);
746ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); 1054ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);
747 1055
748int X509v3_get_ext_count(STACK *x); 1056int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
749int X509v3_get_ext_by_NID(STACK *x, int nid, int lastpos); 1057int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
750int X509v3_get_ext_by_OBJ(STACK *x,ASN1_OBJECT *obj,int lastpos); 1058 int nid, int lastpos);
751int X509v3_get_ext_by_critical(STACK *x, int crit, int lastpos); 1059int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
752X509_EXTENSION *X509v3_get_ext(STACK *x, int loc); 1060 ASN1_OBJECT *obj,int lastpos);
753X509_EXTENSION *X509v3_delete_ext(STACK *x, int loc); 1061int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
754STACK * X509v3_add_ext(STACK **x, X509_EXTENSION *ex, int loc); 1062 int crit, int lastpos);
755 1063X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
756int X509v3_data_type_by_OBJ(ASN1_OBJECT *obj); 1064X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
757int X509v3_data_type_by_NID(int nid); 1065STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
758int X509v3_pack_type_by_OBJ(ASN1_OBJECT *obj); 1066 X509_EXTENSION *ex, int loc);
759int X509v3_pack_type_by_NID(int nid);
760 1067
761int X509_get_ext_count(X509 *x); 1068int X509_get_ext_count(X509 *x);
762int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); 1069int X509_get_ext_by_NID(X509 *x, int nid, int lastpos);
@@ -765,6 +1072,9 @@ int X509_get_ext_by_critical(X509 *x, int crit, int lastpos);
765X509_EXTENSION *X509_get_ext(X509 *x, int loc); 1072X509_EXTENSION *X509_get_ext(X509 *x, int loc);
766X509_EXTENSION *X509_delete_ext(X509 *x, int loc); 1073X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
767int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); 1074int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
1075void * X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);
1076int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
1077 unsigned long flags);
768 1078
769int X509_CRL_get_ext_count(X509_CRL *x); 1079int X509_CRL_get_ext_count(X509_CRL *x);
770int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); 1080int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos);
@@ -773,6 +1083,9 @@ int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos);
773X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); 1083X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc);
774X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); 1084X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
775int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); 1085int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
1086void * X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);
1087int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
1088 unsigned long flags);
776 1089
777int X509_REVOKED_get_ext_count(X509_REVOKED *x); 1090int X509_REVOKED_get_ext_count(X509_REVOKED *x);
778int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); 1091int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos);
@@ -781,6 +1094,9 @@ int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos);
781X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); 1094X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc);
782X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); 1095X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
783int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); 1096int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
1097void * X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);
1098int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
1099 unsigned long flags);
784 1100
785X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, 1101X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
786 int nid, int crit, ASN1_OCTET_STRING *data); 1102 int nid, int crit, ASN1_OCTET_STRING *data);
@@ -793,311 +1109,80 @@ int X509_EXTENSION_set_data(X509_EXTENSION *ex,
793ASN1_OBJECT * X509_EXTENSION_get_object(X509_EXTENSION *ex); 1109ASN1_OBJECT * X509_EXTENSION_get_object(X509_EXTENSION *ex);
794ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); 1110ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
795int X509_EXTENSION_get_critical(X509_EXTENSION *ex); 1111int X509_EXTENSION_get_critical(X509_EXTENSION *ex);
796ASN1_OCTET_STRING *X509v3_pack_string(ASN1_OCTET_STRING **ex,int type,
797 unsigned char *bytes, int len);
798ASN1_STRING * X509v3_unpack_string(ASN1_STRING **ex,int type,
799 ASN1_OCTET_STRING *os);
800 1112
801int X509_verify_cert(X509_STORE_CTX *ctx); 1113int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
802 1114int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
803/* lookup a cert from a X509 STACK */ 1115 int lastpos);
804X509 *X509_find_by_issuer_and_serial(STACK *sk,X509_NAME *name, 1116int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, ASN1_OBJECT *obj,
805 ASN1_INTEGER *serial); 1117 int lastpos);
806X509 *X509_find_by_subject(STACK *sk,X509_NAME *name); 1118X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
807 1119X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
808#else 1120STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
809 1121 X509_ATTRIBUTE *attr);
810#ifndef SSLEAY_MACROS 1122STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x,
811#ifdef HEADER_ENVELOPE_H 1123 const ASN1_OBJECT *obj, int type,
812int X509_verify(); 1124 const unsigned char *bytes, int len);
813int X509_REQ_verify(); 1125STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x,
814int X509_CRL_verify(); 1126 int nid, int type,
815int NETSCAPE_SPKI_verify(); 1127 const unsigned char *bytes, int len);
816 1128STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x,
817int X509_sign(); 1129 const char *attrname, int type,
818int X509_REQ_sign(); 1130 const unsigned char *bytes, int len);
819int X509_CRL_sign(); 1131X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
820int NETSCAPE_SPKI_sign(); 1132 int atrtype, const void *data, int len);
821 1133X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
822int X509_digest(); 1134 const ASN1_OBJECT *obj, int atrtype, const void *data, int len);
823int X509_NAME_digest(); 1135X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
824#endif 1136 const char *atrname, int type, const unsigned char *bytes, int len);
825 1137int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
826#ifndef NO_FP_API 1138int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len);
827X509 *d2i_X509_fp(); 1139void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx,
828int i2d_X509_fp(); 1140 int atrtype, void *data);
829X509_CRL *d2i_X509_CRL_fp(); 1141int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);
830int i2d_X509_CRL_fp(); 1142ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
831X509_REQ *d2i_X509_REQ_fp(); 1143ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
832int i2d_X509_REQ_fp();
833RSA *d2i_RSAPrivateKey_fp();
834int i2d_RSAPrivateKey_fp();
835DSA *d2i_DSAPrivateKey_fp();
836int i2d_DSAPrivateKey_fp();
837RSA *d2i_RSAPublicKey_fp();
838int i2d_RSAPublicKey_fp();
839#endif
840
841X509 *d2i_X509_bio();
842int i2d_X509_bio();
843X509_CRL *d2i_X509_CRL_bio();
844int i2d_X509_CRL_bio();
845X509_REQ *d2i_X509_REQ_bio();
846int i2d_X509_REQ_bio();
847RSA *d2i_RSAPrivateKey_bio();
848int i2d_RSAPrivateKey_bio();
849DSA *d2i_DSAPrivateKey_bio();
850int i2d_DSAPrivateKey_bio();
851RSA *d2i_RSAPublicKey_bio();
852int i2d_RSAPublicKey_bio();
853
854X509 *X509_dup();
855X509_EXTENSION *X509_EXTENSION_dup();
856X509_CRL *X509_CRL_dup();
857X509_REQ *X509_REQ_dup();
858X509_NAME *X509_NAME_dup();
859X509_NAME_ENTRY *X509_NAME_ENTRY_dup();
860RSA *RSAPublicKey_dup();
861RSA *RSAPrivateKey_dup();
862
863#endif /* !SSLEAY_MACROS */
864 1144
865int X509_cmp_current_time(); 1145int X509_verify_cert(X509_STORE_CTX *ctx);
866ASN1_UTCTIME * X509_gmtime_adj();
867
868char * X509_get_default_cert_area();
869char * X509_get_default_cert_dir();
870char * X509_get_default_cert_file();
871char * X509_get_default_cert_dir_env();
872char * X509_get_default_cert_file_env();
873char * X509_get_default_private_dir();
874
875X509_REQ * X509_to_X509_REQ();
876X509 * X509_REQ_to_X509();
877void ERR_load_X509_strings();
878
879X509_ALGOR * X509_ALGOR_new();
880void X509_ALGOR_free();
881int i2d_X509_ALGOR();
882X509_ALGOR * d2i_X509_ALGOR();
883
884X509_VAL * X509_VAL_new();
885void X509_VAL_free();
886int i2d_X509_VAL();
887X509_VAL * d2i_X509_VAL();
888
889X509_PUBKEY * X509_PUBKEY_new();
890void X509_PUBKEY_free();
891int i2d_X509_PUBKEY();
892X509_PUBKEY * d2i_X509_PUBKEY();
893int X509_PUBKEY_set();
894EVP_PKEY * X509_PUBKEY_get();
895int X509_get_pubkey_parameters();
896
897X509_SIG * X509_SIG_new();
898void X509_SIG_free();
899int i2d_X509_SIG();
900X509_SIG * d2i_X509_SIG();
901
902X509_REQ_INFO *X509_REQ_INFO_new();
903void X509_REQ_INFO_free();
904int i2d_X509_REQ_INFO();
905X509_REQ_INFO *d2i_X509_REQ_INFO();
906
907X509_REQ * X509_REQ_new();
908void X509_REQ_free();
909int i2d_X509_REQ();
910X509_REQ * d2i_X509_REQ();
911
912X509_ATTRIBUTE *X509_ATTRIBUTE_new();
913void X509_ATTRIBUTE_free();
914int i2d_X509_ATTRIBUTE();
915X509_ATTRIBUTE *d2i_X509_ATTRIBUTE();
916
917X509_EXTENSION *X509_EXTENSION_new();
918void X509_EXTENSION_free();
919int i2d_X509_EXTENSION();
920X509_EXTENSION *d2i_X509_EXTENSION();
921
922X509_NAME_ENTRY *X509_NAME_ENTRY_new();
923void X509_NAME_ENTRY_free();
924int i2d_X509_NAME_ENTRY();
925X509_NAME_ENTRY *d2i_X509_NAME_ENTRY();
926
927X509_NAME * X509_NAME_new();
928void X509_NAME_free();
929int i2d_X509_NAME();
930X509_NAME * d2i_X509_NAME();
931int X509_NAME_set();
932
933
934X509_CINF * X509_CINF_new();
935void X509_CINF_free();
936int i2d_X509_CINF();
937X509_CINF * d2i_X509_CINF();
938
939X509 * X509_new();
940void X509_free();
941int i2d_X509();
942X509 * d2i_X509();
943
944X509_REVOKED * X509_REVOKED_new();
945void X509_REVOKED_free();
946int i2d_X509_REVOKED();
947X509_REVOKED * d2i_X509_REVOKED();
948
949X509_CRL_INFO *X509_CRL_INFO_new();
950void X509_CRL_INFO_free();
951int i2d_X509_CRL_INFO();
952X509_CRL_INFO *d2i_X509_CRL_INFO();
953
954X509_CRL * X509_CRL_new();
955void X509_CRL_free();
956int i2d_X509_CRL();
957X509_CRL * d2i_X509_CRL();
958
959X509_PKEY * X509_PKEY_new();
960void X509_PKEY_free();
961int i2d_X509_PKEY();
962X509_PKEY * d2i_X509_PKEY();
963
964NETSCAPE_SPKI * NETSCAPE_SPKI_new();
965void NETSCAPE_SPKI_free();
966int i2d_NETSCAPE_SPKI();
967NETSCAPE_SPKI * d2i_NETSCAPE_SPKI();
968
969NETSCAPE_SPKAC *NETSCAPE_SPKAC_new();
970void NETSCAPE_SPKAC_free();
971int i2d_NETSCAPE_SPKAC();
972NETSCAPE_SPKAC *d2i_NETSCAPE_SPKAC();
973
974#ifdef HEADER_ENVELOPE_H
975X509_INFO * X509_INFO_new();
976void X509_INFO_free();
977#endif
978
979char * X509_NAME_oneline();
980
981int ASN1_verify();
982int ASN1_digest();
983int ASN1_sign();
984
985int X509_set_version();
986int X509_set_serialNumber();
987ASN1_INTEGER * X509_get_serialNumber();
988int X509_set_issuer_name();
989X509_NAME * X509_get_issuer_name();
990int X509_set_subject_name();
991X509_NAME * X509_get_subject_name();
992int X509_set_notBefore();
993int X509_set_notAfter();
994int X509_set_pubkey();
995EVP_PKEY * X509_get_pubkey();
996int X509_certificate_type();
997
998int X509_REQ_set_version();
999int X509_REQ_set_subject_name();
1000int X509_REQ_set_pubkey();
1001EVP_PKEY * X509_REQ_get_pubkey();
1002
1003int X509_check_private_key();
1004
1005int X509_issuer_and_serial_cmp();
1006unsigned long X509_issuer_and_serial_hash();
1007
1008int X509_issuer_name_cmp();
1009unsigned long X509_issuer_name_hash();
1010
1011int X509_subject_name_cmp();
1012unsigned long X509_subject_name_hash();
1013
1014int X509_NAME_cmp ();
1015unsigned long X509_NAME_hash();
1016
1017int X509_CRL_cmp();
1018#ifndef NO_FP_API
1019int X509_print_fp();
1020int X509_REQ_print_fp();
1021#endif
1022
1023int X509_NAME_print();
1024int X509_print();
1025int X509_REQ_print();
1026
1027int X509_NAME_entry_count();
1028int X509_NAME_get_text_by_NID();
1029int X509_NAME_get_text_by_OBJ();
1030
1031int X509_NAME_get_index_by_NID();
1032int X509_NAME_get_index_by_OBJ();
1033X509_NAME_ENTRY *X509_NAME_get_entry();
1034X509_NAME_ENTRY *X509_NAME_delete_entry();
1035int X509_NAME_add_entry();
1036X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID();
1037X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ();
1038int X509_NAME_ENTRY_set_object();
1039int X509_NAME_ENTRY_set_data();
1040ASN1_OBJECT * X509_NAME_ENTRY_get_object();
1041ASN1_STRING * X509_NAME_ENTRY_get_data();
1042
1043int X509v3_get_ext_count();
1044int X509v3_get_ext_by_NID();
1045int X509v3_get_ext_by_OBJ();
1046int X509v3_get_ext_by_critical();
1047X509_EXTENSION *X509v3_get_ext();
1048X509_EXTENSION *X509v3_delete_ext();
1049STACK * X509v3_add_ext();
1050
1051int X509v3_data_type_by_OBJ();
1052int X509v3_data_type_by_NID();
1053int X509v3_pack_type_by_OBJ();
1054int X509v3_pack_type_by_NID();
1055
1056int X509_get_ext_count();
1057int X509_get_ext_by_NID();
1058int X509_get_ext_by_OBJ();
1059int X509_get_ext_by_critical();
1060X509_EXTENSION *X509_get_ext();
1061X509_EXTENSION *X509_delete_ext();
1062int X509_add_ext();
1063
1064int X509_CRL_get_ext_count();
1065int X509_CRL_get_ext_by_NID();
1066int X509_CRL_get_ext_by_OBJ();
1067int X509_CRL_get_ext_by_critical();
1068X509_EXTENSION *X509_CRL_get_ext();
1069X509_EXTENSION *X509_CRL_delete_ext();
1070int X509_CRL_add_ext();
1071
1072int X509_REVOKED_get_ext_count();
1073int X509_REVOKED_get_ext_by_NID();
1074int X509_REVOKED_get_ext_by_OBJ();
1075int X509_REVOKED_get_ext_by_critical();
1076X509_EXTENSION *X509_REVOKED_get_ext();
1077X509_EXTENSION *X509_REVOKED_delete_ext();
1078int X509_REVOKED_add_ext();
1079
1080X509_EXTENSION *X509_EXTENSION_create_by_NID();
1081X509_EXTENSION *X509_EXTENSION_create_by_OBJ();
1082int X509_EXTENSION_set_object();
1083int X509_EXTENSION_set_critical();
1084int X509_EXTENSION_set_data();
1085ASN1_OBJECT * X509_EXTENSION_get_object();
1086ASN1_OCTET_STRING *X509_EXTENSION_get_data();
1087int X509_EXTENSION_get_critical();
1088ASN1_OCTET_STRING *X509v3_pack_string();
1089ASN1_STRING * X509v3_unpack_string();
1090
1091int X509_verify_cert();
1092char * X509_verify_cert_error_string();
1093 1146
1094/* lookup a cert from a X509 STACK */ 1147/* lookup a cert from a X509 STACK */
1095X509 *X509_find_by_issuer_and_serial(); 1148X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk,X509_NAME *name,
1096X509 *X509_find_by_subject(); 1149 ASN1_INTEGER *serial);
1097 1150X509 *X509_find_by_subject(STACK_OF(X509) *sk,X509_NAME *name);
1098#endif 1151
1152DECLARE_ASN1_FUNCTIONS(PBEPARAM)
1153DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
1154DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
1155
1156X509_ALGOR *PKCS5_pbe_set(int alg, int iter, unsigned char *salt, int saltlen);
1157X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
1158 unsigned char *salt, int saltlen);
1159
1160/* PKCS#8 utilities */
1161
1162DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)
1163
1164EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8);
1165PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);
1166PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken);
1167PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken);
1168
1169int X509_check_trust(X509 *x, int id, int flags);
1170int X509_TRUST_get_count(void);
1171X509_TRUST * X509_TRUST_get0(int idx);
1172int X509_TRUST_get_by_id(int id);
1173int X509_TRUST_add(int id, int flags, int (*ck)(X509_TRUST *, X509 *, int),
1174 char *name, int arg1, void *arg2);
1175void X509_TRUST_cleanup(void);
1176int X509_TRUST_get_flags(X509_TRUST *xp);
1177char *X509_TRUST_get0_name(X509_TRUST *xp);
1178int X509_TRUST_get_trust(X509_TRUST *xp);
1099 1179
1100/* BEGIN ERROR CODES */ 1180/* BEGIN ERROR CODES */
1181/* The following lines are auto generated by the script mkerr.pl. Any changes
1182 * made after this point may be overwritten when the script is next run.
1183 */
1184void ERR_load_X509_strings(void);
1185
1101/* Error codes for the X509 functions. */ 1186/* Error codes for the X509 functions. */
1102 1187
1103/* Function codes. */ 1188/* Function codes. */
@@ -1105,17 +1190,25 @@ X509 *X509_find_by_subject();
1105#define X509_F_BY_FILE_CTRL 101 1190#define X509_F_BY_FILE_CTRL 101
1106#define X509_F_DIR_CTRL 102 1191#define X509_F_DIR_CTRL 102
1107#define X509_F_GET_CERT_BY_SUBJECT 103 1192#define X509_F_GET_CERT_BY_SUBJECT 103
1193#define X509_F_NETSCAPE_SPKI_B64_DECODE 129
1194#define X509_F_NETSCAPE_SPKI_B64_ENCODE 130
1108#define X509_F_X509V3_ADD_EXT 104 1195#define X509_F_X509V3_ADD_EXT 104
1109#define X509_F_X509V3_ADD_EXTENSION 105 1196#define X509_F_X509_ADD_ATTR 135
1110#define X509_F_X509V3_PACK_STRING 106 1197#define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136
1111#define X509_F_X509V3_UNPACK_STRING 107 1198#define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137
1199#define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140
1200#define X509_F_X509_ATTRIBUTE_GET0_DATA 139
1201#define X509_F_X509_ATTRIBUTE_SET1_DATA 138
1202#define X509_F_X509_CHECK_PRIVATE_KEY 128
1112#define X509_F_X509_EXTENSION_CREATE_BY_NID 108 1203#define X509_F_X509_EXTENSION_CREATE_BY_NID 108
1113#define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 1204#define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109
1114#define X509_F_X509_GET_PUBKEY_PARAMETERS 110 1205#define X509_F_X509_GET_PUBKEY_PARAMETERS 110
1206#define X509_F_X509_LOAD_CERT_CRL_FILE 132
1115#define X509_F_X509_LOAD_CERT_FILE 111 1207#define X509_F_X509_LOAD_CERT_FILE 111
1116#define X509_F_X509_LOAD_CRL_FILE 112 1208#define X509_F_X509_LOAD_CRL_FILE 112
1117#define X509_F_X509_NAME_ADD_ENTRY 113 1209#define X509_F_X509_NAME_ADD_ENTRY 113
1118#define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 1210#define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114
1211#define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131
1119#define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 1212#define X509_F_X509_NAME_ENTRY_SET_OBJECT 115
1120#define X509_F_X509_NAME_ONELINE 116 1213#define X509_F_X509_NAME_ONELINE 116
1121#define X509_F_X509_NAME_PRINT 117 1214#define X509_F_X509_NAME_PRINT 117
@@ -1127,26 +1220,40 @@ X509 *X509_find_by_subject();
1127#define X509_F_X509_REQ_TO_X509 123 1220#define X509_F_X509_REQ_TO_X509 123
1128#define X509_F_X509_STORE_ADD_CERT 124 1221#define X509_F_X509_STORE_ADD_CERT 124
1129#define X509_F_X509_STORE_ADD_CRL 125 1222#define X509_F_X509_STORE_ADD_CRL 125
1223#define X509_F_X509_STORE_CTX_INIT 143
1224#define X509_F_X509_STORE_CTX_NEW 142
1225#define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134
1130#define X509_F_X509_TO_X509_REQ 126 1226#define X509_F_X509_TO_X509_REQ 126
1227#define X509_F_X509_TRUST_ADD 133
1228#define X509_F_X509_TRUST_SET 141
1131#define X509_F_X509_VERIFY_CERT 127 1229#define X509_F_X509_VERIFY_CERT 127
1132 1230
1133/* Reason codes. */ 1231/* Reason codes. */
1134#define X509_R_BAD_X509_FILETYPE 100 1232#define X509_R_BAD_X509_FILETYPE 100
1233#define X509_R_BASE64_DECODE_ERROR 118
1234#define X509_R_CANT_CHECK_DH_KEY 114
1135#define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 1235#define X509_R_CERT_ALREADY_IN_HASH_TABLE 101
1136#define X509_R_ERR_ASN1_LIB 102 1236#define X509_R_ERR_ASN1_LIB 102
1237#define X509_R_INVALID_DIRECTORY 113
1238#define X509_R_INVALID_FIELD_NAME 119
1239#define X509_R_INVALID_TRUST 123
1240#define X509_R_KEY_TYPE_MISMATCH 115
1241#define X509_R_KEY_VALUES_MISMATCH 116
1137#define X509_R_LOADING_CERT_DIR 103 1242#define X509_R_LOADING_CERT_DIR 103
1138#define X509_R_LOADING_DEFAULTS 104 1243#define X509_R_LOADING_DEFAULTS 104
1139#define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 1244#define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105
1140#define X509_R_SHOULD_RETRY 106 1245#define X509_R_SHOULD_RETRY 106
1141#define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 1246#define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107
1142#define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 1247#define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108
1248#define X509_R_UNKNOWN_KEY_TYPE 117
1143#define X509_R_UNKNOWN_NID 109 1249#define X509_R_UNKNOWN_NID 109
1144#define X509_R_UNKNOWN_STRING_TYPE 110 1250#define X509_R_UNKNOWN_PURPOSE_ID 121
1251#define X509_R_UNKNOWN_TRUST_ID 120
1145#define X509_R_UNSUPPORTED_ALGORITHM 111 1252#define X509_R_UNSUPPORTED_ALGORITHM 111
1146#define X509_R_WRONG_LOOKUP_TYPE 112 1253#define X509_R_WRONG_LOOKUP_TYPE 112
1147 1254#define X509_R_WRONG_TYPE 122
1255
1148#ifdef __cplusplus 1256#ifdef __cplusplus
1149} 1257}
1150#endif 1258#endif
1151#endif 1259#endif
1152