Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / openssl / x509.h @ 13

History | View | Annotate | Download (50.6 KB)

1
/* crypto/x509/x509.h */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
 * All rights reserved.
4
 *
5
 * This package is an SSL implementation written
6
 * by Eric Young (eay@cryptsoft.com).
7
 * The implementation was written so as to conform with Netscapes SSL.
8
 *
9
 * This library is free for commercial and non-commercial use as long as
10
 * the following conditions are aheared to.  The following conditions
11
 * apply to all code found in this distribution, be it the RC4, RSA,
12
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13
 * included with this distribution is covered by the same copyright terms
14
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
 *
16
 * Copyright remains Eric Young's, and as such any Copyright notices in
17
 * the code are not to be removed.
18
 * If this package is used in a product, Eric Young should be given attribution
19
 * as the author of the parts of the library used.
20
 * This can be in the form of a textual message at program startup or
21
 * in documentation (online or textual) provided with the package.
22
 *
23
 * Redistribution and use in source and binary forms, with or without
24
 * modification, are permitted provided that the following conditions
25
 * are met:
26
 * 1. Redistributions of source code must retain the copyright
27
 *    notice, this list of conditions and the following disclaimer.
28
 * 2. Redistributions in binary form must reproduce the above copyright
29
 *    notice, this list of conditions and the following disclaimer in the
30
 *    documentation and/or other materials provided with the distribution.
31
 * 3. All advertising materials mentioning features or use of this software
32
 *    must display the following acknowledgement:
33
 *    "This product includes cryptographic software written by
34
 *     Eric Young (eay@cryptsoft.com)"
35
 *    The word 'cryptographic' can be left out if the rouines from the library
36
 *    being used are not cryptographic related :-).
37
 * 4. If you include any Windows specific code (or a derivative thereof) from
38
 *    the apps directory (application code) you must include an acknowledgement:
39
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
 *
41
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
 * SUCH DAMAGE.
52
 *
53
 * The licence and distribution terms for any publically available version or
54
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55
 * copied and put under another distribution licence
56
 * [including the GNU Public Licence.]
57
 */
58
/* ====================================================================
59
 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
60
 * ECDH support in OpenSSL originally developed by
61
 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
62
 */
