Coverage Report

Created: 2025-12-04 06:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssl32/crypto/cmp/cmp_asn.c
Line
Count
Source
1
/*
2
 * Copyright 2007-2024 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
61
} ASN1_SEQUENCE_END(OSSL_CMP_REVANNCONTENT)
29
61
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVANNCONTENT)
30
61
31
61
ASN1_SEQUENCE(OSSL_CMP_CHALLENGE) = {
32
61
    ASN1_OPT(OSSL_CMP_CHALLENGE, owf, X509_ALGOR),
33
61
    ASN1_SIMPLE(OSSL_CMP_CHALLENGE, witness, ASN1_OCTET_STRING),
34
61
    ASN1_SIMPLE(OSSL_CMP_CHALLENGE, challenge, ASN1_OCTET_STRING)
35
5.24k
} ASN1_SEQUENCE_END(OSSL_CMP_CHALLENGE)
36
5.24k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CHALLENGE)
37
5.24k
38
5.24k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POPODECKEYCHALLCONTENT) =
39
5.24k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
40
5.24k
                          OSSL_CMP_POPODECKEYCHALLCONTENT, OSSL_CMP_CHALLENGE)
41
19.8k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POPODECKEYCHALLCONTENT)
42
43
ASN1_ITEM_TEMPLATE(OSSL_CMP_POPODECKEYRESPCONTENT) =
44
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
45
                          OSSL_CMP_POPODECKEYRESPCONTENT, ASN1_INTEGER)
46
12.5k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POPODECKEYRESPCONTENT)
47
48
ASN1_SEQUENCE(OSSL_CMP_CAKEYUPDANNCONTENT) = {
49
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
50
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, oldWithNew, X509),
51
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
52
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, newWithOld, X509),
53
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
54
    ASN1_SIMPLE(OSSL_CMP_CAKEYUPDANNCONTENT, newWithNew, X509)
55
591
} ASN1_SEQUENCE_END(OSSL_CMP_CAKEYUPDANNCONTENT)
56
591
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CAKEYUPDANNCONTENT)
57
591
58
591
ASN1_SEQUENCE(OSSL_CMP_ERRORMSGCONTENT) = {
59
591
    ASN1_SIMPLE(OSSL_CMP_ERRORMSGCONTENT, pKIStatusInfo, OSSL_CMP_PKISI),
60
591
    ASN1_OPT(OSSL_CMP_ERRORMSGCONTENT, errorCode, ASN1_INTEGER),
61
591
    /*
62
591
     * OSSL_CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
63
591
     * so it is used directly
64
591
     *
65
591
     */
66
591
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ERRORMSGCONTENT, errorDetails,
67
591
                         ASN1_UTF8STRING)
68
95.1k
} ASN1_SEQUENCE_END(OSSL_CMP_ERRORMSGCONTENT)
69
95.1k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ERRORMSGCONTENT)
70
95.1k
71
95.1k
ASN1_ADB_TEMPLATE(infotypeandvalue_default) = ASN1_OPT(OSSL_CMP_ITAV,
72
95.1k
                                                       infoValue.other,
73
95.1k
                                                       ASN1_ANY);
74
95.1k
/* ITAV means InfoTypeAndValue */
75
95.1k
ASN1_ADB(OSSL_CMP_ITAV) = {
76
95.1k
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
77
95.1k
    ADB_ENTRY(NID_id_it_caProtEncCert, ASN1_OPT(OSSL_CMP_ITAV,
78
95.1k
                                                infoValue.caProtEncCert, X509)),
79
95.1k
    ADB_ENTRY(NID_id_it_signKeyPairTypes,
80
95.1k
              ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
81
95.1k
                                   infoValue.signKeyPairTypes, X509_ALGOR)),
82
95.1k
    ADB_ENTRY(NID_id_it_encKeyPairTypes,
83
95.1k
              ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
84
95.1k
                                   infoValue.encKeyPairTypes, X509_ALGOR)),
85
95.1k
    ADB_ENTRY(NID_id_it_preferredSymmAlg,
86
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.preferredSymmAlg,
87
95.1k
                       X509_ALGOR)),
