OpenCoverage

asn_pack.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/asn_pack.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: asn_pack.c,v 1.17 2018/04/25 11:48:21 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 <stdio.h>-
60-
61#include <openssl/asn1.h>-
62#include <openssl/err.h>-
63-
64#ifndef NO_ASN1_OLD-
65-
66/* ASN1 packing and unpacking functions */-
67-
68/* Turn an ASN1 encoded SEQUENCE OF into a STACK of structures */-
69-
70STACK_OF(OPENSSL_BLOCK) *-
71ASN1_seq_unpack(const unsigned char *buf, int len, d2i_of_void *d2i,-
72 void (*free_func)(OPENSSL_BLOCK))-
73{-
74 STACK_OF(OPENSSL_BLOCK) *sk;-
75 const unsigned char *pbuf;-
76-
77 pbuf = buf;-
78 if (!(sk = d2i_ASN1_SET(NULL, &pbuf, len, d2i, free_func,
!(sk = d2i_ASN...nc, 16, 0x00))Description
TRUEnever evaluated
FALSEnever evaluated
0
79 V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL)))
!(sk = d2i_ASN...nc, 16, 0x00))Description
TRUEnever evaluated
FALSEnever evaluated
0
80 ASN1error(ASN1_R_DECODE_ERROR);
never executed: ERR_put_error(13,(0xfff),(110),__FILE__,80);
0
81 return sk;
never executed: return sk;
0
82}-
83-
84/* Turn a STACK structures into an ASN1 encoded SEQUENCE OF structure in a-
85 * OPENSSL_malloc'ed buffer-
86 */-
87-
88unsigned char *-
89ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d,-
90 unsigned char **buf, int *len)-
91{-
92 int safelen;-
93 unsigned char *safe, *p;-
94-
95 if (!(safelen = i2d_ASN1_SET(safes, NULL, i2d, V_ASN1_SEQUENCE,
!(safelen = i2... 16, 0x00, 0))Description
TRUEnever evaluated
FALSEnever evaluated
0
96 V_ASN1_UNIVERSAL, IS_SEQUENCE))) {
!(safelen = i2... 16, 0x00, 0))Description
TRUEnever evaluated
FALSEnever evaluated
0
97 ASN1error(ASN1_R_ENCODE_ERROR);-
98 return NULL;
never executed: return ((void *)0) ;
0
99 }-
100 if (!(safe = malloc(safelen))) {
!(safe = malloc(safelen))Description
TRUEnever evaluated
FALSEnever evaluated
0
101 ASN1error(ERR_R_MALLOC_FAILURE);-
102 return NULL;
never executed: return ((void *)0) ;
0
103 }-
104 p = safe;-
105 i2d_ASN1_SET(safes, &p, i2d, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL,-
106 IS_SEQUENCE);-
107 if (len)
lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
108 *len = safelen;
never executed: *len = safelen;
0
109 if (buf)
bufDescription
TRUEnever evaluated
FALSEnever evaluated
0
110 *buf = safe;
never executed: *buf = safe;
0
111 return safe;
never executed: return safe;
0
112}-
113-
114/* Extract an ASN1 object from an ASN1_STRING */-
115-
116void *-
117ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i)-
118{-
119 const unsigned char *p;-
120 char *ret;-
121-
122 p = oct->data;-
123 if (!(ret = d2i(NULL, &p, oct->length)))
!(ret = d2i( (... oct->length))Description
TRUEnever evaluated
FALSEnever evaluated
0
124 ASN1error(ASN1_R_DECODE_ERROR);
never executed: ERR_put_error(13,(0xfff),(110),__FILE__,124);
0
125 return ret;
never executed: return ret;
0
126}-
127-
128/* Pack an ASN1 object into an ASN1_STRING */-
129-
130ASN1_STRING *-
131ASN1_pack_string(void *obj, i2d_of_void *i2d, ASN1_STRING **oct)-
132{-
133 unsigned char *p;-
134 ASN1_STRING *octmp;-
135-
136 if (!oct || !*oct) {
!octDescription
TRUEnever evaluated
FALSEnever evaluated
!*octDescription
TRUEnever evaluated
FALSEnever evaluated
0
137 if (!(octmp = ASN1_STRING_new())) {
!(octmp = ASN1_STRING_new())Description
TRUEnever evaluated
FALSEnever evaluated
0
138 ASN1error(ERR_R_MALLOC_FAILURE);-
139 return NULL;
never executed: return ((void *)0) ;
0
140 }-
141 } else
never executed: end of block
0
142 octmp = *oct;
never executed: octmp = *oct;
0
143 -
144 if (!(octmp->length = i2d(obj, NULL))) {
!(octmp->lengt...((void *)0) ))Description
TRUEnever evaluated
FALSEnever evaluated
0
145 ASN1error(ASN1_R_ENCODE_ERROR);-
146 goto err;
never executed: goto err;
0
147 }-
148 if (!(p = malloc (octmp->length))) {
!(p = malloc (octmp->length))Description
TRUEnever evaluated
FALSEnever evaluated
0
149 ASN1error(ERR_R_MALLOC_FAILURE);-
150 goto err;
never executed: goto err;
0
151 }-
152 octmp->data = p;-
153 i2d (obj, &p);-
154 if (oct)
octDescription
TRUEnever evaluated
FALSEnever evaluated
0
155 *oct = octmp;
never executed: *oct = octmp;
0
156 return octmp;
never executed: return octmp;
0
157err:-
158 if (!oct || octmp != *oct) {
!octDescription
TRUEnever evaluated
FALSEnever evaluated
octmp != *octDescription
TRUEnever evaluated
FALSEnever evaluated
0
159 ASN1_STRING_free(octmp);-
160 if (oct)
octDescription
TRUEnever evaluated
FALSEnever evaluated
0
161 *oct = NULL;
never executed: *oct = ((void *)0) ;
0
162 }
never executed: end of block
0
163 return NULL;
never executed: return ((void *)0) ;
0
164}-
165-
166#endif-
167-
168/* ASN1_ITEM versions of the above */-
169-
170ASN1_STRING *-
171ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct)-
172{-
173 ASN1_STRING *octmp;-
174-
175 if (!oct || !*oct) {
!octDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
FALSEnever evaluated
!*octDescription
TRUEnever evaluated
FALSEnever evaluated
0-1
176 if (!(octmp = ASN1_STRING_new ())) {
!(octmp = ASN1_STRING_new ())Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
177 ASN1error(ERR_R_MALLOC_FAILURE);-
178 return NULL;
never executed: return ((void *)0) ;
0
179 }-
180 } else
executed 1 time by 1 test: end of block
Executed by:
  • asn1evp
1
181 octmp = *oct;
never executed: octmp = *oct;
0
182-
183 free(octmp->data);-
184 octmp->data = NULL;-
185-
186 if (!(octmp->length = ASN1_item_i2d(obj, &octmp->data, it))) {
!(octmp->lengt...mp->data, it))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
187 ASN1error(ASN1_R_ENCODE_ERROR);-
188 goto err;
never executed: goto err;
0
189 }-
190 if (!octmp->data) {
!octmp->dataDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
191 ASN1error(ERR_R_MALLOC_FAILURE);-
192 goto err;
never executed: goto err;
0
193 }-
194 if (oct)
octDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
195 *oct = octmp;
never executed: *oct = octmp;
0
196 return octmp;
executed 1 time by 1 test: return octmp;
Executed by:
  • asn1evp
1
197err:-
198 if (!oct || octmp != *oct)
!octDescription
TRUEnever evaluated
FALSEnever evaluated
octmp != *octDescription
TRUEnever evaluated
FALSEnever evaluated
0
199 ASN1_STRING_free(octmp);
never executed: ASN1_STRING_free(octmp);
0
200 return NULL;
never executed: return ((void *)0) ;
0
201}-
202-
203/* Extract an ASN1 object from an ASN1_STRING */-
204-
205void *-
206ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it)-
207{-
208 const unsigned char *p;-
209 void *ret;-
210-
211 p = oct->data;-
212 if (!(ret = ASN1_item_d2i(NULL, &p, oct->length, it)))
!(ret = ASN1_i...->length, it))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
0-2
213 ASN1error(ASN1_R_DECODE_ERROR);
never executed: ERR_put_error(13,(0xfff),(110),__FILE__,213);
0
214 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • asn1evp
2
215}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2