Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/pkcs12/p12_utl.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /* $OpenBSD: p12_utl.c,v 1.16 2018/05/30 15:32:11 tb Exp $ */ | - | ||||||||||||
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | - | ||||||||||||
3 | * project 1999. | - | ||||||||||||
4 | */ | - | ||||||||||||
5 | /* ==================================================================== | - | ||||||||||||
6 | * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | - | ||||||||||||
7 | * | - | ||||||||||||
8 | * Redistribution and use in source and binary forms, with or without | - | ||||||||||||
9 | * modification, are permitted provided that the following conditions | - | ||||||||||||
10 | * are met: | - | ||||||||||||
11 | * | - | ||||||||||||
12 | * 1. Redistributions of source code must retain the above copyright | - | ||||||||||||
13 | * notice, this list of conditions and the following disclaimer. | - | ||||||||||||
14 | * | - | ||||||||||||
15 | * 2. Redistributions in binary form must reproduce the above copyright | - | ||||||||||||
16 | * notice, this list of conditions and the following disclaimer in | - | ||||||||||||
17 | * the documentation and/or other materials provided with the | - | ||||||||||||
18 | * distribution. | - | ||||||||||||
19 | * | - | ||||||||||||
20 | * 3. All advertising materials mentioning features or use of this | - | ||||||||||||
21 | * software must display the following acknowledgment: | - | ||||||||||||
22 | * "This product includes software developed by the OpenSSL Project | - | ||||||||||||
23 | * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" | - | ||||||||||||
24 | * | - | ||||||||||||
25 | * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to | - | ||||||||||||
26 | * endorse or promote products derived from this software without | - | ||||||||||||
27 | * prior written permission. For written permission, please contact | - | ||||||||||||
28 | * licensing@OpenSSL.org. | - | ||||||||||||
29 | * | - | ||||||||||||
30 | * 5. Products derived from this software may not be called "OpenSSL" | - | ||||||||||||
31 | * nor may "OpenSSL" appear in their names without prior written | - | ||||||||||||
32 | * permission of the OpenSSL Project. | - | ||||||||||||
33 | * | - | ||||||||||||
34 | * 6. Redistributions of any form whatsoever must retain the following | - | ||||||||||||
35 | * acknowledgment: | - | ||||||||||||
36 | * "This product includes software developed by the OpenSSL Project | - | ||||||||||||
37 | * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" | - | ||||||||||||
38 | * | - | ||||||||||||
39 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY | - | ||||||||||||
40 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | - | ||||||||||||
41 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | - | ||||||||||||
42 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR | - | ||||||||||||
43 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | - | ||||||||||||
44 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | - | ||||||||||||
45 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | - | ||||||||||||
46 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | - | ||||||||||||
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | - | ||||||||||||
48 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | - | ||||||||||||
49 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | - | ||||||||||||
50 | * OF THE POSSIBILITY OF SUCH DAMAGE. | - | ||||||||||||
51 | * ==================================================================== | - | ||||||||||||
52 | * | - | ||||||||||||
53 | * This product includes cryptographic software written by Eric Young | - | ||||||||||||
54 | * (eay@cryptsoft.com). This product includes software written by Tim | - | ||||||||||||
55 | * Hudson (tjh@cryptsoft.com). | - | ||||||||||||
56 | * | - | ||||||||||||
57 | */ | - | ||||||||||||
58 | - | |||||||||||||
59 | #include <limits.h> | - | ||||||||||||
60 | #include <stdio.h> | - | ||||||||||||
61 | #include <string.h> | - | ||||||||||||
62 | - | |||||||||||||
63 | #include <openssl/pkcs12.h> | - | ||||||||||||
64 | - | |||||||||||||
65 | /* Cheap and nasty Unicode stuff */ | - | ||||||||||||
66 | - | |||||||||||||
67 | unsigned char * | - | ||||||||||||
68 | OPENSSL_asc2uni(const char *asc, int asclen, unsigned char **uni, int *unilen) | - | ||||||||||||
69 | { | - | ||||||||||||
70 | size_t ulen, i; | - | ||||||||||||
71 | unsigned char *unitmp; | - | ||||||||||||
72 | - | |||||||||||||
73 | if (asclen < 0)
| 0 | ||||||||||||
74 | ulen = strlen(asc); never executed: ulen = strlen(asc); | 0 | ||||||||||||
75 | else | - | ||||||||||||
76 | ulen = (size_t)asclen; never executed: ulen = (size_t)asclen; | 0 | ||||||||||||
77 | ulen++; | - | ||||||||||||
78 | if (ulen == 0) /* unlikely overflow */
| 0 | ||||||||||||
79 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
80 | if ((unitmp = reallocarray(NULL, ulen, 2)) == NULL)
| 0 | ||||||||||||
81 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
82 | ulen *= 2; | - | ||||||||||||
83 | /* XXX This interface ought to use unsigned types */ | - | ||||||||||||
84 | if (ulen > INT_MAX) {
| 0 | ||||||||||||
85 | free(unitmp); | - | ||||||||||||
86 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
87 | } | - | ||||||||||||
88 | for (i = 0; i < ulen - 2; i += 2) {
| 0 | ||||||||||||
89 | unitmp[i] = 0; | - | ||||||||||||
90 | unitmp[i + 1] = *asc++; | - | ||||||||||||
91 | } never executed: end of block | 0 | ||||||||||||
92 | /* Make result double-NUL terminated */ | - | ||||||||||||
93 | unitmp[ulen - 2] = 0; | - | ||||||||||||
94 | unitmp[ulen - 1] = 0; | - | ||||||||||||
95 | if (unilen)
| 0 | ||||||||||||
96 | *unilen = ulen; never executed: *unilen = ulen; | 0 | ||||||||||||
97 | if (uni)
| 0 | ||||||||||||
98 | *uni = unitmp; never executed: *uni = unitmp; | 0 | ||||||||||||
99 | return unitmp; never executed: return unitmp; | 0 | ||||||||||||
100 | } | - | ||||||||||||
101 | - | |||||||||||||
102 | char * | - | ||||||||||||
103 | OPENSSL_uni2asc(const unsigned char *uni, int unilen) | - | ||||||||||||
104 | { | - | ||||||||||||
105 | size_t asclen, u16len, i; | - | ||||||||||||
106 | char *asctmp; | - | ||||||||||||
107 | - | |||||||||||||
108 | if (unilen < 0)
| 0 | ||||||||||||
109 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
110 | - | |||||||||||||
111 | asclen = u16len = (size_t)unilen / 2; | - | ||||||||||||
112 | /* If no terminating NUL, allow for one */ | - | ||||||||||||
113 | if (unilen == 0 || uni[unilen - 1] != '\0')
| 0 | ||||||||||||
114 | asclen++; never executed: asclen++; | 0 | ||||||||||||
115 | if ((asctmp = malloc(asclen)) == NULL)
| 0 | ||||||||||||
116 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
117 | /* Skip first zero byte */ | - | ||||||||||||
118 | uni++; | - | ||||||||||||
119 | for (i = 0; i < u16len; i++) {
| 0 | ||||||||||||
120 | asctmp[i] = *uni; | - | ||||||||||||
121 | uni += 2; | - | ||||||||||||
122 | } never executed: end of block | 0 | ||||||||||||
123 | asctmp[asclen - 1] = '\0'; | - | ||||||||||||
124 | return asctmp; never executed: return asctmp; | 0 | ||||||||||||
125 | } | - | ||||||||||||
126 | - | |||||||||||||
127 | int | - | ||||||||||||
128 | i2d_PKCS12_bio(BIO *bp, PKCS12 *p12) | - | ||||||||||||
129 | { | - | ||||||||||||
130 | return ASN1_item_i2d_bio(&PKCS12_it, bp, p12); never executed: return ASN1_item_i2d_bio(&PKCS12_it, bp, p12); | 0 | ||||||||||||
131 | } | - | ||||||||||||
132 | - | |||||||||||||
133 | int | - | ||||||||||||
134 | i2d_PKCS12_fp(FILE *fp, PKCS12 *p12) | - | ||||||||||||
135 | { | - | ||||||||||||
136 | return ASN1_item_i2d_fp(&PKCS12_it, fp, p12); never executed: return ASN1_item_i2d_fp(&PKCS12_it, fp, p12); | 0 | ||||||||||||
137 | } | - | ||||||||||||
138 | - | |||||||||||||
139 | PKCS12 * | - | ||||||||||||
140 | d2i_PKCS12_bio(BIO *bp, PKCS12 **p12) | - | ||||||||||||
141 | { | - | ||||||||||||
142 | return ASN1_item_d2i_bio(&PKCS12_it, bp, p12); never executed: return ASN1_item_d2i_bio(&PKCS12_it, bp, p12); | 0 | ||||||||||||
143 | } | - | ||||||||||||
144 | - | |||||||||||||
145 | PKCS12 * | - | ||||||||||||
146 | d2i_PKCS12_fp(FILE *fp, PKCS12 **p12) | - | ||||||||||||
147 | { | - | ||||||||||||
148 | return ASN1_item_d2i_fp(&PKCS12_it, fp, p12); never executed: return ASN1_item_d2i_fp(&PKCS12_it, fp, p12); | 0 | ||||||||||||
149 | } | - | ||||||||||||
150 | - | |||||||||||||
151 | PKCS12_SAFEBAG * | - | ||||||||||||
152 | PKCS12_x5092certbag(X509 *x509) | - | ||||||||||||
153 | { | - | ||||||||||||
154 | return PKCS12_item_pack_safebag(x509, &X509_it, never executed: return PKCS12_item_pack_safebag(x509, &X509_it, 158, 152); | 0 | ||||||||||||
155 | NID_x509Certificate, NID_certBag); never executed: return PKCS12_item_pack_safebag(x509, &X509_it, 158, 152); | 0 | ||||||||||||
156 | } | - | ||||||||||||
157 | - | |||||||||||||
158 | PKCS12_SAFEBAG * | - | ||||||||||||
159 | PKCS12_x509crl2certbag(X509_CRL *crl) | - | ||||||||||||
160 | { | - | ||||||||||||
161 | return PKCS12_item_pack_safebag(crl, &X509_CRL_it, never executed: return PKCS12_item_pack_safebag(crl, &X509_CRL_it, 160, 153); | 0 | ||||||||||||
162 | NID_x509Crl, NID_crlBag); never executed: return PKCS12_item_pack_safebag(crl, &X509_CRL_it, 160, 153); | 0 | ||||||||||||
163 | } | - | ||||||||||||
164 | - | |||||||||||||
165 | X509 * | - | ||||||||||||
166 | PKCS12_certbag2x509(PKCS12_SAFEBAG *bag) | - | ||||||||||||
167 | { | - | ||||||||||||
168 | if (OBJ_obj2nid(bag->type) != NID_certBag)
| 0 | ||||||||||||
169 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
170 | if (OBJ_obj2nid(bag->value.bag->type) != NID_x509Certificate)
| 0 | ||||||||||||
171 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
172 | return ASN1_item_unpack(bag->value.bag->value.octet, never executed: return ASN1_item_unpack(bag->value.bag->value.octet, &X509_it); | 0 | ||||||||||||
173 | &X509_it); never executed: return ASN1_item_unpack(bag->value.bag->value.octet, &X509_it); | 0 | ||||||||||||
174 | } | - | ||||||||||||
175 | - | |||||||||||||
176 | X509_CRL * | - | ||||||||||||
177 | PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag) | - | ||||||||||||
178 | { | - | ||||||||||||
179 | if (OBJ_obj2nid(bag->type) != NID_crlBag)
| 0 | ||||||||||||
180 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
181 | if (OBJ_obj2nid(bag->value.bag->type) != NID_x509Crl)
| 0 | ||||||||||||
182 | return NULL; never executed: return ((void *)0) ; | 0 | ||||||||||||
183 | return ASN1_item_unpack(bag->value.bag->value.octet, never executed: return ASN1_item_unpack(bag->value.bag->value.octet, &X509_CRL_it); | 0 | ||||||||||||
184 | &X509_CRL_it); never executed: return ASN1_item_unpack(bag->value.bag->value.octet, &X509_CRL_it); | 0 | ||||||||||||
185 | } | - | ||||||||||||
Source code | Switch to Preprocessed file |