63

    
64
#ifndef HEADER_X509_H
65
# define HEADER_X509_H
66

    
67
# include <openssl/e_os2.h>
68
# include <openssl/symhacks.h>
69
# ifndef OPENSSL_NO_BUFFER
70
#  include <openssl/buffer.h>
71
# endif
72
# ifndef OPENSSL_NO_EVP
73
#  include <openssl/evp.h>
74
# endif
75
# ifndef OPENSSL_NO_BIO
76
#  include <openssl/bio.h>
77
# endif
78
# include <openssl/stack.h>
79
# include <openssl/asn1.h>
80
# include <openssl/safestack.h>
81

    
82
# ifndef OPENSSL_NO_EC
83
#  include <openssl/ec.h>
84
# endif
85

    
86
# ifndef OPENSSL_NO_ECDSA
87
#  include <openssl/ecdsa.h>
88
# endif
89

    
90
# ifndef OPENSSL_NO_ECDH
91
#  include <openssl/ecdh.h>
92
# endif
93

    
94
# ifndef OPENSSL_NO_DEPRECATED
95
#  ifndef OPENSSL_NO_RSA
96
#   include <openssl/rsa.h>
97
#  endif
98
#  ifndef OPENSSL_NO_DSA
99
#   include <openssl/dsa.h>
100
#  endif
101
#  ifndef OPENSSL_NO_DH
102
#   include <openssl/dh.h>
103
#  endif
104
# endif
105

    
106
# ifndef OPENSSL_NO_SHA
107
#  include <openssl/sha.h>
108
# endif
109
# include <openssl/ossl_typ.h>
110

    
111
#ifdef  __cplusplus
112
extern "C" {
113
#endif
114

    
115
# ifdef OPENSSL_SYS_WIN32
116
/* Under Win32 these are defined in wincrypt.h */
117
#  undef X509_NAME
118
#  undef X509_CERT_PAIR
119
#  undef X509_EXTENSIONS
120
# endif
121

    
122
# define X509_FILETYPE_PEM       1
123
# define X509_FILETYPE_ASN1      2
124
# define X509_FILETYPE_DEFAULT   3
125

    
126
# define X509v3_KU_DIGITAL_SIGNATURE     0x0080
127
# define X509v3_KU_NON_REPUDIATION       0x0040
128
# define X509v3_KU_KEY_ENCIPHERMENT      0x0020
129
# define X509v3_KU_DATA_ENCIPHERMENT     0x0010
130
# define X509v3_KU_KEY_AGREEMENT         0x0008
131
# define X509v3_KU_KEY_CERT_SIGN         0x0004
132
# define X509v3_KU_CRL_SIGN              0x0002
133
# define X509v3_KU_ENCIPHER_ONLY         0x0001
134
# define X509v3_KU_DECIPHER_ONLY         0x8000
135
# define X509v3_KU_UNDEF                 0xffff
136

    
137
typedef struct X509_objects_st {
138
    int nid;
139
    int (*a2i) (void);
140
    int (*i2a) (void);
141
} X509_OBJECTS;
142

    
143
struct X509_algor_st {
144
    ASN1_OBJECT *algorithm;
145
    ASN1_TYPE *parameter;
146
} /* X509_ALGOR */ ;
147

    
148
DECLARE_ASN1_SET_OF(X509_ALGOR)
149

    
150
typedef STACK_OF(X509_ALGOR) X509_ALGORS;
151

    
152
typedef struct X509_val_st {
153
    ASN1_TIME *notBefore;
154
    ASN1_TIME *notAfter;
155
} X509_VAL;
156

    
157
struct X509_pubkey_st {
158
    X509_ALGOR *algor;
159
    ASN1_BIT_STRING *public_key;
160
    EVP_PKEY *pkey;
161
};
162

    
163
typedef struct X509_sig_st {
164
    X509_ALGOR *algor;
165
    ASN1_OCTET_STRING *digest;
166
} X509_SIG;
167

    
168
typedef struct X509_name_entry_st {
169
    ASN1_OBJECT *object;
170
    ASN1_STRING *value;
171
    int set;
172
    int size;                   /* temp variable */
173
} X509_NAME_ENTRY;
174

    
175
DECLARE_STACK_OF(X509_NAME_ENTRY)
176
DECLARE_ASN1_SET_OF(X509_NAME_ENTRY)
177

    
178
/* we always keep X509_NAMEs in 2 forms. */
179
struct X509_name_st {
180
    STACK_OF(X509_NAME_ENTRY) *entries;
181
    int modified;               /* true if 'bytes' needs to be built */
182
# ifndef OPENSSL_NO_BUFFER
183
    BUF_MEM *bytes;
184
# else
185
    char *bytes;
186
# endif
187
/*      unsigned long hash; Keep the hash around for lookups */
188
    unsigned char *canon_enc;
189
    int canon_enclen;
190
} /* X509_NAME */ ;
191

    
192
DECLARE_STACK_OF(X509_NAME)
193

    
194
# define X509_EX_V_NETSCAPE_HACK         0x8000
195
# define X509_EX_V_INIT                  0x0001
196
typedef struct X509_extension_st {
197
    ASN1_OBJECT *object;
198
    ASN1_BOOLEAN critical;
199
    ASN1_OCTET_STRING *value;
200
} X509_EXTENSION;
201

    
202
typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
203

    
204
DECLARE_STACK_OF(X509_EXTENSION)
205
DECLARE_ASN1_SET_OF(X509_EXTENSION)
206

    
207
/* a sequence of these are used */
208
typedef struct x509_attributes_st {
209
    ASN1_OBJECT *object;
210
    int single;                 /* 0 for a set, 1 for a single item (which is
211
                                 * wrong) */
212
    union {
213
        char *ptr;
214
        /*
215
         * 0
216
         */ STACK_OF(ASN1_TYPE) *set;
217
        /*
218
         * 1
219
         */ ASN1_TYPE *single;
220
    } value;
221
} X509_ATTRIBUTE;
222

    
223
DECLARE_STACK_OF(X509_ATTRIBUTE)
224
DECLARE_ASN1_SET_OF(X509_ATTRIBUTE)
225

    
226
typedef struct X509_req_info_st {
227
    ASN1_ENCODING enc;
228
    ASN1_INTEGER *version;
229
    X509_NAME *subject;
230
    X509_PUBKEY *pubkey;
231
    /*  d=2 hl=2 l=  0 cons: cont: 00 */
232
    STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */
233
} X509_REQ_INFO;
234

    
235
typedef struct X509_req_st {
236
    X509_REQ_INFO *req_info;
237
    X509_ALGOR *sig_alg;
238
    ASN1_BIT_STRING *signature;
239
    int references;
240
} X509_REQ;
241

    
242
typedef struct x509_cinf_st {
243
    ASN1_INTEGER *version;      /* [ 0 ] default of v1 */
244
    ASN1_INTEGER *serialNumber;
245
    X509_ALGOR *signature;
246
    X509_NAME *issuer;
247
    X509_VAL *validity;
248
    X509_NAME *subject;
249
    X509_PUBKEY *key;
250
    ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
251
    ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
252
    STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
253
    ASN1_ENCODING enc;
254
} X509_CINF;
255

    
256
/*
257
 * This stuff is certificate "auxiliary info" it contains details which are
258
 * useful in certificate stores and databases. When used this is tagged onto
259
 * the end of the certificate itself
260
 */
261

    
262
typedef struct x509_cert_aux_st {
263
    STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */
264
    STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */
265
    ASN1_UTF8STRING *alias;     /* "friendly name" */
266
    ASN1_OCTET_STRING *keyid;   /* key id of private key */
267
    STACK_OF(X509_ALGOR) *other; /* other unspecified info */
268
} X509_CERT_AUX;
269

    
270
struct x509_st {
271
    X509_CINF *cert_info;
272
    X509_ALGOR *sig_alg;
273
    ASN1_BIT_STRING *signature;
274
    int valid;
275
    int references;
276
    char *name;
277
    CRYPTO_EX_DATA ex_data;
278
    /* These contain copies of various extension values */
279
    long ex_pathlen;
280
    long ex_pcpathlen;
281
    unsigned long ex_flags;
282
    unsigned long ex_kusage;
283
    unsigned long ex_xkusage;
284
    unsigned long ex_nscert;
285
    ASN1_OCTET_STRING *skid;
286
    AUTHORITY_KEYID *akid;
287
    X509_POLICY_CACHE *policy_cache;
288
    STACK_OF(DIST_POINT) *crldp;
289
    STACK_OF(GENERAL_NAME) *altname;
290
    NAME_CONSTRAINTS *nc;
291
# ifndef OPENSSL_NO_RFC3779
292
    STACK_OF(IPAddressFamily) *rfc3779_addr;
293
    struct ASIdentifiers_st *rfc3779_asid;
294
# endif
295
# ifndef OPENSSL_NO_SHA
296
    unsigned char sha1_hash[SHA_DIGEST_LENGTH];
297
# endif
298
    X509_CERT_AUX *aux;
299
} /* X509 */ ;
300

    
301
DECLARE_STACK_OF(X509)
302
DECLARE_ASN1_SET_OF(X509)
303

    
304
/* This is used for a table of trust checking functions */
305

    
306
typedef struct x509_trust_st {
307
    int trust;
308
    int flags;
309
    int (*check_trust) (struct x509_trust_st *, X509 *, int);
310
    char *name;
311
    int arg1;
312
    void *arg2;
313
} X509_TRUST;
314

    
315
DECLARE_STACK_OF(X509_TRUST)
316

    
317
typedef struct x509_cert_pair_st {
318
    X509 *forward;
319
    X509 *reverse;
320
} X509_CERT_PAIR;
321

    
322
/* standard trust ids */
323

    
324
# define X509_TRUST_DEFAULT      -1/* Only valid in purpose settings */
325

    
326
# define X509_TRUST_COMPAT       1
327
# define X509_TRUST_SSL_CLIENT   2
328
# define X509_TRUST_SSL_SERVER   3
329
# define X509_TRUST_EMAIL        4
330
# define X509_TRUST_OBJECT_SIGN  5
331
# define X509_TRUST_OCSP_SIGN    6
332
# define X509_TRUST_OCSP_REQUEST 7
333
# define X509_TRUST_TSA          8
334

    
335
/* Keep these up to date! */
336
# define X509_TRUST_MIN          1
337
# define X509_TRUST_MAX          8
338

    
339
/* trust_flags values */
340
# define X509_TRUST_DYNAMIC      1
341
# define X509_TRUST_DYNAMIC_NAME 2
342

    
343
/* check_trust return codes */
344

    
345
# define X509_TRUST_TRUSTED      1
346
# define X509_TRUST_REJECTED     2
347
# define X509_TRUST_UNTRUSTED    3
348

    
349
/* Flags for X509_print_ex() */
350

    
351
# define X509_FLAG_COMPAT                0
352
# define X509_FLAG_NO_HEADER             1L
353
# define X509_FLAG_NO_VERSION            (1L << 1)
354
# define X509_FLAG_NO_SERIAL             (1L << 2)
355
# define X509_FLAG_NO_SIGNAME            (1L << 3)
356
# define X509_FLAG_NO_ISSUER             (1L << 4)
357
# define X509_FLAG_NO_VALIDITY           (1L << 5)
358
# define X509_FLAG_NO_SUBJECT            (1L << 6)
359
# define X509_FLAG_NO_PUBKEY             (1L << 7)
360
# define X509_FLAG_NO_EXTENSIONS         (1L << 8)
361
# define X509_FLAG_NO_SIGDUMP            (1L << 9)
362
# define X509_FLAG_NO_AUX                (1L << 10)
363
# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)
364

    
365
/* Flags specific to X509_NAME_print_ex() */
366

    
367
/* The field separator information */
368

    
369
# define XN_FLAG_SEP_MASK        (0xf << 16)
370

    
371
# define XN_FLAG_COMPAT          0/* Traditional SSLeay: use old
372
                                   * X509_NAME_print */
373
# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */
374
# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */
375
# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */
376
# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */
377

    
378
# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */
379

    
380
/* How the field name is shown */
381

    
382
# define XN_FLAG_FN_MASK         (0x3 << 21)
383

    
384
# define XN_FLAG_FN_SN           0/* Object short name */
385
# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */
386
# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */
387
# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */
388

    
389
# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */
390

    
391
/*
392
 * This determines if we dump fields we don't recognise: RFC2253 requires
393
 * this.
394
 */
395

    
396
# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)
397

    
398
# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20
399
                                           * characters */
400

    
401
/* Complete set of RFC2253 flags */
402

    
403
# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
404
                        XN_FLAG_SEP_COMMA_PLUS | \
405
                        XN_FLAG_DN_REV | \
406
                        XN_FLAG_FN_SN | \
407
                        XN_FLAG_DUMP_UNKNOWN_FIELDS)