88
95.1k
    ADB_ENTRY(NID_id_it_caKeyUpdateInfo,
89
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.caKeyUpdateInfo,
90
95.1k
                       OSSL_CMP_CAKEYUPDANNCONTENT)),
91
95.1k
    ADB_ENTRY(NID_id_it_currentCRL,
92
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.currentCRL, X509_CRL)),
93
95.1k
    ADB_ENTRY(NID_id_it_unsupportedOIDs,
94
95.1k
              ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV,
95
95.1k
                                   infoValue.unsupportedOIDs, ASN1_OBJECT)),
96
95.1k
    ADB_ENTRY(NID_id_it_keyPairParamReq,
97
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.keyPairParamReq,
98
95.1k
                       ASN1_OBJECT)),
99
95.1k
    ADB_ENTRY(NID_id_it_keyPairParamRep,
100
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.keyPairParamRep,
101
95.1k
                       X509_ALGOR)),
102
95.1k
    ADB_ENTRY(NID_id_it_revPassphrase,
103
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.revPassphrase,
104
95.1k
                       OSSL_CRMF_ENCRYPTEDVALUE)),
105
95.1k
    ADB_ENTRY(NID_id_it_implicitConfirm,
106
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.implicitConfirm,
107
95.1k
                       ASN1_NULL)),
108
95.1k
    ADB_ENTRY(NID_id_it_confirmWaitTime,
109
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.confirmWaitTime,
110
95.1k
                       ASN1_GENERALIZEDTIME)),
111
95.1k
    ADB_ENTRY(NID_id_it_origPKIMessage,
112
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.origPKIMessage,
113
95.1k
                       OSSL_CMP_MSGS)),
114
95.1k
    ADB_ENTRY(NID_id_it_suppLangTags,
115
95.1k
              ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV, infoValue.suppLangTagsValue,
116
95.1k
                                   ASN1_UTF8STRING)),
117
95.1k
    ADB_ENTRY(NID_id_it_caCerts,
118
95.1k
              ASN1_SEQUENCE_OF_OPT(OSSL_CMP_ITAV, infoValue.caCerts, X509)),
119
95.1k
    ADB_ENTRY(NID_id_it_rootCaCert,
120
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.rootCaCert, X509)),
121
95.1k
    ADB_ENTRY(NID_id_it_rootCaKeyUpdate,
122
95.1k
              ASN1_OPT(OSSL_CMP_ITAV, infoValue.rootCaKeyUpdate,
123
95.1k
                       OSSL_CMP_ROOTCAKEYUPDATE)),
124
754k
} ASN1_ADB_END(OSSL_CMP_ITAV, 0, infoType, 0,
125
               &infotypeandvalue_default_tt, NULL);
126
127
ASN1_SEQUENCE(OSSL_CMP_ITAV) = {
128
    ASN1_SIMPLE(OSSL_CMP_ITAV, infoType, ASN1_OBJECT),
129
    ASN1_ADB_OBJECT(OSSL_CMP_ITAV)
130
648k
} ASN1_SEQUENCE_END(OSSL_CMP_ITAV)
131
648k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ITAV)
132
648k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_ITAV)
133
648k
134
648k
ASN1_SEQUENCE(OSSL_CMP_ROOTCAKEYUPDATE) = {
135
648k
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
136
648k
    ASN1_SIMPLE(OSSL_CMP_ROOTCAKEYUPDATE, newWithNew, X509),
137
648k
    ASN1_EXP_OPT(OSSL_CMP_ROOTCAKEYUPDATE, newWithOld, X509, 0),
138
648k
    ASN1_EXP_OPT(OSSL_CMP_ROOTCAKEYUPDATE, oldWithNew, X509, 1)
139
648k
} ASN1_SEQUENCE_END(OSSL_CMP_ROOTCAKEYUPDATE)
140
129
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_ROOTCAKEYUPDATE)
141
129
142
129
OSSL_CMP_ITAV *OSSL_CMP_ITAV_create(ASN1_OBJECT *type, ASN1_TYPE *value)
143
129
{
144
0
    OSSL_CMP_ITAV *itav;
145
146
0
    if (type == NULL || (itav = OSSL_CMP_ITAV_new()) == NULL)
147
0
        return NULL;
148
0
    OSSL_CMP_ITAV_set0(itav, type, value);
149
0
    return itav;
150
0
}
151
152
void OSSL_CMP_ITAV_set0(OSSL_CMP_ITAV *itav, ASN1_OBJECT *type,
153
                        ASN1_TYPE *value)
