diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_int.c')
-rw-r--r-- | src/lib/libcrypto/asn1/a_int.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c index 21cc64bb23..f8d198efb1 100644 --- a/src/lib/libcrypto/asn1/a_int.c +++ b/src/lib/libcrypto/asn1/a_int.c | |||
@@ -59,6 +59,7 @@ | |||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include <openssl/asn1.h> | 61 | #include <openssl/asn1.h> |
62 | #include <openssl/bn.h> | ||
62 | 63 | ||
63 | ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *x) | 64 | ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *x) |
64 | { return M_ASN1_INTEGER_dup(x);} | 65 | { return M_ASN1_INTEGER_dup(x);} |
@@ -174,11 +175,12 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp) | |||
174 | 175 | ||
175 | /* Convert just ASN1 INTEGER content octets to ASN1_INTEGER structure */ | 176 | /* Convert just ASN1 INTEGER content octets to ASN1_INTEGER structure */ |
176 | 177 | ||
177 | ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, unsigned char **pp, | 178 | ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, |
178 | long len) | 179 | long len) |
179 | { | 180 | { |
180 | ASN1_INTEGER *ret=NULL; | 181 | ASN1_INTEGER *ret=NULL; |
181 | unsigned char *p,*to,*s, *pend; | 182 | const unsigned char *p, *pend; |
183 | unsigned char *to,*s; | ||
182 | int i; | 184 | int i; |
183 | 185 | ||
184 | if ((a == NULL) || ((*a) == NULL)) | 186 | if ((a == NULL) || ((*a) == NULL)) |
@@ -254,7 +256,7 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, unsigned char **pp, | |||
254 | *pp=pend; | 256 | *pp=pend; |
255 | return(ret); | 257 | return(ret); |
256 | err: | 258 | err: |
257 | ASN1err(ASN1_F_D2I_ASN1_INTEGER,i); | 259 | ASN1err(ASN1_F_C2I_ASN1_INTEGER,i); |
258 | if ((ret != NULL) && ((a == NULL) || (*a != ret))) | 260 | if ((ret != NULL) && ((a == NULL) || (*a != ret))) |
259 | M_ASN1_INTEGER_free(ret); | 261 | M_ASN1_INTEGER_free(ret); |
260 | return(NULL); | 262 | return(NULL); |
@@ -266,11 +268,12 @@ err: | |||
266 | * with its MSB set as negative (it doesn't add a padding zero). | 268 | * with its MSB set as negative (it doesn't add a padding zero). |
267 | */ | 269 | */ |
268 | 270 | ||
269 | ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, unsigned char **pp, | 271 | ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, |
270 | long length) | 272 | long length) |
271 | { | 273 | { |
272 | ASN1_INTEGER *ret=NULL; | 274 | ASN1_INTEGER *ret=NULL; |
273 | unsigned char *p,*to,*s; | 275 | const unsigned char *p; |
276 | unsigned char *to,*s; | ||
274 | long len; | 277 | long len; |
275 | int inf,tag,xclass; | 278 | int inf,tag,xclass; |
276 | int i; | 279 | int i; |
@@ -332,12 +335,13 @@ err: | |||
332 | 335 | ||
333 | int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) | 336 | int ASN1_INTEGER_set(ASN1_INTEGER *a, long v) |
334 | { | 337 | { |
335 | int i,j,k; | 338 | int j,k; |
339 | unsigned int i; | ||
336 | unsigned char buf[sizeof(long)+1]; | 340 | unsigned char buf[sizeof(long)+1]; |
337 | long d; | 341 | long d; |
338 | 342 | ||
339 | a->type=V_ASN1_INTEGER; | 343 | a->type=V_ASN1_INTEGER; |
340 | if (a->length < (sizeof(long)+1)) | 344 | if (a->length < (int)(sizeof(long)+1)) |
341 | { | 345 | { |
342 | if (a->data != NULL) | 346 | if (a->data != NULL) |
343 | OPENSSL_free(a->data); | 347 | OPENSSL_free(a->data); |
@@ -381,7 +385,7 @@ long ASN1_INTEGER_get(ASN1_INTEGER *a) | |||
381 | else if (i != V_ASN1_INTEGER) | 385 | else if (i != V_ASN1_INTEGER) |
382 | return -1; | 386 | return -1; |
383 | 387 | ||
384 | if (a->length > sizeof(long)) | 388 | if (a->length > (int)sizeof(long)) |
385 | { | 389 | { |
386 | /* hmm... a bit ugly */ | 390 | /* hmm... a bit ugly */ |
387 | return(0xffffffffL); | 391 | return(0xffffffffL); |
@@ -412,7 +416,8 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai) | |||
412 | ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_NESTED_ASN1_ERROR); | 416 | ASN1err(ASN1_F_BN_TO_ASN1_INTEGER,ERR_R_NESTED_ASN1_ERROR); |
413 | goto err; | 417 | goto err; |
414 | } | 418 | } |
415 | if(bn->neg) ret->type = V_ASN1_NEG_INTEGER; | 419 | if (BN_is_negative(bn)) |
420 | ret->type = V_ASN1_NEG_INTEGER; | ||
416 | else ret->type=V_ASN1_INTEGER; | 421 | else ret->type=V_ASN1_INTEGER; |
417 | j=BN_num_bits(bn); | 422 | j=BN_num_bits(bn); |
418 | len=((j == 0)?0:((j/8)+1)); | 423 | len=((j == 0)?0:((j/8)+1)); |
@@ -445,7 +450,8 @@ BIGNUM *ASN1_INTEGER_to_BN(ASN1_INTEGER *ai, BIGNUM *bn) | |||
445 | 450 | ||
446 | if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL) | 451 | if ((ret=BN_bin2bn(ai->data,ai->length,bn)) == NULL) |
447 | ASN1err(ASN1_F_ASN1_INTEGER_TO_BN,ASN1_R_BN_LIB); | 452 | ASN1err(ASN1_F_ASN1_INTEGER_TO_BN,ASN1_R_BN_LIB); |
448 | else if(ai->type == V_ASN1_NEG_INTEGER) ret->neg = 1; | 453 | else if(ai->type == V_ASN1_NEG_INTEGER) |
454 | BN_set_negative(ret, 1); | ||
449 | return(ret); | 455 | return(ret); |
450 | } | 456 | } |
451 | 457 | ||