408

    
409
/* readable oneline form */
410

    
411
# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
412
                        ASN1_STRFLGS_ESC_QUOTE | \
413
                        XN_FLAG_SEP_CPLUS_SPC | \
414
                        XN_FLAG_SPC_EQ | \
415
                        XN_FLAG_FN_SN)
416

    
417
/* readable multiline form */
418

    
419
# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
420
                        ASN1_STRFLGS_ESC_MSB | \
421
                        XN_FLAG_SEP_MULTILINE | \
422
                        XN_FLAG_SPC_EQ | \
423
                        XN_FLAG_FN_LN | \
424
                        XN_FLAG_FN_ALIGN)
425

    
426
struct x509_revoked_st {
427
    ASN1_INTEGER *serialNumber;
428
    ASN1_TIME *revocationDate;
429
    STACK_OF(X509_EXTENSION) /* optional */ *extensions;
430
    /* Set up if indirect CRL */
431
    STACK_OF(GENERAL_NAME) *issuer;
432
    /* Revocation reason */
433
    int reason;
434
    int sequence;               /* load sequence */
435
};
436

    
437
DECLARE_STACK_OF(X509_REVOKED)
438
DECLARE_ASN1_SET_OF(X509_REVOKED)
439

    
440
typedef struct X509_crl_info_st {
441
    ASN1_INTEGER *version;
442
    X509_ALGOR *sig_alg;
443
    X509_NAME *issuer;
444
    ASN1_TIME *lastUpdate;
445
    ASN1_TIME *nextUpdate;
446
    STACK_OF(X509_REVOKED) *revoked;
447
    STACK_OF(X509_EXTENSION) /* [0] */ *extensions;
448
    ASN1_ENCODING enc;
449
} X509_CRL_INFO;
450

    
451
struct X509_crl_st {
452
    /* actual signature */
453
    X509_CRL_INFO *crl;
454
    X509_ALGOR *sig_alg;
455
    ASN1_BIT_STRING *signature;
456
    int references;
457
    int flags;
458
    /* Copies of various extensions */
459
    AUTHORITY_KEYID *akid;
460
    ISSUING_DIST_POINT *idp;
461
    /* Convenient breakdown of IDP */
462
    int idp_flags;
463
    int idp_reasons;
464
    /* CRL and base CRL numbers for delta processing */
465
    ASN1_INTEGER *crl_number;
466
    ASN1_INTEGER *base_crl_number;
467
# ifndef OPENSSL_NO_SHA
468
    unsigned char sha1_hash[SHA_DIGEST_LENGTH];
469
# endif
470
    STACK_OF(GENERAL_NAMES) *issuers;
471
    const X509_CRL_METHOD *meth;
472
    void *meth_data;
473
} /* X509_CRL */ ;
474

    
475
DECLARE_STACK_OF(X509_CRL)
476
DECLARE_ASN1_SET_OF(X509_CRL)
477

    
478
typedef struct private_key_st {
479
    int version;
480
    /* The PKCS#8 data types */
481
    X509_ALGOR *enc_algor;
482
    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
483
    /* When decrypted, the following will not be NULL */
484
    EVP_PKEY *dec_pkey;
485
    /* used to encrypt and decrypt */
486
    int key_length;
487
    char *key_data;
488
    int key_free;               /* true if we should auto free key_data */
489
    /* expanded version of 'enc_algor' */
490
    EVP_CIPHER_INFO cipher;
491
    int references;
492
} X509_PKEY;
493

    
494
# ifndef OPENSSL_NO_EVP
495
typedef struct X509_info_st {
496
    X509 *x509;
497
    X509_CRL *crl;
498
    X509_PKEY *x_pkey;
499
    EVP_CIPHER_INFO enc_cipher;
500
    int enc_len;
501
    char *enc_data;
502
    int references;
503
} X509_INFO;
504

    
505
DECLARE_STACK_OF(X509_INFO)
506
# endif
507

    
508
/*
509
 * The next 2 structures and their 8 routines were sent to me by Pat Richard
510
 * <patr@x509.com> and are used to manipulate Netscapes spki structures -
511
 * useful if you are writing a CA web page
512
 */
