diff options
| author | tedu <> | 2014-04-18 00:10:08 +0000 |
|---|---|---|
| committer | tedu <> | 2014-04-18 00:10:08 +0000 |
| commit | 966ce64f00531da04d9506f88feeb1ae5745faab (patch) | |
| tree | 6327d50d69a1982f840dc68fe928ea459e2c41e0 /src/lib/libcrypto/asn1/a_int.c | |
| parent | 491821dca7e8e8f0007623a9bd8f0325d59b3b44 (diff) | |
| download | openbsd-966ce64f00531da04d9506f88feeb1ae5745faab.tar.gz openbsd-966ce64f00531da04d9506f88feeb1ae5745faab.tar.bz2 openbsd-966ce64f00531da04d9506f88feeb1ae5745faab.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.c | 140 |
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 | ||
| 67 | int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y) | 67 | int 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 | ||
| 114 | int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp) | 114 | int 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 | ||
| 178 | ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, | 178 | ASN1_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 | ||
| 271 | ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, | 271 | ASN1_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 | ||
| 335 | int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) | 335 | int 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 | ||
| 375 | long ASN1_INTEGER_get(const ASN1_INTEGER *a) | 375 | long 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 | ||
| 404 | ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai) | 404 | ASN1_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); |
| 441 | err: | 441 | err: |
| 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 | ||
| 446 | BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn) | 446 | BIGNUM *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 | ||
| 457 | IMPLEMENT_STACK_OF(ASN1_INTEGER) | 457 | IMPLEMENT_STACK_OF(ASN1_INTEGER) |
| 458 | IMPLEMENT_ASN1_SET_OF(ASN1_INTEGER) | 458 | IMPLEMENT_ASN1_SET_OF(ASN1_INTEGER) |
