Prepare for 0.9.8ze-dev
[oweals/openssl.git] / crypto / bn / bn_exp.c
index 70a33f0d936c81fab3f6a77e411f7e354c652edc..2e1e4e7fd82de193811d4f3c372b596c000935d1 100644 (file)
@@ -134,7 +134,8 @@ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
                rr = BN_CTX_get(ctx);
        else
                rr = r;
-       if ((v = BN_CTX_get(ctx)) == NULL) goto err;
+       v = BN_CTX_get(ctx);
+       if (rr == NULL || v == NULL) goto err;
 
        if (BN_copy(v,a) == NULL) goto err;
        bits=BN_num_bits(p);
@@ -766,7 +767,14 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
        bits = BN_num_bits(p);
        if (bits == 0)
                {
-               ret = BN_one(rr);
+               /* x**0 mod 1 is still zero. */
+               if (BN_is_one(m))
+                       {
+                       ret = 1;
+                       BN_zero(rr);
+                       }
+               else
+                       ret = BN_one(rr);
                return ret;
                }
        if (a == 0)