513
typedef struct Netscape_spkac_st {
514
    X509_PUBKEY *pubkey;
515
    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */
516
} NETSCAPE_SPKAC;
517

    
518
typedef struct Netscape_spki_st {
519
    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */
520
    X509_ALGOR *sig_algor;
521
    ASN1_BIT_STRING *signature;
522
} NETSCAPE_SPKI;
523

    
524
/* Netscape certificate sequence structure */
525
typedef struct Netscape_certificate_sequence {
526
    ASN1_OBJECT *type;
527
    STACK_OF(X509) *certs;
528
} NETSCAPE_CERT_SEQUENCE;
529

    
530
/*- Unused (and iv length is wrong)
531
typedef struct CBCParameter_st
532
        {
533
        unsigned char iv[8];
534
        } CBC_PARAM;
535
*/
536

    
537
/* Password based encryption structure */
538

    
539
typedef struct PBEPARAM_st {
540
    ASN1_OCTET_STRING *salt;
541
    ASN1_INTEGER *iter;
542
} PBEPARAM;
543

    
544
/* Password based encryption V2 structures */
545

    
546
typedef struct PBE2PARAM_st {
547
    X509_ALGOR *keyfunc;
548
    X509_ALGOR *encryption;
549
} PBE2PARAM;
550

    
551
typedef struct PBKDF2PARAM_st {
552
/* Usually OCTET STRING but could be anything */
553
    ASN1_TYPE *salt;
554
    ASN1_INTEGER *iter;
555
    ASN1_INTEGER *keylength;
556
    X509_ALGOR *prf;
557
} PBKDF2PARAM;
558

    
559
/* PKCS#8 private key info structure */
560

    
561
struct pkcs8_priv_key_info_st {
562
    /* Flag for various broken formats */
563
    int broken;
564
# define PKCS8_OK                0
565
# define PKCS8_NO_OCTET          1
566
# define PKCS8_EMBEDDED_PARAM    2
567
# define PKCS8_NS_DB             3
568
# define PKCS8_NEG_PRIVKEY       4
569
    ASN1_INTEGER *version;
570
    X509_ALGOR *pkeyalg;
571
    /* Should be OCTET STRING but some are broken */
572
    ASN1_TYPE *pkey;
573
    STACK_OF(X509_ATTRIBUTE) *attributes;
574
};
575

    
576
#ifdef  __cplusplus
577
}
578
#endif
579

    
580
# include <openssl/x509_vfy.h>
581
# include <openssl/pkcs7.h>
582

    
583
#ifdef  __cplusplus
584
extern "C" {
585
#endif
586

    
587
# define X509_EXT_PACK_UNKNOWN   1
588
# define X509_EXT_PACK_STRING    2
589

    
590
# define         X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version)
591
/* #define      X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */
592
# define         X509_get_notBefore(x) ((x)->cert_info->validity->notBefore)
593
# define         X509_get_notAfter(x) ((x)->cert_info->validity->notAfter)
594
# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/
595
# define         X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version)
596
# define         X509_REQ_get_subject_name(x) ((x)->req_info->subject)
597
# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
598
# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))
599
# define         X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm))
600

    
601
# define         X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version)
602
# define         X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate)
603
# define         X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate)
604
# define         X509_CRL_get_issuer(x) ((x)->crl->issuer)
605
# define         X509_CRL_get_REVOKED(x) ((x)->crl->revoked)
606

    
607
void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
608
X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
609
                                     int (*crl_free) (X509_CRL *crl),
610
                                     int (*crl_lookup) (X509_CRL *crl,
611
                                                        X509_REVOKED **ret,
612
                                                        ASN1_INTEGER *ser,
613
                                                        X509_NAME *issuer),
614
                                     int (*crl_verify) (X509_CRL *crl,
615
                                                        EVP_PKEY *pk));
