Coverage Report

Created: 2026-07-12 07:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl30/crypto/cmp/cmp_asn.c
Line
Count
Source
1
/*
2
 * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
3
 * Copyright Nokia 2007-2019
4
 * Copyright Siemens AG 2015-2019
5
 *
6
 * Licensed under the Apache License 2.0 (the "License").  You may not use
7
 * this file except in compliance with the License.  You can obtain a copy
8
 * in the file LICENSE in the source distribution or at
9
 * https://www.openssl.org/source/license.html
10
 */
11
12
#include <openssl/asn1t.h>
13
14
#include "cmp_local.h"
15
16
/* explicit #includes not strictly needed since implied by the above: */
17
#include <openssl/cmp.h>
18
#include <openssl/crmf.h>
19
20
/* ASN.1 declarations from RFC4210 */
21
ASN1_SEQUENCE(OSSL_CMP_REVANNCONTENT) = {
22
    /* OSSL_CMP_PKISTATUS is effectively ASN1_INTEGER so it is used directly */
23
    ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, status, ASN1_INTEGER),
24
    ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, certId, OSSL_CRMF_CERTID),
25
    ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, willBeRevokedAt, ASN1_GENERALIZEDTIME),
26
    ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, badSinceDate, ASN1_GENERALIZEDTIME),
27
    ASN1_OPT(OSSL_CMP_REVANNCONTENT, crlDetails, X509_EXTENSIONS)
28
50
} ASN1_SEQUENCE_END(OSSL_CMP_REVANNCONTENT)
29
50
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVANNCONTENT)
30
50
31
50
ASN1_SEQUENCE(OSSL_CMP_CHALLENGE) = {
32
50
    ASN1_OPT(OSSL_CMP_CHALLENGE, owf, X509_ALGOR),
33
50
    ASN1_SIMPLE(OSSL_CMP_CHALLENGE, witness, ASN1_OCTET_STRING),
34
50
    ASN1_SIMPLE(OSSL_CMP_CHALLENGE, challenge, ASN1_OCTET_STRING)
35
8.24k
} ASN1_SEQUENCE_END(OSSL_CMP_CHALLENGE)
36
8.24k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CHALLENGE)
37
8.24k
38
8.24k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POPODECKEYCHALLCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
39
8.24k
    OSSL_CMP_POPODECKEYCHALLCONTENT, OSSL_CMP_CHALLENGE)
40
15.6k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POPODECKEYCHALLCONTENT)
41
42
ASN1_ITEM_TEMPLATE(OSSL_CMP_POPODECKEYRESPCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
43
    OSSL_CMP_POPODECKEYRESPCONTENT, ASN1_INTEGER)
44
10.9k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POPODECKEYRESPCONTENT)
45
46
ASN1_SEQUENCE(OSSL_CMP_CAKEYUPDANNCONTENT) = {
47
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
48
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, oldWithNew, X509),
49
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
50
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, newWithOld, X509),
51
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
52
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, newWithNew, X509)
53
1.12k
} ASN1_SEQUENCE_END(OSSL_CMP_CAKEYUPDANNCONTENT)
54
1.12k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CAKEYUPDANNCONTENT)
55
1.12k
56
1.12k
ASN1_SEQUENCE(OSSL_CMP_ERRORMSGCONTENT) = {
57
1.12k
    ASN1_SIMPLE(OSSL_CMP_ERRORMSGCONTENT, pKIStatusInfo, OSSL_CMP_PKISI),
58
1.12k
    ASN1_OPT(OSSL_CMP_ERRORMSGCONTENT, errorCode, ASN1_INTEGER),
59
1.12k
    /*
60
1.12k
     * OSSL_CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
61
1.12k
     * so it is used directly
62
1.12k
     *
63
1.12k
     */
64
1.12k
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ERRORMSGCONTENT, errorDetails,
65
1.12k
        ASN1_UTF8STRING)
66
85.9k
} ASN1_SEQUENCE_END(OSSL_CMP_ERRORMSGCONTENT)
67
85.9k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ERRORMSGCONTENT)
68
85.9k
69
85.9k
ASN1_ADB_TEMPLATE(infotypeandvalue_default) = ASN1_OPT(OSSL_CMP_ITAV,
70
85.9k
    infoValue.other,
71
85.9k
    ASN1_ANY);
