Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (33.7 KB)

1
/* crypto/ts/ts.h */
2
/*
3
 * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project
4
 * 2002, 2003, 2004.
5
 */
6
/* ====================================================================
7
 * Copyright (c) 2006 The OpenSSL Project.  All rights reserved.
8
 *
9
 * Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions
11
 * are met:
12
 *
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 *
16
 * 2. Redistributions in binary form must reproduce the above copyright
17
 *    notice, this list of conditions and the following disclaimer in
18
 *    the documentation and/or other materials provided with the
19
 *    distribution.
20
 *
21
 * 3. All advertising materials mentioning features or use of this
22
 *    software must display the following acknowledgment:
23
 *    "This product includes software developed by the OpenSSL Project
24
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
 *
26
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
 *    endorse or promote products derived from this software without
28
 *    prior written permission. For written permission, please contact
29
 *    licensing@OpenSSL.org.
30
 *
31
 * 5. Products derived from this software may not be called "OpenSSL"
32
 *    nor may "OpenSSL" appear in their names without prior written
33
 *    permission of the OpenSSL Project.
34
 *
35
 * 6. Redistributions of any form whatsoever must retain the following
36
 *    acknowledgment:
37
 *    "This product includes software developed by the OpenSSL Project
38
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
 *
40
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
 * OF THE POSSIBILITY OF SUCH DAMAGE.
52
 * ====================================================================
53
 *
54
 * This product includes cryptographic software written by Eric Young
55
 * (eay@cryptsoft.com).  This product includes software written by Tim
56
 * Hudson (tjh@cryptsoft.com).
57
 *
58
 */