154
0
{
155
0
    itav->infoType = type;
156
0
    itav->infoValue.other = value;
157
0
}
158
159
ASN1_OBJECT *OSSL_CMP_ITAV_get0_type(const OSSL_CMP_ITAV *itav)
160
0
{
161
0
    if (itav == NULL)
162
0
        return NULL;
163
0
    return itav->infoType;
164
0
}
165
166
ASN1_TYPE *OSSL_CMP_ITAV_get0_value(const OSSL_CMP_ITAV *itav)
167
0
{
168
0
    if (itav == NULL)
169
0
        return NULL;
170
0
    return itav->infoValue.other;
171
0
}
172
173
int OSSL_CMP_ITAV_push0_stack_item(STACK_OF(OSSL_CMP_ITAV) **itav_sk_p,
174
                                   OSSL_CMP_ITAV *itav)
175
0
{
176
0
    int created = 0;
177
178
0
    if (itav_sk_p == NULL || itav == NULL) {
179
0
        ERR_raise(ERR_LIB_CMP, CMP_R_NULL_ARGUMENT);
180
0
        goto err;
181
0
    }
182
183
0
    if (*itav_sk_p == NULL) {
184
0
        if ((*itav_sk_p = sk_OSSL_CMP_ITAV_new_null()) == NULL)
185
0
            goto err;
186
0
        created = 1;
187
0
    }
188
0
    if (!sk_OSSL_CMP_ITAV_push(*itav_sk_p, itav))
189
0
        goto err;
190
0
    return 1;
191
192
0
 err:
193
0
    if (created != 0) {
194
0
        sk_OSSL_CMP_ITAV_free(*itav_sk_p);
195
0
        *itav_sk_p = NULL;
196
0
    }
197
0
    return 0;
198
0
}
199
200
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts)
201
0
{
202
0
    OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_new();
203
204
0
    if (itav == NULL)
205
0
        return NULL;
206
0
    if (sk_X509_num(caCerts) > 0
207
0
        && (itav->infoValue.caCerts =
208
0
            sk_X509_deep_copy(caCerts, X509_dup, X509_free)) == NULL) {
209
0
        OSSL_CMP_ITAV_free(itav);
210
0
        return NULL;
211
0
    }
212
0
    itav->infoType = OBJ_nid2obj(NID_id_it_caCerts);
213
0
    return itav;
214
0
}
215
216
int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out)
217
0
{
218
0
    if (itav == NULL || out == NULL) {
219
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_NULL_PARAMETER);
220
0
        return 0;
221
0
    }
222
0
    if (OBJ_obj2nid(itav->infoType) != NID_id_it_caCerts) {
223
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_INVALID_ARGUMENT);
224
0
        return 0;
225
0
    }
226
0
    *out = sk_X509_num(itav->infoValue.caCerts) > 0
227
0
        ? itav->infoValue.caCerts : NULL;
228
0
    return 1;
229
0
}
230
231
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert)
232
0
{
233
0
    OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_new();
234
235
0
    if (itav == NULL)
236
0
        return NULL;
237
0
    if (rootCaCert != NULL
238
0
            && (itav->infoValue.rootCaCert = X509_dup(rootCaCert)) == NULL) {
239
0
        OSSL_CMP_ITAV_free(itav);
240
0
        return NULL;
241
0
    }
242
0
    itav->infoType = OBJ_nid2obj(NID_id_it_rootCaCert);
243
0
    return itav;
244
0
}
245
246
int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out)
247
0
{
248
0
    if (itav == NULL || out == NULL) {
249
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_NULL_PARAMETER);
250
0
        return 0;
251
0
    }
252
0
    if (OBJ_obj2nid(itav->infoType) != NID_id_it_rootCaCert) {
253
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_INVALID_ARGUMENT);
254
0
        return 0;
255
0
    }
256
0
    *out = itav->infoValue.rootCaCert;
257
0
    return 1;
258
0
}
259
OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew,
260
                                                 const X509 *newWithOld,