72
85.9k
/* ITAV means InfoTypeAndValue */
73
85.9k
ASN1_ADB(OSSL_CMP_ITAV) = {
74
85.9k
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
75
85.9k
    ADB_ENTRY(NID_id_it_caProtEncCert, ASN1_OPT(OSSL_CMP_ITAV, infoValue.caProtEncCert, X509)),
76
85.9k
    ADB_ENTRY(NID_id_it_signKeyPairTypes,
77
85.9k
        ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
78
85.9k
            infoValue.signKeyPairTypes, X509_ALGOR)),
79
85.9k
    ADB_ENTRY(NID_id_it_encKeyPairTypes,
80
85.9k
        ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
81
85.9k
            infoValue.encKeyPairTypes, X509_ALGOR)),
82
85.9k
    ADB_ENTRY(NID_id_it_preferredSymmAlg,
83
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.preferredSymmAlg,
84
85.9k
            X509_ALGOR)),
85
85.9k
    ADB_ENTRY(NID_id_it_caKeyUpdateInfo,
86
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.caKeyUpdateInfo,
87
85.9k
            OSSL_CMP_CAKEYUPDANNCONTENT)),
88
85.9k
    ADB_ENTRY(NID_id_it_currentCRL,
89
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.currentCRL, X509_CRL)),
90
85.9k
    ADB_ENTRY(NID_id_it_unsupportedOIDs,
91
85.9k
        ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
92
85.9k
            infoValue.unsupportedOIDs, ASN1_OBJECT)),
93
85.9k
    ADB_ENTRY(NID_id_it_keyPairParamReq,
94
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.keyPairParamReq,
95
85.9k
            ASN1_OBJECT)),
96
85.9k
    ADB_ENTRY(NID_id_it_keyPairParamRep,
97
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.keyPairParamRep,
98
85.9k
            X509_ALGOR)),
99
85.9k
    ADB_ENTRY(NID_id_it_revPassphrase,
100
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.revPassphrase,
101
85.9k
            OSSL_CRMF_ENCRYPTEDVALUE)),
102
85.9k
    ADB_ENTRY(NID_id_it_implicitConfirm,
103
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.implicitConfirm,
104
85.9k
            ASN1_NULL)),
105
85.9k
    ADB_ENTRY(NID_id_it_confirmWaitTime,
106
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.confirmWaitTime,
107
85.9k
            ASN1_GENERALIZEDTIME)),
108
85.9k
    ADB_ENTRY(NID_id_it_origPKIMessage,
109
85.9k
        ASN1_OPT(OSSL_CMP_ITAV, infoValue.origPKIMessage,
110
85.9k
            OSSL_CMP_MSGS)),
111
85.9k
    ADB_ENTRY(NID_id_it_suppLangTags,
112
85.9k
        ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV, infoValue.suppLangTagsValue,
113
85.9k
            ASN1_UTF8STRING)),
114
702k
} ASN1_ADB_END(OSSL_CMP_ITAV, 0, infoType, 0, &infotypeandvalue_default_tt, NULL);
115
116
ASN1_SEQUENCE(OSSL_CMP_ITAV) = {
117
    ASN1_SIMPLE(OSSL_CMP_ITAV, infoType, ASN1_OBJECT),
118
    ASN1_ADB_OBJECT(OSSL_CMP_ITAV)
119
604k
} ASN1_SEQUENCE_END(OSSL_CMP_ITAV)
120
604k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ITAV)
121
604k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV)
122
604k
123
604k
OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value)
124
604k
{
125
0
    OSSL_CMP_ITAV *itav;
126
127
0
    if (type == NULL || (itav = OSSL_CMP_ITAV_new()) == NULL)
128
0
        return NULL;
129
0
    OSSL_CMP_ITAV_set0(itav, type, value);
130
0
    return itav;
131
0
}
132
133
void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type,
134
    ASN1_TYPE *value)
135
0
{
136
0
    itav->infoType = type;
137
0
    itav->infoValue.other = value;
138
0
}
139
140
ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav)
141
0
{
142
0
    if (itav == NULL)
143
0
        return NULL;
144
0
    return itav->infoType;
145
0
}
146
147
ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav)
148
0
{
149
0
    if (itav == NULL)
150
0
        return NULL;
151
0
    return itav->infoValue.other;
152
0
}
153
154
int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p,
155
    OSSL_CMP_ITAV *itav)
156
0
{
157
0
    int created = 0;
158
159
0
    if (itav_sk_p == NULL || itav == NULL) {
160
0
        ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT);
161
0
        goto err;
162
0
    }