59

    
60
#ifndef HEADER_TS_H
61
# define HEADER_TS_H
62

    
63
# include <openssl/opensslconf.h>
64
# include <openssl/symhacks.h>
65
# ifndef OPENSSL_NO_BUFFER
66
#  include <openssl/buffer.h>
67
# endif
68
# ifndef OPENSSL_NO_EVP
69
#  include <openssl/evp.h>
70
# endif
71
# ifndef OPENSSL_NO_BIO
72
#  include <openssl/bio.h>
73
# endif
74
# include <openssl/stack.h>
75
# include <openssl/asn1.h>
76
# include <openssl/safestack.h>
77

    
78
# ifndef OPENSSL_NO_RSA
79
#  include <openssl/rsa.h>
80
# endif
81

    
82
# ifndef OPENSSL_NO_DSA
83
#  include <openssl/dsa.h>
84
# endif
85

    
86
# ifndef OPENSSL_NO_DH
87
#  include <openssl/dh.h>
88
# endif
89

    
90
#ifdef  __cplusplus
91
extern "C" {
92
#endif
93

    
94
# ifdef WIN32
95
/* Under Win32 this is defined in wincrypt.h */
96
#  undef X509_NAME
97
# endif
98

    
99
# include <openssl/x509.h>
100
# include <openssl/x509v3.h>
101

    
102
/*-
103
MessageImprint ::= SEQUENCE  {
104
     hashAlgorithm                AlgorithmIdentifier,
105
     hashedMessage                OCTET STRING  }
106
*/
107

    
108
typedef struct TS_msg_imprint_st {
109
    X509_ALGOR *hash_algo;
110
    ASN1_OCTET_STRING *hashed_msg;
111
} TS_MSG_IMPRINT;
112

    
113
/*-
114
TimeStampReq ::= SEQUENCE  {
115
   version                  INTEGER  { v1(1) },
116
   messageImprint           MessageImprint,
117
     --a hash algorithm OID and the hash value of the data to be
118
     --time-stamped
119
   reqPolicy                TSAPolicyId                OPTIONAL,
120
   nonce                    INTEGER                    OPTIONAL,
121
   certReq                  BOOLEAN                    DEFAULT FALSE,
122
   extensions               [0] IMPLICIT Extensions    OPTIONAL  }
123
*/
124

    
125
typedef struct TS_req_st {
126
    ASN1_INTEGER *version;
127
    TS_MSG_IMPRINT *msg_imprint;
128
    ASN1_OBJECT *policy_id;     /* OPTIONAL */
129
    ASN1_INTEGER *nonce;        /* OPTIONAL */
130
    ASN1_BOOLEAN cert_req;      /* DEFAULT FALSE */
131
    STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */
132
} TS_REQ;
133

    
134
/*-
135
Accuracy ::= SEQUENCE {
136
                seconds        INTEGER           OPTIONAL,
137
                millis     [0] INTEGER  (1..999) OPTIONAL,
138
                micros     [1] INTEGER  (1..999) OPTIONAL  }
139
*/
140

    
141
typedef struct TS_accuracy_st {
142
    ASN1_INTEGER *seconds;
143
    ASN1_INTEGER *millis;
144
    ASN1_INTEGER *micros;
145
} TS_ACCURACY;
146

    
147
/*-
148
TSTInfo ::= SEQUENCE  {
149
    version                      INTEGER  { v1(1) },
150
    policy                       TSAPolicyId,
151
    messageImprint               MessageImprint,
152
      -- MUST have the same value as the similar field in
153
      -- TimeStampReq
154
    serialNumber                 INTEGER,
155
     -- Time-Stamping users MUST be ready to accommodate integers
156
     -- up to 160 bits.
157
    genTime                      GeneralizedTime,
158
    accuracy                     Accuracy                 OPTIONAL,
159
    ordering                     BOOLEAN             DEFAULT FALSE,
160
    nonce                        INTEGER                  OPTIONAL,
161
      -- MUST be present if the similar field was present
162
      -- in TimeStampReq.  In that case it MUST have the same value.
163
    tsa                          [0] GeneralName          OPTIONAL,
164
    extensions                   [1] IMPLICIT Extensions  OPTIONAL   }
165
*/
166

    
167
typedef struct TS_tst_info_st {
168
    ASN1_INTEGER *version;
169
    ASN1_OBJECT *policy_id;
170
    TS_MSG_IMPRINT *msg_imprint;
171
    ASN1_INTEGER *serial;
172
    ASN1_GENERALIZEDTIME *time;
173
    TS_ACCURACY *accuracy;
174
    ASN1_BOOLEAN ordering;
175
    ASN1_INTEGER *nonce;
176
    GENERAL_NAME *tsa;
177
    STACK_OF(X509_EXTENSION) *extensions;
178
} TS_TST_INFO;
179

    
180
/*-
181
PKIStatusInfo ::= SEQUENCE {
182
    status        PKIStatus,
183
    statusString  PKIFreeText     OPTIONAL,
184
    failInfo      PKIFailureInfo  OPTIONAL  }
185

186
From RFC 1510 - section 3.1.1:
187
PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
188
        -- text encoded as UTF-8 String (note:  each UTF8String SHOULD
189
        -- include an RFC 1766 language tag to indicate the language
190
        -- of the contained text)
191
*/
192

    
193
/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */
194

    
195
# define TS_STATUS_GRANTED                       0
196
# define TS_STATUS_GRANTED_WITH_MODS             1
197
# define TS_STATUS_REJECTION                     2
198
# define TS_STATUS_WAITING                       3
199
# define TS_STATUS_REVOCATION_WARNING            4
200
# define TS_STATUS_REVOCATION_NOTIFICATION       5
201

    
202
/*
203
 * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c
204
 */
205

    
206
# define TS_INFO_BAD_ALG                 0
207
# define TS_INFO_BAD_REQUEST             2
208
# define TS_INFO_BAD_DATA_FORMAT         5
209
# define TS_INFO_TIME_NOT_AVAILABLE      14
210
# define TS_INFO_UNACCEPTED_POLICY       15
211
# define TS_INFO_UNACCEPTED_EXTENSION    16
212
# define TS_INFO_ADD_INFO_NOT_AVAILABLE  17
213
# define TS_INFO_SYSTEM_FAILURE          25
214

    
215
typedef struct TS_status_info_st {
216
    ASN1_INTEGER *status;
217
    STACK_OF(ASN1_UTF8STRING) *text;
218
    ASN1_BIT_STRING *failure_info;
219
} TS_STATUS_INFO;
220

    
221
DECLARE_STACK_OF(ASN1_UTF8STRING)
222
DECLARE_ASN1_SET_OF(ASN1_UTF8STRING)
223

    
224
/*-
225
TimeStampResp ::= SEQUENCE  {
226
     status                  PKIStatusInfo,
227
     timeStampToken          TimeStampToken     OPTIONAL }
228
*/
229

    
230
typedef struct TS_resp_st {
231
    TS_STATUS_INFO *status_info;
232
    PKCS7 *token;
233
    TS_TST_INFO *tst_info;
234
} TS_RESP;
235

    
236
/* The structure below would belong to the ESS component. */
237

    
238
/*-
239
IssuerSerial ::= SEQUENCE {
240
        issuer                   GeneralNames,
241
        serialNumber             CertificateSerialNumber
242
        }
243
*/
244

    
245
typedef struct ESS_issuer_serial {
246
    STACK_OF(GENERAL_NAME) *issuer;
247
    ASN1_INTEGER *serial;
248
} ESS_ISSUER_SERIAL;
249

    
250
/*-
251
ESSCertID ::=  SEQUENCE {
252
        certHash                 Hash,
253
        issuerSerial             IssuerSerial OPTIONAL
254
}
255
*/
256

    
257
typedef struct ESS_cert_id {
258
    ASN1_OCTET_STRING *hash;    /* Always SHA-1 digest. */
259
    ESS_ISSUER_SERIAL *issuer_serial;
260
} ESS_CERT_ID;
261

    
262
DECLARE_STACK_OF(ESS_CERT_ID)
263
DECLARE_ASN1_SET_OF(ESS_CERT_ID)
264

    
265
/*-
266
SigningCertificate ::=  SEQUENCE {
267
       certs        SEQUENCE OF ESSCertID,
268
       policies     SEQUENCE OF PolicyInformation OPTIONAL
269
}
270
*/
271

    
272
typedef struct ESS_signing_cert {
273
    STACK_OF(ESS_CERT_ID) *cert_ids;
274
    STACK_OF(POLICYINFO) *policy_info;
275
} ESS_SIGNING_CERT;
276

    
277
TS_REQ *TS_REQ_new(void);
278
void TS_REQ_free(TS_REQ *a);
279
int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp);
280
TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length);
281

    
282
TS_REQ *TS_REQ_dup(TS_REQ *a);
283

    
284
TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a);
285
int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a);
286
TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a);
287
int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a);
288

    
289
TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void);
290
void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a);
291
int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp);
292
TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a,
293
                                   const unsigned char **pp, long length);
