172c33676SMaxim Ag /* $OpenBSD: ts_rsp_utils.c,v 1.7 2018/05/13 15:35:46 tb Exp $ */ 2f5b1c8a1SJohn Marino /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL 3f5b1c8a1SJohn Marino * project 2002. 4f5b1c8a1SJohn Marino */ 5f5b1c8a1SJohn Marino /* ==================================================================== 6f5b1c8a1SJohn Marino * Copyright (c) 2006 The OpenSSL Project. All rights reserved. 7f5b1c8a1SJohn Marino * 8f5b1c8a1SJohn Marino * Redistribution and use in source and binary forms, with or without 9f5b1c8a1SJohn Marino * modification, are permitted provided that the following conditions 10f5b1c8a1SJohn Marino * are met: 11f5b1c8a1SJohn Marino * 12f5b1c8a1SJohn Marino * 1. Redistributions of source code must retain the above copyright 13f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer. 14f5b1c8a1SJohn Marino * 15f5b1c8a1SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 16f5b1c8a1SJohn Marino * notice, this list of conditions and the following disclaimer in 17f5b1c8a1SJohn Marino * the documentation and/or other materials provided with the 18f5b1c8a1SJohn Marino * distribution. 19f5b1c8a1SJohn Marino * 20f5b1c8a1SJohn Marino * 3. All advertising materials mentioning features or use of this 21f5b1c8a1SJohn Marino * software must display the following acknowledgment: 22f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 23f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24f5b1c8a1SJohn Marino * 25f5b1c8a1SJohn Marino * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26f5b1c8a1SJohn Marino * endorse or promote products derived from this software without 27f5b1c8a1SJohn Marino * prior written permission. For written permission, please contact 28f5b1c8a1SJohn Marino * licensing@OpenSSL.org. 29f5b1c8a1SJohn Marino * 30f5b1c8a1SJohn Marino * 5. Products derived from this software may not be called "OpenSSL" 31f5b1c8a1SJohn Marino * nor may "OpenSSL" appear in their names without prior written 32f5b1c8a1SJohn Marino * permission of the OpenSSL Project. 33f5b1c8a1SJohn Marino * 34f5b1c8a1SJohn Marino * 6. Redistributions of any form whatsoever must retain the following 35f5b1c8a1SJohn Marino * acknowledgment: 36f5b1c8a1SJohn Marino * "This product includes software developed by the OpenSSL Project 37f5b1c8a1SJohn Marino * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38f5b1c8a1SJohn Marino * 39f5b1c8a1SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40f5b1c8a1SJohn Marino * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41f5b1c8a1SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42f5b1c8a1SJohn Marino * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43f5b1c8a1SJohn Marino * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44f5b1c8a1SJohn Marino * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45f5b1c8a1SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46f5b1c8a1SJohn Marino * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47f5b1c8a1SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48f5b1c8a1SJohn Marino * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49f5b1c8a1SJohn Marino * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50f5b1c8a1SJohn Marino * OF THE POSSIBILITY OF SUCH DAMAGE. 51f5b1c8a1SJohn Marino * ==================================================================== 52f5b1c8a1SJohn Marino * 53f5b1c8a1SJohn Marino * This product includes cryptographic software written by Eric Young 54f5b1c8a1SJohn Marino * (eay@cryptsoft.com). This product includes software written by Tim 55f5b1c8a1SJohn Marino * Hudson (tjh@cryptsoft.com). 56f5b1c8a1SJohn Marino * 57f5b1c8a1SJohn Marino */ 58f5b1c8a1SJohn Marino 59f5b1c8a1SJohn Marino #include <stdio.h> 60f5b1c8a1SJohn Marino 61f5b1c8a1SJohn Marino #include <openssl/err.h> 62f5b1c8a1SJohn Marino #include <openssl/objects.h> 63f5b1c8a1SJohn Marino #include <openssl/pkcs7.h> 64f5b1c8a1SJohn Marino #include <openssl/ts.h> 65f5b1c8a1SJohn Marino 66f5b1c8a1SJohn Marino /* Function definitions. */ 67f5b1c8a1SJohn Marino 68f5b1c8a1SJohn Marino int 69f5b1c8a1SJohn Marino TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *status_info) 70f5b1c8a1SJohn Marino { 71f5b1c8a1SJohn Marino TS_STATUS_INFO *new_status_info; 72f5b1c8a1SJohn Marino 73f5b1c8a1SJohn Marino if (a->status_info == status_info) 74f5b1c8a1SJohn Marino return 1; 75f5b1c8a1SJohn Marino new_status_info = TS_STATUS_INFO_dup(status_info); 76f5b1c8a1SJohn Marino if (new_status_info == NULL) { 7772c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 78f5b1c8a1SJohn Marino return 0; 79f5b1c8a1SJohn Marino } 80f5b1c8a1SJohn Marino TS_STATUS_INFO_free(a->status_info); 81f5b1c8a1SJohn Marino a->status_info = new_status_info; 82f5b1c8a1SJohn Marino 83f5b1c8a1SJohn Marino return 1; 84f5b1c8a1SJohn Marino } 85f5b1c8a1SJohn Marino 86f5b1c8a1SJohn Marino TS_STATUS_INFO * 87f5b1c8a1SJohn Marino TS_RESP_get_status_info(TS_RESP *a) 88f5b1c8a1SJohn Marino { 89f5b1c8a1SJohn Marino return a->status_info; 90f5b1c8a1SJohn Marino } 91f5b1c8a1SJohn Marino 92f5b1c8a1SJohn Marino /* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ 93f5b1c8a1SJohn Marino void 94f5b1c8a1SJohn Marino TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info) 95f5b1c8a1SJohn Marino { 96f5b1c8a1SJohn Marino /* Set new PKCS7 and TST_INFO objects. */ 97f5b1c8a1SJohn Marino PKCS7_free(a->token); 98f5b1c8a1SJohn Marino a->token = p7; 99f5b1c8a1SJohn Marino TS_TST_INFO_free(a->tst_info); 100f5b1c8a1SJohn Marino a->tst_info = tst_info; 101f5b1c8a1SJohn Marino } 102f5b1c8a1SJohn Marino 103f5b1c8a1SJohn Marino PKCS7 * 104f5b1c8a1SJohn Marino TS_RESP_get_token(TS_RESP *a) 105f5b1c8a1SJohn Marino { 106f5b1c8a1SJohn Marino return a->token; 107f5b1c8a1SJohn Marino } 108f5b1c8a1SJohn Marino 109f5b1c8a1SJohn Marino TS_TST_INFO * 110f5b1c8a1SJohn Marino TS_RESP_get_tst_info(TS_RESP *a) 111f5b1c8a1SJohn Marino { 112f5b1c8a1SJohn Marino return a->tst_info; 113f5b1c8a1SJohn Marino } 114f5b1c8a1SJohn Marino 115f5b1c8a1SJohn Marino int 116f5b1c8a1SJohn Marino TS_TST_INFO_set_version(TS_TST_INFO *a, long version) 117f5b1c8a1SJohn Marino { 118f5b1c8a1SJohn Marino return ASN1_INTEGER_set(a->version, version); 119f5b1c8a1SJohn Marino } 120f5b1c8a1SJohn Marino 121f5b1c8a1SJohn Marino long 122f5b1c8a1SJohn Marino TS_TST_INFO_get_version(const TS_TST_INFO *a) 123f5b1c8a1SJohn Marino { 124f5b1c8a1SJohn Marino return ASN1_INTEGER_get(a->version); 125f5b1c8a1SJohn Marino } 126f5b1c8a1SJohn Marino 127f5b1c8a1SJohn Marino int 128f5b1c8a1SJohn Marino TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy) 129f5b1c8a1SJohn Marino { 130f5b1c8a1SJohn Marino ASN1_OBJECT *new_policy; 131f5b1c8a1SJohn Marino 132f5b1c8a1SJohn Marino if (a->policy_id == policy) 133f5b1c8a1SJohn Marino return 1; 134f5b1c8a1SJohn Marino new_policy = OBJ_dup(policy); 135f5b1c8a1SJohn Marino if (new_policy == NULL) { 13672c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 137f5b1c8a1SJohn Marino return 0; 138f5b1c8a1SJohn Marino } 139f5b1c8a1SJohn Marino ASN1_OBJECT_free(a->policy_id); 140f5b1c8a1SJohn Marino a->policy_id = new_policy; 141f5b1c8a1SJohn Marino return 1; 142f5b1c8a1SJohn Marino } 143f5b1c8a1SJohn Marino 144f5b1c8a1SJohn Marino ASN1_OBJECT * 145f5b1c8a1SJohn Marino TS_TST_INFO_get_policy_id(TS_TST_INFO *a) 146f5b1c8a1SJohn Marino { 147f5b1c8a1SJohn Marino return a->policy_id; 148f5b1c8a1SJohn Marino } 149f5b1c8a1SJohn Marino 150f5b1c8a1SJohn Marino int 151f5b1c8a1SJohn Marino TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint) 152f5b1c8a1SJohn Marino { 153f5b1c8a1SJohn Marino TS_MSG_IMPRINT *new_msg_imprint; 154f5b1c8a1SJohn Marino 155f5b1c8a1SJohn Marino if (a->msg_imprint == msg_imprint) 156f5b1c8a1SJohn Marino return 1; 157f5b1c8a1SJohn Marino new_msg_imprint = TS_MSG_IMPRINT_dup(msg_imprint); 158f5b1c8a1SJohn Marino if (new_msg_imprint == NULL) { 15972c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 160f5b1c8a1SJohn Marino return 0; 161f5b1c8a1SJohn Marino } 162f5b1c8a1SJohn Marino TS_MSG_IMPRINT_free(a->msg_imprint); 163f5b1c8a1SJohn Marino a->msg_imprint = new_msg_imprint; 164f5b1c8a1SJohn Marino return 1; 165f5b1c8a1SJohn Marino } 166f5b1c8a1SJohn Marino 167f5b1c8a1SJohn Marino TS_MSG_IMPRINT * 168f5b1c8a1SJohn Marino TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a) 169f5b1c8a1SJohn Marino { 170f5b1c8a1SJohn Marino return a->msg_imprint; 171f5b1c8a1SJohn Marino } 172f5b1c8a1SJohn Marino 173f5b1c8a1SJohn Marino int 174f5b1c8a1SJohn Marino TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial) 175f5b1c8a1SJohn Marino { 176f5b1c8a1SJohn Marino ASN1_INTEGER *new_serial; 177f5b1c8a1SJohn Marino 178f5b1c8a1SJohn Marino if (a->serial == serial) 179f5b1c8a1SJohn Marino return 1; 180f5b1c8a1SJohn Marino new_serial = ASN1_INTEGER_dup(serial); 181f5b1c8a1SJohn Marino if (new_serial == NULL) { 18272c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 183f5b1c8a1SJohn Marino return 0; 184f5b1c8a1SJohn Marino } 185f5b1c8a1SJohn Marino ASN1_INTEGER_free(a->serial); 186f5b1c8a1SJohn Marino a->serial = new_serial; 187f5b1c8a1SJohn Marino return 1; 188f5b1c8a1SJohn Marino } 189f5b1c8a1SJohn Marino 190f5b1c8a1SJohn Marino const ASN1_INTEGER * 191f5b1c8a1SJohn Marino TS_TST_INFO_get_serial(const TS_TST_INFO *a) 192f5b1c8a1SJohn Marino { 193f5b1c8a1SJohn Marino return a->serial; 194f5b1c8a1SJohn Marino } 195f5b1c8a1SJohn Marino 196f5b1c8a1SJohn Marino int 197f5b1c8a1SJohn Marino TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime) 198f5b1c8a1SJohn Marino { 199f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME *new_time; 200f5b1c8a1SJohn Marino 201f5b1c8a1SJohn Marino if (a->time == gtime) 202f5b1c8a1SJohn Marino return 1; 203f5b1c8a1SJohn Marino new_time = ASN1_STRING_dup(gtime); 204f5b1c8a1SJohn Marino if (new_time == NULL) { 20572c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 206f5b1c8a1SJohn Marino return 0; 207f5b1c8a1SJohn Marino } 208f5b1c8a1SJohn Marino ASN1_GENERALIZEDTIME_free(a->time); 209f5b1c8a1SJohn Marino a->time = new_time; 210f5b1c8a1SJohn Marino return 1; 211f5b1c8a1SJohn Marino } 212f5b1c8a1SJohn Marino 213f5b1c8a1SJohn Marino const ASN1_GENERALIZEDTIME * 214f5b1c8a1SJohn Marino TS_TST_INFO_get_time(const TS_TST_INFO *a) 215f5b1c8a1SJohn Marino { 216f5b1c8a1SJohn Marino return a->time; 217f5b1c8a1SJohn Marino } 218f5b1c8a1SJohn Marino 219f5b1c8a1SJohn Marino int 220f5b1c8a1SJohn Marino TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy) 221f5b1c8a1SJohn Marino { 222f5b1c8a1SJohn Marino TS_ACCURACY *new_accuracy; 223f5b1c8a1SJohn Marino 224f5b1c8a1SJohn Marino if (a->accuracy == accuracy) 225f5b1c8a1SJohn Marino return 1; 226f5b1c8a1SJohn Marino new_accuracy = TS_ACCURACY_dup(accuracy); 227f5b1c8a1SJohn Marino if (new_accuracy == NULL) { 22872c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 229f5b1c8a1SJohn Marino return 0; 230f5b1c8a1SJohn Marino } 231f5b1c8a1SJohn Marino TS_ACCURACY_free(a->accuracy); 232f5b1c8a1SJohn Marino a->accuracy = new_accuracy; 233f5b1c8a1SJohn Marino return 1; 234f5b1c8a1SJohn Marino } 235f5b1c8a1SJohn Marino 236f5b1c8a1SJohn Marino TS_ACCURACY * 237f5b1c8a1SJohn Marino TS_TST_INFO_get_accuracy(TS_TST_INFO *a) 238f5b1c8a1SJohn Marino { 239f5b1c8a1SJohn Marino return a->accuracy; 240f5b1c8a1SJohn Marino } 241f5b1c8a1SJohn Marino 242f5b1c8a1SJohn Marino int 243f5b1c8a1SJohn Marino TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds) 244f5b1c8a1SJohn Marino { 245f5b1c8a1SJohn Marino ASN1_INTEGER *new_seconds; 246f5b1c8a1SJohn Marino 247f5b1c8a1SJohn Marino if (a->seconds == seconds) 248f5b1c8a1SJohn Marino return 1; 249f5b1c8a1SJohn Marino new_seconds = ASN1_INTEGER_dup(seconds); 250f5b1c8a1SJohn Marino if (new_seconds == NULL) { 25172c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 252f5b1c8a1SJohn Marino return 0; 253f5b1c8a1SJohn Marino } 254f5b1c8a1SJohn Marino ASN1_INTEGER_free(a->seconds); 255f5b1c8a1SJohn Marino a->seconds = new_seconds; 256f5b1c8a1SJohn Marino return 1; 257f5b1c8a1SJohn Marino } 258f5b1c8a1SJohn Marino 259f5b1c8a1SJohn Marino const ASN1_INTEGER * 260f5b1c8a1SJohn Marino TS_ACCURACY_get_seconds(const TS_ACCURACY *a) 261f5b1c8a1SJohn Marino { 262f5b1c8a1SJohn Marino return a->seconds; 263f5b1c8a1SJohn Marino } 264f5b1c8a1SJohn Marino 265f5b1c8a1SJohn Marino int 266f5b1c8a1SJohn Marino TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis) 267f5b1c8a1SJohn Marino { 268f5b1c8a1SJohn Marino ASN1_INTEGER *new_millis = NULL; 269f5b1c8a1SJohn Marino 270f5b1c8a1SJohn Marino if (a->millis == millis) 271f5b1c8a1SJohn Marino return 1; 272f5b1c8a1SJohn Marino if (millis != NULL) { 273f5b1c8a1SJohn Marino new_millis = ASN1_INTEGER_dup(millis); 274f5b1c8a1SJohn Marino if (new_millis == NULL) { 27572c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 276f5b1c8a1SJohn Marino return 0; 277f5b1c8a1SJohn Marino } 278f5b1c8a1SJohn Marino } 279f5b1c8a1SJohn Marino ASN1_INTEGER_free(a->millis); 280f5b1c8a1SJohn Marino a->millis = new_millis; 281f5b1c8a1SJohn Marino return 1; 282f5b1c8a1SJohn Marino } 283f5b1c8a1SJohn Marino 284f5b1c8a1SJohn Marino const ASN1_INTEGER * 285f5b1c8a1SJohn Marino TS_ACCURACY_get_millis(const TS_ACCURACY *a) 286f5b1c8a1SJohn Marino { 287f5b1c8a1SJohn Marino return a->millis; 288f5b1c8a1SJohn Marino } 289f5b1c8a1SJohn Marino 290f5b1c8a1SJohn Marino int 291f5b1c8a1SJohn Marino TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros) 292f5b1c8a1SJohn Marino { 293f5b1c8a1SJohn Marino ASN1_INTEGER *new_micros = NULL; 294f5b1c8a1SJohn Marino 295f5b1c8a1SJohn Marino if (a->micros == micros) 296f5b1c8a1SJohn Marino return 1; 297f5b1c8a1SJohn Marino if (micros != NULL) { 298f5b1c8a1SJohn Marino new_micros = ASN1_INTEGER_dup(micros); 299f5b1c8a1SJohn Marino if (new_micros == NULL) { 30072c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 301f5b1c8a1SJohn Marino return 0; 302f5b1c8a1SJohn Marino } 303f5b1c8a1SJohn Marino } 304f5b1c8a1SJohn Marino ASN1_INTEGER_free(a->micros); 305f5b1c8a1SJohn Marino a->micros = new_micros; 306f5b1c8a1SJohn Marino return 1; 307f5b1c8a1SJohn Marino } 308f5b1c8a1SJohn Marino 309f5b1c8a1SJohn Marino const ASN1_INTEGER * 310f5b1c8a1SJohn Marino TS_ACCURACY_get_micros(const TS_ACCURACY *a) 311f5b1c8a1SJohn Marino { 312f5b1c8a1SJohn Marino return a->micros; 313f5b1c8a1SJohn Marino } 314f5b1c8a1SJohn Marino 315f5b1c8a1SJohn Marino int 316f5b1c8a1SJohn Marino TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering) 317f5b1c8a1SJohn Marino { 318f5b1c8a1SJohn Marino a->ordering = ordering ? 0xFF : 0x00; 319f5b1c8a1SJohn Marino return 1; 320f5b1c8a1SJohn Marino } 321f5b1c8a1SJohn Marino 322f5b1c8a1SJohn Marino int 323f5b1c8a1SJohn Marino TS_TST_INFO_get_ordering(const TS_TST_INFO *a) 324f5b1c8a1SJohn Marino { 325f5b1c8a1SJohn Marino return a->ordering ? 1 : 0; 326f5b1c8a1SJohn Marino } 327f5b1c8a1SJohn Marino 328f5b1c8a1SJohn Marino int 329f5b1c8a1SJohn Marino TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce) 330f5b1c8a1SJohn Marino { 331f5b1c8a1SJohn Marino ASN1_INTEGER *new_nonce; 332f5b1c8a1SJohn Marino 333f5b1c8a1SJohn Marino if (a->nonce == nonce) 334f5b1c8a1SJohn Marino return 1; 335f5b1c8a1SJohn Marino new_nonce = ASN1_INTEGER_dup(nonce); 336f5b1c8a1SJohn Marino if (new_nonce == NULL) { 33772c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 338f5b1c8a1SJohn Marino return 0; 339f5b1c8a1SJohn Marino } 340f5b1c8a1SJohn Marino ASN1_INTEGER_free(a->nonce); 341f5b1c8a1SJohn Marino a->nonce = new_nonce; 342f5b1c8a1SJohn Marino return 1; 343f5b1c8a1SJohn Marino } 344f5b1c8a1SJohn Marino 345f5b1c8a1SJohn Marino const ASN1_INTEGER * 346f5b1c8a1SJohn Marino TS_TST_INFO_get_nonce(const TS_TST_INFO *a) 347f5b1c8a1SJohn Marino { 348f5b1c8a1SJohn Marino return a->nonce; 349f5b1c8a1SJohn Marino } 350f5b1c8a1SJohn Marino 351f5b1c8a1SJohn Marino int 352f5b1c8a1SJohn Marino TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa) 353f5b1c8a1SJohn Marino { 354f5b1c8a1SJohn Marino GENERAL_NAME *new_tsa; 355f5b1c8a1SJohn Marino 356f5b1c8a1SJohn Marino if (a->tsa == tsa) 357f5b1c8a1SJohn Marino return 1; 358f5b1c8a1SJohn Marino new_tsa = GENERAL_NAME_dup(tsa); 359f5b1c8a1SJohn Marino if (new_tsa == NULL) { 36072c33676SMaxim Ag TSerror(ERR_R_MALLOC_FAILURE); 361f5b1c8a1SJohn Marino return 0; 362f5b1c8a1SJohn Marino } 363f5b1c8a1SJohn Marino GENERAL_NAME_free(a->tsa); 364f5b1c8a1SJohn Marino a->tsa = new_tsa; 365f5b1c8a1SJohn Marino return 1; 366f5b1c8a1SJohn Marino } 367f5b1c8a1SJohn Marino 368f5b1c8a1SJohn Marino GENERAL_NAME * 369f5b1c8a1SJohn Marino TS_TST_INFO_get_tsa(TS_TST_INFO *a) 370f5b1c8a1SJohn Marino { 371f5b1c8a1SJohn Marino return a->tsa; 372f5b1c8a1SJohn Marino } 373f5b1c8a1SJohn Marino 374f5b1c8a1SJohn Marino STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a) 375f5b1c8a1SJohn Marino { 376f5b1c8a1SJohn Marino return a->extensions; 377f5b1c8a1SJohn Marino } 378f5b1c8a1SJohn Marino 379f5b1c8a1SJohn Marino void 380f5b1c8a1SJohn Marino TS_TST_INFO_ext_free(TS_TST_INFO *a) 381f5b1c8a1SJohn Marino { 382f5b1c8a1SJohn Marino if (!a) 383f5b1c8a1SJohn Marino return; 384f5b1c8a1SJohn Marino sk_X509_EXTENSION_pop_free(a->extensions, X509_EXTENSION_free); 385f5b1c8a1SJohn Marino a->extensions = NULL; 386f5b1c8a1SJohn Marino } 387f5b1c8a1SJohn Marino 388f5b1c8a1SJohn Marino int 389f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_count(TS_TST_INFO *a) 390f5b1c8a1SJohn Marino { 391f5b1c8a1SJohn Marino return X509v3_get_ext_count(a->extensions); 392f5b1c8a1SJohn Marino } 393f5b1c8a1SJohn Marino 394f5b1c8a1SJohn Marino int 395f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos) 396f5b1c8a1SJohn Marino { 397f5b1c8a1SJohn Marino return X509v3_get_ext_by_NID(a->extensions, nid, lastpos); 398f5b1c8a1SJohn Marino } 399f5b1c8a1SJohn Marino 400f5b1c8a1SJohn Marino int 40172c33676SMaxim Ag TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, int lastpos) 402f5b1c8a1SJohn Marino { 403f5b1c8a1SJohn Marino return X509v3_get_ext_by_OBJ(a->extensions, obj, lastpos); 404f5b1c8a1SJohn Marino } 405f5b1c8a1SJohn Marino 406f5b1c8a1SJohn Marino int 407f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos) 408f5b1c8a1SJohn Marino { 409f5b1c8a1SJohn Marino return X509v3_get_ext_by_critical(a->extensions, crit, lastpos); 410f5b1c8a1SJohn Marino } 411f5b1c8a1SJohn Marino 412f5b1c8a1SJohn Marino X509_EXTENSION * 413f5b1c8a1SJohn Marino TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc) 414f5b1c8a1SJohn Marino { 415f5b1c8a1SJohn Marino return X509v3_get_ext(a->extensions, loc); 416f5b1c8a1SJohn Marino } 417f5b1c8a1SJohn Marino 418f5b1c8a1SJohn Marino X509_EXTENSION * 419f5b1c8a1SJohn Marino TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc) 420f5b1c8a1SJohn Marino { 421f5b1c8a1SJohn Marino return X509v3_delete_ext(a->extensions, loc); 422f5b1c8a1SJohn Marino } 423f5b1c8a1SJohn Marino 424f5b1c8a1SJohn Marino int 425f5b1c8a1SJohn Marino TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc) 426f5b1c8a1SJohn Marino { 427f5b1c8a1SJohn Marino return X509v3_add_ext(&a->extensions, ex, loc) != NULL; 428f5b1c8a1SJohn Marino } 429f5b1c8a1SJohn Marino 430f5b1c8a1SJohn Marino void * 431f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx) 432f5b1c8a1SJohn Marino { 433f5b1c8a1SJohn Marino return X509V3_get_d2i(a->extensions, nid, crit, idx); 434f5b1c8a1SJohn Marino } 435