163
164
0
    if (*itav_sk_p == NULL) {
165
0
        if ((*itav_sk_p = sk_OSSL_CMP_ITAV_new_null()) == NULL)
166
0
            goto err;
167
0
        created = 1;
168
0
    }
169
0
    if (!sk_OSSL_CMP_ITAV_push(*itav_sk_p, itav))
170
0
        goto err;
171
0
    return 1;
172
173
0
err:
174
0
    if (created != 0) {
175
0
        sk_OSSL_CMP_ITAV_free(*itav_sk_p);
176
0
        *itav_sk_p = NULL;
177
0
    }
178
0
    return 0;
179
0
}
180
181
/* get ASN.1 encoded integer, return -2 on error; -1 is valid for certReqId */
182
int ossl_cmp_asn1_get_int(const ASN1_INTEGER *a)
183
137
{
184
137
    int64_t res;
185
186
137
    if (!ASN1_INTEGER_get_int64(&res, a)) {
187
7
        ERR_raise(ERR_LIB_CMP, ASN1_R_INVALID_NUMBER);
188
7
        return -2;
189
7
    }
190
130
    if (res < INT_MIN) {
191
49
        ERR_raise(ERR_LIB_CMP, ASN1_R_TOO_SMALL);
192
49
        return -2;
193
49
    }
194
81
    if (res > INT_MAX) {
195
3
        ERR_raise(ERR_LIB_CMP, ASN1_R_TOO_LARGE);
196
3
        return -2;
197
3
    }
198
78
    return (int)res;
199
81
}
200
201
static int ossl_cmp_msg_cb(int operation, ASN1_VALUE **pval,
202
    const ASN1_ITEM *it, void *exarg)
203
1.53M
{
204
1.53M
    OSSL_CMP_MSG *msg = (OSSL_CMP_MSG *)*pval;
205
206
1.53M
    switch (operation) {
207
156k
    case ASN1_OP_FREE_POST:
208
156k
        OPENSSL_free(msg->propq);
209
156k
        break;
210
211
0
    case ASN1_OP_DUP_POST: {
212
0
        OSSL_CMP_MSG *old = exarg;
213
214
0
        if (!ossl_cmp_msg_set0_libctx(msg, old->libctx, old->propq))
215
0
            return 0;
216
0
    } break;
217
0
    case ASN1_OP_GET0_LIBCTX: {
218
0
        OSSL_LIB_CTX **libctx = exarg;
219
220
0
        *libctx = msg->libctx;
221
0
    } break;
222
0
    case ASN1_OP_GET0_PROPQ: {
223
0
        const char **propq = exarg;
224
225
0
        *propq = msg->propq;
226
0
    } break;
227
1.37M
    default:
228
1.37M
        break;
229
1.53M
    }
230
231
1.53M
    return 1;
232
1.53M
}
233
234
ASN1_CHOICE(OSSL_CMP_CERTORENCCERT) = {
235
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
236
    ASN1_EXP(OSSL_CMP_CERTORENCCERT, value.certificate, X509, 0),
237
    ASN1_EXP(OSSL_CMP_CERTORENCCERT, value.encryptedCert,
238
        OSSL_CRMF_ENCRYPTEDVALUE, 1),
239
2.68k
} ASN1_CHOICE_END(OSSL_CMP_CERTORENCCERT)
240
2.68k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTORENCCERT)
241
2.68k
242
2.68k
ASN1_SEQUENCE(OSSL_CMP_CERTIFIEDKEYPAIR) = {
243
2.68k
    ASN1_SIMPLE(OSSL_CMP_CERTIFIEDKEYPAIR, certOrEncCert,
244
2.68k
        OSSL_CMP_CERTORENCCERT),
245
2.68k
    ASN1_EXP_OPT(OSSL_CMP_CERTIFIEDKEYPAIR, privateKey,
246
2.68k
        OSSL_CRMF_ENCRYPTEDVALUE, 0),
247
2.68k
    ASN1_EXP_OPT(OSSL_CMP_CERTIFIEDKEYPAIR, publicationInfo,
248
2.68k
        OSSL_CRMF_PKIPUBLICATIONINFO, 1)
249
62.1k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTIFIEDKEYPAIR)
250
62.1k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTIFIEDKEYPAIR)
251
62.1k
252
62.1k
ASN1_SEQUENCE(OSSL_CMP_REVDETAILS) = {
253
62.1k
    ASN1_SIMPLE(OSSL_CMP_REVDETAILS, certDetails, OSSL_CRMF_CERTTEMPLATE),
254
62.1k
    ASN1_OPT(OSSL_CMP_REVDETAILS, crlEntryDetails, X509_EXTENSIONS)
255
2.61M
} ASN1_SEQUENCE_END(OSSL_CMP_REVDETAILS)
256
2.61M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVDETAILS)
257
2.61M
258
2.61M
ASN1_ITEM_TEMPLATE(OSSL_CMP_REVREQCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_REVREQCONTENT,
259
2.61M
    OSSL_CMP_REVDETAILS)
