ec/ecp_nistz256.c: harmonize with latest indent script.
[oweals/openssl.git] / crypto / rsa / rsa_depr.c
index 73fa6eea90742cdca37555ad231110f91aa4f4ca..cd57086ef8adb2a2804d245dcbb4f81d447d8f47 100644 (file)
@@ -71,30 +71,33 @@ static void *dummy=&dummy;
 RSA *RSA_generate_key(int bits, unsigned long e_value,
             void (*callback)(int,int,void *), void *cb_arg)
        {
-       BN_GENCB cb;
        int i;
+       BN_GENCB *cb = BN_GENCB_new();
        RSA *rsa = RSA_new();
        BIGNUM *e = BN_new();
 
-       if(!rsa || !e) goto err;
+       if(!cb || !rsa || !e) goto err;
 
        /* The problem is when building with 8, 16, or 32 BN_ULONG,
         * unsigned long can be larger */
-       for (i=0; i<sizeof(unsigned long)*8; i++)
+       for (i=0; i<(int)sizeof(unsigned long)*8; i++)
                {
                if (e_value & (1UL<<i))
-                       BN_set_bit(e,i);
+                       if (BN_set_bit(e,i) == 0)
+                               goto err;
                }
 
-       BN_GENCB_set_old(&cb, callback, cb_arg);
+       BN_GENCB_set_old(cb, callback, cb_arg);
 
-       if(RSA_generate_key_ex(rsa, bits, e, &cb)) {
+       if(RSA_generate_key_ex(rsa, bits, e, cb)) {
                BN_free(e);
+               BN_GENCB_free(cb);
                return rsa;
        }
 err:
        if(e) BN_free(e);
        if(rsa) RSA_free(rsa);
+       if(cb) BN_GENCB_free(cb);
        return 0;
        }
 #endif