]> granicus.if.org Git - openssl/commitdiff
Make ASN1_INTEGER_cmp() work as expected with negative integers.
authorDr. Stephen Henson <steve@openssl.org>
Tue, 10 Aug 2004 17:40:31 +0000 (17:40 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 10 Aug 2004 17:40:31 +0000 (17:40 +0000)
crypto/asn1/a_int.c

index edb243c0217eeb625d3ea738b1cca4bf636e7c66..21cc64bb234ebbf71129d5e23ee4e338f28f3ee3 100644 (file)
@@ -64,7 +64,26 @@ ASN1_INTEGER *ASN1_INTEGER_dup(ASN1_INTEGER *x)
 { return M_ASN1_INTEGER_dup(x);}
 
 int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y)
-{ return M_ASN1_INTEGER_cmp(x,y);}
+       { 
+       int neg, ret;
+       /* Compare signs */
+       neg = x->type & V_ASN1_NEG;
+       if (neg != (y->type & V_ASN1_NEG))
+               {
+               if (neg)
+                       return -1;
+               else
+                       return 1;
+               }
+
+       ret = ASN1_STRING_cmp(x, y);
+
+       if (neg)
+               return -ret;
+       else
+               return ret;
+       }
+       
 
 /* 
  * This converts an ASN1 INTEGER into its content encoding.