260
2.61M
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_REVREQCONTENT)
261
262
ASN1_SEQUENCE(OSSL_CMP_REVREPCONTENT) = {
263
    ASN1_SEQUENCE_OF(OSSL_CMP_REVREPCONTENT, status, OSSL_CMP_PKISI),
264
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_REVREPCONTENT, revCerts, OSSL_CRMF_CERTID,
265
        0),
266
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_REVREPCONTENT, crls, X509_CRL, 1)
267
25.0k
} ASN1_SEQUENCE_END(OSSL_CMP_REVREPCONTENT)
268
25.0k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVREPCONTENT)
269
25.0k
270
25.0k
ASN1_SEQUENCE(OSSL_CMP_KEYRECREPCONTENT) = {
271
25.0k
    ASN1_SIMPLE(OSSL_CMP_KEYRECREPCONTENT, status, OSSL_CMP_PKISI),
272
25.0k
    ASN1_EXP_OPT(OSSL_CMP_KEYRECREPCONTENT, newSigCert, X509, 0),
273
25.0k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_KEYRECREPCONTENT, caCerts, X509, 1),
274
25.0k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_KEYRECREPCONTENT, keyPairHist,
275
25.0k
        OSSL_CMP_CERTIFIEDKEYPAIR, 2)
276
25.0k
} ASN1_SEQUENCE_END(OSSL_CMP_KEYRECREPCONTENT)
277
3.73k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_KEYRECREPCONTENT)
278
3.73k
279
3.73k
ASN1_ITEM_TEMPLATE(OSSL_CMP_PKISTATUS) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_UNIVERSAL, 0, status, ASN1_INTEGER)
280
526k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_PKISTATUS)
281
282
ASN1_SEQUENCE(OSSL_CMP_PKISI) = {
283
    ASN1_SIMPLE(OSSL_CMP_PKISI, status, OSSL_CMP_PKISTATUS),
284
    /*
285
     * CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
286
     * so it is used directly
287
     */
288
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_PKISI, statusString, ASN1_UTF8STRING),
289
    /*
290
     * OSSL_CMP_PKIFAILUREINFO is effectively ASN1_BIT_STRING so used directly
291
     */
292
    ASN1_OPT(OSSL_CMP_PKISI, failInfo, ASN1_BIT_STRING)
293
362k
} ASN1_SEQUENCE_END(OSSL_CMP_PKISI)
294
362k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKISI)
295
362k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI)
296
362k
297
362k
ASN1_SEQUENCE(OSSL_CMP_CERTSTATUS) = {
298
362k
    ASN1_SIMPLE(OSSL_CMP_CERTSTATUS, certHash, ASN1_OCTET_STRING),
299
362k
    ASN1_SIMPLE(OSSL_CMP_CERTSTATUS, certReqId, ASN1_INTEGER),
300
362k
    ASN1_OPT(OSSL_CMP_CERTSTATUS, statusInfo, OSSL_CMP_PKISI)
301
362k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTSTATUS)
302
2.73k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTSTATUS)
303
2.73k
304
2.73k
ASN1_ITEM_TEMPLATE(OSSL_CMP_CERTCONFIRMCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_CERTCONFIRMCONTENT,
305
2.73k
    OSSL_CMP_CERTSTATUS)