294

    
295
TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a);
296

    
297
TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a);
298
int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a);
299
TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a);
300
int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a);
301

    
302
TS_RESP *TS_RESP_new(void);
303
void TS_RESP_free(TS_RESP *a);
304
int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp);
305
TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length);
306
TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token);
307
TS_RESP *TS_RESP_dup(TS_RESP *a);
308

    
309
TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a);
310
int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a);
311
TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a);
312
int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a);
313

    
314
TS_STATUS_INFO *TS_STATUS_INFO_new(void);
315
void TS_STATUS_INFO_free(TS_STATUS_INFO *a);
316
int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp);
317
TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a,
318
                                   const unsigned char **pp, long length);
319
TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a);
320

    
321
TS_TST_INFO *TS_TST_INFO_new(void);
322
void TS_TST_INFO_free(TS_TST_INFO *a);
323
int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp);
324
TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp,
325
                             long length);
326
TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a);
327

    
328
TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a);
329
int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a);
330
TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a);
331
int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a);
332

    
333
TS_ACCURACY *TS_ACCURACY_new(void);
334
void TS_ACCURACY_free(TS_ACCURACY *a);
335
int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp);
336
TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp,
337
                             long length);
338
TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a);
339

    
340
ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void);
341
void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a);
342
int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp);
343
ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a,
344
                                         const unsigned char **pp,
345
                                         long length);
