summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_enum.c
diff options
context:
space:
mode:
authorjsing <>2014-04-18 07:09:23 +0000
committerjsing <>2014-04-18 07:09:23 +0000
commit47f3f755de44fe72026c26b61f3534245e51ce63 (patch)
tree530ccfa4465ec1e141f16ac55eccd5e456d9dadf /src/lib/libcrypto/asn1/a_enum.c
parentf843014abcc7498613638ca7bdc47b3123ea2544 (diff)
downloadopenbsd-47f3f755de44fe72026c26b61f3534245e51ce63.tar.gz
openbsd-47f3f755de44fe72026c26b61f3534245e51ce63.tar.bz2
openbsd-47f3f755de44fe72026c26b61f3534245e51ce63.zip
More KNF.
Diffstat (limited to 'src/lib/libcrypto/asn1/a_enum.c')
-rw-r--r--src/lib/libcrypto/asn1/a_enum.c141
1 files changed, 76 insertions, 65 deletions
diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c
index 70cea0aad2..5e6f7589cf 100644
--- a/src/lib/libcrypto/asn1/a_enum.c
+++ b/src/lib/libcrypto/asn1/a_enum.c
@@ -5,21 +5,21 @@
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -61,114 +61,125 @@
61#include <openssl/asn1.h> 61#include <openssl/asn1.h>
62#include <openssl/bn.h> 62#include <openssl/bn.h>
63 63
64/* 64/*
65 * Code for ENUMERATED type: identical to INTEGER apart from a different tag. 65 * Code for ENUMERATED type: identical to INTEGER apart from a different tag.
66 * for comments on encoding see a_int.c 66 * for comments on encoding see a_int.c
67 */ 67 */
68 68
69int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v) 69int
70ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v)
70{ 71{
71 int j,k; 72 int j, k;
72 unsigned int i; 73 unsigned int i;
73 unsigned char buf[sizeof(long)+1]; 74 unsigned char buf[sizeof(long) + 1];
74 long d; 75 long d;
75 76
76 a->type=V_ASN1_ENUMERATED; 77 a->type = V_ASN1_ENUMERATED;
77 if (a->length < (int)(sizeof(long)+1)) { 78 if (a->length < (int)(sizeof(long) + 1)) {
78 if (a->data != NULL) 79 if (a->data != NULL)
79 free(a->data); 80 free(a->data);
80 if ((a->data=(unsigned char *)malloc(sizeof(long)+1)) != NULL) 81 if ((a->data = (unsigned char *)malloc(sizeof(long) + 1)) != NULL)
81 memset((char *)a->data,0,sizeof(long)+1); 82 memset((char *)a->data, 0, sizeof(long) + 1);
82 } 83 }
83 if (a->data == NULL) { 84 if (a->data == NULL) {
84 ASN1err(ASN1_F_ASN1_ENUMERATED_SET,ERR_R_MALLOC_FAILURE); 85 ASN1err(ASN1_F_ASN1_ENUMERATED_SET, ERR_R_MALLOC_FAILURE);
85 return(0); 86 return (0);
86 } 87 }
87 d=v; 88 d = v;
88 if (d < 0) { 89 if (d < 0) {
89 d= -d; 90 d = -d;
90 a->type=V_ASN1_NEG_ENUMERATED; 91 a->type = V_ASN1_NEG_ENUMERATED;
91 } 92 }
92 93
93 for (i=0; i<sizeof(long); i++) { 94 for (i = 0; i < sizeof(long); i++) {
94 if (d == 0) break; 95 if (d == 0)
95 buf[i]=(int)d&0xff; 96 break;
96 d>>=8; 97 buf[i] = (int)d & 0xff;
98 d >>= 8;
97 } 99 }
98 j=0; 100 j = 0;
99 for (k=i-1; k >=0; k--) 101 for (k = i - 1; k >=0; k--)
100 a->data[j++]=buf[k]; 102 a->data[j++] = buf[k];
101 a->length=j; 103 a->length = j;
102 return(1); 104 return (1);
103} 105}
104 106
105long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a) 107long
108ASN1_ENUMERATED_get(ASN1_ENUMERATED *a)
106{ 109{
107 int neg=0,i; 110 int neg = 0, i;
108 long r=0; 111 long r = 0;
109 112
110 if (a == NULL) return(0L); 113 if (a == NULL)
111 i=a->type; 114 return (0L);
115 i = a->type;
112 if (i == V_ASN1_NEG_ENUMERATED) 116 if (i == V_ASN1_NEG_ENUMERATED)
113 neg=1; 117 neg = 1;
114 else if (i != V_ASN1_ENUMERATED) 118 else if (i != V_ASN1_ENUMERATED)
115 return -1; 119 return -1;
116 120
117 if (a->length > (int)sizeof(long)) { 121 if (a->length > (int)sizeof(long)) {
118 /* hmm... a bit ugly */ 122 /* hmm... a bit ugly */
119 return(0xffffffffL); 123 return (0xffffffffL);
120 } 124 }
121 if (a->data == NULL) 125 if (a->data == NULL)
122 return 0; 126 return 0;
123 127
124 for (i=0; i<a->length; i++) { 128 for (i = 0; i < a->length; i++) {
125 r<<=8; 129 r <<= 8;
126 r|=(unsigned char)a->data[i]; 130 r |= (unsigned char)a->data[i];
127 } 131 }
128 if (neg) r= -r; 132 if (neg)
129 return(r); 133 r = -r;
134 return (r);
130} 135}
131 136
132ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) 137ASN1_ENUMERATED *
138BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai)
133{ 139{
134 ASN1_ENUMERATED *ret; 140 ASN1_ENUMERATED *ret;
135 int len,j; 141 int len, j;
136 142
137 if (ai == NULL) 143 if (ai == NULL)
138 ret=M_ASN1_ENUMERATED_new(); 144 ret = M_ASN1_ENUMERATED_new();
139 else 145 else
140 ret=ai; 146 ret = ai;
141 if (ret == NULL) { 147 if (ret == NULL) {
142 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED,ERR_R_NESTED_ASN1_ERROR); 148 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED, ERR_R_NESTED_ASN1_ERROR);
143 goto err; 149 goto err;
144 } 150 }
145 if(BN_is_negative(bn)) ret->type = V_ASN1_NEG_ENUMERATED; 151 if (BN_is_negative(bn))
146 else ret->type=V_ASN1_ENUMERATED; 152 ret->type = V_ASN1_NEG_ENUMERATED;
147 j=BN_num_bits(bn); 153 else
148 len=((j == 0)?0:((j/8)+1)); 154 ret->type = V_ASN1_ENUMERATED;
149 if (ret->length < len+4) { 155 j = BN_num_bits(bn);
150 unsigned char *new_data=realloc(ret->data, len+4); 156 len = ((j == 0) ? 0 : ((j / 8) + 1));
151 if (!new_data) 157 if (ret->length < len + 4) {
152 { 158 unsigned char *new_data = realloc(ret->data, len + 4);
153 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED,ERR_R_MALLOC_FAILURE); 159 if (!new_data) {
160 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED, ERR_R_MALLOC_FAILURE);
154 goto err; 161 goto err;
155 } 162 }
156 ret->data=new_data; 163 ret->data = new_data;
157 } 164 }
158 165
159 ret->length=BN_bn2bin(bn,ret->data); 166 ret->length = BN_bn2bin(bn, ret->data);
160 return(ret); 167 return (ret);
168
161err: 169err:
162 if (ret != ai) M_ASN1_ENUMERATED_free(ret); 170 if (ret != ai)
163 return(NULL); 171 M_ASN1_ENUMERATED_free(ret);
172 return (NULL);
164} 173}
165 174
166BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn) 175BIGNUM *
176ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn)
167{ 177{
168 BIGNUM *ret; 178 BIGNUM *ret;
169 179
170 if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL) 180 if ((ret = BN_bin2bn(ai->data, ai->length, bn)) == NULL)
171 ASN1err(ASN1_F_ASN1_ENUMERATED_TO_BN,ASN1_R_BN_LIB); 181 ASN1err(ASN1_F_ASN1_ENUMERATED_TO_BN, ASN1_R_BN_LIB);
172 else if(ai->type == V_ASN1_NEG_ENUMERATED) BN_set_negative(ret,1); 182 else if (ai->type == V_ASN1_NEG_ENUMERATED)
173 return(ret); 183 BN_set_negative(ret, 1);
184 return (ret);
174} 185}