size_tification.
[openssl.git] / crypto / bn / bn_word.c
index bc5905fef4279e644ae4f2090ad6e7a5f4bd0f8d..d83032c66ca01438e8f35d0b21d4d19d4e429eaf 100644 (file)
@@ -69,6 +69,9 @@ BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w)
 #endif
        int i;
 
+       if (w == 0)
+               return (BN_ULONG)-1;
+
        bn_check_top(a);
        w&=BN_MASK2;
        for (i=a->top-1; i>=0; i--)
@@ -94,7 +97,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w)
 
        if (!w)
                /* actually this an error (division by zero) */
-               return 0;
+               return (BN_ULONG)-1;
        if (a->top == 0)
                return 0;
 
@@ -102,7 +105,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w)
        j = BN_BITS2 - BN_num_bits_word(w);
        w <<= j;
        if (!BN_lshift(a, a, j))
-               return 0;
+               return (BN_ULONG)-1;
 
        for (i=a->top-1; i>=0; i--)
                {
@@ -165,6 +168,13 @@ int BN_add_word(BIGNUM *a, BN_ULONG w)
        return(1);
        }
 
+int BN_add_signed_word(BIGNUM *a, BN_LONG w)
+       {
+       if(w < 0)
+               return 0;
+       return BN_add_word(a, (BN_ULONG)w);
+       }
+
 int BN_sub_word(BIGNUM *a, BN_ULONG w)
        {
        int i;