261
                                                 const X509 *oldWithNew)
262
0
{
263
0
    OSSL_CMP_ITAV *itav;
264
0
    OSSL_CMP_ROOTCAKEYUPDATE *upd = NULL;
265
266
0
    if (newWithNew != NULL) {
267
0
        upd = OSSL_CMP_ROOTCAKEYUPDATE_new();
268
0
        if (upd == NULL)
269
0
            return NULL;
270
271
0
        if ((upd->newWithNew = X509_dup(newWithNew)) == NULL)
272
0
            goto err;
273
0
        if (newWithOld != NULL
274
0
            && (upd->newWithOld = X509_dup(newWithOld)) == NULL)
275
0
            goto err;
276
0
        if (oldWithNew != NULL
277
0
            && (upd->oldWithNew = X509_dup(oldWithNew)) == NULL)
278
0
            goto err;
279
0
    }
280
281
0
    if ((itav = OSSL_CMP_ITAV_new()) == NULL)
282
0
        goto err;
283
0
    itav->infoType = OBJ_nid2obj(NID_id_it_rootCaKeyUpdate);
284
0
    itav->infoValue.rootCaKeyUpdate = upd;
285
0
    return itav;
286
287
0
 err:
288
0
    OSSL_CMP_ROOTCAKEYUPDATE_free(upd);
289
0
    return NULL;
290
0
}
291
292
int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav,
293
                                       X509 **newWithNew,
294
                                       X509 **newWithOld,
295
                                       X509 **oldWithNew)
296
0
{
297
0
    OSSL_CMP_ROOTCAKEYUPDATE *upd;
298
299
0
    if (itav == NULL || newWithNew == NULL) {
300
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_NULL_PARAMETER);
301
0
        return 0;
302
0
    }
303
0
    if (OBJ_obj2nid(itav->infoType) != NID_id_it_rootCaKeyUpdate) {
304
0
        ERR_raise(ERR_LIB_CMP, ERR_R_PASSED_INVALID_ARGUMENT);
305
0
        return 0;
306
0
    }
307
0
    upd = itav->infoValue.rootCaKeyUpdate;
308
0
    *newWithNew = upd != NULL ? upd->newWithNew : NULL;
309
0
    if (newWithOld != NULL)
310
0
        *newWithOld = upd != NULL ? upd->newWithOld : NULL;
311
0
    if (oldWithNew != NULL)
312
0
        *oldWithNew = upd != NULL ? upd->oldWithNew : NULL;
313
0
    return 1;
314
0
}
315
316
/* get ASN.1 encoded integer, return -2 on error; -1 is valid for certReqId */
317
int ossl_cmp_asn1_get_int(const ASN1_INTEGER *a)
318
312
{
319
312
    int64_t res;
320
321
312
    if (!ASN1_INTEGER_get_int64(&res, a)) {
322
15
        ERR_raise(ERR_LIB_CMP, ASN1_R_INVALID_NUMBER);
323
15
        return -2;
324
15
    }
325
297
    if (res < INT_MIN) {
326
102
        ERR_raise(ERR_LIB_CMP, ASN1_R_TOO_SMALL);
327
102
        return -2;
328
102
    }
329
195
    if (res > INT_MAX) {
330
7
        ERR_raise(ERR_LIB_CMP, ASN1_R_TOO_LARGE);
331
7
        return -2;
332
7
    }
333
188
    return (int)res;
334
195
}
335
336
static int ossl_cmp_msg_cb(int operation, ASN1_VALUE **pval,
337
                           const ASN1_ITEM *it, void *exarg)