346
ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a);
347

    
348
ESS_CERT_ID *ESS_CERT_ID_new(void);
349
void ESS_CERT_ID_free(ESS_CERT_ID *a);
350
int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp);
351
ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp,
352
                             long length);
353
ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a);
354

    
355
ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void);
356
void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a);
357
int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp);
358
ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a,
359
                                       const unsigned char **pp, long length);
360
ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a);
361

    
362
void ERR_load_TS_strings(void);
363

    
364
int TS_REQ_set_version(TS_REQ *a, long version);
365
long TS_REQ_get_version(const TS_REQ *a);
366

    
367
int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint);
368
TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a);
369

    
370
int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg);
371
X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a);
372

    
373
int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len);
374
ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a);
375

    
376
int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy);
377
ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a);
378

    
379
int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce);
380
const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a);
381

    
382
int TS_REQ_set_cert_req(TS_REQ *a, int cert_req);
383
int TS_REQ_get_cert_req(const TS_REQ *a);
384

    
385
STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a);
386
void TS_REQ_ext_free(TS_REQ *a);
387
int TS_REQ_get_ext_count(TS_REQ *a);
388
int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos);
389
int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos);
390
int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos);
391
X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc);
392
X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc);
393
int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc);
394
void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx);
395

    
396
/* Function declarations for TS_REQ defined in ts/ts_req_print.c */
397

    
398
int TS_REQ_print_bio(BIO *bio, TS_REQ *a);
399

    
400
/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */
401

    
402
int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info);
403
TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a);
404

    
405
/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */
406
void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info);
407
PKCS7 *TS_RESP_get_token(TS_RESP *a);
408
TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a);
409

    
410
int TS_TST_INFO_set_version(TS_TST_INFO *a, long version);
411
long TS_TST_INFO_get_version(const TS_TST_INFO *a);
412

    
413
int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id);
414
ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a);
415

    
416
int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint);
417
TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a);
418

    
419
int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial);
420
const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a);
421

    
422
int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime);
423
const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a);
424

    
425
int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy);
426
TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a);
427

    
428
int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds);
429
const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a);
430

    
431
int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis);
432
const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a);
433

    
434
int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros);
435
const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a);
436

    
437
int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering);
438
int TS_TST_INFO_get_ordering(const TS_TST_INFO *a);
439

    
440
int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce);
441
const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a);
442

    
443
int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa);
444
GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a);
445

    
446
STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a);
447
void TS_TST_INFO_ext_free(TS_TST_INFO *a);
448
int TS_TST_INFO_get_ext_count(TS_TST_INFO *a);
449
int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos);
450
int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos);
451
int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos);
452
X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc);
453
X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc);
454
int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc);
455
void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx);
456

    
457
/*
458
 * Declarations related to response generation, defined in ts/ts_resp_sign.c.
459
 */
460

    
461
/* Optional flags for response generation. */
462

    
463
/* Don't include the TSA name in response. */
464
# define TS_TSA_NAME             0x01
465

    
466
/* Set ordering to true in response. */
467
# define TS_ORDERING             0x02
468

    
469
/*
470
 * Include the signer certificate and the other specified certificates in
471
 * the ESS signing certificate attribute beside the PKCS7 signed data.
472
 * Only the signer certificates is included by default.
473
 */
474
# define TS_ESS_CERT_ID_CHAIN    0x04
475

    
476
/* Forward declaration. */
477
struct TS_resp_ctx;
478

    
479
/* This must return a unique number less than 160 bits long. */
480
typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *);
481

    
482
/*
483
 * This must return the seconds and microseconds since Jan 1, 1970 in the sec
484
 * and usec variables allocated by the caller. Return non-zero for success
485
 * and zero for failure.
486
 */
487
typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec,
488
                           long *usec);
489

    
490
/*
491
 * This must process the given extension. It can modify the TS_TST_INFO
492
 * object of the context. Return values: !0 (processed), 0 (error, it must
493
 * set the status info/failure info of the response).
494
 */
495
typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *,
496
                                void *);
