1238384Sjkim/* crypto/ts/ts.h */ 2280297Sjkim/* 3280297Sjkim * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project 4280297Sjkim * 2002, 2003, 2004. 5238384Sjkim */ 6238384Sjkim/* ==================================================================== 7238384Sjkim * Copyright (c) 2006 The OpenSSL Project. All rights reserved. 8238384Sjkim * 9238384Sjkim * Redistribution and use in source and binary forms, with or without 10238384Sjkim * modification, are permitted provided that the following conditions 11238384Sjkim * are met: 12238384Sjkim * 13238384Sjkim * 1. Redistributions of source code must retain the above copyright 14280297Sjkim * notice, this list of conditions and the following disclaimer. 15238384Sjkim * 16238384Sjkim * 2. Redistributions in binary form must reproduce the above copyright 17238384Sjkim * notice, this list of conditions and the following disclaimer in 18238384Sjkim * the documentation and/or other materials provided with the 19238384Sjkim * distribution. 20238384Sjkim * 21238384Sjkim * 3. All advertising materials mentioning features or use of this 22238384Sjkim * software must display the following acknowledgment: 23238384Sjkim * "This product includes software developed by the OpenSSL Project 24238384Sjkim * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25238384Sjkim * 26238384Sjkim * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27238384Sjkim * endorse or promote products derived from this software without 28238384Sjkim * prior written permission. For written permission, please contact 29238384Sjkim * licensing@OpenSSL.org. 30238384Sjkim * 31238384Sjkim * 5. Products derived from this software may not be called "OpenSSL" 32238384Sjkim * nor may "OpenSSL" appear in their names without prior written 33238384Sjkim * permission of the OpenSSL Project. 34238384Sjkim * 35238384Sjkim * 6. Redistributions of any form whatsoever must retain the following 36238384Sjkim * acknowledgment: 37238384Sjkim * "This product includes software developed by the OpenSSL Project 38238384Sjkim * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39238384Sjkim * 40238384Sjkim * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41238384Sjkim * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42238384Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43238384Sjkim * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44238384Sjkim * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45238384Sjkim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46238384Sjkim * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47238384Sjkim * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48238384Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49238384Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50238384Sjkim * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51238384Sjkim * OF THE POSSIBILITY OF SUCH DAMAGE. 52238384Sjkim * ==================================================================== 53238384Sjkim * 54238384Sjkim * This product includes cryptographic software written by Eric Young 55238384Sjkim * (eay@cryptsoft.com). This product includes software written by Tim 56238384Sjkim * Hudson (tjh@cryptsoft.com). 57238384Sjkim * 58238384Sjkim */ 59238384Sjkim 60238384Sjkim#ifndef HEADER_TS_H 61280297Sjkim# define HEADER_TS_H 62238384Sjkim 63280297Sjkim# include <openssl/opensslconf.h> 64280297Sjkim# include <openssl/symhacks.h> 65280297Sjkim# ifndef OPENSSL_NO_BUFFER 66280297Sjkim# include <openssl/buffer.h> 67280297Sjkim# endif 68280297Sjkim# ifndef OPENSSL_NO_EVP 69280297Sjkim# include <openssl/evp.h> 70280297Sjkim# endif 71280297Sjkim# ifndef OPENSSL_NO_BIO 72280297Sjkim# include <openssl/bio.h> 73280297Sjkim# endif 74280297Sjkim# include <openssl/stack.h> 75280297Sjkim# include <openssl/asn1.h> 76280297Sjkim# include <openssl/safestack.h> 77238384Sjkim 78280297Sjkim# ifndef OPENSSL_NO_RSA 79280297Sjkim# include <openssl/rsa.h> 80280297Sjkim# endif 81238384Sjkim 82280297Sjkim# ifndef OPENSSL_NO_DSA 83280297Sjkim# include <openssl/dsa.h> 84280297Sjkim# endif 85238384Sjkim 86280297Sjkim# ifndef OPENSSL_NO_DH 87280297Sjkim# include <openssl/dh.h> 88280297Sjkim# endif 89238384Sjkim 90238384Sjkim#ifdef __cplusplus 91238384Sjkimextern "C" { 92238384Sjkim#endif 93238384Sjkim 94280297Sjkim# ifdef WIN32 95238384Sjkim/* Under Win32 this is defined in wincrypt.h */ 96280297Sjkim# undef X509_NAME 97280297Sjkim# endif 98238384Sjkim 99280297Sjkim# include <openssl/x509.h> 100280297Sjkim# include <openssl/x509v3.h> 101238384Sjkim 102280297Sjkim/*- 103238384SjkimMessageImprint ::= SEQUENCE { 104238384Sjkim hashAlgorithm AlgorithmIdentifier, 105238384Sjkim hashedMessage OCTET STRING } 106238384Sjkim*/ 107238384Sjkim 108280297Sjkimtypedef struct TS_msg_imprint_st { 109280297Sjkim X509_ALGOR *hash_algo; 110280297Sjkim ASN1_OCTET_STRING *hashed_msg; 111280297Sjkim} TS_MSG_IMPRINT; 112238384Sjkim 113280297Sjkim/*- 114238384SjkimTimeStampReq ::= SEQUENCE { 115238384Sjkim version INTEGER { v1(1) }, 116238384Sjkim messageImprint MessageImprint, 117238384Sjkim --a hash algorithm OID and the hash value of the data to be 118238384Sjkim --time-stamped 119238384Sjkim reqPolicy TSAPolicyId OPTIONAL, 120238384Sjkim nonce INTEGER OPTIONAL, 121238384Sjkim certReq BOOLEAN DEFAULT FALSE, 122238384Sjkim extensions [0] IMPLICIT Extensions OPTIONAL } 123238384Sjkim*/ 124238384Sjkim 125280297Sjkimtypedef struct TS_req_st { 126280297Sjkim ASN1_INTEGER *version; 127280297Sjkim TS_MSG_IMPRINT *msg_imprint; 128280297Sjkim ASN1_OBJECT *policy_id; /* OPTIONAL */ 129280297Sjkim ASN1_INTEGER *nonce; /* OPTIONAL */ 130280297Sjkim ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ 131280297Sjkim STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ 132280297Sjkim} TS_REQ; 133238384Sjkim 134280297Sjkim/*- 135238384SjkimAccuracy ::= SEQUENCE { 136238384Sjkim seconds INTEGER OPTIONAL, 137238384Sjkim millis [0] INTEGER (1..999) OPTIONAL, 138238384Sjkim micros [1] INTEGER (1..999) OPTIONAL } 139238384Sjkim*/ 140238384Sjkim 141280297Sjkimtypedef struct TS_accuracy_st { 142280297Sjkim ASN1_INTEGER *seconds; 143280297Sjkim ASN1_INTEGER *millis; 144280297Sjkim ASN1_INTEGER *micros; 145280297Sjkim} TS_ACCURACY; 146238384Sjkim 147280297Sjkim/*- 148238384SjkimTSTInfo ::= SEQUENCE { 149238384Sjkim version INTEGER { v1(1) }, 150238384Sjkim policy TSAPolicyId, 151238384Sjkim messageImprint MessageImprint, 152238384Sjkim -- MUST have the same value as the similar field in 153238384Sjkim -- TimeStampReq 154238384Sjkim serialNumber INTEGER, 155238384Sjkim -- Time-Stamping users MUST be ready to accommodate integers 156238384Sjkim -- up to 160 bits. 157238384Sjkim genTime GeneralizedTime, 158238384Sjkim accuracy Accuracy OPTIONAL, 159238384Sjkim ordering BOOLEAN DEFAULT FALSE, 160238384Sjkim nonce INTEGER OPTIONAL, 161238384Sjkim -- MUST be present if the similar field was present 162238384Sjkim -- in TimeStampReq. In that case it MUST have the same value. 163238384Sjkim tsa [0] GeneralName OPTIONAL, 164238384Sjkim extensions [1] IMPLICIT Extensions OPTIONAL } 165238384Sjkim*/ 166238384Sjkim 167280297Sjkimtypedef struct TS_tst_info_st { 168280297Sjkim ASN1_INTEGER *version; 169280297Sjkim ASN1_OBJECT *policy_id; 170280297Sjkim TS_MSG_IMPRINT *msg_imprint; 171280297Sjkim ASN1_INTEGER *serial; 172280297Sjkim ASN1_GENERALIZEDTIME *time; 173280297Sjkim TS_ACCURACY *accuracy; 174280297Sjkim ASN1_BOOLEAN ordering; 175280297Sjkim ASN1_INTEGER *nonce; 176280297Sjkim GENERAL_NAME *tsa; 177280297Sjkim STACK_OF(X509_EXTENSION) *extensions; 178280297Sjkim} TS_TST_INFO; 179238384Sjkim 180280297Sjkim/*- 181238384SjkimPKIStatusInfo ::= SEQUENCE { 182238384Sjkim status PKIStatus, 183238384Sjkim statusString PKIFreeText OPTIONAL, 184238384Sjkim failInfo PKIFailureInfo OPTIONAL } 185238384Sjkim 186238384SjkimFrom RFC 1510 - section 3.1.1: 187238384SjkimPKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String 188280297Sjkim -- text encoded as UTF-8 String (note: each UTF8String SHOULD 189280297Sjkim -- include an RFC 1766 language tag to indicate the language 190280297Sjkim -- of the contained text) 191238384Sjkim*/ 192238384Sjkim 193238384Sjkim/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ 194238384Sjkim 195280297Sjkim# define TS_STATUS_GRANTED 0 196280297Sjkim# define TS_STATUS_GRANTED_WITH_MODS 1 197280297Sjkim# define TS_STATUS_REJECTION 2 198280297Sjkim# define TS_STATUS_WAITING 3 199280297Sjkim# define TS_STATUS_REVOCATION_WARNING 4 200280297Sjkim# define TS_STATUS_REVOCATION_NOTIFICATION 5 201238384Sjkim 202280297Sjkim/* 203280297Sjkim * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c 204280297Sjkim */ 205238384Sjkim 206280297Sjkim# define TS_INFO_BAD_ALG 0 207280297Sjkim# define TS_INFO_BAD_REQUEST 2 208280297Sjkim# define TS_INFO_BAD_DATA_FORMAT 5 209280297Sjkim# define TS_INFO_TIME_NOT_AVAILABLE 14 210280297Sjkim# define TS_INFO_UNACCEPTED_POLICY 15 211280297Sjkim# define TS_INFO_UNACCEPTED_EXTENSION 16 212280297Sjkim# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 213280297Sjkim# define TS_INFO_SYSTEM_FAILURE 25 214238384Sjkim 215280297Sjkimtypedef struct TS_status_info_st { 216280297Sjkim ASN1_INTEGER *status; 217280297Sjkim STACK_OF(ASN1_UTF8STRING) *text; 218280297Sjkim ASN1_BIT_STRING *failure_info; 219280297Sjkim} TS_STATUS_INFO; 220238384Sjkim 221238384SjkimDECLARE_STACK_OF(ASN1_UTF8STRING) 222238384SjkimDECLARE_ASN1_SET_OF(ASN1_UTF8STRING) 223238384Sjkim 224280297Sjkim/*- 225238384SjkimTimeStampResp ::= SEQUENCE { 226238384Sjkim status PKIStatusInfo, 227238384Sjkim timeStampToken TimeStampToken OPTIONAL } 228238384Sjkim*/ 229238384Sjkim 230280297Sjkimtypedef struct TS_resp_st { 231280297Sjkim TS_STATUS_INFO *status_info; 232280297Sjkim PKCS7 *token; 233280297Sjkim TS_TST_INFO *tst_info; 234280297Sjkim} TS_RESP; 235238384Sjkim 236238384Sjkim/* The structure below would belong to the ESS component. */ 237238384Sjkim 238280297Sjkim/*- 239238384SjkimIssuerSerial ::= SEQUENCE { 240280297Sjkim issuer GeneralNames, 241280297Sjkim serialNumber CertificateSerialNumber 242280297Sjkim } 243238384Sjkim*/ 244238384Sjkim 245280297Sjkimtypedef struct ESS_issuer_serial { 246280297Sjkim STACK_OF(GENERAL_NAME) *issuer; 247280297Sjkim ASN1_INTEGER *serial; 248280297Sjkim} ESS_ISSUER_SERIAL; 249238384Sjkim 250280297Sjkim/*- 251238384SjkimESSCertID ::= SEQUENCE { 252238384Sjkim certHash Hash, 253238384Sjkim issuerSerial IssuerSerial OPTIONAL 254238384Sjkim} 255238384Sjkim*/ 256238384Sjkim 257280297Sjkimtypedef struct ESS_cert_id { 258280297Sjkim ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ 259280297Sjkim ESS_ISSUER_SERIAL *issuer_serial; 260280297Sjkim} ESS_CERT_ID; 261238384Sjkim 262238384SjkimDECLARE_STACK_OF(ESS_CERT_ID) 263238384SjkimDECLARE_ASN1_SET_OF(ESS_CERT_ID) 264238384Sjkim 265280297Sjkim/*- 266238384SjkimSigningCertificate ::= SEQUENCE { 267238384Sjkim certs SEQUENCE OF ESSCertID, 268238384Sjkim policies SEQUENCE OF PolicyInformation OPTIONAL 269238384Sjkim} 270238384Sjkim*/ 271238384Sjkim 272280297Sjkimtypedef struct ESS_signing_cert { 273280297Sjkim STACK_OF(ESS_CERT_ID) *cert_ids; 274280297Sjkim STACK_OF(POLICYINFO) *policy_info; 275280297Sjkim} ESS_SIGNING_CERT; 276238384Sjkim 277280297SjkimTS_REQ *TS_REQ_new(void); 278280297Sjkimvoid TS_REQ_free(TS_REQ *a); 279280297Sjkimint i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); 280280297SjkimTS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); 281238384Sjkim 282280297SjkimTS_REQ *TS_REQ_dup(TS_REQ *a); 283238384Sjkim 284280297SjkimTS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); 285280297Sjkimint i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); 286280297SjkimTS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); 287280297Sjkimint i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); 288238384Sjkim 289280297SjkimTS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); 290280297Sjkimvoid TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); 291280297Sjkimint i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); 292280297SjkimTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, 293280297Sjkim const unsigned char **pp, long length); 294238384Sjkim 295280297SjkimTS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); 296238384Sjkim 297280297SjkimTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); 298280297Sjkimint i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); 299280297SjkimTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); 300280297Sjkimint i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); 301238384Sjkim 302280297SjkimTS_RESP *TS_RESP_new(void); 303280297Sjkimvoid TS_RESP_free(TS_RESP *a); 304280297Sjkimint i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); 305280297SjkimTS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); 306238384SjkimTS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); 307280297SjkimTS_RESP *TS_RESP_dup(TS_RESP *a); 308238384Sjkim 309280297SjkimTS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); 310280297Sjkimint i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); 311280297SjkimTS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); 312280297Sjkimint i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); 313238384Sjkim 314280297SjkimTS_STATUS_INFO *TS_STATUS_INFO_new(void); 315280297Sjkimvoid TS_STATUS_INFO_free(TS_STATUS_INFO *a); 316280297Sjkimint i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); 317280297SjkimTS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, 318280297Sjkim const unsigned char **pp, long length); 319280297SjkimTS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); 320238384Sjkim 321280297SjkimTS_TST_INFO *TS_TST_INFO_new(void); 322280297Sjkimvoid TS_TST_INFO_free(TS_TST_INFO *a); 323280297Sjkimint i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); 324280297SjkimTS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, 325280297Sjkim long length); 326280297SjkimTS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); 327238384Sjkim 328280297SjkimTS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); 329280297Sjkimint i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); 330280297SjkimTS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); 331280297Sjkimint i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); 332238384Sjkim 333280297SjkimTS_ACCURACY *TS_ACCURACY_new(void); 334280297Sjkimvoid TS_ACCURACY_free(TS_ACCURACY *a); 335280297Sjkimint i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); 336280297SjkimTS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, 337280297Sjkim long length); 338280297SjkimTS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); 339238384Sjkim 340238384SjkimESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); 341280297Sjkimvoid ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); 342280297Sjkimint i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); 343238384SjkimESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, 344280297Sjkim const unsigned char **pp, 345280297Sjkim long length); 346238384SjkimESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); 347238384Sjkim 348280297SjkimESS_CERT_ID *ESS_CERT_ID_new(void); 349280297Sjkimvoid ESS_CERT_ID_free(ESS_CERT_ID *a); 350280297Sjkimint i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); 351280297SjkimESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, 352280297Sjkim long length); 353280297SjkimESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); 354238384Sjkim 355238384SjkimESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); 356280297Sjkimvoid ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); 357280297Sjkimint i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); 358238384SjkimESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, 359280297Sjkim const unsigned char **pp, long length); 360238384SjkimESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); 361238384Sjkim 362238384Sjkimvoid ERR_load_TS_strings(void); 363238384Sjkim 364238384Sjkimint TS_REQ_set_version(TS_REQ *a, long version); 365238384Sjkimlong TS_REQ_get_version(const TS_REQ *a); 366238384Sjkim 367238384Sjkimint TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); 368238384SjkimTS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); 369238384Sjkim 370238384Sjkimint TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); 371238384SjkimX509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); 372238384Sjkim 373238384Sjkimint TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); 374238384SjkimASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); 375238384Sjkim 376238384Sjkimint TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); 377238384SjkimASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); 378238384Sjkim 379238384Sjkimint TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); 380238384Sjkimconst ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); 381238384Sjkim 382238384Sjkimint TS_REQ_set_cert_req(TS_REQ *a, int cert_req); 383238384Sjkimint TS_REQ_get_cert_req(const TS_REQ *a); 384238384Sjkim 385238384SjkimSTACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); 386238384Sjkimvoid TS_REQ_ext_free(TS_REQ *a); 387238384Sjkimint TS_REQ_get_ext_count(TS_REQ *a); 388238384Sjkimint TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); 389238384Sjkimint TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); 390238384Sjkimint TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); 391238384SjkimX509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); 392238384SjkimX509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); 393238384Sjkimint TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); 394238384Sjkimvoid *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); 395238384Sjkim 396238384Sjkim/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ 397238384Sjkim 398238384Sjkimint TS_REQ_print_bio(BIO *bio, TS_REQ *a); 399238384Sjkim 400238384Sjkim/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ 401238384Sjkim 402238384Sjkimint TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); 403238384SjkimTS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); 404238384Sjkim 405238384Sjkim/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ 406238384Sjkimvoid TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); 407238384SjkimPKCS7 *TS_RESP_get_token(TS_RESP *a); 408238384SjkimTS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); 409238384Sjkim 410238384Sjkimint TS_TST_INFO_set_version(TS_TST_INFO *a, long version); 411238384Sjkimlong TS_TST_INFO_get_version(const TS_TST_INFO *a); 412238384Sjkim 413238384Sjkimint TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); 414238384SjkimASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); 415238384Sjkim 416238384Sjkimint TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); 417238384SjkimTS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); 418238384Sjkim 419238384Sjkimint TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); 420238384Sjkimconst ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); 421238384Sjkim 422238384Sjkimint TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); 423238384Sjkimconst ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); 424238384Sjkim 425238384Sjkimint TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); 426238384SjkimTS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); 427238384Sjkim 428238384Sjkimint TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); 429238384Sjkimconst ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); 430238384Sjkim 431238384Sjkimint TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); 432238384Sjkimconst ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); 433238384Sjkim 434238384Sjkimint TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); 435238384Sjkimconst ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); 436238384Sjkim 437238384Sjkimint TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); 438238384Sjkimint TS_TST_INFO_get_ordering(const TS_TST_INFO *a); 439238384Sjkim 440238384Sjkimint TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); 441238384Sjkimconst ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); 442238384Sjkim 443238384Sjkimint TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); 444238384SjkimGENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); 445238384Sjkim 446238384SjkimSTACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); 447238384Sjkimvoid TS_TST_INFO_ext_free(TS_TST_INFO *a); 448238384Sjkimint TS_TST_INFO_get_ext_count(TS_TST_INFO *a); 449238384Sjkimint TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); 450238384Sjkimint TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); 451238384Sjkimint TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); 452238384SjkimX509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); 453238384SjkimX509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); 454238384Sjkimint TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); 455238384Sjkimvoid *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); 456238384Sjkim 457280297Sjkim/* 458280297Sjkim * Declarations related to response generation, defined in ts/ts_resp_sign.c. 459280297Sjkim */ 460238384Sjkim 461238384Sjkim/* Optional flags for response generation. */ 462238384Sjkim 463238384Sjkim/* Don't include the TSA name in response. */ 464280297Sjkim# define TS_TSA_NAME 0x01 465238384Sjkim 466238384Sjkim/* Set ordering to true in response. */ 467280297Sjkim# define TS_ORDERING 0x02 468238384Sjkim 469238384Sjkim/* 470238384Sjkim * Include the signer certificate and the other specified certificates in 471238384Sjkim * the ESS signing certificate attribute beside the PKCS7 signed data. 472238384Sjkim * Only the signer certificates is included by default. 473238384Sjkim */ 474280297Sjkim# define TS_ESS_CERT_ID_CHAIN 0x04 475238384Sjkim 476238384Sjkim/* Forward declaration. */ 477238384Sjkimstruct TS_resp_ctx; 478238384Sjkim 479238384Sjkim/* This must return a unique number less than 160 bits long. */ 480280297Sjkimtypedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); 481238384Sjkim 482280297Sjkim/* 483280297Sjkim * This must return the seconds and microseconds since Jan 1, 1970 in the sec 484280297Sjkim * and usec variables allocated by the caller. Return non-zero for success 485280297Sjkim * and zero for failure. 486280297Sjkim */ 487280297Sjkimtypedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, 488280297Sjkim long *usec); 489238384Sjkim 490280297Sjkim/* 491280297Sjkim * This must process the given extension. It can modify the TS_TST_INFO 492280297Sjkim * object of the context. Return values: !0 (processed), 0 (error, it must 493280297Sjkim * set the status info/failure info of the response). 494238384Sjkim */ 495280297Sjkimtypedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, 496280297Sjkim void *); 497238384Sjkim 498280297Sjkimtypedef struct TS_resp_ctx { 499280297Sjkim X509 *signer_cert; 500280297Sjkim EVP_PKEY *signer_key; 501280297Sjkim STACK_OF(X509) *certs; /* Certs to include in signed data. */ 502280297Sjkim STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ 503280297Sjkim ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ 504280297Sjkim STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ 505280297Sjkim ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ 506280297Sjkim ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ 507280297Sjkim ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ 508280297Sjkim unsigned clock_precision_digits; /* fraction of seconds in time stamp 509280297Sjkim * token. */ 510280297Sjkim unsigned flags; /* Optional info, see values above. */ 511280297Sjkim /* Callback functions. */ 512280297Sjkim TS_serial_cb serial_cb; 513280297Sjkim void *serial_cb_data; /* User data for serial_cb. */ 514280297Sjkim TS_time_cb time_cb; 515280297Sjkim void *time_cb_data; /* User data for time_cb. */ 516280297Sjkim TS_extension_cb extension_cb; 517280297Sjkim void *extension_cb_data; /* User data for extension_cb. */ 518280297Sjkim /* These members are used only while creating the response. */ 519280297Sjkim TS_REQ *request; 520280297Sjkim TS_RESP *response; 521280297Sjkim TS_TST_INFO *tst_info; 522280297Sjkim} TS_RESP_CTX; 523238384Sjkim 524238384SjkimDECLARE_STACK_OF(EVP_MD) 525238384SjkimDECLARE_ASN1_SET_OF(EVP_MD) 526238384Sjkim 527238384Sjkim/* Creates a response context that can be used for generating responses. */ 528238384SjkimTS_RESP_CTX *TS_RESP_CTX_new(void); 529238384Sjkimvoid TS_RESP_CTX_free(TS_RESP_CTX *ctx); 530238384Sjkim 531238384Sjkim/* This parameter must be set. */ 532238384Sjkimint TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); 533238384Sjkim 534238384Sjkim/* This parameter must be set. */ 535238384Sjkimint TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); 536238384Sjkim 537238384Sjkim/* This parameter must be set. */ 538238384Sjkimint TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); 539238384Sjkim 540238384Sjkim/* No additional certs are included in the response by default. */ 541238384Sjkimint TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); 542238384Sjkim 543280297Sjkim/* 544280297Sjkim * Adds a new acceptable policy, only the default policy is accepted by 545280297Sjkim * default. 546280297Sjkim */ 547238384Sjkimint TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); 548238384Sjkim 549280297Sjkim/* 550280297Sjkim * Adds a new acceptable message digest. Note that no message digests are 551280297Sjkim * accepted by default. The md argument is shared with the caller. 552280297Sjkim */ 553238384Sjkimint TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); 554238384Sjkim 555238384Sjkim/* Accuracy is not included by default. */ 556238384Sjkimint TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, 557280297Sjkim int secs, int millis, int micros); 558238384Sjkim 559280297Sjkim/* 560280297Sjkim * Clock precision digits, i.e. the number of decimal digits: '0' means sec, 561280297Sjkim * '3' msec, '6' usec, and so on. Default is 0. 562280297Sjkim */ 563238384Sjkimint TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, 564280297Sjkim unsigned clock_precision_digits); 565280297Sjkim/* At most we accept usec precision. */ 566280297Sjkim# define TS_MAX_CLOCK_PRECISION_DIGITS 6 567238384Sjkim 568306195Sjkim/* Maximum status message length */ 569306195Sjkim# define TS_MAX_STATUS_LENGTH (1024 * 1024) 570306195Sjkim 571238384Sjkim/* No flags are set by default. */ 572238384Sjkimvoid TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); 573238384Sjkim 574238384Sjkim/* Default callback always returns a constant. */ 575238384Sjkimvoid TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); 576238384Sjkim 577238384Sjkim/* Default callback uses the gettimeofday() and gmtime() system calls. */ 578238384Sjkimvoid TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); 579238384Sjkim 580280297Sjkim/* 581280297Sjkim * Default callback rejects all extensions. The extension callback is called 582280297Sjkim * when the TS_TST_INFO object is already set up and not signed yet. 583280297Sjkim */ 584238384Sjkim/* FIXME: extension handling is not tested yet. */ 585280297Sjkimvoid TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, 586280297Sjkim TS_extension_cb cb, void *data); 587238384Sjkim 588238384Sjkim/* The following methods can be used in the callbacks. */ 589280297Sjkimint TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, 590280297Sjkim int status, const char *text); 591238384Sjkim 592238384Sjkim/* Sets the status info only if it is still TS_STATUS_GRANTED. */ 593280297Sjkimint TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, 594280297Sjkim int status, const char *text); 595238384Sjkim 596238384Sjkimint TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); 597238384Sjkim 598238384Sjkim/* The get methods below can be used in the extension callback. */ 599238384SjkimTS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); 600238384Sjkim 601238384SjkimTS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); 602238384Sjkim 603280297Sjkim/* 604238384Sjkim * Creates the signed TS_TST_INFO and puts it in TS_RESP. 605238384Sjkim * In case of errors it sets the status info properly. 606238384Sjkim * Returns NULL only in case of memory allocation/fatal error. 607238384Sjkim */ 608238384SjkimTS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); 609238384Sjkim 610238384Sjkim/* 611238384Sjkim * Declarations related to response verification, 612238384Sjkim * they are defined in ts/ts_resp_verify.c. 613238384Sjkim */ 614238384Sjkim 615238384Sjkimint TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, 616280297Sjkim X509_STORE *store, X509 **signer_out); 617238384Sjkim 618238384Sjkim/* Context structure for the generic verify method. */ 619238384Sjkim 620238384Sjkim/* Verify the signer's certificate and the signature of the response. */ 621280297Sjkim# define TS_VFY_SIGNATURE (1u << 0) 622238384Sjkim/* Verify the version number of the response. */ 623280297Sjkim# define TS_VFY_VERSION (1u << 1) 624238384Sjkim/* Verify if the policy supplied by the user matches the policy of the TSA. */ 625280297Sjkim# define TS_VFY_POLICY (1u << 2) 626280297Sjkim/* 627280297Sjkim * Verify the message imprint provided by the user. This flag should not be 628280297Sjkim * specified with TS_VFY_DATA. 629280297Sjkim */ 630280297Sjkim# define TS_VFY_IMPRINT (1u << 3) 631280297Sjkim/* 632280297Sjkim * Verify the message imprint computed by the verify method from the user 633280297Sjkim * provided data and the MD algorithm of the response. This flag should not 634280297Sjkim * be specified with TS_VFY_IMPRINT. 635280297Sjkim */ 636280297Sjkim# define TS_VFY_DATA (1u << 4) 637238384Sjkim/* Verify the nonce value. */ 638280297Sjkim# define TS_VFY_NONCE (1u << 5) 639238384Sjkim/* Verify if the TSA name field matches the signer certificate. */ 640280297Sjkim# define TS_VFY_SIGNER (1u << 6) 641238384Sjkim/* Verify if the TSA name field equals to the user provided name. */ 642280297Sjkim# define TS_VFY_TSA_NAME (1u << 7) 643238384Sjkim 644238384Sjkim/* You can use the following convenience constants. */ 645280297Sjkim# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ 646280297Sjkim | TS_VFY_VERSION \ 647280297Sjkim | TS_VFY_POLICY \ 648280297Sjkim | TS_VFY_IMPRINT \ 649280297Sjkim | TS_VFY_NONCE \ 650280297Sjkim | TS_VFY_SIGNER \ 651280297Sjkim | TS_VFY_TSA_NAME) 652280297Sjkim# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ 653280297Sjkim | TS_VFY_VERSION \ 654280297Sjkim | TS_VFY_POLICY \ 655280297Sjkim | TS_VFY_DATA \ 656280297Sjkim | TS_VFY_NONCE \ 657280297Sjkim | TS_VFY_SIGNER \ 658280297Sjkim | TS_VFY_TSA_NAME) 659238384Sjkim 660280297Sjkimtypedef struct TS_verify_ctx { 661280297Sjkim /* Set this to the union of TS_VFY_... flags you want to carry out. */ 662280297Sjkim unsigned flags; 663280297Sjkim /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ 664280297Sjkim X509_STORE *store; 665280297Sjkim STACK_OF(X509) *certs; 666280297Sjkim /* Must be set only with TS_VFY_POLICY. */ 667280297Sjkim ASN1_OBJECT *policy; 668280297Sjkim /* 669280297Sjkim * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the 670280297Sjkim * algorithm from the response is used. 671280297Sjkim */ 672280297Sjkim X509_ALGOR *md_alg; 673280297Sjkim unsigned char *imprint; 674280297Sjkim unsigned imprint_len; 675280297Sjkim /* Must be set only with TS_VFY_DATA. */ 676280297Sjkim BIO *data; 677280297Sjkim /* Must be set only with TS_VFY_TSA_NAME. */ 678280297Sjkim ASN1_INTEGER *nonce; 679280297Sjkim /* Must be set only with TS_VFY_TSA_NAME. */ 680280297Sjkim GENERAL_NAME *tsa_name; 681280297Sjkim} TS_VERIFY_CTX; 682238384Sjkim 683238384Sjkimint TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); 684238384Sjkimint TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); 685238384Sjkim 686238384Sjkim/* 687238384Sjkim * Declarations related to response verification context, 688238384Sjkim * they are defined in ts/ts_verify_ctx.c. 689238384Sjkim */ 690238384Sjkim 691238384Sjkim/* Set all fields to zero. */ 692238384SjkimTS_VERIFY_CTX *TS_VERIFY_CTX_new(void); 693238384Sjkimvoid TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); 694238384Sjkimvoid TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); 695238384Sjkimvoid TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); 696238384Sjkim 697280297Sjkim/*- 698238384Sjkim * If ctx is NULL, it allocates and returns a new object, otherwise 699238384Sjkim * it returns ctx. It initialises all the members as follows: 700238384Sjkim * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) 701238384Sjkim * certs = NULL 702238384Sjkim * store = NULL 703238384Sjkim * policy = policy from the request or NULL if absent (in this case 704280297Sjkim * TS_VFY_POLICY is cleared from flags as well) 705238384Sjkim * md_alg = MD algorithm from request 706238384Sjkim * imprint, imprint_len = imprint from request 707238384Sjkim * data = NULL 708238384Sjkim * nonce, nonce_len = nonce from the request or NULL if absent (in this case 709280297Sjkim * TS_VFY_NONCE is cleared from flags as well) 710238384Sjkim * tsa_name = NULL 711238384Sjkim * Important: after calling this method TS_VFY_SIGNATURE should be added! 712238384Sjkim */ 713238384SjkimTS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); 714238384Sjkim 715238384Sjkim/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ 716238384Sjkim 717238384Sjkimint TS_RESP_print_bio(BIO *bio, TS_RESP *a); 718238384Sjkimint TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); 719238384Sjkimint TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); 720238384Sjkim 721238384Sjkim/* Common utility functions defined in ts/ts_lib.c */ 722238384Sjkim 723238384Sjkimint TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); 724238384Sjkimint TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); 725238384Sjkimint TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); 726238384Sjkimint TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); 727238384Sjkimint TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); 728238384Sjkim 729280297Sjkim/* 730280297Sjkim * Function declarations for handling configuration options, defined in 731280297Sjkim * ts/ts_conf.c 732280297Sjkim */ 733238384Sjkim 734238384SjkimX509 *TS_CONF_load_cert(const char *file); 735238384SjkimSTACK_OF(X509) *TS_CONF_load_certs(const char *file); 736238384SjkimEVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); 737238384Sjkimconst char *TS_CONF_get_tsa_section(CONF *conf, const char *section); 738238384Sjkimint TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, 739280297Sjkim TS_RESP_CTX *ctx); 740238384Sjkimint TS_CONF_set_crypto_device(CONF *conf, const char *section, 741280297Sjkim const char *device); 742238384Sjkimint TS_CONF_set_default_engine(const char *name); 743238384Sjkimint TS_CONF_set_signer_cert(CONF *conf, const char *section, 744280297Sjkim const char *cert, TS_RESP_CTX *ctx); 745238384Sjkimint TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, 746280297Sjkim TS_RESP_CTX *ctx); 747238384Sjkimint TS_CONF_set_signer_key(CONF *conf, const char *section, 748280297Sjkim const char *key, const char *pass, 749280297Sjkim TS_RESP_CTX *ctx); 750238384Sjkimint TS_CONF_set_def_policy(CONF *conf, const char *section, 751280297Sjkim const char *policy, TS_RESP_CTX *ctx); 752238384Sjkimint TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); 753238384Sjkimint TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); 754238384Sjkimint TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); 755238384Sjkimint TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, 756280297Sjkim TS_RESP_CTX *ctx); 757238384Sjkimint TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); 758238384Sjkimint TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); 759238384Sjkimint TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, 760280297Sjkim TS_RESP_CTX *ctx); 761238384Sjkim 762238384Sjkim/* -------------------------------------------------- */ 763238384Sjkim/* BEGIN ERROR CODES */ 764280297Sjkim/* 765280297Sjkim * The following lines are auto generated by the script mkerr.pl. Any changes 766238384Sjkim * made after this point may be overwritten when the script is next run. 767238384Sjkim */ 768238384Sjkimvoid ERR_load_TS_strings(void); 769238384Sjkim 770238384Sjkim/* Error codes for the TS functions. */ 771238384Sjkim 772238384Sjkim/* Function codes. */ 773280297Sjkim# define TS_F_D2I_TS_RESP 147 774280297Sjkim# define TS_F_DEF_SERIAL_CB 110 775280297Sjkim# define TS_F_DEF_TIME_CB 111 776280297Sjkim# define TS_F_ESS_ADD_SIGNING_CERT 112 777280297Sjkim# define TS_F_ESS_CERT_ID_NEW_INIT 113 778280297Sjkim# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 779280297Sjkim# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 780280297Sjkim# define TS_F_PKCS7_TO_TS_TST_INFO 148 781280297Sjkim# define TS_F_TS_ACCURACY_SET_MICROS 115 782280297Sjkim# define TS_F_TS_ACCURACY_SET_MILLIS 116 783280297Sjkim# define TS_F_TS_ACCURACY_SET_SECONDS 117 784280297Sjkim# define TS_F_TS_CHECK_IMPRINTS 100 785280297Sjkim# define TS_F_TS_CHECK_NONCES 101 786280297Sjkim# define TS_F_TS_CHECK_POLICY 102 787280297Sjkim# define TS_F_TS_CHECK_SIGNING_CERTS 103 788280297Sjkim# define TS_F_TS_CHECK_STATUS_INFO 104 789280297Sjkim# define TS_F_TS_COMPUTE_IMPRINT 145 790280297Sjkim# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 791280297Sjkim# define TS_F_TS_GET_STATUS_TEXT 105 792280297Sjkim# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 793280297Sjkim# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 794280297Sjkim# define TS_F_TS_REQ_SET_NONCE 120 795280297Sjkim# define TS_F_TS_REQ_SET_POLICY_ID 121 796280297Sjkim# define TS_F_TS_RESP_CREATE_RESPONSE 122 797280297Sjkim# define TS_F_TS_RESP_CREATE_TST_INFO 123 798280297Sjkim# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 799280297Sjkim# define TS_F_TS_RESP_CTX_ADD_MD 125 800280297Sjkim# define TS_F_TS_RESP_CTX_ADD_POLICY 126 801280297Sjkim# define TS_F_TS_RESP_CTX_NEW 127 802280297Sjkim# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 803280297Sjkim# define TS_F_TS_RESP_CTX_SET_CERTS 129 804280297Sjkim# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 805280297Sjkim# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 806280297Sjkim# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 807280297Sjkim# define TS_F_TS_RESP_GET_POLICY 133 808280297Sjkim# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 809280297Sjkim# define TS_F_TS_RESP_SET_STATUS_INFO 135 810280297Sjkim# define TS_F_TS_RESP_SET_TST_INFO 150 811280297Sjkim# define TS_F_TS_RESP_SIGN 136 812280297Sjkim# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 813280297Sjkim# define TS_F_TS_RESP_VERIFY_TOKEN 107 814280297Sjkim# define TS_F_TS_TST_INFO_SET_ACCURACY 137 815280297Sjkim# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 816280297Sjkim# define TS_F_TS_TST_INFO_SET_NONCE 139 817280297Sjkim# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 818280297Sjkim# define TS_F_TS_TST_INFO_SET_SERIAL 141 819280297Sjkim# define TS_F_TS_TST_INFO_SET_TIME 142 820280297Sjkim# define TS_F_TS_TST_INFO_SET_TSA 143 821280297Sjkim# define TS_F_TS_VERIFY 108 822280297Sjkim# define TS_F_TS_VERIFY_CERT 109 823280297Sjkim# define TS_F_TS_VERIFY_CTX_NEW 144 824238384Sjkim 825238384Sjkim/* Reason codes. */ 826280297Sjkim# define TS_R_BAD_PKCS7_TYPE 132 827280297Sjkim# define TS_R_BAD_TYPE 133 828280297Sjkim# define TS_R_CERTIFICATE_VERIFY_ERROR 100 829280297Sjkim# define TS_R_COULD_NOT_SET_ENGINE 127 830280297Sjkim# define TS_R_COULD_NOT_SET_TIME 115 831280297Sjkim# define TS_R_D2I_TS_RESP_INT_FAILED 128 832280297Sjkim# define TS_R_DETACHED_CONTENT 134 833280297Sjkim# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 834280297Sjkim# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 835280297Sjkim# define TS_R_INVALID_NULL_POINTER 102 836280297Sjkim# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 837280297Sjkim# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 838280297Sjkim# define TS_R_NONCE_MISMATCH 104 839280297Sjkim# define TS_R_NONCE_NOT_RETURNED 105 840280297Sjkim# define TS_R_NO_CONTENT 106 841280297Sjkim# define TS_R_NO_TIME_STAMP_TOKEN 107 842280297Sjkim# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 843280297Sjkim# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 844280297Sjkim# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 845280297Sjkim# define TS_R_POLICY_MISMATCH 108 846280297Sjkim# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 847280297Sjkim# define TS_R_RESPONSE_SETUP_ERROR 121 848280297Sjkim# define TS_R_SIGNATURE_FAILURE 109 849280297Sjkim# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 850280297Sjkim# define TS_R_TIME_SYSCALL_ERROR 122 851280297Sjkim# define TS_R_TOKEN_NOT_PRESENT 130 852280297Sjkim# define TS_R_TOKEN_PRESENT 131 853280297Sjkim# define TS_R_TSA_NAME_MISMATCH 111 854280297Sjkim# define TS_R_TSA_UNTRUSTED 112 855280297Sjkim# define TS_R_TST_INFO_SETUP_ERROR 123 856280297Sjkim# define TS_R_TS_DATASIGN 124 857280297Sjkim# define TS_R_UNACCEPTABLE_POLICY 125 858280297Sjkim# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 859280297Sjkim# define TS_R_UNSUPPORTED_VERSION 113 860280297Sjkim# define TS_R_WRONG_CONTENT_TYPE 114 861238384Sjkim 862238384Sjkim#ifdef __cplusplus 863238384Sjkim} 864238384Sjkim#endif 865238384Sjkim#endif 866