616
void X509_CRL_METHOD_free(X509_CRL_METHOD *m);
617

    
618
void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
619
void *X509_CRL_get_meth_data(X509_CRL *crl);
620

    
621
/*
622
 * This one is only used so that a binary form can output, as in
623
 * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf)
624
 */
625
# define         X509_get_X509_PUBKEY(x) ((x)->cert_info->key)
626

    
627
const char *X509_verify_cert_error_string(long n);
628

    
629
# ifndef OPENSSL_NO_EVP
630
int X509_verify(X509 *a, EVP_PKEY *r);
631

    
632
int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
633
int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
634
int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);
635

    
636
NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
637
char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
638
EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
639
int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);
640

    
641
int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);
642

    
643
int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
644
int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig);
645

    
646
int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
647
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
648
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
649
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
650
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
651
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
652
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
653

    
654
int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
655
                       unsigned char *md, unsigned int *len);
656
int X509_digest(const X509 *data, const EVP_MD *type,
657
                unsigned char *md, unsigned int *len);
658
int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
659
                    unsigned char *md, unsigned int *len);
660
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
661
                    unsigned char *md, unsigned int *len);
662
int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
663
                     unsigned char *md, unsigned int *len);
664
# endif
665

    
666
# ifndef OPENSSL_NO_FP_API
667
X509 *d2i_X509_fp(FILE *fp, X509 **x509);
668
int i2d_X509_fp(FILE *fp, X509 *x509);
669
X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
670
int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl);
671
X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
672
int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req);
673
#  ifndef OPENSSL_NO_RSA
674
RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
675
int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa);
676
RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
677
int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa);
678
RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
679
int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa);
680
#  endif
681
#  ifndef OPENSSL_NO_DSA
682
DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
683
int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
684
DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
685
int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
686
#  endif
687
#  ifndef OPENSSL_NO_EC
688
EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
689
int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey);
690
EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
691
int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey);
692
#  endif
693
X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
694
int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8);
695
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
696
                                                PKCS8_PRIV_KEY_INFO **p8inf);
697
int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf);
698
int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);
699
int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);
700
EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
701
int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
702
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
703
# endif
704

    
705
# ifndef OPENSSL_NO_BIO
706
X509 *d2i_X509_bio(BIO *bp, X509 **x509);
707
int i2d_X509_bio(BIO *bp, X509 *x509);
708
X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
709
int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl);
710
X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
711
int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req);
712
#  ifndef OPENSSL_NO_RSA
713
RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
714
int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa);
715
RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
716
int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa);
717
RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
718
int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa);
719
#  endif
720
#  ifndef OPENSSL_NO_DSA
721
DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
722
int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
723
DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
724
int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
725
#  endif
726
#  ifndef OPENSSL_NO_EC
727
EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
728
int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey);
729
EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
730
int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey);
731
#  endif
732
X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
733
int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8);
734
PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
735
                                                 PKCS8_PRIV_KEY_INFO **p8inf);
736
int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf);
737
int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);
738
int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);
739
EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
740
int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
741
EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
742
# endif
743

    
744
X509 *X509_dup(X509 *x509);
745
X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
746
X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);
747
X509_CRL *X509_CRL_dup(X509_CRL *crl);
748
X509_REQ *X509_REQ_dup(X509_REQ *req);
749
X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
750
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
751
                    void *pval);
752
void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval,
753
                     X509_ALGOR *algor);
754
void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
755
int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
756

    
757
X509_NAME *X509_NAME_dup(X509_NAME *xn);
758
X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);
759

    
760
int X509_cmp_time(const ASN1_TIME *s, time_t *t);
761
int X509_cmp_current_time(const ASN1_TIME *s);
762
ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
763
ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
764
                            int offset_day, long offset_sec, time_t *t);
765
ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);
766

    
767
const char *X509_get_default_cert_area(void);
768
const char *X509_get_default_cert_dir(void);
769
const char *X509_get_default_cert_file(void);
770
const char *X509_get_default_cert_dir_env(void);
771
const char *X509_get_default_cert_file_env(void);
772
const char *X509_get_default_private_dir(void);
773

    
774
X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
775
X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);
776

    
777
DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
778
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
779
DECLARE_ASN1_FUNCTIONS(X509_VAL)
780

    
781
DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)
782

    
783
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
784
EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);
785
int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
786
int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);
787
EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
788
# ifndef OPENSSL_NO_RSA
789
int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp);
790
RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length);
791
# endif
792
# ifndef OPENSSL_NO_DSA
793
int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp);
794
DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length);
795
# endif
796
# ifndef OPENSSL_NO_EC
797
int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp);
798
EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length);
799
# endif
800

    
801
DECLARE_ASN1_FUNCTIONS(X509_SIG)
802
DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
803
DECLARE_ASN1_FUNCTIONS(X509_REQ)
804

    
805
DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
806
X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);
807

    
808
DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
809
DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)
810

    
811
DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)
812

    
813
DECLARE_ASN1_FUNCTIONS(X509_NAME)
814

    
815
int X509_NAME_set(X509_NAME **xn, X509_NAME *name);
816

    
817
DECLARE_ASN1_FUNCTIONS(X509_CINF)
818

    
819
DECLARE_ASN1_FUNCTIONS(X509)
820
DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)
821

    
822
DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR)
823

    
824
int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
825
                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
826
int X509_set_ex_data(X509 *r, int idx, void *arg);
827
void *X509_get_ex_data(X509 *r, int idx);
828
int i2d_X509_AUX(X509 *a, unsigned char **pp);
829
X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length);
830

    
831
int X509_alias_set1(X509 *x, unsigned char *name, int len);
832
int X509_keyid_set1(X509 *x, unsigned char *id, int len);
833
unsigned char *X509_alias_get0(X509 *x, int *len);
834
unsigned char *X509_keyid_get0(X509 *x, int *len);
835
int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *,
836
                                                                int);