338
1.58M
{
339
1.58M
    OSSL_CMP_MSG *msg = (OSSL_CMP_MSG *)*pval;
340
341
1.58M
    switch (operation) {
342
168k
    case ASN1_OP_FREE_POST:
343
168k
        OPENSSL_free(msg->propq);
344
168k
        break;
345
346
0
    case ASN1_OP_DUP_POST:
347
0
        {
348
0
            OSSL_CMP_MSG *old = exarg;
349
350
0
            if (!ossl_cmp_msg_set0_libctx(msg, old->libctx, old->propq))
351
0
                return 0;
352
0
        }
353
0
        break;
354
0
    case ASN1_OP_GET0_LIBCTX:
355
0
        {
356
0
            OSSL_LIB_CTX **libctx = exarg;
357
358
0
            *libctx = msg->libctx;
359
0
        }
360
0
        break;
361
0
    case ASN1_OP_GET0_PROPQ:
362
0
        {
363
0
            const char **propq = exarg;
364
365
0
            *propq = msg->propq;
366
0
        }
367
0
        break;
368
1.41M
    default:
369
1.41M
        break;
370
1.58M
    }
371
372
1.58M
    return 1;
373
1.58M
}
374
375
ASN1_CHOICE(OSSL_CMP_CERTORENCCERT) = {
376
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
377
    ASN1_EXP(OSSL_CMP_CERTORENCCERT, value.certificate, X509, 0),
378
    ASN1_EXP(OSSL_CMP_CERTORENCCERT, value.encryptedCert,
379
             OSSL_CRMF_ENCRYPTEDVALUE, 1),
380
1.93k
} ASN1_CHOICE_END(OSSL_CMP_CERTORENCCERT)
381
1.93k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTORENCCERT)
382
1.93k
383
1.93k
ASN1_SEQUENCE(OSSL_CMP_CERTIFIEDKEYPAIR) = {
384
1.93k
    ASN1_SIMPLE(OSSL_CMP_CERTIFIEDKEYPAIR, certOrEncCert,
385
1.93k
                OSSL_CMP_CERTORENCCERT),
386
1.93k
    ASN1_EXP_OPT(OSSL_CMP_CERTIFIEDKEYPAIR, privateKey,
387
1.93k
                 OSSL_CRMF_ENCRYPTEDVALUE, 0),
388
1.93k
    ASN1_EXP_OPT(OSSL_CMP_CERTIFIEDKEYPAIR, publicationInfo,
389
1.93k
                 OSSL_CRMF_PKIPUBLICATIONINFO, 1)
390
64.0k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTIFIEDKEYPAIR)
391
64.0k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTIFIEDKEYPAIR)
392
64.0k
393
64.0k
ASN1_SEQUENCE(OSSL_CMP_REVDETAILS) = {
394
64.0k
    ASN1_SIMPLE(OSSL_CMP_REVDETAILS, certDetails, OSSL_CRMF_CERTTEMPLATE),
395
64.0k
    ASN1_OPT(OSSL_CMP_REVDETAILS, crlEntryDetails, X509_EXTENSIONS)
396
1.82M
} ASN1_SEQUENCE_END(OSSL_CMP_REVDETAILS)
397
1.82M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVDETAILS)
398
1.82M
399
1.82M
ASN1_ITEM_TEMPLATE(OSSL_CMP_REVREQCONTENT) =
400
1.82M
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_REVREQCONTENT,
401
1.82M
                          OSSL_CMP_REVDETAILS)
402
1.82M
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_REVREQCONTENT)
403
404
ASN1_SEQUENCE(OSSL_CMP_REVREPCONTENT) = {
405
    ASN1_SEQUENCE_OF(OSSL_CMP_REVREPCONTENT, status, OSSL_CMP_PKISI),
406
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_REVREPCONTENT, revCerts, OSSL_CRMF_CERTID,
407
                             0),
408
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_REVREPCONTENT, crls, X509_CRL, 1)
409
12.9k
} ASN1_SEQUENCE_END(OSSL_CMP_REVREPCONTENT)
410
12.9k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_REVREPCONTENT)
411
12.9k
412
12.9k
ASN1_SEQUENCE(OSSL_CMP_KEYRECREPCONTENT) = {
413
12.9k
    ASN1_SIMPLE(OSSL_CMP_KEYRECREPCONTENT, status, OSSL_CMP_PKISI),
414
12.9k
    ASN1_EXP_OPT(OSSL_CMP_KEYRECREPCONTENT, newSigCert, X509, 0),
415
12.9k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_KEYRECREPCONTENT, caCerts, X509, 1),
416
12.9k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_KEYRECREPCONTENT, keyPairHist,
417
12.9k
                             OSSL_CMP_CERTIFIEDKEYPAIR, 2)