497

    
498
typedef struct TS_resp_ctx {
499
    X509 *signer_cert;
500
    EVP_PKEY *signer_key;
501
    STACK_OF(X509) *certs;      /* Certs to include in signed data. */
502
    STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */
503
    ASN1_OBJECT *default_policy; /* It may appear in policies, too. */
504
    STACK_OF(EVP_MD) *mds;      /* Acceptable message digests. */
505
    ASN1_INTEGER *seconds;      /* accuracy, 0 means not specified. */
506
    ASN1_INTEGER *millis;       /* accuracy, 0 means not specified. */
507
    ASN1_INTEGER *micros;       /* accuracy, 0 means not specified. */
508
    unsigned clock_precision_digits; /* fraction of seconds in time stamp
509
                                      * token. */
510
    unsigned flags;             /* Optional info, see values above. */
511
    /* Callback functions. */
512
    TS_serial_cb serial_cb;
513
    void *serial_cb_data;       /* User data for serial_cb. */
514
    TS_time_cb time_cb;
515
    void *time_cb_data;         /* User data for time_cb. */
516
    TS_extension_cb extension_cb;
517
    void *extension_cb_data;    /* User data for extension_cb. */
518
    /* These members are used only while creating the response. */
519
    TS_REQ *request;
520
    TS_RESP *response;
521
    TS_TST_INFO *tst_info;
522
} TS_RESP_CTX;
523

    
524
DECLARE_STACK_OF(EVP_MD)
525
DECLARE_ASN1_SET_OF(EVP_MD)
526

    
527
/* Creates a response context that can be used for generating responses. */
528
TS_RESP_CTX *TS_RESP_CTX_new(void);
529
void TS_RESP_CTX_free(TS_RESP_CTX *ctx);
530

    
531
/* This parameter must be set. */
532
int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer);
533

    
534
/* This parameter must be set. */
535
int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key);
536

    
537
/* This parameter must be set. */
538
int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy);
539

    
540
/* No additional certs are included in the response by default. */
541
int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs);
542

    
543
/*
544
 * Adds a new acceptable policy, only the default policy is accepted by
545
 * default.
546
 */
547
int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy);
548

    
549
/*
550
 * Adds a new acceptable message digest. Note that no message digests are
551
 * accepted by default. The md argument is shared with the caller.
552
 */
553
int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md);
554

    
555
/* Accuracy is not included by default. */
556
int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx,
557
                             int secs, int millis, int micros);
558

    
559
/*
560
 * Clock precision digits, i.e. the number of decimal digits: '0' means sec,
561
 * '3' msec, '6' usec, and so on. Default is 0.
562
 */
563
int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx,
564
                                           unsigned clock_precision_digits);
565
/* At most we accept usec precision. */
566
# define TS_MAX_CLOCK_PRECISION_DIGITS   6
567

    
568
/* No flags are set by default. */
569
void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags);
570

    
571
/* Default callback always returns a constant. */
572
void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data);
573

    
574
/* Default callback uses the gettimeofday() and gmtime() system calls. */
575
void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data);
576

    
577
/*
578
 * Default callback rejects all extensions. The extension callback is called
579
 * when the TS_TST_INFO object is already set up and not signed yet.
580
 */
581
/* FIXME: extension handling is not tested yet. */
582
void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx,
583
                                  TS_extension_cb cb, void *data);
584

    
585
/* The following methods can be used in the callbacks. */
586
int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx,
587
                                int status, const char *text);
588

    
589
/* Sets the status info only if it is still TS_STATUS_GRANTED. */
590
int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx,
591
                                     int status, const char *text);
592

    
593
int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure);
594

    
595
/* The get methods below can be used in the extension callback. */
596
TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx);
597

    
598
TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx);
599

    
600
/*
601
 * Creates the signed TS_TST_INFO and puts it in TS_RESP.
602
 * In case of errors it sets the status info properly.
603
 * Returns NULL only in case of memory allocation/fatal error.
604
 */
605
TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio);
606

    
607
/*
608
 * Declarations related to response verification,
609
 * they are defined in ts/ts_resp_verify.c.
610
 */
611

    
612
int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs,
613
                             X509_STORE *store, X509 **signer_out);
