~exarkun/pyopenssl/trunk

« back to all changes in this revision

Viewing changes to OpenSSL/crypto/pkey.c

  • Committer: Jean-Paul Calderone
  • Date: 2012-04-03 19:25:07 UTC
  • mfrom: (156.4.5 allow_thread_while_keygen)
  • Revision ID: exarkun@twistedmatrix.com-20120403192507-kescebmsgahjm5pd
Release the GIL around RSA and DSA key generation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
                PyErr_SetString(PyExc_ValueError, "Invalid number of bits");
53
53
                return NULL;
54
54
            }
55
 
            if ((rsa = RSA_generate_key(bits, 0x10001, NULL, NULL)) == NULL)
56
 
                FAIL();
57
 
            if (!EVP_PKEY_assign_RSA(self->pkey, rsa))
58
 
                FAIL();
 
55
            Py_BEGIN_ALLOW_THREADS;
 
56
            rsa = RSA_generate_key(bits, 0x10001, NULL, NULL);
 
57
            Py_END_ALLOW_THREADS;
 
58
            if (rsa == NULL) {
 
59
                FAIL();
 
60
            }
 
61
            if (!EVP_PKEY_assign_RSA(self->pkey, rsa)) {
 
62
                FAIL();
 
63
            }
59
64
            break;
60
65
 
61
66
        case crypto_TYPE_DSA:
62
 
            if ((dsa = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL)) == NULL)
63
 
                FAIL();
64
 
            if (!DSA_generate_key(dsa))
65
 
                FAIL();
66
 
            if (!EVP_PKEY_assign_DSA(self->pkey, dsa))
67
 
                FAIL();
 
67
            Py_BEGIN_ALLOW_THREADS;
 
68
            dsa = DSA_generate_parameters(bits, NULL, 0, NULL, NULL, NULL, NULL);
 
69
            Py_END_ALLOW_THREADS;
 
70
            if (dsa == NULL) {
 
71
                FAIL();
 
72
            }
 
73
            if (!DSA_generate_key(dsa)) {
 
74
                FAIL();
 
75
            }
 
76
            if (!EVP_PKEY_assign_DSA(self->pkey, dsa)) {
 
77
                FAIL();
 
78
            }
68
79
            break;
69
80
 
70
81
        default: