OpenCoverage

a_enum.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/a_enum.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: a_enum.c,v 1.19 2018/04/25 11:48:21 tb Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <stdio.h>-
60-
61#include <openssl/asn1.h>-
62#include <openssl/bn.h>-
63#include <openssl/err.h>-
64-
65/*-
66 * Code for ENUMERATED type: identical to INTEGER apart from a different tag.-
67 * for comments on encoding see a_int.c-
68 */-
69-
70int-
71ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v)-
72{-
73 int j, k;-
74 unsigned int i;-
75 unsigned char buf[sizeof(long) + 1];-
76 long d;-
77-
78 a->type = V_ASN1_ENUMERATED;-
79 if (a->length < (int)(sizeof(long) + 1)) {
a->length < (i...eof(long) + 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
80 free(a->data);-
81 a->data = calloc(1, sizeof(long) + 1);-
82 }
never executed: end of block
0
83 if (a->data == NULL) {
a->data == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
84 ASN1error(ERR_R_MALLOC_FAILURE);-
85 return (0);
never executed: return (0);
0
86 }-
87 d = v;-
88 if (d < 0) {
d < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
89 d = -d;-
90 a->type = V_ASN1_NEG_ENUMERATED;-
91 }
never executed: end of block
0
92-
93 for (i = 0; i < sizeof(long); i++) {
i < sizeof(long)Description
TRUEnever evaluated
FALSEnever evaluated
0
94 if (d == 0)
d == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
95 break;
never executed: break;
0
96 buf[i] = (int)d & 0xff;-
97 d >>= 8;-
98 }
never executed: end of block
0
99 j = 0;-
100 for (k = i - 1; k >= 0; k--)
k >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
101 a->data[j++] = buf[k];
never executed: a->data[j++] = buf[k];
0
102 a->length = j;-
103 return (1);
never executed: return (1);
0
104}-
105-
106long-
107ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a)-
108{-
109 int neg = 0, i;-
110 long r = 0;-
111-
112 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
113 return (0L);
never executed: return (0L);
0
114 i = a->type;-
115 if (i == V_ASN1_NEG_ENUMERATED)
i == (10 | 0x100)Description
TRUEnever evaluated
FALSEnever evaluated
0
116 neg = 1;
never executed: neg = 1;
0
117 else if (i != V_ASN1_ENUMERATED)
i != 10Description
TRUEnever evaluated
FALSEnever evaluated
0
118 return -1;
never executed: return -1;
0
119-
120 if (a->length > (int)sizeof(long)) {
a->length > (int)sizeof(long)Description
TRUEnever evaluated
FALSEnever evaluated
0
121 /* hmm... a bit ugly */-
122 return -1;
never executed: return -1;
0
123 }-
124 if (a->data == NULL)
a->data == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
125 return 0;
never executed: return 0;
0
126-
127 for (i = 0; i < a->length; i++) {
i < a->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
128 r <<= 8;-
129 r |= (unsigned char)a->data[i];-
130 }
never executed: end of block
0
131 if (neg)
negDescription
TRUEnever evaluated
FALSEnever evaluated
0
132 r = -r;
never executed: r = -r;
0
133 return (r);
never executed: return (r);
0
134}-
135-
136ASN1_ENUMERATED *-
137BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai)-
138{-
139 ASN1_ENUMERATED *ret;-
140 int len, j;-
141-
142 if (ai == NULL)
ai == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
143 ret = ASN1_ENUMERATED_new();
never executed: ret = ASN1_ENUMERATED_new();
0
144 else-
145 ret = ai;
never executed: ret = ai;
0
146 if (ret == NULL) {
ret == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
147 ASN1error(ERR_R_NESTED_ASN1_ERROR);-
148 goto err;
never executed: goto err;
0
149 }-
150 if (BN_is_negative(bn))
((bn)->neg != 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
151 ret->type = V_ASN1_NEG_ENUMERATED;
never executed: ret->type = (10 | 0x100);
0
152 else-
153 ret->type = V_ASN1_ENUMERATED;
never executed: ret->type = 10;
0
154 j = BN_num_bits(bn);-
155 len = ((j == 0) ? 0 : ((j / 8) + 1));
(j == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
156 if (ret->length < len + 4) {
ret->length < len + 4Description
TRUEnever evaluated
FALSEnever evaluated
0
157 unsigned char *new_data = realloc(ret->data, len + 4);-
158 if (!new_data) {
!new_dataDescription
TRUEnever evaluated
FALSEnever evaluated
0
159 ASN1error(ERR_R_MALLOC_FAILURE);-
160 goto err;
never executed: goto err;
0
161 }-
162 ret->data = new_data;-
163 }
never executed: end of block
0
164 ret->length = BN_bn2bin(bn, ret->data);-
165-
166 /* Correct zero case */-
167 if (!ret->length) {
!ret->lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
168 ret->data[0] = 0;-
169 ret->length = 1;-
170 }
never executed: end of block
0
171 return (ret);
never executed: return (ret);
0
172-
173err:-
174 if (ret != ai)
ret != aiDescription
TRUEnever evaluated
FALSEnever evaluated
0
175 ASN1_ENUMERATED_free(ret);
never executed: ASN1_ENUMERATED_free(ret);
0
176 return (NULL);
never executed: return ( ((void *)0) );
0
177}-
178-
179BIGNUM *-
180ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn)-
181{-
182 BIGNUM *ret;-
183-
184 if ((ret = BN_bin2bn(ai->data, ai->length, bn)) == NULL)
(ret = BN_bin2...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
185 ASN1error(ASN1_R_BN_LIB);
never executed: ERR_put_error(13,(0xfff),(105),__FILE__,185);
0
186 else if (ai->type == V_ASN1_NEG_ENUMERATED)
ai->type == (10 | 0x100)Description
TRUEnever evaluated
FALSEnever evaluated
0
187 BN_set_negative(ret, 1);
never executed: BN_set_negative(ret, 1);
0
188 return (ret);
never executed: return (ret);
0
189}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2