1*de0e0e4dSAntonio Huete Jimenez /* $OpenBSD: ts_rsp_utils.c,v 1.9 2022/07/24 19:25:36 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 
66*de0e0e4dSAntonio Huete Jimenez #include "ts_local.h"
67*de0e0e4dSAntonio Huete Jimenez 
68f5b1c8a1SJohn Marino /* Function definitions. */
69f5b1c8a1SJohn Marino 
70f5b1c8a1SJohn Marino int
TS_RESP_set_status_info(TS_RESP * a,TS_STATUS_INFO * status_info)71f5b1c8a1SJohn Marino TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *status_info)
72f5b1c8a1SJohn Marino {
73f5b1c8a1SJohn Marino 	TS_STATUS_INFO *new_status_info;
74f5b1c8a1SJohn Marino 
75f5b1c8a1SJohn Marino 	if (a->status_info == status_info)
76f5b1c8a1SJohn Marino 		return 1;
77f5b1c8a1SJohn Marino 	new_status_info = TS_STATUS_INFO_dup(status_info);
78f5b1c8a1SJohn Marino 	if (new_status_info == NULL) {
7972c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
80f5b1c8a1SJohn Marino 		return 0;
81f5b1c8a1SJohn Marino 	}
82f5b1c8a1SJohn Marino 	TS_STATUS_INFO_free(a->status_info);
83f5b1c8a1SJohn Marino 	a->status_info = new_status_info;
84f5b1c8a1SJohn Marino 
85f5b1c8a1SJohn Marino 	return 1;
86f5b1c8a1SJohn Marino }
87f5b1c8a1SJohn Marino 
88f5b1c8a1SJohn Marino TS_STATUS_INFO *
TS_RESP_get_status_info(TS_RESP * a)89f5b1c8a1SJohn Marino TS_RESP_get_status_info(TS_RESP *a)
90f5b1c8a1SJohn Marino {
91f5b1c8a1SJohn Marino 	return a->status_info;
92f5b1c8a1SJohn Marino }
93f5b1c8a1SJohn Marino 
94*de0e0e4dSAntonio Huete Jimenez const ASN1_UTF8STRING *
TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO * si)95*de0e0e4dSAntonio Huete Jimenez TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *si)
96*de0e0e4dSAntonio Huete Jimenez {
97*de0e0e4dSAntonio Huete Jimenez 	return si->failure_info;
98*de0e0e4dSAntonio Huete Jimenez }
99*de0e0e4dSAntonio Huete Jimenez 
STACK_OF(ASN1_UTF8STRING)100*de0e0e4dSAntonio Huete Jimenez const STACK_OF(ASN1_UTF8STRING) *
101*de0e0e4dSAntonio Huete Jimenez TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *si)
102*de0e0e4dSAntonio Huete Jimenez {
103*de0e0e4dSAntonio Huete Jimenez 	return si->text;
104*de0e0e4dSAntonio Huete Jimenez }
105*de0e0e4dSAntonio Huete Jimenez 
106*de0e0e4dSAntonio Huete Jimenez const ASN1_INTEGER *
TS_STATUS_INFO_get0_status(const TS_STATUS_INFO * si)107*de0e0e4dSAntonio Huete Jimenez TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *si)
108*de0e0e4dSAntonio Huete Jimenez {
109*de0e0e4dSAntonio Huete Jimenez 	return si->status;
110*de0e0e4dSAntonio Huete Jimenez }
111*de0e0e4dSAntonio Huete Jimenez 
112*de0e0e4dSAntonio Huete Jimenez int
TS_STATUS_INFO_set_status(TS_STATUS_INFO * si,int i)113*de0e0e4dSAntonio Huete Jimenez TS_STATUS_INFO_set_status(TS_STATUS_INFO *si, int i)
114*de0e0e4dSAntonio Huete Jimenez {
115*de0e0e4dSAntonio Huete Jimenez 	return ASN1_INTEGER_set(si->status, i);
116*de0e0e4dSAntonio Huete Jimenez }
117*de0e0e4dSAntonio Huete Jimenez 
118f5b1c8a1SJohn Marino /* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */
119f5b1c8a1SJohn Marino void
TS_RESP_set_tst_info(TS_RESP * a,PKCS7 * p7,TS_TST_INFO * tst_info)120f5b1c8a1SJohn Marino TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info)
121f5b1c8a1SJohn Marino {
122f5b1c8a1SJohn Marino 	/* Set new PKCS7 and TST_INFO objects. */
123f5b1c8a1SJohn Marino 	PKCS7_free(a->token);
124f5b1c8a1SJohn Marino 	a->token = p7;
125f5b1c8a1SJohn Marino 	TS_TST_INFO_free(a->tst_info);
126f5b1c8a1SJohn Marino 	a->tst_info = tst_info;
127f5b1c8a1SJohn Marino }
128f5b1c8a1SJohn Marino 
129f5b1c8a1SJohn Marino PKCS7 *
TS_RESP_get_token(TS_RESP * a)130f5b1c8a1SJohn Marino TS_RESP_get_token(TS_RESP *a)
131f5b1c8a1SJohn Marino {
132f5b1c8a1SJohn Marino 	return a->token;
133f5b1c8a1SJohn Marino }
134f5b1c8a1SJohn Marino 
135f5b1c8a1SJohn Marino TS_TST_INFO *
TS_RESP_get_tst_info(TS_RESP * a)136f5b1c8a1SJohn Marino TS_RESP_get_tst_info(TS_RESP *a)
137f5b1c8a1SJohn Marino {
138f5b1c8a1SJohn Marino 	return a->tst_info;
139f5b1c8a1SJohn Marino }
140f5b1c8a1SJohn Marino 
141f5b1c8a1SJohn Marino int
TS_TST_INFO_set_version(TS_TST_INFO * a,long version)142f5b1c8a1SJohn Marino TS_TST_INFO_set_version(TS_TST_INFO *a, long version)
143f5b1c8a1SJohn Marino {
144f5b1c8a1SJohn Marino 	return ASN1_INTEGER_set(a->version, version);
145f5b1c8a1SJohn Marino }
146f5b1c8a1SJohn Marino 
147f5b1c8a1SJohn Marino long
TS_TST_INFO_get_version(const TS_TST_INFO * a)148f5b1c8a1SJohn Marino TS_TST_INFO_get_version(const TS_TST_INFO *a)
149f5b1c8a1SJohn Marino {
150f5b1c8a1SJohn Marino 	return ASN1_INTEGER_get(a->version);
151f5b1c8a1SJohn Marino }
152f5b1c8a1SJohn Marino 
153f5b1c8a1SJohn Marino int
TS_TST_INFO_set_policy_id(TS_TST_INFO * a,ASN1_OBJECT * policy)154f5b1c8a1SJohn Marino TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy)
155f5b1c8a1SJohn Marino {
156f5b1c8a1SJohn Marino 	ASN1_OBJECT *new_policy;
157f5b1c8a1SJohn Marino 
158f5b1c8a1SJohn Marino 	if (a->policy_id == policy)
159f5b1c8a1SJohn Marino 		return 1;
160f5b1c8a1SJohn Marino 	new_policy = OBJ_dup(policy);
161f5b1c8a1SJohn Marino 	if (new_policy == NULL) {
16272c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
163f5b1c8a1SJohn Marino 		return 0;
164f5b1c8a1SJohn Marino 	}
165f5b1c8a1SJohn Marino 	ASN1_OBJECT_free(a->policy_id);
166f5b1c8a1SJohn Marino 	a->policy_id = new_policy;
167f5b1c8a1SJohn Marino 	return 1;
168f5b1c8a1SJohn Marino }
169f5b1c8a1SJohn Marino 
170f5b1c8a1SJohn Marino ASN1_OBJECT *
TS_TST_INFO_get_policy_id(TS_TST_INFO * a)171f5b1c8a1SJohn Marino TS_TST_INFO_get_policy_id(TS_TST_INFO *a)
172f5b1c8a1SJohn Marino {
173f5b1c8a1SJohn Marino 	return a->policy_id;
174f5b1c8a1SJohn Marino }
175f5b1c8a1SJohn Marino 
176f5b1c8a1SJohn Marino int
TS_TST_INFO_set_msg_imprint(TS_TST_INFO * a,TS_MSG_IMPRINT * msg_imprint)177f5b1c8a1SJohn Marino TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint)
178f5b1c8a1SJohn Marino {
179f5b1c8a1SJohn Marino 	TS_MSG_IMPRINT *new_msg_imprint;
180f5b1c8a1SJohn Marino 
181f5b1c8a1SJohn Marino 	if (a->msg_imprint == msg_imprint)
182f5b1c8a1SJohn Marino 		return 1;
183f5b1c8a1SJohn Marino 	new_msg_imprint = TS_MSG_IMPRINT_dup(msg_imprint);
184f5b1c8a1SJohn Marino 	if (new_msg_imprint == NULL) {
18572c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
186f5b1c8a1SJohn Marino 		return 0;
187f5b1c8a1SJohn Marino 	}
188f5b1c8a1SJohn Marino 	TS_MSG_IMPRINT_free(a->msg_imprint);
189f5b1c8a1SJohn Marino 	a->msg_imprint = new_msg_imprint;
190f5b1c8a1SJohn Marino 	return 1;
191f5b1c8a1SJohn Marino }
192f5b1c8a1SJohn Marino 
193f5b1c8a1SJohn Marino TS_MSG_IMPRINT *
TS_TST_INFO_get_msg_imprint(TS_TST_INFO * a)194f5b1c8a1SJohn Marino TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a)
195f5b1c8a1SJohn Marino {
196f5b1c8a1SJohn Marino 	return a->msg_imprint;
197f5b1c8a1SJohn Marino }
198f5b1c8a1SJohn Marino 
199f5b1c8a1SJohn Marino int
TS_TST_INFO_set_serial(TS_TST_INFO * a,const ASN1_INTEGER * serial)200f5b1c8a1SJohn Marino TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial)
201f5b1c8a1SJohn Marino {
202f5b1c8a1SJohn Marino 	ASN1_INTEGER *new_serial;
203f5b1c8a1SJohn Marino 
204f5b1c8a1SJohn Marino 	if (a->serial == serial)
205f5b1c8a1SJohn Marino 		return 1;
206f5b1c8a1SJohn Marino 	new_serial = ASN1_INTEGER_dup(serial);
207f5b1c8a1SJohn Marino 	if (new_serial == NULL) {
20872c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
209f5b1c8a1SJohn Marino 		return 0;
210f5b1c8a1SJohn Marino 	}
211f5b1c8a1SJohn Marino 	ASN1_INTEGER_free(a->serial);
212f5b1c8a1SJohn Marino 	a->serial = new_serial;
213f5b1c8a1SJohn Marino 	return 1;
214f5b1c8a1SJohn Marino }
215f5b1c8a1SJohn Marino 
216f5b1c8a1SJohn Marino const ASN1_INTEGER *
TS_TST_INFO_get_serial(const TS_TST_INFO * a)217f5b1c8a1SJohn Marino TS_TST_INFO_get_serial(const TS_TST_INFO *a)
218f5b1c8a1SJohn Marino {
219f5b1c8a1SJohn Marino 	return a->serial;
220f5b1c8a1SJohn Marino }
221f5b1c8a1SJohn Marino 
222f5b1c8a1SJohn Marino int
TS_TST_INFO_set_time(TS_TST_INFO * a,const ASN1_GENERALIZEDTIME * gtime)223f5b1c8a1SJohn Marino TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime)
224f5b1c8a1SJohn Marino {
225f5b1c8a1SJohn Marino 	ASN1_GENERALIZEDTIME *new_time;
226f5b1c8a1SJohn Marino 
227f5b1c8a1SJohn Marino 	if (a->time == gtime)
228f5b1c8a1SJohn Marino 		return 1;
229f5b1c8a1SJohn Marino 	new_time = ASN1_STRING_dup(gtime);
230f5b1c8a1SJohn Marino 	if (new_time == NULL) {
23172c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
232f5b1c8a1SJohn Marino 		return 0;
233f5b1c8a1SJohn Marino 	}
234f5b1c8a1SJohn Marino 	ASN1_GENERALIZEDTIME_free(a->time);
235f5b1c8a1SJohn Marino 	a->time = new_time;
236f5b1c8a1SJohn Marino 	return 1;
237f5b1c8a1SJohn Marino }
238f5b1c8a1SJohn Marino 
239f5b1c8a1SJohn Marino const ASN1_GENERALIZEDTIME *
TS_TST_INFO_get_time(const TS_TST_INFO * a)240f5b1c8a1SJohn Marino TS_TST_INFO_get_time(const TS_TST_INFO *a)
241f5b1c8a1SJohn Marino {
242f5b1c8a1SJohn Marino 	return a->time;
243f5b1c8a1SJohn Marino }
244f5b1c8a1SJohn Marino 
245f5b1c8a1SJohn Marino int
TS_TST_INFO_set_accuracy(TS_TST_INFO * a,TS_ACCURACY * accuracy)246f5b1c8a1SJohn Marino TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy)
247f5b1c8a1SJohn Marino {
248f5b1c8a1SJohn Marino 	TS_ACCURACY *new_accuracy;
249f5b1c8a1SJohn Marino 
250f5b1c8a1SJohn Marino 	if (a->accuracy == accuracy)
251f5b1c8a1SJohn Marino 		return 1;
252f5b1c8a1SJohn Marino 	new_accuracy = TS_ACCURACY_dup(accuracy);
253f5b1c8a1SJohn Marino 	if (new_accuracy == NULL) {
25472c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
255f5b1c8a1SJohn Marino 		return 0;
256f5b1c8a1SJohn Marino 	}
257f5b1c8a1SJohn Marino 	TS_ACCURACY_free(a->accuracy);
258f5b1c8a1SJohn Marino 	a->accuracy = new_accuracy;
259f5b1c8a1SJohn Marino 	return 1;
260f5b1c8a1SJohn Marino }
261f5b1c8a1SJohn Marino 
262f5b1c8a1SJohn Marino TS_ACCURACY *
TS_TST_INFO_get_accuracy(TS_TST_INFO * a)263f5b1c8a1SJohn Marino TS_TST_INFO_get_accuracy(TS_TST_INFO *a)
264f5b1c8a1SJohn Marino {
265f5b1c8a1SJohn Marino 	return a->accuracy;
266f5b1c8a1SJohn Marino }
267f5b1c8a1SJohn Marino 
268f5b1c8a1SJohn Marino int
TS_ACCURACY_set_seconds(TS_ACCURACY * a,const ASN1_INTEGER * seconds)269f5b1c8a1SJohn Marino TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds)
270f5b1c8a1SJohn Marino {
271f5b1c8a1SJohn Marino 	ASN1_INTEGER *new_seconds;
272f5b1c8a1SJohn Marino 
273f5b1c8a1SJohn Marino 	if (a->seconds == seconds)
274f5b1c8a1SJohn Marino 		return 1;
275f5b1c8a1SJohn Marino 	new_seconds = ASN1_INTEGER_dup(seconds);
276f5b1c8a1SJohn Marino 	if (new_seconds == NULL) {
27772c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
278f5b1c8a1SJohn Marino 		return 0;
279f5b1c8a1SJohn Marino 	}
280f5b1c8a1SJohn Marino 	ASN1_INTEGER_free(a->seconds);
281f5b1c8a1SJohn Marino 	a->seconds = new_seconds;
282f5b1c8a1SJohn Marino 	return 1;
283f5b1c8a1SJohn Marino }
284f5b1c8a1SJohn Marino 
285f5b1c8a1SJohn Marino const ASN1_INTEGER *
TS_ACCURACY_get_seconds(const TS_ACCURACY * a)286f5b1c8a1SJohn Marino TS_ACCURACY_get_seconds(const TS_ACCURACY *a)
287f5b1c8a1SJohn Marino {
288f5b1c8a1SJohn Marino 	return a->seconds;
289f5b1c8a1SJohn Marino }
290f5b1c8a1SJohn Marino 
291f5b1c8a1SJohn Marino int
TS_ACCURACY_set_millis(TS_ACCURACY * a,const ASN1_INTEGER * millis)292f5b1c8a1SJohn Marino TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis)
293f5b1c8a1SJohn Marino {
294f5b1c8a1SJohn Marino 	ASN1_INTEGER *new_millis = NULL;
295f5b1c8a1SJohn Marino 
296f5b1c8a1SJohn Marino 	if (a->millis == millis)
297f5b1c8a1SJohn Marino 		return 1;
298f5b1c8a1SJohn Marino 	if (millis != NULL) {
299f5b1c8a1SJohn Marino 		new_millis = ASN1_INTEGER_dup(millis);
300f5b1c8a1SJohn Marino 		if (new_millis == NULL) {
30172c33676SMaxim Ag 			TSerror(ERR_R_MALLOC_FAILURE);
302f5b1c8a1SJohn Marino 			return 0;
303f5b1c8a1SJohn Marino 		}
304f5b1c8a1SJohn Marino 	}
305f5b1c8a1SJohn Marino 	ASN1_INTEGER_free(a->millis);
306f5b1c8a1SJohn Marino 	a->millis = new_millis;
307f5b1c8a1SJohn Marino 	return 1;
308f5b1c8a1SJohn Marino }
309f5b1c8a1SJohn Marino 
310f5b1c8a1SJohn Marino const ASN1_INTEGER *
TS_ACCURACY_get_millis(const TS_ACCURACY * a)311f5b1c8a1SJohn Marino TS_ACCURACY_get_millis(const TS_ACCURACY *a)
312f5b1c8a1SJohn Marino {
313f5b1c8a1SJohn Marino 	return a->millis;
314f5b1c8a1SJohn Marino }
315f5b1c8a1SJohn Marino 
316f5b1c8a1SJohn Marino int
TS_ACCURACY_set_micros(TS_ACCURACY * a,const ASN1_INTEGER * micros)317f5b1c8a1SJohn Marino TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros)
318f5b1c8a1SJohn Marino {
319f5b1c8a1SJohn Marino 	ASN1_INTEGER *new_micros = NULL;
320f5b1c8a1SJohn Marino 
321f5b1c8a1SJohn Marino 	if (a->micros == micros)
322f5b1c8a1SJohn Marino 		return 1;
323f5b1c8a1SJohn Marino 	if (micros != NULL) {
324f5b1c8a1SJohn Marino 		new_micros = ASN1_INTEGER_dup(micros);
325f5b1c8a1SJohn Marino 		if (new_micros == NULL) {
32672c33676SMaxim Ag 			TSerror(ERR_R_MALLOC_FAILURE);
327f5b1c8a1SJohn Marino 			return 0;
328f5b1c8a1SJohn Marino 		}
329f5b1c8a1SJohn Marino 	}
330f5b1c8a1SJohn Marino 	ASN1_INTEGER_free(a->micros);
331f5b1c8a1SJohn Marino 	a->micros = new_micros;
332f5b1c8a1SJohn Marino 	return 1;
333f5b1c8a1SJohn Marino }
334f5b1c8a1SJohn Marino 
335f5b1c8a1SJohn Marino const ASN1_INTEGER *
TS_ACCURACY_get_micros(const TS_ACCURACY * a)336f5b1c8a1SJohn Marino TS_ACCURACY_get_micros(const TS_ACCURACY *a)
337f5b1c8a1SJohn Marino {
338f5b1c8a1SJohn Marino 	return a->micros;
339f5b1c8a1SJohn Marino }
340f5b1c8a1SJohn Marino 
341f5b1c8a1SJohn Marino int
TS_TST_INFO_set_ordering(TS_TST_INFO * a,int ordering)342f5b1c8a1SJohn Marino TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering)
343f5b1c8a1SJohn Marino {
344f5b1c8a1SJohn Marino 	a->ordering = ordering ? 0xFF : 0x00;
345f5b1c8a1SJohn Marino 	return 1;
346f5b1c8a1SJohn Marino }
347f5b1c8a1SJohn Marino 
348f5b1c8a1SJohn Marino int
TS_TST_INFO_get_ordering(const TS_TST_INFO * a)349f5b1c8a1SJohn Marino TS_TST_INFO_get_ordering(const TS_TST_INFO *a)
350f5b1c8a1SJohn Marino {
351f5b1c8a1SJohn Marino 	return a->ordering ? 1 : 0;
352f5b1c8a1SJohn Marino }
353f5b1c8a1SJohn Marino 
354f5b1c8a1SJohn Marino int
TS_TST_INFO_set_nonce(TS_TST_INFO * a,const ASN1_INTEGER * nonce)355f5b1c8a1SJohn Marino TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce)
356f5b1c8a1SJohn Marino {
357f5b1c8a1SJohn Marino 	ASN1_INTEGER *new_nonce;
358f5b1c8a1SJohn Marino 
359f5b1c8a1SJohn Marino 	if (a->nonce == nonce)
360f5b1c8a1SJohn Marino 		return 1;
361f5b1c8a1SJohn Marino 	new_nonce = ASN1_INTEGER_dup(nonce);
362f5b1c8a1SJohn Marino 	if (new_nonce == NULL) {
36372c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
364f5b1c8a1SJohn Marino 		return 0;
365f5b1c8a1SJohn Marino 	}
366f5b1c8a1SJohn Marino 	ASN1_INTEGER_free(a->nonce);
367f5b1c8a1SJohn Marino 	a->nonce = new_nonce;
368f5b1c8a1SJohn Marino 	return 1;
369f5b1c8a1SJohn Marino }
370f5b1c8a1SJohn Marino 
371f5b1c8a1SJohn Marino const ASN1_INTEGER *
TS_TST_INFO_get_nonce(const TS_TST_INFO * a)372f5b1c8a1SJohn Marino TS_TST_INFO_get_nonce(const TS_TST_INFO *a)
373f5b1c8a1SJohn Marino {
374f5b1c8a1SJohn Marino 	return a->nonce;
375f5b1c8a1SJohn Marino }
376f5b1c8a1SJohn Marino 
377f5b1c8a1SJohn Marino int
TS_TST_INFO_set_tsa(TS_TST_INFO * a,GENERAL_NAME * tsa)378f5b1c8a1SJohn Marino TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa)
379f5b1c8a1SJohn Marino {
380f5b1c8a1SJohn Marino 	GENERAL_NAME *new_tsa;
381f5b1c8a1SJohn Marino 
382f5b1c8a1SJohn Marino 	if (a->tsa == tsa)
383f5b1c8a1SJohn Marino 		return 1;
384f5b1c8a1SJohn Marino 	new_tsa = GENERAL_NAME_dup(tsa);
385f5b1c8a1SJohn Marino 	if (new_tsa == NULL) {
38672c33676SMaxim Ag 		TSerror(ERR_R_MALLOC_FAILURE);
387f5b1c8a1SJohn Marino 		return 0;
388f5b1c8a1SJohn Marino 	}
389f5b1c8a1SJohn Marino 	GENERAL_NAME_free(a->tsa);
390f5b1c8a1SJohn Marino 	a->tsa = new_tsa;
391f5b1c8a1SJohn Marino 	return 1;
392f5b1c8a1SJohn Marino }
393f5b1c8a1SJohn Marino 
394f5b1c8a1SJohn Marino GENERAL_NAME *
TS_TST_INFO_get_tsa(TS_TST_INFO * a)395f5b1c8a1SJohn Marino TS_TST_INFO_get_tsa(TS_TST_INFO *a)
396f5b1c8a1SJohn Marino {
397f5b1c8a1SJohn Marino 	return a->tsa;
398f5b1c8a1SJohn Marino }
399f5b1c8a1SJohn Marino 
STACK_OF(X509_EXTENSION)400f5b1c8a1SJohn Marino STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a)
401f5b1c8a1SJohn Marino {
402f5b1c8a1SJohn Marino 	return a->extensions;
403f5b1c8a1SJohn Marino }
404f5b1c8a1SJohn Marino 
405f5b1c8a1SJohn Marino void
TS_TST_INFO_ext_free(TS_TST_INFO * a)406f5b1c8a1SJohn Marino TS_TST_INFO_ext_free(TS_TST_INFO *a)
407f5b1c8a1SJohn Marino {
408f5b1c8a1SJohn Marino 	if (!a)
409f5b1c8a1SJohn Marino 		return;
410f5b1c8a1SJohn Marino 	sk_X509_EXTENSION_pop_free(a->extensions, X509_EXTENSION_free);
411f5b1c8a1SJohn Marino 	a->extensions = NULL;
412f5b1c8a1SJohn Marino }
413f5b1c8a1SJohn Marino 
414f5b1c8a1SJohn Marino int
TS_TST_INFO_get_ext_count(TS_TST_INFO * a)415f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_count(TS_TST_INFO *a)
416f5b1c8a1SJohn Marino {
417f5b1c8a1SJohn Marino 	return X509v3_get_ext_count(a->extensions);
418f5b1c8a1SJohn Marino }
419f5b1c8a1SJohn Marino 
420f5b1c8a1SJohn Marino int
TS_TST_INFO_get_ext_by_NID(TS_TST_INFO * a,int nid,int lastpos)421f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos)
422f5b1c8a1SJohn Marino {
423f5b1c8a1SJohn Marino 	return X509v3_get_ext_by_NID(a->extensions, nid, lastpos);
424f5b1c8a1SJohn Marino }
425f5b1c8a1SJohn Marino 
426f5b1c8a1SJohn Marino int
TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO * a,const ASN1_OBJECT * obj,int lastpos)42772c33676SMaxim Ag TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, int lastpos)
428f5b1c8a1SJohn Marino {
429f5b1c8a1SJohn Marino 	return X509v3_get_ext_by_OBJ(a->extensions, obj, lastpos);
430f5b1c8a1SJohn Marino }
431f5b1c8a1SJohn Marino 
432f5b1c8a1SJohn Marino int
TS_TST_INFO_get_ext_by_critical(TS_TST_INFO * a,int crit,int lastpos)433f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos)
434f5b1c8a1SJohn Marino {
435f5b1c8a1SJohn Marino 	return X509v3_get_ext_by_critical(a->extensions, crit, lastpos);
436f5b1c8a1SJohn Marino }
437f5b1c8a1SJohn Marino 
438f5b1c8a1SJohn Marino X509_EXTENSION *
TS_TST_INFO_get_ext(TS_TST_INFO * a,int loc)439f5b1c8a1SJohn Marino TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc)
440f5b1c8a1SJohn Marino {
441f5b1c8a1SJohn Marino 	return X509v3_get_ext(a->extensions, loc);
442f5b1c8a1SJohn Marino }
443f5b1c8a1SJohn Marino 
444f5b1c8a1SJohn Marino X509_EXTENSION *
TS_TST_INFO_delete_ext(TS_TST_INFO * a,int loc)445f5b1c8a1SJohn Marino TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc)
446f5b1c8a1SJohn Marino {
447f5b1c8a1SJohn Marino 	return X509v3_delete_ext(a->extensions, loc);
448f5b1c8a1SJohn Marino }
449f5b1c8a1SJohn Marino 
450f5b1c8a1SJohn Marino int
TS_TST_INFO_add_ext(TS_TST_INFO * a,X509_EXTENSION * ex,int loc)451f5b1c8a1SJohn Marino TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc)
452f5b1c8a1SJohn Marino {
453f5b1c8a1SJohn Marino 	return X509v3_add_ext(&a->extensions, ex, loc) != NULL;
454f5b1c8a1SJohn Marino }
455f5b1c8a1SJohn Marino 
456f5b1c8a1SJohn Marino void *
TS_TST_INFO_get_ext_d2i(TS_TST_INFO * a,int nid,int * crit,int * idx)457f5b1c8a1SJohn Marino TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx)
458f5b1c8a1SJohn Marino {
459f5b1c8a1SJohn Marino 	return X509V3_get_d2i(a->extensions, nid, crit, idx);
460f5b1c8a1SJohn Marino }
461