306
20.3k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_CERTCONFIRMCONTENT)
307
308
ASN1_SEQUENCE(OSSL_CMP_CERTRESPONSE) = {
309
    ASN1_SIMPLE(OSSL_CMP_CERTRESPONSE, certReqId, ASN1_INTEGER),
310
    ASN1_SIMPLE(OSSL_CMP_CERTRESPONSE, status, OSSL_CMP_PKISI),
311
    ASN1_OPT(OSSL_CMP_CERTRESPONSE, certifiedKeyPair,
312
        OSSL_CMP_CERTIFIEDKEYPAIR),
313
    ASN1_OPT(OSSL_CMP_CERTRESPONSE, rspInfo, ASN1_OCTET_STRING)
314
55.3k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTRESPONSE)
315
55.3k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTRESPONSE)
316
55.3k
317
55.3k
ASN1_SEQUENCE(OSSL_CMP_POLLREQ) = {
318
55.3k
    ASN1_SIMPLE(OSSL_CMP_POLLREQ, certReqId, ASN1_INTEGER)
319
55.3k
} ASN1_SEQUENCE_END(OSSL_CMP_POLLREQ)
320
5.05k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_POLLREQ)
321
5.05k
322
5.05k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POLLREQCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_POLLREQCONTENT,
323
5.05k
    OSSL_CMP_POLLREQ)
324
6.78k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POLLREQCONTENT)
325
326
ASN1_SEQUENCE(OSSL_CMP_POLLREP) = {
327
    ASN1_SIMPLE(OSSL_CMP_POLLREP, certReqId, ASN1_INTEGER),
328
    ASN1_SIMPLE(OSSL_CMP_POLLREP, checkAfter, ASN1_INTEGER),
329
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_POLLREP, reason, ASN1_UTF8STRING),
330
6.18k
} ASN1_SEQUENCE_END(OSSL_CMP_POLLREP)
331
6.18k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_POLLREP)
332
6.18k
333
6.18k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POLLREPCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
334
6.18k
    OSSL_CMP_POLLREPCONTENT,
335
6.18k
    OSSL_CMP_POLLREP)
336
56.8k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POLLREPCONTENT)
337
338
ASN1_SEQUENCE(OSSL_CMP_CERTREPMESSAGE) = {
339
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
340
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_CERTREPMESSAGE, caPubs, X509, 1),
341
    ASN1_SEQUENCE_OF(OSSL_CMP_CERTREPMESSAGE, response, OSSL_CMP_CERTRESPONSE)
342
48.6k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTREPMESSAGE)
343
48.6k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTREPMESSAGE)
344
48.6k
345
48.6k
ASN1_ITEM_TEMPLATE(OSSL_CMP_GENMSGCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_GENMSGCONTENT,
346
48.6k
    OSSL_CMP_ITAV)
347
48.6k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_GENMSGCONTENT)
348
349
ASN1_ITEM_TEMPLATE(OSSL_CMP_GENREPCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_GENREPCONTENT,
350
    OSSL_CMP_ITAV)
351
13.1k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_GENREPCONTENT)
352
353
ASN1_ITEM_TEMPLATE(OSSL_CMP_CRLANNCONTENT) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
354
    OSSL_CMP_CRLANNCONTENT, X509_CRL)
355
16.6k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_CRLANNCONTENT)
356
357
ASN1_CHOICE(OSSL_CMP_PKIBODY) = {
358
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ir, OSSL_CRMF_MSGS, 0),
359
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ip, OSSL_CMP_CERTREPMESSAGE, 1),
360
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cr, OSSL_CRMF_MSGS, 2),
361
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cp, OSSL_CMP_CERTREPMESSAGE, 3),
362
    ASN1_EXP(OSSL_CMP_PKIBODY, value.p10cr, X509_REQ, 4),
363
    ASN1_EXP(OSSL_CMP_PKIBODY, value.popdecc,
364
        OSSL_CMP_POPODECKEYCHALLCONTENT, 5),
365
    ASN1_EXP(OSSL_CMP_PKIBODY, value.popdecr,
366
        OSSL_CMP_POPODECKEYRESPCONTENT, 6),
367
    ASN1_EXP(OSSL_CMP_PKIBODY, value.kur, OSSL_CRMF_MSGS, 7),
368
    ASN1_EXP(OSSL_CMP_PKIBODY, value.kup, OSSL_CMP_CERTREPMESSAGE, 8),
369
    ASN1_EXP(OSSL_CMP_PKIBODY, value.krr, OSSL_CRMF_MSGS, 9),
370
    ASN1_EXP(OSSL_CMP_PKIBODY, value.krp, OSSL_CMP_KEYRECREPCONTENT, 10),
