~ubuntu-branches/ubuntu/utopic/openssl/utopic-security

« back to all changes in this revision

Viewing changes to .pc/CVE-2014-8275.patch/crypto/x509/x509.h

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2015-01-09 09:47:17 UTC
  • Revision ID: package-import@ubuntu.com-20150109094717-8etwd95qlawwgkc7
Tags: 1.0.1f-1ubuntu9.1
* SECURITY UPDATE: denial of service via unexpected handshake when
  no-ssl3 build option is used (not the default)
  - debian/patches/CVE-2014-3569.patch: keep the old method for now in
    ssl/s23_srvr.c.
  - CVE-2014-3569
* SECURITY UPDATE: bignum squaring may produce incorrect results
  - debian/patches/CVE-2014-3570.patch: fix bignum logic in
    crypto/bn/asm/mips.pl, crypto/bn/asm/x86_64-gcc.c,
    crypto/bn/bn_asm.c, removed crypto/bn/asm/mips3.s, added test to
    crypto/bn/bntest.c.
  - CVE-2014-3570
* SECURITY UPDATE: DTLS segmentation fault in dtls1_get_record
  - debian/patches/CVE-2014-3571-1.patch: fix crash in ssl/d1_pkt.c,
    ssl/s3_pkt.c.
  - debian/patches/CVE-2014-3571-2.patch: make code more obvious in
    ssl/d1_pkt.c.
  - CVE-2014-3571
* SECURITY UPDATE: ECDHE silently downgrades to ECDH [Client]
  - debian/patches/CVE-2014-3572.patch: don't skip server key exchange in
    ssl/s3_clnt.c.
  - CVE-2014-3572
* SECURITY UPDATE: certificate fingerprints can be modified
  - debian/patches/CVE-2014-8275.patch: fix various fingerprint issues in
    crypto/asn1/a_bitstr.c, crypto/asn1/a_type.c, crypto/asn1/a_verify.c,
    crypto/asn1/asn1.h, crypto/asn1/asn1_err.c, crypto/asn1/x_algor.c,
    crypto/dsa/dsa_asn1.c, crypto/ecdsa/ecs_vrf.c, crypto/x509/x509.h,
    crypto/x509/x_all.c.
  - CVE-2014-8275
* SECURITY UPDATE: RSA silently downgrades to EXPORT_RSA [Client]
  - debian/patches/CVE-2015-0204.patch: only allow ephemeral RSA keys in
    export ciphersuites in ssl/d1_srvr.c, ssl/s3_clnt.c, ssl/s3_srvr.c,
    ssl/ssl.h, adjust documentation in doc/ssl/SSL_CTX_set_options.pod,
    doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod.
  - CVE-2015-0204
* SECURITY UPDATE: DH client certificates accepted without verification
  - debian/patches/CVE-2015-0205.patch: prevent use of DH client
    certificates without sending certificate verify message in
    ssl/s3_srvr.c.
  - CVE-2015-0205
* SECURITY UPDATE: DTLS memory leak in dtls1_buffer_record
  - debian/patches/CVE-2015-0206.patch: properly handle failures in
    ssl/d1_pkt.c.
  - CVE-2015-0206

Show diffs side-by-side

added added

removed removed

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