614

    
615
/* Context structure for the generic verify method. */
616

    
617
/* Verify the signer's certificate and the signature of the response. */
618
# define TS_VFY_SIGNATURE        (1u << 0)
619
/* Verify the version number of the response. */
620
# define TS_VFY_VERSION          (1u << 1)
621
/* Verify if the policy supplied by the user matches the policy of the TSA. */
622
# define TS_VFY_POLICY           (1u << 2)
623
/*
624
 * Verify the message imprint provided by the user. This flag should not be
625
 * specified with TS_VFY_DATA.
626
 */
627
# define TS_VFY_IMPRINT          (1u << 3)
628
/*
629
 * Verify the message imprint computed by the verify method from the user
630
 * provided data and the MD algorithm of the response. This flag should not
631
 * be specified with TS_VFY_IMPRINT.
632
 */
633
# define TS_VFY_DATA             (1u << 4)
634
/* Verify the nonce value. */
635
# define TS_VFY_NONCE            (1u << 5)
636
/* Verify if the TSA name field matches the signer certificate. */
637
# define TS_VFY_SIGNER           (1u << 6)
638
/* Verify if the TSA name field equals to the user provided name. */
639
# define TS_VFY_TSA_NAME         (1u << 7)
640

    
641
/* You can use the following convenience constants. */
642
# define TS_VFY_ALL_IMPRINT      (TS_VFY_SIGNATURE       \
643
                                 | TS_VFY_VERSION       \
644
                                 | TS_VFY_POLICY        \
645
                                 | TS_VFY_IMPRINT       \
646
                                 | TS_VFY_NONCE         \
647
                                 | TS_VFY_SIGNER        \
648
                                 | TS_VFY_TSA_NAME)
649
# define TS_VFY_ALL_DATA         (TS_VFY_SIGNATURE       \
650
                                 | TS_VFY_VERSION       \
651
                                 | TS_VFY_POLICY        \
652
                                 | TS_VFY_DATA          \
653
                                 | TS_VFY_NONCE         \
654
                                 | TS_VFY_SIGNER        \
655
                                 | TS_VFY_TSA_NAME)
656

    
657
typedef struct TS_verify_ctx {
658
    /* Set this to the union of TS_VFY_... flags you want to carry out. */
659
    unsigned flags;
660
    /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */
661
    X509_STORE *store;
662
    STACK_OF(X509) *certs;
663
    /* Must be set only with TS_VFY_POLICY. */
664
    ASN1_OBJECT *policy;
665
    /*
666
     * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the
667
     * algorithm from the response is used.
668
     */
669
    X509_ALGOR *md_alg;
670
    unsigned char *imprint;
671
    unsigned imprint_len;
672
    /* Must be set only with TS_VFY_DATA. */
673
    BIO *data;
674
    /* Must be set only with TS_VFY_TSA_NAME. */
675
    ASN1_INTEGER *nonce;
676
    /* Must be set only with TS_VFY_TSA_NAME. */
677
    GENERAL_NAME *tsa_name;
678
} TS_VERIFY_CTX;
679

    
680
int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response);
681
int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token);
682

    
683
/*
684
 * Declarations related to response verification context,
685
 * they are defined in ts/ts_verify_ctx.c.
686
 */
687

    
688
/* Set all fields to zero. */
689
TS_VERIFY_CTX *TS_VERIFY_CTX_new(void);
690
void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx);
691
void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx);
692
void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx);
693

    
694
/*-
695
 * If ctx is NULL, it allocates and returns a new object, otherwise
696
 * it returns ctx. It initialises all the members as follows:
697
 * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE)
698
 * certs = NULL
699
 * store = NULL
700
 * policy = policy from the request or NULL if absent (in this case
701
 *      TS_VFY_POLICY is cleared from flags as well)
702
 * md_alg = MD algorithm from request
703
 * imprint, imprint_len = imprint from request
704
 * data = NULL
705
 * nonce, nonce_len = nonce from the request or NULL if absent (in this case
706
 *      TS_VFY_NONCE is cleared from flags as well)
707
 * tsa_name = NULL
708
 * Important: after calling this method TS_VFY_SIGNATURE should be added!
709
 */
