1e1051a39Sopenharmony_ci/*
2e1051a39Sopenharmony_ci * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
3e1051a39Sopenharmony_ci *
4e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License").  You may not use
5e1051a39Sopenharmony_ci * this file except in compliance with the License.  You can obtain a copy
6e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at
7e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html
8e1051a39Sopenharmony_ci */
9e1051a39Sopenharmony_ci
10e1051a39Sopenharmony_ci#include <stdio.h>
11e1051a39Sopenharmony_ci#include "internal/cryptlib.h"
12e1051a39Sopenharmony_ci#include <openssl/objects.h>
13e1051a39Sopenharmony_ci#include <openssl/ts.h>
14e1051a39Sopenharmony_ci#include <openssl/pkcs7.h>
15e1051a39Sopenharmony_ci#include "ts_local.h"
16e1051a39Sopenharmony_ci
17e1051a39Sopenharmony_ciint TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *status_info)
18e1051a39Sopenharmony_ci{
19e1051a39Sopenharmony_ci    TS_STATUS_INFO *new_status_info;
20e1051a39Sopenharmony_ci
21e1051a39Sopenharmony_ci    if (a->status_info == status_info)
22e1051a39Sopenharmony_ci        return 1;
23e1051a39Sopenharmony_ci    new_status_info = TS_STATUS_INFO_dup(status_info);
24e1051a39Sopenharmony_ci    if (new_status_info == NULL) {
25e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
26e1051a39Sopenharmony_ci        return 0;
27e1051a39Sopenharmony_ci    }
28e1051a39Sopenharmony_ci    TS_STATUS_INFO_free(a->status_info);
29e1051a39Sopenharmony_ci    a->status_info = new_status_info;
30e1051a39Sopenharmony_ci
31e1051a39Sopenharmony_ci    return 1;
32e1051a39Sopenharmony_ci}
33e1051a39Sopenharmony_ci
34e1051a39Sopenharmony_ciTS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a)
35e1051a39Sopenharmony_ci{
36e1051a39Sopenharmony_ci    return a->status_info;
37e1051a39Sopenharmony_ci}
38e1051a39Sopenharmony_ci
39e1051a39Sopenharmony_ci/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */
40e1051a39Sopenharmony_civoid TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info)
41e1051a39Sopenharmony_ci{
42e1051a39Sopenharmony_ci    PKCS7_free(a->token);
43e1051a39Sopenharmony_ci    a->token = p7;
44e1051a39Sopenharmony_ci    TS_TST_INFO_free(a->tst_info);
45e1051a39Sopenharmony_ci    a->tst_info = tst_info;
46e1051a39Sopenharmony_ci}
47e1051a39Sopenharmony_ci
48e1051a39Sopenharmony_ciPKCS7 *TS_RESP_get_token(TS_RESP *a)
49e1051a39Sopenharmony_ci{
50e1051a39Sopenharmony_ci    return a->token;
51e1051a39Sopenharmony_ci}
52e1051a39Sopenharmony_ci
53e1051a39Sopenharmony_ciTS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a)
54e1051a39Sopenharmony_ci{
55e1051a39Sopenharmony_ci    return a->tst_info;
56e1051a39Sopenharmony_ci}
57e1051a39Sopenharmony_ci
58e1051a39Sopenharmony_ciint TS_TST_INFO_set_version(TS_TST_INFO *a, long version)
59e1051a39Sopenharmony_ci{
60e1051a39Sopenharmony_ci    return ASN1_INTEGER_set(a->version, version);
61e1051a39Sopenharmony_ci}
62e1051a39Sopenharmony_ci
63e1051a39Sopenharmony_cilong TS_TST_INFO_get_version(const TS_TST_INFO *a)
64e1051a39Sopenharmony_ci{
65e1051a39Sopenharmony_ci    return ASN1_INTEGER_get(a->version);
66e1051a39Sopenharmony_ci}
67e1051a39Sopenharmony_ci
68e1051a39Sopenharmony_ciint TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy)
69e1051a39Sopenharmony_ci{
70e1051a39Sopenharmony_ci    ASN1_OBJECT *new_policy;
71e1051a39Sopenharmony_ci
72e1051a39Sopenharmony_ci    if (a->policy_id == policy)
73e1051a39Sopenharmony_ci        return 1;
74e1051a39Sopenharmony_ci    new_policy = OBJ_dup(policy);
75e1051a39Sopenharmony_ci    if (new_policy == NULL) {
76e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
77e1051a39Sopenharmony_ci        return 0;
78e1051a39Sopenharmony_ci    }
79e1051a39Sopenharmony_ci    ASN1_OBJECT_free(a->policy_id);
80e1051a39Sopenharmony_ci    a->policy_id = new_policy;
81e1051a39Sopenharmony_ci    return 1;
82e1051a39Sopenharmony_ci}
83e1051a39Sopenharmony_ci
84e1051a39Sopenharmony_ciASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a)
85e1051a39Sopenharmony_ci{
86e1051a39Sopenharmony_ci    return a->policy_id;
87e1051a39Sopenharmony_ci}
88e1051a39Sopenharmony_ci
89e1051a39Sopenharmony_ciint TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint)
90e1051a39Sopenharmony_ci{
91e1051a39Sopenharmony_ci    TS_MSG_IMPRINT *new_msg_imprint;
92e1051a39Sopenharmony_ci
93e1051a39Sopenharmony_ci    if (a->msg_imprint == msg_imprint)
94e1051a39Sopenharmony_ci        return 1;
95e1051a39Sopenharmony_ci    new_msg_imprint = TS_MSG_IMPRINT_dup(msg_imprint);
96e1051a39Sopenharmony_ci    if (new_msg_imprint == NULL) {
97e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
98e1051a39Sopenharmony_ci        return 0;
99e1051a39Sopenharmony_ci    }
100e1051a39Sopenharmony_ci    TS_MSG_IMPRINT_free(a->msg_imprint);
101e1051a39Sopenharmony_ci    a->msg_imprint = new_msg_imprint;
102e1051a39Sopenharmony_ci    return 1;
103e1051a39Sopenharmony_ci}
104e1051a39Sopenharmony_ci
105e1051a39Sopenharmony_ciTS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a)
106e1051a39Sopenharmony_ci{
107e1051a39Sopenharmony_ci    return a->msg_imprint;
108e1051a39Sopenharmony_ci}
109e1051a39Sopenharmony_ci
110e1051a39Sopenharmony_ciint TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial)
111e1051a39Sopenharmony_ci{
112e1051a39Sopenharmony_ci    ASN1_INTEGER *new_serial;
113e1051a39Sopenharmony_ci
114e1051a39Sopenharmony_ci    if (a->serial == serial)
115e1051a39Sopenharmony_ci        return 1;
116e1051a39Sopenharmony_ci    new_serial = ASN1_INTEGER_dup(serial);
117e1051a39Sopenharmony_ci    if (new_serial == NULL) {
118e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
119e1051a39Sopenharmony_ci        return 0;
120e1051a39Sopenharmony_ci    }
121e1051a39Sopenharmony_ci    ASN1_INTEGER_free(a->serial);
122e1051a39Sopenharmony_ci    a->serial = new_serial;
123e1051a39Sopenharmony_ci    return 1;
124e1051a39Sopenharmony_ci}
125e1051a39Sopenharmony_ci
126e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a)
127e1051a39Sopenharmony_ci{
128e1051a39Sopenharmony_ci    return a->serial;
129e1051a39Sopenharmony_ci}
130e1051a39Sopenharmony_ci
131e1051a39Sopenharmony_ciint TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime)
132e1051a39Sopenharmony_ci{
133e1051a39Sopenharmony_ci    ASN1_GENERALIZEDTIME *new_time;
134e1051a39Sopenharmony_ci
135e1051a39Sopenharmony_ci    if (a->time == gtime)
136e1051a39Sopenharmony_ci        return 1;
137e1051a39Sopenharmony_ci    new_time = ASN1_STRING_dup(gtime);
138e1051a39Sopenharmony_ci    if (new_time == NULL) {
139e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
140e1051a39Sopenharmony_ci        return 0;
141e1051a39Sopenharmony_ci    }
142e1051a39Sopenharmony_ci    ASN1_GENERALIZEDTIME_free(a->time);
143e1051a39Sopenharmony_ci    a->time = new_time;
144e1051a39Sopenharmony_ci    return 1;
145e1051a39Sopenharmony_ci}
146e1051a39Sopenharmony_ci
147e1051a39Sopenharmony_ciconst ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a)
148e1051a39Sopenharmony_ci{
149e1051a39Sopenharmony_ci    return a->time;
150e1051a39Sopenharmony_ci}
151e1051a39Sopenharmony_ci
152e1051a39Sopenharmony_ciint TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy)
153e1051a39Sopenharmony_ci{
154e1051a39Sopenharmony_ci    TS_ACCURACY *new_accuracy;
155e1051a39Sopenharmony_ci
156e1051a39Sopenharmony_ci    if (a->accuracy == accuracy)
157e1051a39Sopenharmony_ci        return 1;
158e1051a39Sopenharmony_ci    new_accuracy = TS_ACCURACY_dup(accuracy);
159e1051a39Sopenharmony_ci    if (new_accuracy == NULL) {
160e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
161e1051a39Sopenharmony_ci        return 0;
162e1051a39Sopenharmony_ci    }
163e1051a39Sopenharmony_ci    TS_ACCURACY_free(a->accuracy);
164e1051a39Sopenharmony_ci    a->accuracy = new_accuracy;
165e1051a39Sopenharmony_ci    return 1;
166e1051a39Sopenharmony_ci}
167e1051a39Sopenharmony_ci
168e1051a39Sopenharmony_ciTS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a)
169e1051a39Sopenharmony_ci{
170e1051a39Sopenharmony_ci    return a->accuracy;
171e1051a39Sopenharmony_ci}
172e1051a39Sopenharmony_ci
173e1051a39Sopenharmony_ciint TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds)
174e1051a39Sopenharmony_ci{
175e1051a39Sopenharmony_ci    ASN1_INTEGER *new_seconds;
176e1051a39Sopenharmony_ci
177e1051a39Sopenharmony_ci    if (a->seconds == seconds)
178e1051a39Sopenharmony_ci        return 1;
179e1051a39Sopenharmony_ci    new_seconds = ASN1_INTEGER_dup(seconds);
180e1051a39Sopenharmony_ci    if (new_seconds == NULL) {
181e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
182e1051a39Sopenharmony_ci        return 0;
183e1051a39Sopenharmony_ci    }
184e1051a39Sopenharmony_ci    ASN1_INTEGER_free(a->seconds);
185e1051a39Sopenharmony_ci    a->seconds = new_seconds;
186e1051a39Sopenharmony_ci    return 1;
187e1051a39Sopenharmony_ci}
188e1051a39Sopenharmony_ci
189e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a)
190e1051a39Sopenharmony_ci{
191e1051a39Sopenharmony_ci    return a->seconds;
192e1051a39Sopenharmony_ci}
193e1051a39Sopenharmony_ci
194e1051a39Sopenharmony_ciint TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis)
195e1051a39Sopenharmony_ci{
196e1051a39Sopenharmony_ci    ASN1_INTEGER *new_millis = NULL;
197e1051a39Sopenharmony_ci
198e1051a39Sopenharmony_ci    if (a->millis == millis)
199e1051a39Sopenharmony_ci        return 1;
200e1051a39Sopenharmony_ci    if (millis != NULL) {
201e1051a39Sopenharmony_ci        new_millis = ASN1_INTEGER_dup(millis);
202e1051a39Sopenharmony_ci        if (new_millis == NULL) {
203e1051a39Sopenharmony_ci            ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
204e1051a39Sopenharmony_ci            return 0;
205e1051a39Sopenharmony_ci        }
206e1051a39Sopenharmony_ci    }
207e1051a39Sopenharmony_ci    ASN1_INTEGER_free(a->millis);
208e1051a39Sopenharmony_ci    a->millis = new_millis;
209e1051a39Sopenharmony_ci    return 1;
210e1051a39Sopenharmony_ci}
211e1051a39Sopenharmony_ci
212e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a)
213e1051a39Sopenharmony_ci{
214e1051a39Sopenharmony_ci    return a->millis;
215e1051a39Sopenharmony_ci}
216e1051a39Sopenharmony_ci
217e1051a39Sopenharmony_ciint TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros)
218e1051a39Sopenharmony_ci{
219e1051a39Sopenharmony_ci    ASN1_INTEGER *new_micros = NULL;
220e1051a39Sopenharmony_ci
221e1051a39Sopenharmony_ci    if (a->micros == micros)
222e1051a39Sopenharmony_ci        return 1;
223e1051a39Sopenharmony_ci    if (micros != NULL) {
224e1051a39Sopenharmony_ci        new_micros = ASN1_INTEGER_dup(micros);
225e1051a39Sopenharmony_ci        if (new_micros == NULL) {
226e1051a39Sopenharmony_ci            ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
227e1051a39Sopenharmony_ci            return 0;
228e1051a39Sopenharmony_ci        }
229e1051a39Sopenharmony_ci    }
230e1051a39Sopenharmony_ci    ASN1_INTEGER_free(a->micros);
231e1051a39Sopenharmony_ci    a->micros = new_micros;
232e1051a39Sopenharmony_ci    return 1;
233e1051a39Sopenharmony_ci}
234e1051a39Sopenharmony_ci
235e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a)
236e1051a39Sopenharmony_ci{
237e1051a39Sopenharmony_ci    return a->micros;
238e1051a39Sopenharmony_ci}
239e1051a39Sopenharmony_ci
240e1051a39Sopenharmony_ciint TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering)
241e1051a39Sopenharmony_ci{
242e1051a39Sopenharmony_ci    a->ordering = ordering ? 0xFF : 0x00;
243e1051a39Sopenharmony_ci    return 1;
244e1051a39Sopenharmony_ci}
245e1051a39Sopenharmony_ci
246e1051a39Sopenharmony_ciint TS_TST_INFO_get_ordering(const TS_TST_INFO *a)
247e1051a39Sopenharmony_ci{
248e1051a39Sopenharmony_ci    return a->ordering ? 1 : 0;
249e1051a39Sopenharmony_ci}
250e1051a39Sopenharmony_ci
251e1051a39Sopenharmony_ciint TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce)
252e1051a39Sopenharmony_ci{
253e1051a39Sopenharmony_ci    ASN1_INTEGER *new_nonce;
254e1051a39Sopenharmony_ci
255e1051a39Sopenharmony_ci    if (a->nonce == nonce)
256e1051a39Sopenharmony_ci        return 1;
257e1051a39Sopenharmony_ci    new_nonce = ASN1_INTEGER_dup(nonce);
258e1051a39Sopenharmony_ci    if (new_nonce == NULL) {
259e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
260e1051a39Sopenharmony_ci        return 0;
261e1051a39Sopenharmony_ci    }
262e1051a39Sopenharmony_ci    ASN1_INTEGER_free(a->nonce);
263e1051a39Sopenharmony_ci    a->nonce = new_nonce;
264e1051a39Sopenharmony_ci    return 1;
265e1051a39Sopenharmony_ci}
266e1051a39Sopenharmony_ci
267e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a)
268e1051a39Sopenharmony_ci{
269e1051a39Sopenharmony_ci    return a->nonce;
270e1051a39Sopenharmony_ci}
271e1051a39Sopenharmony_ci
272e1051a39Sopenharmony_ciint TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa)
273e1051a39Sopenharmony_ci{
274e1051a39Sopenharmony_ci    GENERAL_NAME *new_tsa;
275e1051a39Sopenharmony_ci
276e1051a39Sopenharmony_ci    if (a->tsa == tsa)
277e1051a39Sopenharmony_ci        return 1;
278e1051a39Sopenharmony_ci    new_tsa = GENERAL_NAME_dup(tsa);
279e1051a39Sopenharmony_ci    if (new_tsa == NULL) {
280e1051a39Sopenharmony_ci        ERR_raise(ERR_LIB_TS, ERR_R_MALLOC_FAILURE);
281e1051a39Sopenharmony_ci        return 0;
282e1051a39Sopenharmony_ci    }
283e1051a39Sopenharmony_ci    GENERAL_NAME_free(a->tsa);
284e1051a39Sopenharmony_ci    a->tsa = new_tsa;
285e1051a39Sopenharmony_ci    return 1;
286e1051a39Sopenharmony_ci}
287e1051a39Sopenharmony_ci
288e1051a39Sopenharmony_ciGENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a)
289e1051a39Sopenharmony_ci{
290e1051a39Sopenharmony_ci    return a->tsa;
291e1051a39Sopenharmony_ci}
292e1051a39Sopenharmony_ci
293e1051a39Sopenharmony_ciSTACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a)
294e1051a39Sopenharmony_ci{
295e1051a39Sopenharmony_ci    return a->extensions;
296e1051a39Sopenharmony_ci}
297e1051a39Sopenharmony_ci
298e1051a39Sopenharmony_civoid TS_TST_INFO_ext_free(TS_TST_INFO *a)
299e1051a39Sopenharmony_ci{
300e1051a39Sopenharmony_ci    if (!a)
301e1051a39Sopenharmony_ci        return;
302e1051a39Sopenharmony_ci    sk_X509_EXTENSION_pop_free(a->extensions, X509_EXTENSION_free);
303e1051a39Sopenharmony_ci    a->extensions = NULL;
304e1051a39Sopenharmony_ci}
305e1051a39Sopenharmony_ci
306e1051a39Sopenharmony_ciint TS_TST_INFO_get_ext_count(TS_TST_INFO *a)
307e1051a39Sopenharmony_ci{
308e1051a39Sopenharmony_ci    return X509v3_get_ext_count(a->extensions);
309e1051a39Sopenharmony_ci}
310e1051a39Sopenharmony_ci
311e1051a39Sopenharmony_ciint TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos)
312e1051a39Sopenharmony_ci{
313e1051a39Sopenharmony_ci    return X509v3_get_ext_by_NID(a->extensions, nid, lastpos);
314e1051a39Sopenharmony_ci}
315e1051a39Sopenharmony_ci
316e1051a39Sopenharmony_ciint TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, int lastpos)
317e1051a39Sopenharmony_ci{
318e1051a39Sopenharmony_ci    return X509v3_get_ext_by_OBJ(a->extensions, obj, lastpos);
319e1051a39Sopenharmony_ci}
320e1051a39Sopenharmony_ci
321e1051a39Sopenharmony_ciint TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos)
322e1051a39Sopenharmony_ci{
323e1051a39Sopenharmony_ci    return X509v3_get_ext_by_critical(a->extensions, crit, lastpos);
324e1051a39Sopenharmony_ci}
325e1051a39Sopenharmony_ci
326e1051a39Sopenharmony_ciX509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc)
327e1051a39Sopenharmony_ci{
328e1051a39Sopenharmony_ci    return X509v3_get_ext(a->extensions, loc);
329e1051a39Sopenharmony_ci}
330e1051a39Sopenharmony_ci
331e1051a39Sopenharmony_ciX509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc)
332e1051a39Sopenharmony_ci{
333e1051a39Sopenharmony_ci    return X509v3_delete_ext(a->extensions, loc);
334e1051a39Sopenharmony_ci}
335e1051a39Sopenharmony_ci
336e1051a39Sopenharmony_ciint TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc)
337e1051a39Sopenharmony_ci{
338e1051a39Sopenharmony_ci    return X509v3_add_ext(&a->extensions, ex, loc) != NULL;
339e1051a39Sopenharmony_ci}
340e1051a39Sopenharmony_ci
341e1051a39Sopenharmony_civoid *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx)
342e1051a39Sopenharmony_ci{
343e1051a39Sopenharmony_ci    return X509V3_get_d2i(a->extensions, nid, crit, idx);
344e1051a39Sopenharmony_ci}
345e1051a39Sopenharmony_ci
346e1051a39Sopenharmony_ciint TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i)
347e1051a39Sopenharmony_ci{
348e1051a39Sopenharmony_ci    return ASN1_INTEGER_set(a->status, i);
349e1051a39Sopenharmony_ci}
350e1051a39Sopenharmony_ci
351e1051a39Sopenharmony_ciconst ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a)
352e1051a39Sopenharmony_ci{
353e1051a39Sopenharmony_ci    return a->status;
354e1051a39Sopenharmony_ci}
355e1051a39Sopenharmony_ci
356e1051a39Sopenharmony_ciconst STACK_OF(ASN1_UTF8STRING) *
357e1051a39Sopenharmony_ciTS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a)
358e1051a39Sopenharmony_ci{
359e1051a39Sopenharmony_ci    return a->text;
360e1051a39Sopenharmony_ci}
361e1051a39Sopenharmony_ci
362e1051a39Sopenharmony_ciconst ASN1_BIT_STRING *TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a)
363e1051a39Sopenharmony_ci{
364e1051a39Sopenharmony_ci    return a->failure_info;
365e1051a39Sopenharmony_ci}
366