mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
ipap11helper: Port to Python 3
- Use PyLong instead of PyInt on Python 3
- Use PyBytes instead of PyString for binary strings
- Use Py_TYPE(o) instead of o->py_type, and PyVarObject_HEAD_INIT
instead of PyObject_HEAD_INIT
- Use a helper function instead of Py_BuildValue("s#"), so that
bytes are returned on Python 3
- Use new style module initialization on Python 3
- Use PyModule_AddIntConstant and PyModule_AddIntMacro for adding constants
Reviewed-By: David Kupka <dkupka@redhat.com>
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
committed by
Jan Cholasta
parent
a6d9c40f14
commit
f4e62be667
@@ -49,6 +49,12 @@
|
||||
|
||||
#include "library.h"
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
// Python 3 uses "PyLong" as the int implementation
|
||||
#define PyInt_Check PyLong_Check
|
||||
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
|
||||
#endif
|
||||
|
||||
// compat TODO
|
||||
#define CKM_AES_KEY_WRAP (0x2109)
|
||||
#define CKM_AES_KEY_WRAP_PAD (0x210a)
|
||||
@@ -182,6 +188,13 @@ void convert_py2bool(PyObj2Bool_mapping_t *mapping, int length) {
|
||||
}
|
||||
}
|
||||
|
||||
PyObject *string_to_pybytes_or_none(const char *str, Py_ssize_t len) {
|
||||
if (str == NULL) {
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
return PyBytes_FromStringAndSize(str, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a unicode string to the utf8 encoded char array
|
||||
* :param unicode: input python unicode object
|
||||
@@ -195,12 +208,12 @@ unsigned char *unicode_to_char_array(PyObject *unicode, Py_ssize_t *l) {
|
||||
PyErr_SetString(ipap11helperError, "Unable to encode UTF-8");
|
||||
return NULL;
|
||||
}
|
||||
unsigned char *bytes = (unsigned char *) PyString_AS_STRING(utf8_str);
|
||||
unsigned char *bytes = (unsigned char *) PyBytes_AS_STRING(utf8_str);
|
||||
if (bytes == NULL) {
|
||||
PyErr_SetString(ipap11helperError, "Unable to get bytes from string");
|
||||
*l = 0;
|
||||
} else {
|
||||
*l = PyString_Size(utf8_str);
|
||||
*l = PyBytes_Size(utf8_str);
|
||||
|
||||
/* Copy string first, then DECREF
|
||||
* https://docs.python.org/2/c-api/string.html#c.PyString_AS_STRING
|
||||
@@ -561,7 +574,7 @@ int _set_wrapping_mech_parameters(CK_MECHANISM_TYPE mech_type,
|
||||
*/
|
||||
|
||||
static void P11_Helper_dealloc(P11_Helper *self) {
|
||||
self->ob_type->tp_free((PyObject *) self);
|
||||
Py_TYPE(self)->tp_free((PyObject *) self);
|
||||
}
|
||||
|
||||
static PyObject *P11_Helper_new(PyTypeObject *type, PyObject *args,
|
||||
@@ -1199,7 +1212,7 @@ static PyObject *P11_Helper_export_RSA_public_key(P11_Helper *self,
|
||||
}
|
||||
|
||||
pp_len = i2d_PUBKEY(pkey, &pp);
|
||||
ret = Py_BuildValue("s#", pp, pp_len);
|
||||
ret = string_to_pybytes_or_none(pp, pp_len);
|
||||
|
||||
final:
|
||||
if (rsa != NULL) {
|
||||
@@ -1538,7 +1551,7 @@ static PyObject *P11_Helper_export_wrapped_key(P11_Helper *self,
|
||||
if (!check_return_value(rv, "key wrapping: wrapping"))
|
||||
GOTO_FAIL;
|
||||
|
||||
result = Py_BuildValue("s#", wrapped_key, wrapped_key_len);
|
||||
result = string_to_pybytes_or_none(wrapped_key, wrapped_key_len);
|
||||
|
||||
final:
|
||||
if (wrapped_key != NULL)
|
||||
@@ -1850,11 +1863,11 @@ static PyObject *P11_Helper_set_attribute(P11_Helper *self, PyObject *args,
|
||||
attribute.ulValueLen = sizeof(CK_BBOOL);
|
||||
break;
|
||||
case CKA_ID:
|
||||
if (!PyString_Check(value)) {
|
||||
PyErr_SetString(ipap11helperError, "String value expected");
|
||||
if (!PyBytes_Check(value)) {
|
||||
PyErr_SetString(ipap11helperError, "Bytestring value expected");
|
||||
GOTO_FAIL;
|
||||
}
|
||||
if (PyString_AsStringAndSize(value, (char **) &attribute.pValue,
|
||||
if (PyBytes_AsStringAndSize(value, (char **) &attribute.pValue,
|
||||
&len) == -1) {
|
||||
GOTO_FAIL;
|
||||
}
|
||||
@@ -1984,7 +1997,7 @@ static PyObject *P11_Helper_get_attribute(P11_Helper *self, PyObject *args,
|
||||
case CKA_PUBLIC_EXPONENT:
|
||||
case CKA_ID:
|
||||
/* byte arrays */
|
||||
ret = Py_BuildValue("s#", value, template[0].ulValueLen);
|
||||
ret = string_to_pybytes_or_none(value, template[0].ulValueLen);
|
||||
break;
|
||||
case CKA_KEY_TYPE:
|
||||
/* unsigned long */
|
||||
@@ -2084,7 +2097,7 @@ static PyMethodDef P11_Helper_methods[] = {
|
||||
};
|
||||
|
||||
static PyTypeObject P11_HelperType = {
|
||||
PyObject_HEAD_INIT(NULL) 0, /* ob_size */
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"_ipap11helper.P11_Helper", /* tp_name */
|
||||
sizeof(P11_Helper), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
@@ -2128,23 +2141,36 @@ static PyMethodDef module_methods[] = {
|
||||
{ NULL } /* Sentinel */
|
||||
};
|
||||
|
||||
#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
|
||||
#define PyMODINIT_FUNC void
|
||||
#define MODULE_DOC PyDoc_STR("Example module that creates an extension type.")
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
static struct PyModuleDef moduledef = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
.m_name = "_ipap11helper",
|
||||
.m_doc = MODULE_DOC,
|
||||
.m_size = -1,
|
||||
.m_methods = module_methods,
|
||||
};
|
||||
#endif
|
||||
PyMODINIT_FUNC init_ipap11helper(void) {
|
||||
|
||||
PyObject * module_init(void);
|
||||
PyObject * module_init(void) {
|
||||
PyObject *m;
|
||||
|
||||
if (PyType_Ready(&P11_HelperType) < 0)
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Setting up P11_Helper module
|
||||
*/
|
||||
m = Py_InitModule3("_ipap11helper", module_methods,
|
||||
"Example module that creates an extension type.");
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
m = PyModule_Create(&moduledef);
|
||||
#else
|
||||
m = Py_InitModule3("_ipap11helper", module_methods, MODULE_DOC);
|
||||
#endif
|
||||
|
||||
if (m == NULL)
|
||||
return;
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* Setting up P11_Helper
|
||||
@@ -2181,178 +2207,62 @@ PyMODINIT_FUNC init_ipap11helper(void) {
|
||||
*/
|
||||
|
||||
/* Key Classes */
|
||||
PyObject *P11_Helper_CLASS_PUBKEY_obj = PyInt_FromLong(CKO_PUBLIC_KEY);
|
||||
PyObject_SetAttrString(m, "KEY_CLASS_PUBLIC_KEY",
|
||||
P11_Helper_CLASS_PUBKEY_obj);
|
||||
Py_XDECREF(P11_Helper_CLASS_PUBKEY_obj);
|
||||
|
||||
PyObject *P11_Helper_CLASS_PRIVKEY_obj = PyInt_FromLong(CKO_PRIVATE_KEY);
|
||||
PyObject_SetAttrString(m, "KEY_CLASS_PRIVATE_KEY",
|
||||
P11_Helper_CLASS_PRIVKEY_obj);
|
||||
Py_XDECREF(P11_Helper_CLASS_PRIVKEY_obj);
|
||||
|
||||
PyObject *P11_Helper_CLASS_SECRETKEY_obj = PyInt_FromLong(CKO_SECRET_KEY);
|
||||
PyObject_SetAttrString(m, "KEY_CLASS_SECRET_KEY",
|
||||
P11_Helper_CLASS_SECRETKEY_obj);
|
||||
Py_XDECREF(P11_Helper_CLASS_SECRETKEY_obj);
|
||||
PyModule_AddIntConstant(m, "KEY_CLASS_PUBLIC_KEY", CKO_PUBLIC_KEY);
|
||||
PyModule_AddIntConstant(m, "KEY_CLASS_PRIVATE_KEY", CKO_PRIVATE_KEY);
|
||||
PyModule_AddIntConstant(m, "KEY_CLASS_SECRET_KEY", CKO_SECRET_KEY);
|
||||
|
||||
/* Key types */
|
||||
PyObject *P11_Helper_KEY_TYPE_RSA_obj = PyInt_FromLong(CKK_RSA);
|
||||
PyObject_SetAttrString(m, "KEY_TYPE_RSA", P11_Helper_KEY_TYPE_RSA_obj);
|
||||
Py_XDECREF(P11_Helper_KEY_TYPE_RSA_obj);
|
||||
|
||||
PyObject *P11_Helper_KEY_TYPE_AES_obj = PyInt_FromLong(CKK_AES);
|
||||
PyObject_SetAttrString(m, "KEY_TYPE_AES", P11_Helper_KEY_TYPE_AES_obj);
|
||||
Py_XDECREF(P11_Helper_KEY_TYPE_AES_obj);
|
||||
PyModule_AddIntConstant(m, "KEY_TYPE_RSA", CKK_RSA);
|
||||
PyModule_AddIntConstant(m, "KEY_TYPE_AES", CKK_AES);
|
||||
|
||||
/* Wrapping mech type */
|
||||
PyObject *P11_Helper_MECH_RSA_PKCS_obj = PyInt_FromLong(CKM_RSA_PKCS);
|
||||
PyObject_SetAttrString(m, "MECH_RSA_PKCS", P11_Helper_MECH_RSA_PKCS_obj);
|
||||
Py_XDECREF(P11_Helper_MECH_RSA_PKCS_obj);
|
||||
|
||||
PyObject *P11_Helper_MECH_RSA_PKCS_OAEP_obj =
|
||||
PyInt_FromLong(CKM_RSA_PKCS_OAEP);
|
||||
PyObject_SetAttrString(m, "MECH_RSA_PKCS_OAEP",
|
||||
P11_Helper_MECH_RSA_PKCS_OAEP_obj);
|
||||
Py_XDECREF(P11_Helper_MECH_RSA_PKCS_OAEP_obj);
|
||||
|
||||
PyObject *P11_Helper_MECH_AES_KEY_WRAP_obj =
|
||||
PyInt_FromLong(CKM_AES_KEY_WRAP);
|
||||
PyObject_SetAttrString(m, "MECH_AES_KEY_WRAP",
|
||||
P11_Helper_MECH_AES_KEY_WRAP_obj);
|
||||
Py_XDECREF(P11_Helper_MECH_AES_KEY_WRAP_obj);
|
||||
|
||||
PyObject *P11_Helper_MECH_AES_KEY_WRAP_PAD_obj =
|
||||
PyInt_FromLong(CKM_AES_KEY_WRAP_PAD);
|
||||
PyObject_SetAttrString(m, "MECH_AES_KEY_WRAP_PAD",
|
||||
P11_Helper_MECH_AES_KEY_WRAP_PAD_obj);
|
||||
Py_XDECREF(P11_Helper_MECH_AES_KEY_WRAP_PAD_obj);
|
||||
PyModule_AddIntConstant(m, "MECH_RSA_PKCS", CKM_RSA_PKCS);
|
||||
PyModule_AddIntConstant(m, "MECH_RSA_PKCS_OAEP", CKM_RSA_PKCS_OAEP);
|
||||
PyModule_AddIntConstant(m, "MECH_AES_KEY_WRAP", CKM_AES_KEY_WRAP);
|
||||
PyModule_AddIntConstant(m, "MECH_AES_KEY_WRAP_PAD", CKM_AES_KEY_WRAP_PAD);
|
||||
|
||||
/* Key attributes */
|
||||
PyObject *P11_Helper_ATTR_CKA_ALWAYS_AUTHENTICATE_obj =
|
||||
PyInt_FromLong(CKA_ALWAYS_AUTHENTICATE);
|
||||
PyObject_SetAttrString(m, "CKA_ALWAYS_AUTHENTICATE",
|
||||
P11_Helper_ATTR_CKA_ALWAYS_AUTHENTICATE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_ALWAYS_AUTHENTICATE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_ALWAYS_SENSITIVE_obj =
|
||||
PyInt_FromLong(CKA_ALWAYS_SENSITIVE);
|
||||
PyObject_SetAttrString(m, "CKA_ALWAYS_SENSITIVE",
|
||||
P11_Helper_ATTR_CKA_ALWAYS_SENSITIVE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_ALWAYS_SENSITIVE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_COPYABLE_obj = PyInt_FromLong(CKA_COPYABLE);
|
||||
PyObject_SetAttrString(m, "CKA_COPYABLE",
|
||||
P11_Helper_ATTR_CKA_COPYABLE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_COPYABLE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_DECRYPT_obj = PyInt_FromLong(CKA_DECRYPT);
|
||||
PyObject_SetAttrString(m, "CKA_DECRYPT", P11_Helper_ATTR_CKA_DECRYPT_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_DECRYPT_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_DERIVE_obj = PyInt_FromLong(CKA_DERIVE);
|
||||
PyObject_SetAttrString(m, "CKA_DERIVE", P11_Helper_ATTR_CKA_DERIVE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_DERIVE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_ENCRYPT_obj = PyInt_FromLong(CKA_ENCRYPT);
|
||||
PyObject_SetAttrString(m, "CKA_ENCRYPT", P11_Helper_ATTR_CKA_ENCRYPT_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_ENCRYPT_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_EXTRACTABLE_obj =
|
||||
PyInt_FromLong(CKA_EXTRACTABLE);
|
||||
PyObject_SetAttrString(m, "CKA_EXTRACTABLE",
|
||||
P11_Helper_ATTR_CKA_EXTRACTABLE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_EXTRACTABLE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_ID_obj = PyInt_FromLong(CKA_ID);
|
||||
PyObject_SetAttrString(m, "CKA_ID", P11_Helper_ATTR_CKA_ID_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_ID_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_KEY_TYPE_obj = PyInt_FromLong(CKA_KEY_TYPE);
|
||||
PyObject_SetAttrString(m, "CKA_KEY_TYPE",
|
||||
P11_Helper_ATTR_CKA_KEY_TYPE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_KEY_TYPE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_LOCAL_obj = PyInt_FromLong(CKA_LOCAL);
|
||||
PyObject_SetAttrString(m, "CKA_LOCAL", P11_Helper_ATTR_CKA_LOCAL_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_LOCAL_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_MODIFIABLE_obj =
|
||||
PyInt_FromLong(CKA_MODIFIABLE);
|
||||
PyObject_SetAttrString(m, "CKA_MODIFIABLE",
|
||||
P11_Helper_ATTR_CKA_MODIFIABLE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_MODIFIABLE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_MODULUS_obj = PyInt_FromLong(CKA_MODULUS);
|
||||
PyObject_SetAttrString(m, "CKA_MODULUS", P11_Helper_ATTR_CKA_MODULUS_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_MODULUS_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_NEVER_EXTRACTABLE_obj =
|
||||
PyInt_FromLong(CKA_NEVER_EXTRACTABLE);
|
||||
PyObject_SetAttrString(m, "CKA_NEVER_EXTRACTABLE",
|
||||
P11_Helper_ATTR_CKA_NEVER_EXTRACTABLE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_NEVER_EXTRACTABLE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_PRIVATE_obj = PyInt_FromLong(CKA_PRIVATE);
|
||||
PyObject_SetAttrString(m, "CKA_PRIVATE", P11_Helper_ATTR_CKA_PRIVATE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_PRIVATE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_PUBLIC_EXPONENT_obj
|
||||
= PyInt_FromLong(CKA_PUBLIC_EXPONENT);
|
||||
PyObject_SetAttrString(m, "CKA_PUBLIC_EXPONENT",
|
||||
P11_Helper_ATTR_CKA_PUBLIC_EXPONENT_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_PUBLIC_EXPONENT_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_SENSITIVE_obj =
|
||||
PyInt_FromLong(CKA_SENSITIVE);
|
||||
PyObject_SetAttrString(m, "CKA_SENSITIVE",
|
||||
P11_Helper_ATTR_CKA_SENSITIVE_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_SENSITIVE_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_SIGN_obj = PyInt_FromLong(CKA_SIGN);
|
||||
PyObject_SetAttrString(m, "CKA_SIGN", P11_Helper_ATTR_CKA_SIGN_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_SIGN_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_SIGN_RECOVER_obj =
|
||||
PyInt_FromLong(CKA_SIGN_RECOVER);
|
||||
PyObject_SetAttrString(m, "CKA_SIGN_RECOVER",
|
||||
P11_Helper_ATTR_CKA_SIGN_RECOVER_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_SIGN_RECOVER_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_TRUSTED_obj = PyInt_FromLong(CKA_TRUSTED);
|
||||
PyObject_SetAttrString(m, "CKA_TRUSTED", P11_Helper_ATTR_CKA_TRUSTED_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_TRUSTED_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_VERIFY_obj = PyInt_FromLong(CKA_VERIFY);
|
||||
PyObject_SetAttrString(m, "CKA_VERIFY", P11_Helper_ATTR_CKA_VERIFY_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_VERIFY_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_VERIFY_RECOVER_obj =
|
||||
PyInt_FromLong(CKA_VERIFY_RECOVER);
|
||||
PyObject_SetAttrString(m, "CKA_VERIFY_RECOVER",
|
||||
P11_Helper_ATTR_CKA_VERIFY_RECOVER_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_VERIFY_RECOVER_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_UNWRAP_obj = PyInt_FromLong(CKA_UNWRAP);
|
||||
PyObject_SetAttrString(m, "CKA_UNWRAP", P11_Helper_ATTR_CKA_UNWRAP_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_UNWRAP_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_WRAP_obj = PyInt_FromLong(CKA_WRAP);
|
||||
PyObject_SetAttrString(m, "CKA_WRAP", P11_Helper_ATTR_CKA_WRAP_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_WRAP_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_WRAP_WITH_TRUSTED_obj =
|
||||
PyInt_FromLong(CKA_WRAP_WITH_TRUSTED);
|
||||
PyObject_SetAttrString(m, "CKA_WRAP_WITH_TRUSTED",
|
||||
P11_Helper_ATTR_CKA_WRAP_WITH_TRUSTED_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_WRAP_WITH_TRUSTED_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_TOKEN_obj = PyInt_FromLong(CKA_TOKEN);
|
||||
PyObject_SetAttrString(m, "CKA_TOKEN", P11_Helper_ATTR_CKA_TOKEN_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_TOKEN_obj);
|
||||
|
||||
PyObject *P11_Helper_ATTR_CKA_LABEL_obj = PyInt_FromLong(CKA_LABEL);
|
||||
PyObject_SetAttrString(m, "CKA_LABEL", P11_Helper_ATTR_CKA_LABEL_obj);
|
||||
Py_XDECREF(P11_Helper_ATTR_CKA_LABEL_obj);
|
||||
PyModule_AddIntMacro(m, CKA_ALWAYS_AUTHENTICATE);
|
||||
PyModule_AddIntMacro(m, CKA_ALWAYS_SENSITIVE);
|
||||
PyModule_AddIntMacro(m, CKA_COPYABLE);
|
||||
PyModule_AddIntMacro(m, CKA_DECRYPT);
|
||||
PyModule_AddIntMacro(m, CKA_DERIVE);
|
||||
PyModule_AddIntMacro(m, CKA_ENCRYPT);
|
||||
PyModule_AddIntMacro(m, CKA_EXTRACTABLE);
|
||||
PyModule_AddIntMacro(m, CKA_ID);
|
||||
PyModule_AddIntMacro(m, CKA_KEY_TYPE);
|
||||
PyModule_AddIntMacro(m, CKA_LOCAL);
|
||||
PyModule_AddIntMacro(m, CKA_MODIFIABLE);
|
||||
PyModule_AddIntMacro(m, CKA_MODULUS);
|
||||
PyModule_AddIntMacro(m, CKA_NEVER_EXTRACTABLE);
|
||||
PyModule_AddIntMacro(m, CKA_PRIVATE);
|
||||
PyModule_AddIntMacro(m, CKA_PUBLIC_EXPONENT);
|
||||
PyModule_AddIntMacro(m, CKA_SENSITIVE);
|
||||
PyModule_AddIntMacro(m, CKA_SIGN);
|
||||
PyModule_AddIntMacro(m, CKA_SIGN_RECOVER);
|
||||
PyModule_AddIntMacro(m, CKA_TRUSTED);
|
||||
PyModule_AddIntMacro(m, CKA_VERIFY);
|
||||
PyModule_AddIntMacro(m, CKA_VERIFY_RECOVER);
|
||||
PyModule_AddIntMacro(m, CKA_UNWRAP);
|
||||
PyModule_AddIntMacro(m, CKA_WRAP);
|
||||
PyModule_AddIntMacro(m, CKA_WRAP_WITH_TRUSTED);
|
||||
PyModule_AddIntMacro(m, CKA_TOKEN);
|
||||
PyModule_AddIntMacro(m, CKA_LABEL);
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3
|
||||
PyMODINIT_FUNC PyInit__ipap11helper(void);
|
||||
PyMODINIT_FUNC PyInit__ipap11helper(void)
|
||||
{
|
||||
return module_init();
|
||||
}
|
||||
#else
|
||||
void init_ipap11helper(void);
|
||||
void init_ipap11helper(void)
|
||||
{
|
||||
module_init();
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user