418
12.9k
} ASN1_SEQUENCE_END(OSSL_CMP_KEYRECREPCONTENT)
419
3.35k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_KEYRECREPCONTENT)
420
3.35k
421
3.35k
ASN1_ITEM_TEMPLATE(OSSL_CMP_PKISTATUS) =
422
3.35k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_UNIVERSAL, 0, status, ASN1_INTEGER)
423
547k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_PKISTATUS)
424
425
ASN1_SEQUENCE(OSSL_CMP_PKISI) = {
426
    ASN1_SIMPLE(OSSL_CMP_PKISI, status, OSSL_CMP_PKISTATUS),
427
    /*
428
     * CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
429
     * so it is used directly
430
     */
431
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_PKISI, statusString, ASN1_UTF8STRING),
432
    /*
433
     * OSSL_CMP_PKIFAILUREINFO is effectively ASN1_BIT_STRING so used directly
434
     */
435
    ASN1_OPT(OSSL_CMP_PKISI, failInfo, ASN1_BIT_STRING)
436
372k
} ASN1_SEQUENCE_END(OSSL_CMP_PKISI)
437
372k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKISI)
438
372k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_PKISI)
439
372k
440
372k
ASN1_SEQUENCE(OSSL_CMP_CERTSTATUS) = {
441
372k
    ASN1_SIMPLE(OSSL_CMP_CERTSTATUS, certHash, ASN1_OCTET_STRING),
442
372k
    ASN1_SIMPLE(OSSL_CMP_CERTSTATUS, certReqId, ASN1_INTEGER),
443
372k
    ASN1_OPT(OSSL_CMP_CERTSTATUS, statusInfo, OSSL_CMP_PKISI),
444
372k
    ASN1_EXP_OPT(OSSL_CMP_CERTSTATUS, hashAlg, X509_ALGOR, 0)
445
372k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTSTATUS)
446
2.10k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTSTATUS)
447
2.10k
448
2.10k
ASN1_ITEM_TEMPLATE(OSSL_CMP_CERTCONFIRMCONTENT) =
449
2.10k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_CERTCONFIRMCONTENT,
450
2.10k
                          OSSL_CMP_CERTSTATUS)
451
17.2k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_CERTCONFIRMCONTENT)
452
453
ASN1_SEQUENCE(OSSL_CMP_CERTRESPONSE) = {
454
    ASN1_SIMPLE(OSSL_CMP_CERTRESPONSE, certReqId, ASN1_INTEGER),
455
    ASN1_SIMPLE(OSSL_CMP_CERTRESPONSE, status, OSSL_CMP_PKISI),
456
    ASN1_OPT(OSSL_CMP_CERTRESPONSE, certifiedKeyPair,
457
             OSSL_CMP_CERTIFIEDKEYPAIR),
458
    ASN1_OPT(OSSL_CMP_CERTRESPONSE, rspInfo, ASN1_OCTET_STRING)
459
57.4k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTRESPONSE)
460
57.4k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTRESPONSE)
461
57.4k
462
57.4k
ASN1_SEQUENCE(OSSL_CMP_POLLREQ) = {
463
57.4k
    ASN1_SIMPLE(OSSL_CMP_POLLREQ, certReqId, ASN1_INTEGER)
464
57.4k
} ASN1_SEQUENCE_END(OSSL_CMP_POLLREQ)
465
7.52k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_POLLREQ)
466
7.52k
467
7.52k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POLLREQCONTENT) =
468
7.52k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_POLLREQCONTENT,
469
7.52k
                          OSSL_CMP_POLLREQ)
470
7.52k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POLLREQCONTENT)
471
472
ASN1_SEQUENCE(OSSL_CMP_POLLREP) = {
473
    ASN1_SIMPLE(OSSL_CMP_POLLREP, certReqId, ASN1_INTEGER),
474
    ASN1_SIMPLE(OSSL_CMP_POLLREP, checkAfter, ASN1_INTEGER),
475
    ASN1_SEQUENCE_OF_OPT(OSSL_CMP_POLLREP, reason, ASN1_UTF8STRING),
476
5.42k
} ASN1_SEQUENCE_END(OSSL_CMP_POLLREP)
477
5.42k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_POLLREP)
478
5.42k
479
5.42k
ASN1_ITEM_TEMPLATE(OSSL_CMP_POLLREPCONTENT) =
480
5.42k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
481
5.42k
                          OSSL_CMP_POLLREPCONTENT,
