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