837
int X509_TRUST_set(int *t, int trust);
838
int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);
839
int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj);
840
void X509_trust_clear(X509 *x);
841
void X509_reject_clear(X509 *x);
842

    
843
DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
844
DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
845
DECLARE_ASN1_FUNCTIONS(X509_CRL)
846

    
847
int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
848
int X509_CRL_get0_by_serial(X509_CRL *crl,
849
                            X509_REVOKED **ret, ASN1_INTEGER *serial);
850
int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);
851

    
852
X509_PKEY *X509_PKEY_new(void);
853
void X509_PKEY_free(X509_PKEY *a);
854
int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp);
855
X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp,
856
                         long length);
857

    
858
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
859
DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
860
DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)
861

    
862
# ifndef OPENSSL_NO_EVP
863
X509_INFO *X509_INFO_new(void);
864
void X509_INFO_free(X509_INFO *a);
865
char *X509_NAME_oneline(X509_NAME *a, char *buf, int size);
866

    
867
int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
868
                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
869

    
870
int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
871
                unsigned char *md, unsigned int *len);
872

    
873
int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1,
874
              X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
875
              char *data, EVP_PKEY *pkey, const EVP_MD *type);
876

    
877
int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
878
                     unsigned char *md, unsigned int *len);
879

    
880
int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1,
881
                     ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey);
882

    
883
int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1,
884
                   X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data,
885
                   EVP_PKEY *pkey, const EVP_MD *type);
886
int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
887
                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
888
                       void *asn, EVP_MD_CTX *ctx);
889
# endif
890

    
891
int X509_set_version(X509 *x, long version);
892
int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
893
ASN1_INTEGER *X509_get_serialNumber(X509 *x);
894
int X509_set_issuer_name(X509 *x, X509_NAME *name);
895
X509_NAME *X509_get_issuer_name(X509 *a);
896
int X509_set_subject_name(X509 *x, X509_NAME *name);
897
X509_NAME *X509_get_subject_name(X509 *a);
898
int X509_set_notBefore(X509 *x, const ASN1_TIME *tm);
899
int X509_set_notAfter(X509 *x, const ASN1_TIME *tm);
900
int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
901
EVP_PKEY *X509_get_pubkey(X509 *x);
902
ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);
903
int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ );
904

    
905
int X509_REQ_set_version(X509_REQ *x, long version);
906
int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name);
907
int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
908
EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
909
int X509_REQ_extension_nid(int nid);
910
int *X509_REQ_get_extension_nids(void);
911
void X509_REQ_set_extension_nids(int *nids);
912
STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
913
int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,
914
                                int nid);
915
int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts);
916
int X509_REQ_get_attr_count(const X509_REQ *req);
917
int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
918
int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,
919
                             int lastpos);
920
X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
921
X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
922
int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
923
int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
924
                              const ASN1_OBJECT *obj, int type,
925
                              const unsigned char *bytes, int len);
926
int X509_REQ_add1_attr_by_NID(X509_REQ *req,
927
                              int nid, int type,
928
                              const unsigned char *bytes, int len);
929
int X509_REQ_add1_attr_by_txt(X509_REQ *req,
930
                              const char *attrname, int type,
931
                              const unsigned char *bytes, int len);
932

    
933
int X509_CRL_set_version(X509_CRL *x, long version);
934
int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
935
int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
936
int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
937
int X509_CRL_sort(X509_CRL *crl);
938

    
939
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
940
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
941

    
942
int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);
943

    
944
int X509_check_private_key(X509 *x509, EVP_PKEY *pkey);
945

    
946
int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
947
unsigned long X509_issuer_and_serial_hash(X509 *a);
948

    
949
int X509_issuer_name_cmp(const X509 *a, const X509 *b);
950
unsigned long X509_issuer_name_hash(X509 *a);
951

    
952
int X509_subject_name_cmp(const X509 *a, const X509 *b);
953
unsigned long X509_subject_name_hash(X509 *x);
954

    
955
# ifndef OPENSSL_NO_MD5
956
unsigned long X509_issuer_name_hash_old(X509 *a);
957
unsigned long X509_subject_name_hash_old(X509 *x);
958
# endif
959

    
960
int X509_cmp(const X509 *a, const X509 *b);
961
int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
962
unsigned long X509_NAME_hash(X509_NAME *x);
963
unsigned long X509_NAME_hash_old(X509_NAME *x);
964

    
965
int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
966
int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
967
# ifndef OPENSSL_NO_FP_API
968
int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
969
                     unsigned long cflag);
970
int X509_print_fp(FILE *bp, X509 *x);
971
int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
972
int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
973
int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent,
974
                          unsigned long flags);
975
# endif
976

    
977
# ifndef OPENSSL_NO_BIO
978
int X509_NAME_print(BIO *bp, X509_NAME *name, int obase);
979
int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent,
980
                       unsigned long flags);
981
int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
982
                  unsigned long cflag);
983
int X509_print(BIO *bp, X509 *x);
984
int X509_ocspid_print(BIO *bp, X509 *x);
985
int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent);
986
int X509_CRL_print(BIO *bp, X509_CRL *x);
987
int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
988
                      unsigned long cflag);
989
int X509_REQ_print(BIO *bp, X509_REQ *req);
990
# endif
991

    
992
int X509_NAME_entry_count(X509_NAME *name);
993
int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len);
994
int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
995
                              char *buf, int len);
996

    
997
/*
998
 * NOTE: you should be passsing -1, not 0 as lastpos.  The functions that use
999
 * lastpos, search after that position on.
1000
 */
