summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_int.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_int.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_int.c')
-rw-r--r--src/lib/libcrypto/asn1/a_int.c140
1 files changed, 70 insertions, 70 deletions
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c
index 6c38ace8f9..f41d462ffe 100644
--- a/src/lib/libcrypto/asn1/a_int.c
+++ b/src/lib/libcrypto/asn1/a_int.c
@@ -65,17 +65,17 @@ ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x)
65{ return M_ASN1_INTEGER_dup(x);} 65{ return M_ASN1_INTEGER_dup(x);}
66 66
67int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y) 67int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y)
68 { 68{
69 int neg, ret; 69 int neg, ret;
70 /* Compare signs */ 70 /* Compare signs */
71 neg = x->type & V_ASN1_NEG; 71 neg = x->type & V_ASN1_NEG;
72 if (neg != (y->type & V_ASN1_NEG)) 72 if (neg != (y->type & V_ASN1_NEG))
73 { 73 {
74 if (neg) 74 if (neg)
75 return -1; 75 return -1;
76 else 76 else
77 return 1; 77 return 1;
78 } 78 }
79 79
80 ret = ASN1_STRING_cmp(x, y); 80 ret = ASN1_STRING_cmp(x, y);
81 81
@@ -83,7 +83,7 @@ int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y)
83 return -ret; 83 return -ret;
84 else 84 else
85 return ret; 85 return ret;
86 } 86}
87 87
88 88
89/* 89/*
@@ -112,7 +112,7 @@ int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y)
112 */ 112 */
113 113
114int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp) 114int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
115 { 115{
116 int pad=0,ret,i,neg; 116 int pad=0,ret,i,neg;
117 unsigned char *p,*n,pb=0; 117 unsigned char *p,*n,pb=0;
118 118
@@ -121,17 +121,17 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
121 if (a->length == 0) 121 if (a->length == 0)
122 ret=1; 122 ret=1;
123 else 123 else
124 { 124 {
125 ret=a->length; 125 ret=a->length;
126 i=a->data[0]; 126 i=a->data[0];
127 if (!neg && (i > 127)) { 127 if (!neg && (i > 127)) {
128 pad=1; 128 pad=1;
129 pb=0; 129 pb=0;
130 } else if(neg) { 130 } else if(neg) {
131 if(i>128) { 131 if(i>128) {
132 pad=1; 132 pad=1;
133 pb=0xFF; 133 pb=0xFF;
134 } else if(i == 128) { 134 } else if(i == 128) {
135 /* 135 /*
136 * Special case: if any other bytes non zero we pad: 136 * Special case: if any other bytes non zero we pad:
137 * otherwise we don't. 137 * otherwise we don't.
@@ -140,11 +140,11 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
140 pad=1; 140 pad=1;
141 pb=0xFF; 141 pb=0xFF;
142 break; 142 break;
143 }
144 } 143 }
145 } 144 }
145 }
146 ret+=pad; 146 ret+=pad;
147 } 147 }
148 if (pp == NULL) return(ret); 148 if (pp == NULL) return(ret);
149 p= *pp; 149 p= *pp;
150 150
@@ -161,33 +161,33 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
161 *(p--) = 0; 161 *(p--) = 0;
162 n--; 162 n--;
163 i--; 163 i--;
164 } 164 }
165 /* Complement and increment next octet */ 165 /* Complement and increment next octet */
166 *(p--) = ((*(n--)) ^ 0xff) + 1; 166 *(p--) = ((*(n--)) ^ 0xff) + 1;
167 i--; 167 i--;
168 /* Complement any octets left */ 168 /* Complement any octets left */
169 for(;i > 0; i--) *(p--) = *(n--) ^ 0xff; 169 for(;i > 0; i--) *(p--) = *(n--) ^ 0xff;
170 } 170}
171 171
172 *pp+=ret; 172 *pp+=ret;
173 return(ret); 173 return(ret);
174 } 174}
175 175
176/* Convert just ASN1 INTEGER content octets to ASN1_INTEGER structure */ 176/* Convert just ASN1 INTEGER content octets to ASN1_INTEGER structure */
177 177
178ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, 178ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
179 long len) 179 long len)
180 { 180{
181 ASN1_INTEGER *ret=NULL; 181 ASN1_INTEGER *ret=NULL;
182 const unsigned char *p, *pend; 182 const unsigned char *p, *pend;
183 unsigned char *to,*s; 183 unsigned char *to,*s;
184 int i; 184 int i;
185 185
186 if ((a == NULL) || ((*a) == NULL)) 186 if ((a == NULL) || ((*a) == NULL))
187 { 187 {
188 if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL); 188 if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL);
189 ret->type=V_ASN1_INTEGER; 189 ret->type=V_ASN1_INTEGER;
190 } 190 }
191 else 191 else
192 ret=(*a); 192 ret=(*a);
193 193
@@ -198,23 +198,23 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
198 * signifies a missing NULL parameter. */ 198 * signifies a missing NULL parameter. */
199 s=(unsigned char *)malloc((int)len+1); 199 s=(unsigned char *)malloc((int)len+1);
200 if (s == NULL) 200 if (s == NULL)
201 { 201 {
202 i=ERR_R_MALLOC_FAILURE; 202 i=ERR_R_MALLOC_FAILURE;
203 goto err; 203 goto err;
204 } 204 }
205 to=s; 205 to=s;
206 if(!len) { 206 if(!len) {
207 /* Strictly speaking this is an illegal INTEGER but we 207 /* Strictly speaking this is an illegal INTEGER but we
208 * tolerate it. 208 * tolerate it.
209 */ 209 */
210 ret->type=V_ASN1_INTEGER; 210 ret->type=V_ASN1_INTEGER;
211 } else if (*p & 0x80) /* a negative number */ 211} else if (*p & 0x80) /* a negative number */
212 { 212 {
213 ret->type=V_ASN1_NEG_INTEGER; 213 ret->type=V_ASN1_NEG_INTEGER;
214 if ((*p == 0xff) && (len != 1)) { 214 if ((*p == 0xff) && (len != 1)) {
215 p++; 215 p++;
216 len--; 216 len--;
217 } 217 }
218 i = len; 218 i = len;
219 p += i - 1; 219 p += i - 1;
220 to += i - 1; 220 to += i - 1;
@@ -222,7 +222,7 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
222 *(to--) = 0; 222 *(to--) = 0;
223 i--; 223 i--;
224 p--; 224 p--;
225 } 225 }
226 /* Special case: if all zeros then the number will be of 226 /* Special case: if all zeros then the number will be of
227 * the form FF followed by n zero bytes: this corresponds to 227 * the form FF followed by n zero bytes: this corresponds to
228 * 1 followed by n zero bytes. We've already written n zeros 228 * 1 followed by n zero bytes. We've already written n zeros
@@ -234,20 +234,20 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
234 *s = 1; 234 *s = 1;
235 s[len] = 0; 235 s[len] = 0;
236 len++; 236 len++;
237 } else { 237 } else {
238 *(to--) = (*(p--) ^ 0xff) + 1; 238 *(to--) = (*(p--) ^ 0xff) + 1;
239 i--; 239 i--;
240 for(;i > 0; i--) *(to--) = *(p--) ^ 0xff; 240 for(;i > 0; i--) *(to--) = *(p--) ^ 0xff;
241 } 241 }
242 } else { 242} else {
243 ret->type=V_ASN1_INTEGER; 243 ret->type=V_ASN1_INTEGER;
244 if ((*p == 0) && (len != 1)) 244 if ((*p == 0) && (len != 1))
245 { 245 {
246 p++; 246 p++;
247 len--; 247 len--;
248 } 248 }
249 memcpy(s,p,(int)len); 249 memcpy(s,p,(int)len);
250 } 250}
251 251
252 if (ret->data != NULL) free(ret->data); 252 if (ret->data != NULL) free(ret->data);
253 ret->data=s; 253 ret->data=s;
@@ -260,7 +260,7 @@ err:
260 if ((ret != NULL) && ((a == NULL) || (*a != ret))) 260 if ((ret != NULL) && ((a == NULL) || (*a != ret)))
261 M_ASN1_INTEGER_free(ret); 261 M_ASN1_INTEGER_free(ret);
262 return(NULL); 262 return(NULL);
263 } 263}
264 264
265 265
266/* This is a version of d2i_ASN1_INTEGER that ignores the sign bit of 266/* This is a version of d2i_ASN1_INTEGER that ignores the sign bit of
@@ -270,7 +270,7 @@ err:
270 270
271ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, 271ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
272 long length) 272 long length)
273 { 273{
274 ASN1_INTEGER *ret=NULL; 274 ASN1_INTEGER *ret=NULL;
275 const unsigned char *p; 275 const unsigned char *p;
276 unsigned char *s; 276 unsigned char *s;
@@ -279,45 +279,45 @@ ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
279 int i; 279 int i;
280 280
281 if ((a == NULL) || ((*a) == NULL)) 281 if ((a == NULL) || ((*a) == NULL))
282 { 282 {
283 if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL); 283 if ((ret=M_ASN1_INTEGER_new()) == NULL) return(NULL);
284 ret->type=V_ASN1_INTEGER; 284 ret->type=V_ASN1_INTEGER;
285 } 285 }
286 else 286 else
287 ret=(*a); 287 ret=(*a);
288 288
289 p= *pp; 289 p= *pp;
290 inf=ASN1_get_object(&p,&len,&tag,&xclass,length); 290 inf=ASN1_get_object(&p,&len,&tag,&xclass,length);
291 if (inf & 0x80) 291 if (inf & 0x80)
292 { 292 {
293 i=ASN1_R_BAD_OBJECT_HEADER; 293 i=ASN1_R_BAD_OBJECT_HEADER;
294 goto err; 294 goto err;
295 } 295 }
296 296
297 if (tag != V_ASN1_INTEGER) 297 if (tag != V_ASN1_INTEGER)
298 { 298 {
299 i=ASN1_R_EXPECTING_AN_INTEGER; 299 i=ASN1_R_EXPECTING_AN_INTEGER;
300 goto err; 300 goto err;
301 } 301 }
302 302
303 /* We must malloc stuff, even for 0 bytes otherwise it 303 /* We must malloc stuff, even for 0 bytes otherwise it
304 * signifies a missing NULL parameter. */ 304 * signifies a missing NULL parameter. */
305 s=(unsigned char *)malloc((int)len+1); 305 s=(unsigned char *)malloc((int)len+1);
306 if (s == NULL) 306 if (s == NULL)
307 { 307 {
308 i=ERR_R_MALLOC_FAILURE; 308 i=ERR_R_MALLOC_FAILURE;
309 goto err; 309 goto err;
310 } 310 }
311 ret->type=V_ASN1_INTEGER; 311 ret->type=V_ASN1_INTEGER;
312 if(len) { 312 if(len) {
313 if ((*p == 0) && (len != 1)) 313 if ((*p == 0) && (len != 1))
314 { 314 {
315 p++; 315 p++;
316 len--; 316 len--;
317 } 317 }
318 memcpy(s,p,(int)len); 318 memcpy(s,p,(int)len);
319 p+=len; 319 p+=len;
320 } 320}
321 321
322 if (ret->data != NULL) free(ret->data); 322 if (ret->data != NULL) free(ret->data);
323 ret->data=s; 323 ret->data=s;
@@ -330,10 +330,10 @@ err:
330 if ((ret != NULL) && ((a == NULL) || (*a != ret))) 330 if ((ret != NULL) && ((a == NULL) || (*a != ret)))
331 M_ASN1_INTEGER_free(ret); 331 M_ASN1_INTEGER_free(ret);
332 return(NULL); 332 return(NULL);
333 } 333}
334 334
335int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) 335int ASN1_INTEGER_set(ASN1_INTEGER *a, long v)
336 { 336{
337 int j,k; 337 int j,k;
338 unsigned int i; 338 unsigned int i;
339 unsigned char buf[sizeof(long)+1]; 339 unsigned char buf[sizeof(long)+1];
@@ -341,39 +341,39 @@ int ASN1_INTEGER_set(ASN1_INTEGER *a, long v)
341 341
342 a->type=V_ASN1_INTEGER; 342 a->type=V_ASN1_INTEGER;
343 if (a->length < (int)(sizeof(long)+1)) 343 if (a->length < (int)(sizeof(long)+1))
344 { 344 {
345 if (a->data != NULL) 345 if (a->data != NULL)
346 free(a->data); 346 free(a->data);
347 if ((a->data=(unsigned char *)malloc(sizeof(long)+1)) != NULL) 347 if ((a->data=(unsigned char *)malloc(sizeof(long)+1)) != NULL)
348 memset((char *)a->data,0,sizeof(long)+1); 348 memset((char *)a->data,0,sizeof(long)+1);
349 } 349 }
350 if (a->data == NULL) 350 if (a->data == NULL)
351 { 351 {
352 ASN1err(ASN1_F_ASN1_INTEGER_SET,ERR_R_MALLOC_FAILURE); 352 ASN1err(ASN1_F_ASN1_INTEGER_SET,ERR_R_MALLOC_FAILURE);
353 return(0); 353 return(0);
354 } 354 }
355 d=v; 355 d=v;
356 if (d < 0) 356 if (d < 0)
357 { 357 {
358 d= -d; 358 d= -d;
359 a->type=V_ASN1_NEG_INTEGER; 359 a->type=V_ASN1_NEG_INTEGER;
360 } 360 }
361 361
362 for (i=0; i<sizeof(long); i++) 362 for (i=0; i<sizeof(long); i++)
363 { 363 {
364 if (d == 0) break; 364 if (d == 0) break;
365 buf[i]=(int)d&0xff; 365 buf[i]=(int)d&0xff;
366 d>>=8; 366 d>>=8;
367 } 367 }
368 j=0; 368 j=0;
369 for (k=i-1; k >=0; k--) 369 for (k=i-1; k >=0; k--)
370 a->data[j++]=buf[k]; 370 a->data[j++]=buf[k];
371 a->length=j; 371 a->length=j;
372 return(1); 372 return(1);
373 } 373}
374 374
375long ASN1_INTEGER_get(const ASN1_INTEGER *a) 375long ASN1_INTEGER_get(const ASN1_INTEGER *a)
376 { 376{
377 int neg=0,i; 377 int neg=0,i;
378 long r=0; 378 long r=0;
379 379
@@ -385,24 +385,24 @@ long ASN1_INTEGER_get(const ASN1_INTEGER *a)
385 return -1; 385 return -1;
386 386
387 if (a->length > (int)sizeof(long)) 387 if (a->length > (int)sizeof(long))
388 { 388 {
389 /* hmm... a bit ugly, return all ones */ 389 /* hmm... a bit ugly, return all ones */
390 return -1; 390 return -1;
391 } 391 }
392 if (a->data == NULL) 392 if (a->data == NULL)
393 return 0; 393 return 0;
394 394
395 for (i=0; i<a->length; i++) 395 for (i=0; i<a->length; i++)
396 { 396 {
397 r<<=8; 397 r<<=8;
398 r|=(unsigned char)a->data[i]; 398 r|=(unsigned char)a->data[i];
399 } 399 }
400 if (neg) r= -r; 400 if (neg) r= -r;
401 return(r); 401 return(r);
402 } 402}
403 403
404ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai) 404ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai)
405 { 405{
406 ASN1_INTEGER *ret; 406 ASN1_INTEGER *ret;
407 int len,j; 407 int len,j;
408 408
@@ -411,40 +411,40 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai)
411 else 411 else
412 ret=ai; 412 ret=ai;
413 if (ret == NULL) 413 if (ret == NULL)
414 { 414 {
415 ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_NESTED_ASN1_ERROR); 415 ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_NESTED_ASN1_ERROR);
416 goto err; 416 goto err;
417 } 417 }
418 if (BN_is_negative(bn)) 418 if (BN_is_negative(bn))
419 ret->type = V_ASN1_NEG_INTEGER; 419 ret->type = V_ASN1_NEG_INTEGER;
420 else ret->type=V_ASN1_INTEGER; 420 else ret->type=V_ASN1_INTEGER;
421 j=BN_num_bits(bn); 421 j=BN_num_bits(bn);
422 len=((j == 0)?0:((j/8)+1)); 422 len=((j == 0)?0:((j/8)+1));
423 if (ret->length < len+4) 423 if (ret->length < len+4)
424 { 424 {
425 unsigned char *new_data=realloc(ret->data, len+4); 425 unsigned char *new_data=realloc(ret->data, len+4);
426 if (!new_data) 426 if (!new_data)
427 { 427 {
428 ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_MALLOC_FAILURE); 428 ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_MALLOC_FAILURE);
429 goto err; 429 goto err;
430 }
431 ret->data=new_data;
432 } 430 }
431 ret->data=new_data;
432 }
433 ret->length=BN_bn2bin(bn,ret->data); 433 ret->length=BN_bn2bin(bn,ret->data);
434 /* Correct zero case */ 434 /* Correct zero case */
435 if(!ret->length) 435 if(!ret->length)
436 { 436 {
437 ret->data[0] = 0; 437 ret->data[0] = 0;
438 ret->length = 1; 438 ret->length = 1;
439 } 439 }
440 return(ret); 440 return(ret);
441err: 441err:
442 if (ret != ai) M_ASN1_INTEGER_free(ret); 442 if (ret != ai) M_ASN1_INTEGER_free(ret);
443 return(NULL); 443 return(NULL);
444 } 444}
445 445
446BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn) 446BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn)
447 { 447{
448 BIGNUM *ret; 448 BIGNUM *ret;
449 449
450 if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL) 450 if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL)
@@ -452,7 +452,7 @@ BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn)
452 else if(ai->type == V_ASN1_NEG_INTEGER) 452 else if(ai->type == V_ASN1_NEG_INTEGER)
453 BN_set_negative(ret, 1); 453 BN_set_negative(ret, 1);
454 return(ret); 454 return(ret);
455 } 455}
456 456
457IMPLEMENT_STACK_OF(ASN1_INTEGER) 457IMPLEMENT_STACK_OF(ASN1_INTEGER)
458IMPLEMENT_ASN1_SET_OF(ASN1_INTEGER) 458IMPLEMENT_ASN1_SET_OF(ASN1_INTEGER)