482
5.42k
                          OSSL_CMP_POLLREP)
483
47.2k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_POLLREPCONTENT)
484
485
ASN1_SEQUENCE(OSSL_CMP_CERTREPMESSAGE) = {
486
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
487
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_CERTREPMESSAGE, caPubs, X509, 1),
488
    ASN1_SEQUENCE_OF(OSSL_CMP_CERTREPMESSAGE, response, OSSL_CMP_CERTRESPONSE)
489
49.7k
} ASN1_SEQUENCE_END(OSSL_CMP_CERTREPMESSAGE)
490
49.7k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_CERTREPMESSAGE)
491
49.7k
492
49.7k
ASN1_ITEM_TEMPLATE(OSSL_CMP_GENMSGCONTENT) =
493
49.7k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_GENMSGCONTENT,
494
49.7k
                          OSSL_CMP_ITAV)
495
49.7k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_GENMSGCONTENT)
496
497
ASN1_ITEM_TEMPLATE(OSSL_CMP_GENREPCONTENT) =
498
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_GENREPCONTENT,
499
                          OSSL_CMP_ITAV)
500
13.0k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_GENREPCONTENT)
501
502
ASN1_ITEM_TEMPLATE(OSSL_CMP_CRLANNCONTENT) =
503
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0,
504
                          OSSL_CMP_CRLANNCONTENT, X509_CRL)
505
15.1k
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_CRLANNCONTENT)
506
507
ASN1_CHOICE(OSSL_CMP_PKIBODY) = {
508
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ir, OSSL_CRMF_MSGS, 0),
509
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ip, OSSL_CMP_CERTREPMESSAGE, 1),
510
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cr, OSSL_CRMF_MSGS, 2),
511
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cp, OSSL_CMP_CERTREPMESSAGE, 3),
512
    ASN1_EXP(OSSL_CMP_PKIBODY, value.p10cr, X509_REQ, 4),
513
    ASN1_EXP(OSSL_CMP_PKIBODY, value.popdecc,
514
             OSSL_CMP_POPODECKEYCHALLCONTENT, 5),
515
    ASN1_EXP(OSSL_CMP_PKIBODY, value.popdecr,
516
             OSSL_CMP_POPODECKEYRESPCONTENT, 6),
517
    ASN1_EXP(OSSL_CMP_PKIBODY, value.kur, OSSL_CRMF_MSGS, 7),
518
    ASN1_EXP(OSSL_CMP_PKIBODY, value.kup, OSSL_CMP_CERTREPMESSAGE, 8),
519
    ASN1_EXP(OSSL_CMP_PKIBODY, value.krr, OSSL_CRMF_MSGS, 9),
520
    ASN1_EXP(OSSL_CMP_PKIBODY, value.krp, OSSL_CMP_KEYRECREPCONTENT, 10),
521
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rr, OSSL_CMP_REVREQCONTENT, 11),
522
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rp, OSSL_CMP_REVREPCONTENT, 12),
523
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ccr, OSSL_CRMF_MSGS, 13),
524
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ccp, OSSL_CMP_CERTREPMESSAGE, 14),
525
    ASN1_EXP(OSSL_CMP_PKIBODY, value.ckuann, OSSL_CMP_CAKEYUPDANNCONTENT, 15),
526
    ASN1_EXP(OSSL_CMP_PKIBODY, value.cann, X509, 16),
527
    ASN1_EXP(OSSL_CMP_PKIBODY, value.rann, OSSL_CMP_REVANNCONTENT, 17),
528
    ASN1_EXP(OSSL_CMP_PKIBODY, value.crlann, OSSL_CMP_CRLANNCONTENT, 18),
529
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pkiconf, ASN1_ANY, 19),
530
    ASN1_EXP(OSSL_CMP_PKIBODY, value.nested, OSSL_CMP_MSGS, 20),
531
    ASN1_EXP(OSSL_CMP_PKIBODY, value.genm, OSSL_CMP_GENMSGCONTENT, 21),
532
    ASN1_EXP(OSSL_CMP_PKIBODY, value.genp, OSSL_CMP_GENREPCONTENT, 22),
