~myers-1/pyopenssl/npn

« back to all changes in this revision

Viewing changes to OpenSSL/crypto/pkey.c

  • Committer: Jean-Paul Calderone
  • Date: 2011-06-13 01:56:13 UTC
  • mfrom: (155.1.9 rsa-check-2)
  • Revision ID: exarkun@divmod.com-20110613015613-wofszuiemj1j6lyf
Add PKey.check method

Show diffs side-by-side

added added

removed removed

Lines of Context:
107
107
    return PyLong_FromLong(self->pkey->type);
108
108
}
109
109
 
 
110
static char crypto_PKey_check_doc[] = "\n\
 
111
Check the consistency of an RSA private key.\n\
 
112
\n\
 
113
@return: True if key is consistent.\n\
 
114
@raise Error: if the key is inconsistent.\n\
 
115
@raise TypeError: if the key is of a type which cannot be checked.\n\
 
116
    Only RSA keys can currently be checked.\n\
 
117
";
 
118
 
 
119
static PyObject *
 
120
crypto_PKey_check(crypto_PKeyObj *self, PyObject *args) {
 
121
    int r;
 
122
 
 
123
    if (!PyArg_ParseTuple(args, ":check")) {
 
124
        return NULL;
 
125
    }
 
126
 
 
127
    if (self->pkey->type == EVP_PKEY_RSA) {
 
128
        RSA *rsa;
 
129
        rsa = EVP_PKEY_get1_RSA(self->pkey);
 
130
        r = RSA_check_key(rsa);
 
131
        if (r == 1) {
 
132
            return PyBool_FromLong(1L);
 
133
        } else {
 
134
            FAIL();
 
135
        }
 
136
    } else {
 
137
        PyErr_SetString(PyExc_TypeError, "key type unsupported");
 
138
        return NULL;
 
139
    }
 
140
}
110
141
 
111
142
/*
112
143
 * ADD_METHOD(name) expands to a correct PyMethodDef declaration
120
151
    ADD_METHOD(generate_key),
121
152
    ADD_METHOD(bits),
122
153
    ADD_METHOD(type),
 
154
    ADD_METHOD(check),
123
155
    { NULL, NULL }
124
156
};
125
157
#undef ADD_METHOD