Rename some BUF_xxx to OPENSSL_xxx
[openssl.git] / crypto / rsa / rsa_depr.c
index 25fa9543936fba84a8db8bdb75ab04386582e6d1..5bd02758565ca333dc4c2b50a94c72542768c40a 100644 (file)
@@ -7,7 +7,7 @@
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
+ *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *
  */
 
-/* NB: This file contains deprecated functions (compatibility wrappers to the
- * "new" versions). */
+/*
+ * NB: This file contains deprecated functions (compatibility wrappers to the
+ * "new" versions).
+ */
 
 #include <stdio.h>
 #include <time.h>
-#include "cryptlib.h"
+#include "internal/cryptlib.h"
 #include <openssl/bn.h>
 #include <openssl/rsa.h>
 
+#ifdef OPENSSL_NO_DEPRECATED
+
+static void *dummy = &dummy;
+
+#else
+
 RSA *RSA_generate_key(int bits, unsigned long e_value,
-            void (*callback)(int,int,void *), void *cb_arg)
-       {
-       BN_GENCB cb;
-       RSA *rsa;
+                      void (*callback) (int, int, void *), void *cb_arg)
+{
+    int i;
+    BN_GENCB *cb = BN_GENCB_new();
+    RSA *rsa = RSA_new();
+    BIGNUM *e = BN_new();
 
-       if((rsa=RSA_new()) == NULL)
-               return 0;
+    if (cb == NULL || rsa == NULL || e == NULL)
+        goto err;
 
-       cb.ver = 1;
-       cb.arg = cb_arg;
-       cb.cb_1 = callback;
+    /*
+     * The problem is when building with 8, 16, or 32 BN_ULONG, unsigned long
+     * can be larger
+     */
+    for (i = 0; i < (int)sizeof(unsigned long) * 8; i++) {
+        if (e_value & (1UL << i))
+            if (BN_set_bit(e, i) == 0)
+                goto err;
+    }
 
-       if(RSA_generate_key_ex(rsa, bits, e_value, &cb))
-               return rsa;
-       RSA_free(rsa);
-       return 0;
-       }
+    BN_GENCB_set_old(cb, callback, cb_arg);
 
+    if (RSA_generate_key_ex(rsa, bits, e, cb)) {
+        BN_free(e);
+        BN_GENCB_free(cb);
+        return rsa;
+    }
+ err:
+    BN_free(e);
+    RSA_free(rsa);
+    BN_GENCB_free(cb);
+    return 0;
+}
+#endif