533
    ASN1_EXP(OSSL_CMP_PKIBODY, value.error, OSSL_CMP_ERRORMSGCONTENT, 23),
534
    ASN1_EXP(OSSL_CMP_PKIBODY, value.certConf, OSSL_CMP_CERTCONFIRMCONTENT, 24),
535
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pollReq, OSSL_CMP_POLLREQCONTENT, 25),
536
    ASN1_EXP(OSSL_CMP_PKIBODY, value.pollRep, OSSL_CMP_POLLREPCONTENT, 26),
537
2.19M
} ASN1_CHOICE_END(OSSL_CMP_PKIBODY)
538
2.19M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKIBODY)
539
2.19M
540
2.19M
ASN1_SEQUENCE(OSSL_CMP_PKIHEADER) = {
541
2.19M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, pvno, ASN1_INTEGER),
542
2.19M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, sender, GENERAL_NAME),
543
2.19M
    ASN1_SIMPLE(OSSL_CMP_PKIHEADER, recipient, GENERAL_NAME),
544
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, messageTime, ASN1_GENERALIZEDTIME, 0),
545
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, protectionAlg, X509_ALGOR, 1),
546
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, senderKID, ASN1_OCTET_STRING, 2),
547
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, recipKID, ASN1_OCTET_STRING, 3),
548
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, transactionID, ASN1_OCTET_STRING, 4),
549
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, senderNonce, ASN1_OCTET_STRING, 5),
550
2.19M
    ASN1_EXP_OPT(OSSL_CMP_PKIHEADER, recipNonce, ASN1_OCTET_STRING, 6),
551
2.19M
    /*
552
2.19M
     * OSSL_CMP_PKIFREETEXT is effectively a sequence of ASN1_UTF8STRING
553
2.19M
     * so it is used directly
554
2.19M
     */
555
2.19M
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_PKIHEADER, freeText, ASN1_UTF8STRING, 7),
556
2.19M
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_PKIHEADER, generalInfo,
557
2.19M
                             OSSL_CMP_ITAV, 8)
558
2.19M
} ASN1_SEQUENCE_END(OSSL_CMP_PKIHEADER)
559
1.11M
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PKIHEADER)
560
1.11M
561
1.11M
ASN1_SEQUENCE(OSSL_CMP_PROTECTEDPART) = {
562
1.11M
    ASN1_SIMPLE(OSSL_CMP_MSG, header, OSSL_CMP_PKIHEADER),
563
1.11M
    ASN1_SIMPLE(OSSL_CMP_MSG, body, OSSL_CMP_PKIBODY)
564
1.11M
} ASN1_SEQUENCE_END(OSSL_CMP_PROTECTEDPART)
565
4.86k
IMPLEMENT_ASN1_FUNCTIONS(OSSL_CMP_PROTECTEDPART)
566
4.86k
567
4.86k
ASN1_SEQUENCE_cb(OSSL_CMP_MSG, ossl_cmp_msg_cb) = {
568
4.86k
    ASN1_SIMPLE(OSSL_CMP_MSG, header, OSSL_CMP_PKIHEADER),
569
4.86k
    ASN1_SIMPLE(OSSL_CMP_MSG, body, OSSL_CMP_PKIBODY),
570
4.86k
    ASN1_EXP_OPT(OSSL_CMP_MSG, protection, ASN1_BIT_STRING, 0),
571
4.86k
    /* OSSL_CMP_CMPCERTIFICATE is effectively X509 so it is used directly */
572
4.86k
    ASN1_EXP_SEQUENCE_OF_OPT(OSSL_CMP_MSG, extraCerts, X509, 1)
573
4.86k
} ASN1_SEQUENCE_END_cb(OSSL_CMP_MSG, OSSL_CMP_MSG)
574
4.86k
IMPLEMENT_ASN1_DUP_FUNCTION(OSSL_CMP_MSG)
575
4.86k
576
4.86k
ASN1_ITEM_TEMPLATE(OSSL_CMP_MSGS) =
577
4.86k
    ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, OSSL_CMP_MSGS,
578
4.86k
                          OSSL_CMP_MSG)
579
ASN1_ITEM_TEMPLATE_END(OSSL_CMP_MSGS)