summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_object.c
diff options
context:
space:
mode:
authortedu <>2014-04-18 00:10:08 +0000
committertedu <>2014-04-18 00:10:08 +0000
commit07f5c09b19f56c323fa22ebd5efb5a4df9f5dc4d (patch)
tree6327d50d69a1982f840dc68fe928ea459e2c41e0 /src/lib/libcrypto/asn1/a_object.c
parent288a9e368d9d4a72792b12a00ad69e3592d94073 (diff)
downloadopenbsd-07f5c09b19f56c323fa22ebd5efb5a4df9f5dc4d.tar.gz
openbsd-07f5c09b19f56c323fa22ebd5efb5a4df9f5dc4d.tar.bz2
openbsd-07f5c09b19f56c323fa22ebd5efb5a4df9f5dc4d.zip
putting most of the braces in the right column is the very least we can do.
Diffstat (limited to 'src/lib/libcrypto/asn1/a_object.c')
-rw-r--r--src/lib/libcrypto/asn1/a_object.c140
1 files changed, 70 insertions, 70 deletions
diff --git a/src/lib/libcrypto/asn1/a_object.c b/src/lib/libcrypto/asn1/a_object.c
index c30f32442d..7e9eeaa2e1 100644
--- a/src/lib/libcrypto/asn1/a_object.c
+++ b/src/lib/libcrypto/asn1/a_object.c
@@ -65,7 +65,7 @@
65#include <openssl/bn.h> 65#include <openssl/bn.h>
66 66
67int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp) 67int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp)
68 { 68{
69 unsigned char *p; 69 unsigned char *p;
70 int objsize; 70 int objsize;
71 71
@@ -81,10 +81,10 @@ int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp)
81 81
82 *pp=p; 82 *pp=p;
83 return(objsize); 83 return(objsize);
84 } 84}
85 85
86int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) 86int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
87 { 87{
88 int i,first,len=0,c, use_bn; 88 int i,first,len=0,c, use_bn;
89 char ftmp[24], *tmp = ftmp; 89 char ftmp[24], *tmp = ftmp;
90 int tmpsize = sizeof ftmp; 90 int tmpsize = sizeof ftmp;
@@ -101,119 +101,119 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
101 c= *(p++); 101 c= *(p++);
102 num--; 102 num--;
103 if ((c >= '0') && (c <= '2')) 103 if ((c >= '0') && (c <= '2'))
104 { 104 {
105 first= c-'0'; 105 first= c-'0';
106 } 106 }
107 else 107 else
108 { 108 {
109 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_FIRST_NUM_TOO_LARGE); 109 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_FIRST_NUM_TOO_LARGE);
110 goto err; 110 goto err;
111 } 111 }
112 112
113 if (num <= 0) 113 if (num <= 0)
114 { 114 {
115 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_MISSING_SECOND_NUMBER); 115 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_MISSING_SECOND_NUMBER);
116 goto err; 116 goto err;
117 } 117 }
118 c= *(p++); 118 c= *(p++);
119 num--; 119 num--;
120 for (;;) 120 for (;;)
121 { 121 {
122 if (num <= 0) break; 122 if (num <= 0) break;
123 if ((c != '.') && (c != ' ')) 123 if ((c != '.') && (c != ' '))
124 { 124 {
125 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_SEPARATOR); 125 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_SEPARATOR);
126 goto err; 126 goto err;
127 } 127 }
128 l=0; 128 l=0;
129 use_bn = 0; 129 use_bn = 0;
130 for (;;) 130 for (;;)
131 { 131 {
132 if (num <= 0) break; 132 if (num <= 0) break;
133 num--; 133 num--;
134 c= *(p++); 134 c= *(p++);
135 if ((c == ' ') || (c == '.')) 135 if ((c == ' ') || (c == '.'))
136 break; 136 break;
137 if ((c < '0') || (c > '9')) 137 if ((c < '0') || (c > '9'))
138 { 138 {
139 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DIGIT); 139 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_INVALID_DIGIT);
140 goto err; 140 goto err;
141 } 141 }
142 if (!use_bn && l >= ((ULONG_MAX - 80) / 10L)) 142 if (!use_bn && l >= ((ULONG_MAX - 80) / 10L))
143 { 143 {
144 use_bn = 1; 144 use_bn = 1;
145 if (!bl) 145 if (!bl)
146 bl = BN_new(); 146 bl = BN_new();
147 if (!bl || !BN_set_word(bl, l)) 147 if (!bl || !BN_set_word(bl, l))
148 goto err; 148 goto err;
149 } 149 }
150 if (use_bn) 150 if (use_bn)
151 { 151 {
152 if (!BN_mul_word(bl, 10L) 152 if (!BN_mul_word(bl, 10L)
153 || !BN_add_word(bl, c-'0')) 153 || !BN_add_word(bl, c-'0'))
154 goto err; 154 goto err;
155 } 155 }
156 else 156 else
157 l=l*10L+(long)(c-'0'); 157 l=l*10L+(long)(c-'0');
158 } 158 }
159 if (len == 0) 159 if (len == 0)
160 { 160 {
161 if ((first < 2) && (l >= 40)) 161 if ((first < 2) && (l >= 40))
162 { 162 {
163 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_SECOND_NUMBER_TOO_LARGE); 163 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_SECOND_NUMBER_TOO_LARGE);
164 goto err; 164 goto err;
165 } 165 }
166 if (use_bn) 166 if (use_bn)
167 { 167 {
168 if (!BN_add_word(bl, first * 40)) 168 if (!BN_add_word(bl, first * 40))
169 goto err; 169 goto err;
170 } 170 }
171 else 171 else
172 l+=(long)first*40; 172 l+=(long)first*40;
173 } 173 }
174 i=0; 174 i=0;
175 if (use_bn) 175 if (use_bn)
176 { 176 {
177 int blsize; 177 int blsize;
178 blsize = BN_num_bits(bl); 178 blsize = BN_num_bits(bl);
179 blsize = (blsize + 6)/7; 179 blsize = (blsize + 6)/7;
180 if (blsize > tmpsize) 180 if (blsize > tmpsize)
181 { 181 {
182 if (tmp != ftmp) 182 if (tmp != ftmp)
183 free(tmp); 183 free(tmp);
184 tmpsize = blsize + 32; 184 tmpsize = blsize + 32;
185 tmp = malloc(tmpsize); 185 tmp = malloc(tmpsize);
186 if (!tmp) 186 if (!tmp)
187 goto err; 187 goto err;
188 } 188 }
189 while(blsize--) 189 while(blsize--)
190 tmp[i++] = (unsigned char)BN_div_word(bl, 0x80L); 190 tmp[i++] = (unsigned char)BN_div_word(bl, 0x80L);
191 } 191 }
192 else 192 else
193 { 193 {
194 194
195 for (;;) 195 for (;;)
196 { 196 {
197 tmp[i++]=(unsigned char)l&0x7f; 197 tmp[i++]=(unsigned char)l&0x7f;
198 l>>=7L; 198 l>>=7L;
199 if (l == 0L) break; 199 if (l == 0L) break;
200 }
201
202 } 200 }
201
202 }
203 if (out != NULL) 203 if (out != NULL)
204 { 204 {
205 if (len+i > olen) 205 if (len+i > olen)
206 { 206 {
207 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_BUFFER_TOO_SMALL); 207 ASN1err(ASN1_F_A2D_ASN1_OBJECT,ASN1_R_BUFFER_TOO_SMALL);
208 goto err; 208 goto err;
209 } 209 }
210 while (--i > 0) 210 while (--i > 0)
211 out[len++]=tmp[i]|0x80; 211 out[len++]=tmp[i]|0x80;
212 out[len++]=tmp[0]; 212 out[len++]=tmp[0];
213 } 213 }
214 else 214 else
215 len+=i; 215 len+=i;
216 } 216 }
217 if (tmp != ftmp) 217 if (tmp != ftmp)
218 free(tmp); 218 free(tmp);
219 if (bl) 219 if (bl)
@@ -225,7 +225,7 @@ err:
225 if (bl) 225 if (bl)
226 BN_free(bl); 226 BN_free(bl);
227 return(0); 227 return(0);
228 } 228}
229 229
230int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a) 230int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a)
231{ 231{
@@ -233,7 +233,7 @@ int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a)
233} 233}
234 234
235int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a) 235int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
236 { 236{
237 char buf[80], *p = buf; 237 char buf[80], *p = buf;
238 int i; 238 int i;
239 239
@@ -241,19 +241,19 @@ int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
241 return(BIO_write(bp,"NULL",4)); 241 return(BIO_write(bp,"NULL",4));
242 i=i2t_ASN1_OBJECT(buf,sizeof buf,a); 242 i=i2t_ASN1_OBJECT(buf,sizeof buf,a);
243 if (i > (int)(sizeof(buf) - 1)) 243 if (i > (int)(sizeof(buf) - 1))
244 { 244 {
245 p = malloc(i + 1); 245 p = malloc(i + 1);
246 if (!p) 246 if (!p)
247 return -1; 247 return -1;
248 i2t_ASN1_OBJECT(p,i + 1,a); 248 i2t_ASN1_OBJECT(p,i + 1,a);
249 } 249 }
250 if (i <= 0) 250 if (i <= 0)
251 return BIO_write(bp, "<INVALID>", 9); 251 return BIO_write(bp, "<INVALID>", 9);
252 BIO_write(bp,p,i); 252 BIO_write(bp,p,i);
253 if (p != buf) 253 if (p != buf)
254 free(p); 254 free(p);
255 return(i); 255 return(i);
256 } 256}
257 257
258ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, 258ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
259 long length) 259 long length)
@@ -266,16 +266,16 @@ ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
266 p= *pp; 266 p= *pp;
267 inf=ASN1_get_object(&p,&len,&tag,&xclass,length); 267 inf=ASN1_get_object(&p,&len,&tag,&xclass,length);
268 if (inf & 0x80) 268 if (inf & 0x80)
269 { 269 {
270 i=ASN1_R_BAD_OBJECT_HEADER; 270 i=ASN1_R_BAD_OBJECT_HEADER;
271 goto err; 271 goto err;
272 } 272 }
273 273
274 if (tag != V_ASN1_OBJECT) 274 if (tag != V_ASN1_OBJECT)
275 { 275 {
276 i=ASN1_R_EXPECTING_AN_OBJECT; 276 i=ASN1_R_EXPECTING_AN_OBJECT;
277 goto err; 277 goto err;
278 } 278 }
279 ret = c2i_ASN1_OBJECT(a, &p, len); 279 ret = c2i_ASN1_OBJECT(a, &p, len);
280 if(ret) *pp = p; 280 if(ret) *pp = p;
281 return ret; 281 return ret;
@@ -285,7 +285,7 @@ err:
285} 285}
286ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, 286ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
287 long len) 287 long len)
288 { 288{
289 ASN1_OBJECT *ret=NULL; 289 ASN1_OBJECT *ret=NULL;
290 const unsigned char *p; 290 const unsigned char *p;
291 unsigned char *data; 291 unsigned char *data;
@@ -294,21 +294,21 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
294 * subidentifiers, see: X.690 8.19.2 294 * subidentifiers, see: X.690 8.19.2
295 */ 295 */
296 for (i = 0, p = *pp; i < len; i++, p++) 296 for (i = 0, p = *pp; i < len; i++, p++)
297 { 297 {
298 if (*p == 0x80 && (!i || !(p[-1] & 0x80))) 298 if (*p == 0x80 && (!i || !(p[-1] & 0x80)))
299 { 299 {
300 ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENCODING); 300 ASN1err(ASN1_F_C2I_ASN1_OBJECT,ASN1_R_INVALID_OBJECT_ENCODING);
301 return NULL; 301 return NULL;
302 }
303 } 302 }
303 }
304 304
305 /* only the ASN1_OBJECTs from the 'table' will have values 305 /* only the ASN1_OBJECTs from the 'table' will have values
306 * for ->sn or ->ln */ 306 * for ->sn or ->ln */
307 if ((a == NULL) || ((*a) == NULL) || 307 if ((a == NULL) || ((*a) == NULL) ||
308 !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC)) 308 !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC))
309 { 309 {
310 if ((ret=ASN1_OBJECT_new()) == NULL) return(NULL); 310 if ((ret=ASN1_OBJECT_new()) == NULL) return(NULL);
311 } 311 }
312 else ret=(*a); 312 else ret=(*a);
313 313
314 p= *pp; 314 p= *pp;
@@ -317,14 +317,14 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
317 ret->data = NULL; 317 ret->data = NULL;
318 /* once detached we can change it */ 318 /* once detached we can change it */
319 if ((data == NULL) || (ret->length < len)) 319 if ((data == NULL) || (ret->length < len))
320 { 320 {
321 ret->length=0; 321 ret->length=0;
322 if (data != NULL) free(data); 322 if (data != NULL) free(data);
323 data=(unsigned char *)malloc(len ? (int)len : 1); 323 data=(unsigned char *)malloc(len ? (int)len : 1);
324 if (data == NULL) 324 if (data == NULL)
325 { i=ERR_R_MALLOC_FAILURE; goto err; } 325 { i=ERR_R_MALLOC_FAILURE; goto err; }
326 ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA; 326 ret->flags|=ASN1_OBJECT_FLAG_DYNAMIC_DATA;
327 } 327 }
328 memcpy(data,p,(int)len); 328 memcpy(data,p,(int)len);
329 /* reattach data to object, after which it remains const */ 329 /* reattach data to object, after which it remains const */
330 ret->data =data; 330 ret->data =data;
@@ -342,18 +342,18 @@ err:
342 if ((ret != NULL) && ((a == NULL) || (*a != ret))) 342 if ((ret != NULL) && ((a == NULL) || (*a != ret)))
343 ASN1_OBJECT_free(ret); 343 ASN1_OBJECT_free(ret);
344 return(NULL); 344 return(NULL);
345 } 345}
346 346
347ASN1_OBJECT *ASN1_OBJECT_new(void) 347ASN1_OBJECT *ASN1_OBJECT_new(void)
348 { 348{
349 ASN1_OBJECT *ret; 349 ASN1_OBJECT *ret;
350 350
351 ret=(ASN1_OBJECT *)malloc(sizeof(ASN1_OBJECT)); 351 ret=(ASN1_OBJECT *)malloc(sizeof(ASN1_OBJECT));
352 if (ret == NULL) 352 if (ret == NULL)
353 { 353 {
354 ASN1err(ASN1_F_ASN1_OBJECT_NEW,ERR_R_MALLOC_FAILURE); 354 ASN1err(ASN1_F_ASN1_OBJECT_NEW,ERR_R_MALLOC_FAILURE);
355 return(NULL); 355 return(NULL);
356 } 356 }
357 ret->length=0; 357 ret->length=0;
358 ret->data=NULL; 358 ret->data=NULL;
359 ret->nid=0; 359 ret->nid=0;
@@ -361,32 +361,32 @@ ASN1_OBJECT *ASN1_OBJECT_new(void)
361 ret->ln=NULL; 361 ret->ln=NULL;
362 ret->flags=ASN1_OBJECT_FLAG_DYNAMIC; 362 ret->flags=ASN1_OBJECT_FLAG_DYNAMIC;
363 return(ret); 363 return(ret);
364 } 364}
365 365
366void ASN1_OBJECT_free(ASN1_OBJECT *a) 366void ASN1_OBJECT_free(ASN1_OBJECT *a)
367 { 367{
368 if (a == NULL) return; 368 if (a == NULL) return;
369 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) 369 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS)
370 { 370 {
371#ifndef CONST_STRICT /* disable purely for compile-time strict const checking. Doing this on a "real" compile will cause memory leaks */ 371#ifndef CONST_STRICT /* disable purely for compile-time strict const checking. Doing this on a "real" compile will cause memory leaks */
372 if (a->sn != NULL) free((void *)a->sn); 372 if (a->sn != NULL) free((void *)a->sn);
373 if (a->ln != NULL) free((void *)a->ln); 373 if (a->ln != NULL) free((void *)a->ln);
374#endif 374#endif
375 a->sn=a->ln=NULL; 375 a->sn=a->ln=NULL;
376 } 376 }
377 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) 377 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA)
378 { 378 {
379 if (a->data != NULL) free((void *)a->data); 379 if (a->data != NULL) free((void *)a->data);
380 a->data=NULL; 380 a->data=NULL;
381 a->length=0; 381 a->length=0;
382 } 382 }
383 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC) 383 if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC)
384 free(a); 384 free(a);
385 } 385}
386 386
387ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, 387ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
388 const char *sn, const char *ln) 388 const char *sn, const char *ln)
389 { 389{
390 ASN1_OBJECT o; 390 ASN1_OBJECT o;
391 391
392 o.sn=sn; 392 o.sn=sn;
@@ -397,7 +397,7 @@ ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,
397 o.flags=ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS| 397 o.flags=ASN1_OBJECT_FLAG_DYNAMIC|ASN1_OBJECT_FLAG_DYNAMIC_STRINGS|
398 ASN1_OBJECT_FLAG_DYNAMIC_DATA; 398 ASN1_OBJECT_FLAG_DYNAMIC_DATA;
399 return(OBJ_dup(&o)); 399 return(OBJ_dup(&o));
400 } 400}
401 401
402IMPLEMENT_STACK_OF(ASN1_OBJECT) 402IMPLEMENT_STACK_OF(ASN1_OBJECT)
403IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT) 403IMPLEMENT_ASN1_SET_OF(ASN1_OBJECT)