1001
int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos);
1002
int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,
1003
                               int lastpos);
1004
X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc);
1005
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
1006
int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne,
1007
                        int loc, int set);
1008
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
1009
                               unsigned char *bytes, int len, int loc,
1010
                               int set);
1011
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
1012
                               unsigned char *bytes, int len, int loc,
1013
                               int set);
1014
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
1015
                                               const char *field, int type,
1016
                                               const unsigned char *bytes,
1017
                                               int len);
1018
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
1019
                                               int type, unsigned char *bytes,
1020
                                               int len);
1021
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
1022
                               const unsigned char *bytes, int len, int loc,
1023
                               int set);
1024
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
1025
                                               ASN1_OBJECT *obj, int type,
1026
                                               const unsigned char *bytes,
1027
                                               int len);
1028
int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj);
1029
int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
1030
                             const unsigned char *bytes, int len);
1031
ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);
1032
ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);
1033

    
1034
int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
1035
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
1036
                          int nid, int lastpos);
1037
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
1038
                          ASN1_OBJECT *obj, int lastpos);
1039
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
1040
                               int crit, int lastpos);
1041
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
1042
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
1043
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
1044
                                         X509_EXTENSION *ex, int loc);
1045

    
1046
int X509_get_ext_count(X509 *x);
1047
int X509_get_ext_by_NID(X509 *x, int nid, int lastpos);
1048
int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos);
1049
int X509_get_ext_by_critical(X509 *x, int crit, int lastpos);
1050
X509_EXTENSION *X509_get_ext(X509 *x, int loc);
1051
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
1052
int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
1053
void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);
1054
int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
1055
                      unsigned long flags);
1056

    
1057
int X509_CRL_get_ext_count(X509_CRL *x);
1058
int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos);
1059
int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos);
1060
int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos);
1061
X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc);
1062
X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
1063
int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
1064
void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);
1065
int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
1066
                          unsigned long flags);
1067

    
1068
int X509_REVOKED_get_ext_count(X509_REVOKED *x);
1069
int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos);
1070
int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj,
1071
                                int lastpos);
1072
int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos);
1073
X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc);
1074
X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
1075
int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
1076
void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);
1077
int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
1078
                              unsigned long flags);
1079

    
1080
X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
1081
                                             int nid, int crit,
1082
                                             ASN1_OCTET_STRING *data);
1083
X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
1084
                                             ASN1_OBJECT *obj, int crit,
1085
                                             ASN1_OCTET_STRING *data);
1086
int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj);
1087
int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
1088
int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
1089
ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
1090
ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
1091
int X509_EXTENSION_get_critical(X509_EXTENSION *ex);
1092

    
1093
int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
1094
int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
1095
                           int lastpos);
1096
int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
1097
                           ASN1_OBJECT *obj, int lastpos);
1098
X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
1099
X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
1100
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
1101
                                           X509_ATTRIBUTE *attr);
1102
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
1103
                                                  **x, const ASN1_OBJECT *obj,
1104
                                                  int type,
1105
                                                  const unsigned char *bytes,
1106
                                                  int len);
1107
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
1108
                                                  **x, int nid, int type,
1109
                                                  const unsigned char *bytes,
1110
                                                  int len);
1111
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
1112
                                                  **x, const char *attrname,
1113
                                                  int type,
1114
                                                  const unsigned char *bytes,
1115
                                                  int len);
1116
void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj,
1117
                              int lastpos, int type);
1118
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
1119
                                             int atrtype, const void *data,
1120
                                             int len);
1121
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
1122
                                             const ASN1_OBJECT *obj,
1123
                                             int atrtype, const void *data,
1124
                                             int len);
1125
X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
1126
                                             const char *atrname, int type,
1127
                                             const unsigned char *bytes,
1128
                                             int len);
1129
int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
1130
int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
1131
                             const void *data, int len);
1132
void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
1133
                               void *data);
1134
int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);
1135
ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
1136
ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
1137

    
1138
int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
1139
int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
1140
int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj,
1141
                             int lastpos);
1142
X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
1143
X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
1144
int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
1145
int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
1146
                              const ASN1_OBJECT *obj, int type,
1147
                              const unsigned char *bytes, int len);
1148
int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
1149
                              int nid, int type,
1150
                              const unsigned char *bytes, int len);
1151
int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
1152
                              const char *attrname, int type,
1153
                              const unsigned char *bytes, int len);
1154

    
1155
int X509_verify_cert(X509_STORE_CTX *ctx);
1156

    
1157
/* lookup a cert from a X509 STACK */
1158
X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name,
1159
                                     ASN1_INTEGER *serial);
1160
X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name);
1161

    
1162
DECLARE_ASN1_FUNCTIONS(PBEPARAM)
1163
DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
1164
DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
1165

    
1166
int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
1167
                         const unsigned char *salt, int saltlen);
1168

    
1169
X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
1170
                          const unsigned char *salt, int saltlen);
1171
X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
1172
                           unsigned char *salt, int saltlen);
1173
X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
1174
                              unsigned char *salt, int saltlen,
1175
                              unsigned char *aiv, int prf_nid);
1176

    
1177
X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
1178
                             int prf_nid, int keylen);
1179

    
1180
/* PKCS#8 utilities */
1181

    
1182
DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)
1183

    
1184
EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8);
1185
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);
1186
PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken);
1187
PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken);
1188

    
1189
int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
1190
                    int version, int ptype, void *pval,
1191
                    unsigned char *penc, int penclen);
1192
int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg,
1193
                    const unsigned char **pk, int *ppklen,
1194
                    X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8);
1195

    
1196
int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
1197
                           int ptype, void *pval,
1198
                           unsigned char *penc, int penclen);
1199
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
1200
                           const unsigned char **pk, int *ppklen,
1201
                           X509_ALGOR **pa, X509_PUBKEY *pub);
