OpenCoverage

evp_asn1.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/evp_asn1.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: evp_asn1.c,v 1.21 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#include <string.h>-
61-
62#include <openssl/asn1.h>-
63#include <openssl/asn1t.h>-
64#include <openssl/err.h>-
65-
66int-
67ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len)-
68{-
69 ASN1_STRING *os;-
70-
71 if ((os = ASN1_OCTET_STRING_new()) == NULL)
(os = ASN1_OCT...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
72 return (0);
never executed: return (0);
0
73 if (!ASN1_STRING_set(os, data, len)) {
!ASN1_STRING_s...os, data, len)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
74 ASN1_OCTET_STRING_free(os);-
75 return (0);
never executed: return (0);
0
76 }-
77 ASN1_TYPE_set(a, V_ASN1_OCTET_STRING, os);-
78 return (1);
executed 1 time by 1 test: return (1);
Executed by:
  • pkcs7test
1
79}-
80-
81int-
82ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len)-
83{-
84 int ret, num;-
85 unsigned char *p;-
86-
87 if ((a->type != V_ASN1_OCTET_STRING) ||
(a->type != 4)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
88 (a->value.octet_string == NULL)) {
(a->value.octe... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
89 ASN1error(ASN1_R_DATA_IS_WRONG);-
90 return (-1);
never executed: return (-1);
0
91 }-
92 p = ASN1_STRING_data(a->value.octet_string);-
93 ret = ASN1_STRING_length(a->value.octet_string);-
94 if (ret < max_len)
ret < max_lenDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
95 num = ret;
never executed: num = ret;
0
96 else-
97 num = max_len;
executed 1 time by 1 test: num = max_len;
Executed by:
  • pkcs7test
1
98 memcpy(data, p, num);-
99 return (ret);
executed 1 time by 1 test: return (ret);
Executed by:
  • pkcs7test
1
100}-
101-
102typedef struct {-
103 ASN1_INTEGER *num;-
104 ASN1_OCTET_STRING *value;-
105} ASN1_int_octetstring;-
106-
107static const ASN1_TEMPLATE ASN1_INT_OCTETSTRING_seq_tt[] = {-
108 {-
109 .offset = offsetof(ASN1_int_octetstring, num),-
110 .field_name = "num",-
111 .item = &ASN1_INTEGER_it,-
112 },-
113 {-
114 .offset = offsetof(ASN1_int_octetstring, value),-
115 .field_name = "value",-
116 .item = &ASN1_OCTET_STRING_it,-
117 },-
118};-
119-
120const ASN1_ITEM ASN1_INT_OCTETSTRING_it = {-
121 .itype = ASN1_ITYPE_SEQUENCE,-
122 .utype = V_ASN1_SEQUENCE,-
123 .templates = ASN1_INT_OCTETSTRING_seq_tt,-
124 .tcount = sizeof(ASN1_INT_OCTETSTRING_seq_tt) / sizeof(ASN1_TEMPLATE),-
125 .size = sizeof(ASN1_int_octetstring),-
126 .sname = "ASN1_INT_OCTETSTRING",-
127};-
128-
129int-
130ASN1_TYPE_set_int_octetstring(ASN1_TYPE *at, long num, unsigned char *data,-
131 int len)-
132{-
133 ASN1_int_octetstring *ios;-
134 ASN1_STRING *sp = NULL;-
135 int ret = 0;-
136-
137 if ((ios = (ASN1_int_octetstring *)ASN1_item_new(
(ios = (ASN1_i...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
138 &ASN1_INT_OCTETSTRING_it)) == NULL)
(ios = (ASN1_i...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
139 goto err;
never executed: goto err;
0
140 if ((ios->num = ASN1_INTEGER_new()) == NULL)
(ios->num = AS...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
141 goto err;
never executed: goto err;
0
142 if (!ASN1_INTEGER_set(ios->num, num))
!ASN1_INTEGER_...ios->num, num)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
143 goto err;
never executed: goto err;
0
144 if ((ios->value = ASN1_OCTET_STRING_new()) == NULL)
(ios->value = ...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
145 goto err;
never executed: goto err;
0
146 if (!ASN1_OCTET_STRING_set(ios->value, data, len))
!ASN1_OCTET_ST...ue, data, len)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
147 goto err;
never executed: goto err;
0
148-
149 if ((sp = ASN1_item_pack(ios, &ASN1_INT_OCTETSTRING_it, NULL)) == NULL)
(sp = ASN1_ite...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
0-1
150 goto err;
never executed: goto err;
0
151-
152 ASN1_TYPE_set(at, V_ASN1_SEQUENCE, sp);-
153 sp = NULL;-
154-
155 ret = 1;-
156-
157 err:
code before this statement executed 1 time by 1 test: err:
Executed by:
  • asn1evp
1
158 ASN1_item_free((ASN1_VALUE *)ios, &ASN1_INT_OCTETSTRING_it);-
159 ASN1_STRING_free(sp);-
160-
161 return ret;
executed 1 time by 1 test: return ret;
Executed by:
  • asn1evp
1
162}-
163-
164int-
165ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *at, long *num, unsigned char *data,-
166 int max_len)-
167{-
168 ASN1_STRING *sp = at->value.sequence;-
169 ASN1_int_octetstring *ios = NULL;-
170 int ret = -1;-
171 int len;-
172-
173 if (at->type != V_ASN1_SEQUENCE || sp == NULL)
at->type != 16Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
sp == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
0-2
174 goto err;
never executed: goto err;
0
175-
176 if ((ios = ASN1_item_unpack(sp, &ASN1_INT_OCTETSTRING_it)) == NULL)
(ios = ASN1_it...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
0-2
177 goto err;
never executed: goto err;
0
178-
179 if (num != NULL)
num != ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
FALSEnever evaluated
0-2
180 *num = ASN1_INTEGER_get(ios->num);
executed 2 times by 1 test: *num = ASN1_INTEGER_get(ios->num);
Executed by:
  • asn1evp
2
181 if (data != NULL) {
data != ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
FALSEnever evaluated
0-2
182 len = ASN1_STRING_length(ios->value);-
183 if (len > max_len)
len > max_lenDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
FALSEevaluated 1 time by 1 test
Evaluated by:
  • asn1evp
1
184 len = max_len;
executed 1 time by 1 test: len = max_len;
Executed by:
  • asn1evp
1
185 memcpy(data, ASN1_STRING_data(ios->value), len);-
186 }
executed 2 times by 1 test: end of block
Executed by:
  • asn1evp
2
187-
188 ret = ASN1_STRING_length(ios->value);-
189-
190 err:
code before this statement executed 2 times by 1 test: err:
Executed by:
  • asn1evp
2
191 ASN1_item_free((ASN1_VALUE *)ios, &ASN1_INT_OCTETSTRING_it);-
192-
193 if (ret == -1)
ret == -1Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • asn1evp
0-2
194 ASN1error(ASN1_R_DATA_IS_WRONG);
never executed: ERR_put_error(13,(0xfff),(109),__FILE__,194);
0
195-
196 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • asn1evp
2
197}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2