710
TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx);
711

    
712
/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */
713

    
714
int TS_RESP_print_bio(BIO *bio, TS_RESP *a);
715
int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a);
716
int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a);
717

    
718
/* Common utility functions defined in ts/ts_lib.c */
719

    
720
int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num);
721
int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj);
722
int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions);
723
int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg);
724
int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg);
725

    
726
/*
727
 * Function declarations for handling configuration options, defined in
728
 * ts/ts_conf.c
729
 */
730

    
731
X509 *TS_CONF_load_cert(const char *file);
732
STACK_OF(X509) *TS_CONF_load_certs(const char *file);
733
EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass);
734
const char *TS_CONF_get_tsa_section(CONF *conf, const char *section);
735
int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb,
736
                       TS_RESP_CTX *ctx);
737
int TS_CONF_set_crypto_device(CONF *conf, const char *section,
738
                              const char *device);
739
int TS_CONF_set_default_engine(const char *name);
740
int TS_CONF_set_signer_cert(CONF *conf, const char *section,
741
                            const char *cert, TS_RESP_CTX *ctx);
742
int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs,
743
                      TS_RESP_CTX *ctx);
744
int TS_CONF_set_signer_key(CONF *conf, const char *section,
745
                           const char *key, const char *pass,
746
                           TS_RESP_CTX *ctx);
747
int TS_CONF_set_def_policy(CONF *conf, const char *section,
748
                           const char *policy, TS_RESP_CTX *ctx);
749
int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx);
750
int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx);
751
int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx);
752
int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section,
753
                                       TS_RESP_CTX *ctx);
754
int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx);
755
int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx);
756
int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section,
757
                                  TS_RESP_CTX *ctx);
758

    
759
/* -------------------------------------------------- */
760
/* BEGIN ERROR CODES */
761
/*
762
 * The following lines are auto generated by the script mkerr.pl. Any changes
763
 * made after this point may be overwritten when the script is next run.
764
 */
