1 #include "rpmsystem-py.h"
2 #include <rpm/rpmkeyring.h>
3 #include "rpmkeyring-py.h"
5 struct rpmPubkeyObject_s {
11 static void rpmPubkey_dealloc(rpmPubkeyObject * s)
13 s->pubkey = rpmPubkeyFree(s->pubkey);
14 Py_TYPE(s)->tp_free((PyObject *)s);
17 static PyObject *rpmPubkey_new(PyTypeObject *subtype,
18 PyObject *args, PyObject *kwds)
21 char *kwlist[] = { "key", NULL };
22 rpmPubkey pubkey = NULL;
26 if (!PyArg_ParseTupleAndKeywords(args, kwds, "S", kwlist, &key))
29 if (pgpParsePkts(PyBytes_AsString(key), &pkt, &pktlen) <= 0) {
30 PyErr_SetString(PyExc_ValueError, "invalid pubkey");
33 pubkey = rpmPubkeyNew(pkt, pktlen);
35 return rpmPubkey_Wrap(subtype, pubkey);
38 static PyObject * rpmPubkey_Base64(rpmPubkeyObject *s)
40 char *b64 = rpmPubkeyBase64(s->pubkey);
41 PyObject *res = Py_BuildValue("s", b64);
46 static struct PyMethodDef rpmPubkey_methods[] = {
47 { "base64", (PyCFunction) rpmPubkey_Base64, METH_NOARGS, NULL },
51 static char rpmPubkey_doc[] = "";
53 PyTypeObject rpmPubkey_Type = {
54 PyVarObject_HEAD_INIT(&PyType_Type, 0)
55 "rpm.pubkey", /* tp_name */
56 sizeof(rpmPubkeyObject), /* tp_size */
58 (destructor) rpmPubkey_dealloc,/* tp_dealloc */
60 (getattrfunc)0, /* tp_getattr */
65 0, /* tp_as_sequence */
66 0, /* tp_as_mapping */
70 PyObject_GenericGetAttr, /* tp_getattro */
71 PyObject_GenericSetAttr, /* tp_setattro */
73 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
74 rpmPubkey_doc, /* tp_doc */
77 0, /* tp_richcompare */
78 0, /* tp_weaklistoffset */
81 rpmPubkey_methods, /* tp_methods */
88 0, /* tp_dictoffset */
91 rpmPubkey_new, /* tp_new */
96 struct rpmKeyringObject_s {
102 static void rpmKeyring_dealloc(rpmKeyringObject * s)
104 rpmKeyringFree(s->keyring);
105 Py_TYPE(s)->tp_free((PyObject *)s);
108 static PyObject *rpmKeyring_new(PyTypeObject *subtype,
109 PyObject *args, PyObject *kwds)
111 rpmKeyring keyring = rpmKeyringNew();
112 return rpmKeyring_Wrap(subtype, keyring);
115 static PyObject *rpmKeyring_addKey(rpmKeyringObject *s, PyObject *arg)
117 rpmPubkeyObject *pubkey = NULL;
119 if (!PyArg_Parse(arg, "O!", &rpmPubkey_Type, &pubkey))
122 return Py_BuildValue("i", rpmKeyringAddKey(s->keyring, pubkey->pubkey));
125 static struct PyMethodDef rpmKeyring_methods[] = {
126 { "addKey", (PyCFunction) rpmKeyring_addKey, METH_O,
128 {NULL, NULL} /* sentinel */
131 static char rpmKeyring_doc[] =
134 PyTypeObject rpmKeyring_Type = {
135 PyVarObject_HEAD_INIT(&PyType_Type, 0)
136 "rpm.keyring", /* tp_name */
137 sizeof(rpmKeyringObject), /* tp_size */
139 (destructor) rpmKeyring_dealloc,/* tp_dealloc */
145 0, /* tp_as_number */
146 0, /* tp_as_sequence */
147 0, /* tp_as_mapping */
151 PyObject_GenericGetAttr, /* tp_getattro */
152 PyObject_GenericSetAttr, /* tp_setattro */
153 0, /* tp_as_buffer */
154 Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
155 rpmKeyring_doc, /* tp_doc */
158 0, /* tp_richcompare */
159 0, /* tp_weaklistoffset */
162 rpmKeyring_methods, /* tp_methods */
167 0, /* tp_descr_get */
168 0, /* tp_descr_set */
169 0, /* tp_dictoffset */
172 rpmKeyring_new, /* tp_new */
177 PyObject * rpmPubkey_Wrap(PyTypeObject *subtype, rpmPubkey pubkey)
179 rpmPubkeyObject *s = (rpmPubkeyObject *)subtype->tp_alloc(subtype, 0);
180 if (s == NULL) return NULL;
183 return (PyObject*) s;
186 PyObject * rpmKeyring_Wrap(PyTypeObject *subtype, rpmKeyring keyring)
188 rpmKeyringObject *s = (rpmKeyringObject *)subtype->tp_alloc(subtype, 0);
189 if (s == NULL) return NULL;
191 s->keyring = keyring;
192 return (PyObject*) s;
195 int rpmKeyringFromPyObject(PyObject *item, rpmKeyring *keyring)
197 rpmKeyringObject *kro;
198 if (!PyArg_Parse(item, "O!", &rpmKeyring_Type, &kro))
200 *keyring = kro->keyring;