Coverage Report

Created: 2022-11-30 06:20

/src/openssl/crypto/cms/cms_att.c
Line
Count
Source (jump to first uncovered line)
1
/* crypto/cms/cms_att.c */
2
/*
3
 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
4
 * project.
5
 */
6
/* ====================================================================
7
 * Copyright (c) 2008 The OpenSSL Project.  All rights reserved.
8
 *
9
 * Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions
11
 * are met:
12
 *
13
 * 1. Redistributions of source code must retain the above copyright
14
 *    notice, this list of conditions and the following disclaimer.
15
 *
16
 * 2. Redistributions in binary form must reproduce the above copyright
17
 *    notice, this list of conditions and the following disclaimer in
18
 *    the documentation and/or other materials provided with the
19
 *    distribution.
20
 *
21
 * 3. All advertising materials mentioning features or use of this
22
 *    software must display the following acknowledgment:
23
 *    "This product includes software developed by the OpenSSL Project
24
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
25
 *
26
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
27
 *    endorse or promote products derived from this software without
28
 *    prior written permission. For written permission, please contact
29
 *    licensing@OpenSSL.org.
30
 *
31
 * 5. Products derived from this software may not be called "OpenSSL"
32
 *    nor may "OpenSSL" appear in their names without prior written
33
 *    permission of the OpenSSL Project.
34
 *
35
 * 6. Redistributions of any form whatsoever must retain the following
36
 *    acknowledgment:
37
 *    "This product includes software developed by the OpenSSL Project
38
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
39
 *
40
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
41
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
43
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
44
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
46
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
47
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
49
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
50
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
51
 * OF THE POSSIBILITY OF SUCH DAMAGE.
52
 * ====================================================================
53
 */
54
55
#include <openssl/asn1t.h>
56
#include <openssl/pem.h>
57
#include <openssl/x509v3.h>
58
#include <openssl/err.h>
59
#include "cms.h"
60
#include "cms_lcl.h"
61
62
/* CMS SignedData Attribute utilities */
63
64
int CMS_signed_get_attr_count(const CMS_SignerInfo *si)
65
0
{
66
0
    return X509at_get_attr_count(si->signedAttrs);
67
0
}
68
69
int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, int lastpos)
70
0
{
71
0
    return X509at_get_attr_by_NID(si->signedAttrs, nid, lastpos);
72
0
}
73
74
int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,
75
                               int lastpos)
76
0
{
77
0
    return X509at_get_attr_by_OBJ(si->signedAttrs, obj, lastpos);
78
0
}
79
80
X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc)
81
0
{
82
0
    return X509at_get_attr(si->signedAttrs, loc);
83
0
}
84
85
X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc)
86
0
{
87
0
    return X509at_delete_attr(si->signedAttrs, loc);
88
0
}
89
90
int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr)
91
0
{
92
0
    if (X509at_add1_attr(&si->signedAttrs, attr))
93
0
        return 1;
94
0
    return 0;
95
0
}
96
97
int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,
98
                                const ASN1_OBJECT *obj, int type,
99
                                const void *bytes, int len)
100
0
{
101
0
    if (X509at_add1_attr_by_OBJ(&si->signedAttrs, obj, type, bytes, len))
102
0
        return 1;
103
0
    return 0;
104
0
}
105
106
int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,
107
                                int nid, int type, const void *bytes, int len)
108
0
{
109
0
    if (X509at_add1_attr_by_NID(&si->signedAttrs, nid, type, bytes, len))
110
0
        return 1;
111
0
    return 0;
112
0
}
113
114
int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si,
115
                                const char *attrname, int type,
116
                                const void *bytes, int len)
117
0
{
118
0
    if (X509at_add1_attr_by_txt(&si->signedAttrs, attrname, type, bytes, len))
119
0
        return 1;
120
0
    return 0;
121
0
}
122
123
void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
124
                                  int lastpos, int type)
125
0
{
126
0
    return X509at_get0_data_by_OBJ(si->signedAttrs, oid, lastpos, type);
127
0
}
128
129
int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si)
130
0
{
131
0
    return X509at_get_attr_count(si->unsignedAttrs);
132
0
}
133
134
int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid,
135
                                 int lastpos)
136
0
{
137
0
    return X509at_get_attr_by_NID(si->unsignedAttrs, nid, lastpos);
138
0
}
139
140
int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,
141
                                 int lastpos)
142
0
{
143
0
    return X509at_get_attr_by_OBJ(si->unsignedAttrs, obj, lastpos);
144
0
}
145
146
X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc)
147
0
{
148
0
    return X509at_get_attr(si->unsignedAttrs, loc);
149
0
}
150
151
X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc)
152
0
{
153
0
    return X509at_delete_attr(si->unsignedAttrs, loc);
154
0
}
155
156
int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr)
157
0
{
158
0
    if (X509at_add1_attr(&si->unsignedAttrs, attr))
159
0
        return 1;
160
0
    return 0;
161
0
}
162
163
int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,
164
                                  const ASN1_OBJECT *obj, int type,
165
                                  const void *bytes, int len)
166
0
{
167
0
    if (X509at_add1_attr_by_OBJ(&si->unsignedAttrs, obj, type, bytes, len))
168
0
        return 1;
169
0
    return 0;
170
0
}
171
172
int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,
173
                                  int nid, int type,
174
                                  const void *bytes, int len)
175
0
{
176
0
    if (X509at_add1_attr_by_NID(&si->unsignedAttrs, nid, type, bytes, len))
177
0
        return 1;
178
0
    return 0;
179
0
}
180
181
int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,
182
                                  const char *attrname, int type,
183
                                  const void *bytes, int len)
184
0
{
185
0
    if (X509at_add1_attr_by_txt(&si->unsignedAttrs, attrname,
186
0
                                type, bytes, len))
187
0
        return 1;
188
0
    return 0;
189
0
}
190
191
void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
192
                                    int lastpos, int type)
193
0
{
194
0
    return X509at_get0_data_by_OBJ(si->unsignedAttrs, oid, lastpos, type);
195
0
}
196
197
/* Specific attribute cases */