765
void ERR_load_TS_strings(void);
766

    
767
/* Error codes for the TS functions. */
768

    
769
/* Function codes. */
770
# define TS_F_D2I_TS_RESP                                 147
771
# define TS_F_DEF_SERIAL_CB                               110
772
# define TS_F_DEF_TIME_CB                                 111
773
# define TS_F_ESS_ADD_SIGNING_CERT                        112
774
# define TS_F_ESS_CERT_ID_NEW_INIT                        113
775
# define TS_F_ESS_SIGNING_CERT_NEW_INIT                   114
776
# define TS_F_INT_TS_RESP_VERIFY_TOKEN                    149
777
# define TS_F_PKCS7_TO_TS_TST_INFO                        148
778
# define TS_F_TS_ACCURACY_SET_MICROS                      115
779
# define TS_F_TS_ACCURACY_SET_MILLIS                      116
780
# define TS_F_TS_ACCURACY_SET_SECONDS                     117
781
# define TS_F_TS_CHECK_IMPRINTS                           100
782
# define TS_F_TS_CHECK_NONCES                             101
783
# define TS_F_TS_CHECK_POLICY                             102
784
# define TS_F_TS_CHECK_SIGNING_CERTS                      103
785
# define TS_F_TS_CHECK_STATUS_INFO                        104
786
# define TS_F_TS_COMPUTE_IMPRINT                          145
787
# define TS_F_TS_CONF_SET_DEFAULT_ENGINE                  146
788
# define TS_F_TS_GET_STATUS_TEXT                          105
789
# define TS_F_TS_MSG_IMPRINT_SET_ALGO                     118
790
# define TS_F_TS_REQ_SET_MSG_IMPRINT                      119
791
# define TS_F_TS_REQ_SET_NONCE                            120
792
# define TS_F_TS_REQ_SET_POLICY_ID                        121
793
# define TS_F_TS_RESP_CREATE_RESPONSE                     122
794
# define TS_F_TS_RESP_CREATE_TST_INFO                     123
795
# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO                124
796
# define TS_F_TS_RESP_CTX_ADD_MD                          125
797
# define TS_F_TS_RESP_CTX_ADD_POLICY                      126
798
# define TS_F_TS_RESP_CTX_NEW                             127
799
# define TS_F_TS_RESP_CTX_SET_ACCURACY                    128
800
# define TS_F_TS_RESP_CTX_SET_CERTS                       129
801
# define TS_F_TS_RESP_CTX_SET_DEF_POLICY                  130
802
# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT                 131
803
# define TS_F_TS_RESP_CTX_SET_STATUS_INFO                 132
804
# define TS_F_TS_RESP_GET_POLICY                          133
805
# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION          134
806
# define TS_F_TS_RESP_SET_STATUS_INFO                     135
807
# define TS_F_TS_RESP_SET_TST_INFO                        150
808
# define TS_F_TS_RESP_SIGN                                136
809
# define TS_F_TS_RESP_VERIFY_SIGNATURE                    106
810
# define TS_F_TS_RESP_VERIFY_TOKEN                        107
811
# define TS_F_TS_TST_INFO_SET_ACCURACY                    137
812
# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT                 138
813
# define TS_F_TS_TST_INFO_SET_NONCE                       139
814
# define TS_F_TS_TST_INFO_SET_POLICY_ID                   140
815
# define TS_F_TS_TST_INFO_SET_SERIAL                      141
816
# define TS_F_TS_TST_INFO_SET_TIME                        142
817
# define TS_F_TS_TST_INFO_SET_TSA                         143
818
# define TS_F_TS_VERIFY                                   108
819
# define TS_F_TS_VERIFY_CERT                              109
820
# define TS_F_TS_VERIFY_CTX_NEW                           144
821

    
822
/* Reason codes. */
823
# define TS_R_BAD_PKCS7_TYPE                              132
824
# define TS_R_BAD_TYPE                                    133
825
# define TS_R_CERTIFICATE_VERIFY_ERROR                    100
826
# define TS_R_COULD_NOT_SET_ENGINE                        127
827
# define TS_R_COULD_NOT_SET_TIME                          115
828
# define TS_R_D2I_TS_RESP_INT_FAILED                      128
829
# define TS_R_DETACHED_CONTENT                            134
830
# define TS_R_ESS_ADD_SIGNING_CERT_ERROR                  116
831
# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR               101
832
# define TS_R_INVALID_NULL_POINTER                        102
833
# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE          117
834
# define TS_R_MESSAGE_IMPRINT_MISMATCH                    103
835
# define TS_R_NONCE_MISMATCH                              104
836
# define TS_R_NONCE_NOT_RETURNED                          105
837
# define TS_R_NO_CONTENT                                  106
838
# define TS_R_NO_TIME_STAMP_TOKEN                         107
839
# define TS_R_PKCS7_ADD_SIGNATURE_ERROR                   118
840
# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR                 119
841
# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED                 129
842
# define TS_R_POLICY_MISMATCH                             108
843
# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE      120
844
# define TS_R_RESPONSE_SETUP_ERROR                        121
845
# define TS_R_SIGNATURE_FAILURE                           109
846
# define TS_R_THERE_MUST_BE_ONE_SIGNER                    110
847
# define TS_R_TIME_SYSCALL_ERROR                          122
848
# define TS_R_TOKEN_NOT_PRESENT                           130
849
# define TS_R_TOKEN_PRESENT                               131
850
# define TS_R_TSA_NAME_MISMATCH                           111
851
# define TS_R_TSA_UNTRUSTED                               112
852
# define TS_R_TST_INFO_SETUP_ERROR                        123
853
# define TS_R_TS_DATASIGN                                 124
854
# define TS_R_UNACCEPTABLE_POLICY                         125
855
# define TS_R_UNSUPPORTED_MD_ALGORITHM                    126
856
# define TS_R_UNSUPPORTED_VERSION                         113
857
# define TS_R_WRONG_CONTENT_TYPE                          114
858

    
859
#ifdef  __cplusplus
860
}
861
#endif
862
#endif