1202

    
1203
int X509_check_trust(X509 *x, int id, int flags);
1204
int X509_TRUST_get_count(void);
1205
X509_TRUST *X509_TRUST_get0(int idx);
1206
int X509_TRUST_get_by_id(int id);
1207
int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int),
1208
                   char *name, int arg1, void *arg2);
1209
void X509_TRUST_cleanup(void);
1210
int X509_TRUST_get_flags(X509_TRUST *xp);
1211
char *X509_TRUST_get0_name(X509_TRUST *xp);
1212
int X509_TRUST_get_trust(X509_TRUST *xp);
1213

    
1214
/* BEGIN ERROR CODES */
1215
/*
1216
 * The following lines are auto generated by the script mkerr.pl. Any changes
1217
 * made after this point may be overwritten when the script is next run.
1218
 */
1219
void ERR_load_X509_strings(void);
1220

    
1221
/* Error codes for the X509 functions. */
1222

    
1223
/* Function codes. */
1224
# define X509_F_ADD_CERT_DIR                              100
1225
# define X509_F_BY_FILE_CTRL                              101
1226
# define X509_F_CHECK_POLICY                              145
1227
# define X509_F_DIR_CTRL                                  102
1228
# define X509_F_GET_CERT_BY_SUBJECT                       103
1229
# define X509_F_NETSCAPE_SPKI_B64_DECODE                  129
1230
# define X509_F_NETSCAPE_SPKI_B64_ENCODE                  130
1231
# define X509_F_X509AT_ADD1_ATTR                          135
1232
# define X509_F_X509V3_ADD_EXT                            104
1233
# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID              136
1234
# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ              137
1235
# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT              140
1236
# define X509_F_X509_ATTRIBUTE_GET0_DATA                  139
1237
# define X509_F_X509_ATTRIBUTE_SET1_DATA                  138
1238
# define X509_F_X509_CHECK_PRIVATE_KEY                    128
1239
# define X509_F_X509_CRL_PRINT_FP                         147
1240
# define X509_F_X509_EXTENSION_CREATE_BY_NID              108
1241
# define X509_F_X509_EXTENSION_CREATE_BY_OBJ              109
1242
# define X509_F_X509_GET_PUBKEY_PARAMETERS                110
1243
# define X509_F_X509_LOAD_CERT_CRL_FILE                   132
1244
# define X509_F_X509_LOAD_CERT_FILE                       111
1245
# define X509_F_X509_LOAD_CRL_FILE                        112
1246
# define X509_F_X509_NAME_ADD_ENTRY                       113
1247
# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID             114
1248
# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT             131
1249
# define X509_F_X509_NAME_ENTRY_SET_OBJECT                115
1250
# define X509_F_X509_NAME_ONELINE                         116
1251
# define X509_F_X509_NAME_PRINT                           117
1252
# define X509_F_X509_PRINT_EX_FP                          118
1253
# define X509_F_X509_PUBKEY_GET                           119
1254
# define X509_F_X509_PUBKEY_SET                           120
1255
# define X509_F_X509_REQ_CHECK_PRIVATE_KEY                144
1256
# define X509_F_X509_REQ_PRINT_EX                         121
1257
# define X509_F_X509_REQ_PRINT_FP                         122
1258
# define X509_F_X509_REQ_TO_X509                          123
1259
# define X509_F_X509_STORE_ADD_CERT                       124
1260
# define X509_F_X509_STORE_ADD_CRL                        125
1261
# define X509_F_X509_STORE_CTX_GET1_ISSUER                146
1262
# define X509_F_X509_STORE_CTX_INIT                       143
1263
# define X509_F_X509_STORE_CTX_NEW                        142
1264
# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT            134
1265
# define X509_F_X509_TO_X509_REQ                          126
1266
# define X509_F_X509_TRUST_ADD                            133
1267
# define X509_F_X509_TRUST_SET                            141
1268
# define X509_F_X509_VERIFY_CERT                          127
1269

    
1270
/* Reason codes. */
1271
# define X509_R_BAD_X509_FILETYPE                         100
1272
# define X509_R_BASE64_DECODE_ERROR                       118
1273
# define X509_R_CANT_CHECK_DH_KEY                         114
1274
# define X509_R_CERT_ALREADY_IN_HASH_TABLE                101
1275
# define X509_R_ERR_ASN1_LIB                              102
1276
# define X509_R_INVALID_DIRECTORY                         113
1277
# define X509_R_INVALID_FIELD_NAME                        119
1278
# define X509_R_INVALID_TRUST                             123
1279
# define X509_R_KEY_TYPE_MISMATCH                         115
1280
# define X509_R_KEY_VALUES_MISMATCH                       116
1281
# define X509_R_LOADING_CERT_DIR                          103
1282
# define X509_R_LOADING_DEFAULTS                          104
1283
# define X509_R_METHOD_NOT_SUPPORTED                      124
1284
# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY              105
1285
# define X509_R_PUBLIC_KEY_DECODE_ERROR                   125
1286
# define X509_R_PUBLIC_KEY_ENCODE_ERROR                   126
1287
# define X509_R_SHOULD_RETRY                              106
1288
# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN        107
1289
# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY            108
1290
# define X509_R_UNKNOWN_KEY_TYPE                          117
1291
# define X509_R_UNKNOWN_NID                               109
1292
# define X509_R_UNKNOWN_PURPOSE_ID                        121
1293
# define X509_R_UNKNOWN_TRUST_ID                          120
1294
# define X509_R_UNSUPPORTED_ALGORITHM                     111
1295
# define X509_R_WRONG_LOOKUP_TYPE                         112
1296
# define X509_R_WRONG_TYPE                                122
1297

    
1298
#ifdef  __cplusplus
1299
}
1300
#endif
1301
#endif