371
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rr, OSSL_CMP_REVREQCONTENT, 11),
372
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rp, OSSL_CMP_REVREPCONTENT, 12),
373
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ccr, OSSL_CRMF_MSGS, 13),
374
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ccp, OSSL_CMP_CERTREPMESSAGE, 14),
375
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ckuann, OSSL_CMP_CAKEYUPDANNCONTENT, 15),
376
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cann, X509, 16),
377
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rann, OSSL_CMP_REVANNCONTENT, 17),
378
    ASN1_EXP(OSSL_CMP_PKIBODY, value.crlann, OSSL_CMP_CRLANNCONTENT, 18),
379
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pkiconf, ASN1_ANY, 19),
380
    ASN1_EXP(OSSL_CMP_PKIBODY, value.nested, OSSL_CMP_MSGS, 20),
381
    ASN1_EXP(OSSL_CMP_PKIBODY, value.genm, OSSL_CMP_GENMSGCONTENT, 21),
382
    ASN1_EXP(OSSL_CMP_PKIBODY, value.genp, OSSL_CMP_GENREPCONTENT, 22),
383
    ASN1_EXP(OSSL_CMP_PKIBODY, value.error, OSSL_CMP_ERRORMSGCONTENT, 23),
384
    ASN1_EXP(OSSL_CMP_PKIBODY, value.certConf, OSSL_CMP_CERTCONFIRMCONTENT, 24),
385
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pollReq, OSSL_CMP_POLLREQCONTENT, 25),
386
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pollRep, OSSL_CMP_POLLREPCONTENT, 26),
387
2.15M
} ASN1_CHOICE_END(OSSL_CMP_PKIBODY)
388
2.15M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKIBODY)
389
2.15M
390
2.15M
ASN1_SEQUENCE(OSSL_CMP_PKIHEADER) = {
391
2.15M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, pvno, ASN1_INTEGER),
392
2.15M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, sender, GENERAL_NAME),
393
2.15M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, recipient, GENERAL_NAME),
394
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, messageTime, ASN1_GENERALIZEDTIME, 0),
395
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, protectionAlg, X509_ALGOR, 1),
396
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, senderKID, ASN1_OCTET_STRING, 2),
397
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, recipKID, ASN1_OCTET_STRING, 3),
398
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, transactionID, ASN1_OCTET_STRING, 4),
399
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, senderNonce, ASN1_OCTET_STRING, 5),
400
2.15M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, recipNonce, ASN1_OCTET_STRING, 6),
401
2.15M
    /*
402
2.15M
     * OSSL_CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
403
2.15M
     * so it is used directly
404
2.15M
     */
405
2.15M
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_PKIHEADER, freeText, ASN1_UTF8STRING, 7),
406
2.15M
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_PKIHEADER, generalInfo,
407
2.15M
        OSSL_CMP_ITAV, 8)
408
2.15M
} ASN1_SEQUENCE_END(OSSL_CMP_PKIHEADER)
409
1.09M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER)
410
1.09M
411
1.09M
ASN1_SEQUENCE(OSSL_CMP_PROTECTEDPART) = {
412
1.09M
    ASN1_SIMPLE(OSSL_CMP_MSG, header, OSSL_CMP_PKIHEADER),
413
1.09M
    ASN1_SIMPLE(OSSL_CMP_MSG, body, OSSL_CMP_PKIBODY)
414
1.09M
} ASN1_SEQUENCE_END(OSSL_CMP_PROTECTEDPART)
415
3.36k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PROTECTEDPART)
416
3.36k
417
3.36k
ASN1_SEQUENCE_cb(OSSL_CMP_MSG, ossl_cmp_msg_cb) = {
418
3.36k
    ASN1_SIMPLE(OSSL_CMP_MSG, header, OSSL_CMP_PKIHEADER),
419
3.36k
    ASN1_SIMPLE(OSSL_CMP_MSG, body, OSSL_CMP_PKIBODY),
420
3.36k
    ASN1_EXP_OPT(OSSL_CMP_MSG, protection, ASN1_BIT_STRING, 0),
421
3.36k
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
422
3.36k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_MSG, extraCerts, X509, 1)
423
3.36k
} ASN1_SEQUENCE_END_cb(OSSL_CMP_MSG, OSSL_CMP_MSG)
424
3.36k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_MSG)
425
3.36k
426
3.36k
ASN1_ITEM_TEMPLATE(OSSL_CMP_MSGS) = ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_MSGS,
427
3.36k
    OSSL_CMP_MSG)
428
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_MSGS)