/* -*-c-*-
- *
- * $Id$
*
* Key files and data
*
static PyObject *kxmeth___init__(PyObject *me, PyObject *arg)
{
- int err;
+ long err;
PyObject *x = 0;
+ Py_ssize_t n;
- if (!PyArg_ParseTuple(arg, "Oi:__init__", &me, &err) ||
- (x = PyInt_FromLong(err)) == 0 ||
- PyObject_SetAttrString(me, "err", x))
- goto fail;
- Py_DECREF(x); x = 0;
- if ((x = PyString_FromString(key_strerror(err))) == 0 ||
- PyObject_SetAttrString(me, "errstring", x))
- goto fail;
+ n = PyTuple_GET_SIZE(arg);
+ if (n < 2) TYERR("__init__() takes at least two arguments");
+ me = PyTuple_GET_ITEM(arg, 0);
+ err = PyInt_AsLong(PyTuple_GET_ITEM(arg, 1));
+ if (err == -1 && PyErr_Occurred()) goto end;
+ if (INT_MIN > err || err > INT_MAX) OVFERR("error code out of range");
+
+ x = PyInt_FromLong(err); if (!x) goto end;
+ if (PyObject_SetAttrString(me, "err", x)) goto end;
Py_DECREF(x); x = 0;
- if ((x = PyString_FromString(key_strerror(err))) == 0 ||
- PyObject_SetAttrString(me, "errstring", x))
- goto fail;
+
+ x = PyString_FromString(key_strerror(err)); if (!x) goto end;
+ if (PyObject_SetAttrString(me, "errstring", x)) goto end;
Py_DECREF(x); x = 0;
- if ((x = PySequence_GetSlice(arg, 1, PySequence_Size(arg))) == 0 ||
- PyObject_SetAttrString(me, "args", x))
- goto fail;
+
+ x = PyTuple_GetSlice(arg, 1, n); if (!x) goto end;
+ if (PyObject_SetAttrString(me, "args", x)) goto end;
Py_DECREF(x); x = 0;
RETURN_NONE;
-fail:
+end:
Py_XDECREF(x);
return (0);
}
goto end;
else if (n != 2)
goto tyerr;
- else if ((a = PySequence_GetItem(x, 0)) == 0 || convuint(a, &f->f) ||
- (b = PySequence_GetItem(x, 1)) == 0 || convuint(b, &f->m))
+ else if ((a = PySequence_GetItem(x, 0)) == 0 || !convuint(a, &f->f) ||
+ (b = PySequence_GetItem(x, 1)) == 0 || !convuint(b, &f->m))
goto end;
}
rc = 1;
static PyObject *kdmeth_copy(PyObject *me, PyObject *arg, PyObject *kw)
{
key_filter f = { 0, 0 };
- static char *kwlist[] = { "filter", 0 };
+ static const char *const kwlist[] = { "filter", 0 };
key_data *kd;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:copy", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:copy", KWLIST,
convfilter, &f))
return (0);
if ((kd = key_copydata(KEYDATA_KD(me), &f)) == 0)
key_filter f = { 0, 0 };
dstr d = DSTR_INIT;
PyObject *rc = 0;
- static char *kwlist[] = { "filter", 0 };
+ static const char *const kwlist[] = { "filter", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:write", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:write", KWLIST,
convfilter, &f))
return (0);
key_write(KEYDATA_KD(me), &d, &f);
key_filter f = { 0, 0 };
dstr d = DSTR_INIT;
PyObject *rc = 0;
- static char *kwlist[] = { "filter", 0 };
+ static const char *const kwlist[] = { "filter", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:encode", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:encode", KWLIST,
convfilter, &f))
return (0);
key_encode(KEYDATA_KD(me), &d, &f);
static PyObject *kdmeth_lock(PyObject *me, PyObject *arg)
{
char *p;
- int n;
+ Py_ssize_t n;
PyObject *rc = 0;
key_data *kd;
static PyObject *meth__KeyData_decode(PyObject *me, PyObject *arg)
{
const char *p;
- int n;
+ Py_ssize_t n;
key_data *kd;
PyObject *rc = 0;
#define METHNAME(func) kdmeth_##func
METH (matchp, "KD.matchp(FILTER) -> BOOL")
METH (split, "KD.split()")
- KWMETH(write, "KD.write(filter = <any>) -> STRING")
- KWMETH(encode, "KD.encode(filter = <any>) -> BYTES")
- KWMETH(copy, "KD.encode(filter = <any>) -> KD")
+ KWMETH(write, "KD.write([filter = <any>]) -> STRING")
+ KWMETH(encode, "KD.encode([filter = <any>]) -> BYTES")
+ KWMETH(copy, "KD.copy([filter = <any>]) -> KD")
METH (plock, "KD.plock(TAG) -> ENCRYPTED-KD")
METH (lock, "KD.lock(KEY) -> ENCRYPTED-KD")
#undef METHNAME
static PyTypeObject keydata_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyData", /* @tp_name@ */
+ "KeyData", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
PyObject *arg, PyObject *kw)
{
char *p;
- int n;
+ Py_ssize_t n;
unsigned f = 0;
keydata_pyobj *me = 0;
- static char *kwlist[] = { "key", "flags", 0 };
+ static const char *const kwlist[] = { "key", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#|O&:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#|O&:new", KWLIST,
&p, &n, convflags, &f))
goto end;
me = (keydata_pyobj *)ty->tp_alloc(ty, 0);
static PyTypeObject keydatabin_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataBinary", /* @tp_name@ */
+ "KeyDataBinary", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for binary keys.",
+"KeyDataBinary(KEY, [flags = 0]): key data for binary keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
PyObject *arg, PyObject *kw)
{
char *p;
- int n;
+ Py_ssize_t n;
unsigned f = 0;
keydata_pyobj *me = 0;
- static char *kwlist[] = { "key", "flags", 0 };
+ static const char *const kwlist[] = { "key", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#|O&:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#|O&:new", KWLIST,
&p, &n, convflags, &f))
goto end;
me = (keydata_pyobj *)ty->tp_alloc(ty, 0);
static PyObject *kdemeth_lock(PyObject *me, PyObject *arg)
{
char *hunoz;
- int hukairz;
+ Py_ssize_t hukairz;
if (!PyArg_ParseTuple(arg, "s#:lock", &hunoz, &hukairz)) goto end;
KEYERR(KERR_WRONGTYPE);
end:
static PyObject *kdemeth_unlock(PyObject *me, PyObject *arg)
{
char *p;
- int n;
+ Py_ssize_t n;
int err;
PyObject *rc = 0;
key_data *kd;
static PyTypeObject keydataenc_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataEncrypted", /* @tp_name@ */
+ "KeyDataEncrypted", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for encrypted keys.",
+"KeyDataEncrypted(KEY, [flags = 0]): key data for encrypted keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
mp *x = 0;
unsigned f = 0;
keydata_pyobj *me = 0;
- static char *kwlist[] = { "key", "flags", 0 };
+ static const char *const kwlist[] = { "key", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:new", KWLIST,
convmp, &x, convflags, &f))
goto end;
me = (keydata_pyobj *)ty->tp_alloc(ty, 0);
static PyTypeObject keydatamp_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataMP", /* @tp_name@ */
+ "KeyDataMP", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for large-integer keys.",
+"KeyDataMP(KEY, [flags = 0]): key data for large-integer keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
char *p;
unsigned f = 0;
keydata_pyobj *me = 0;
- static char *kwlist[] = { "key", "flags", 0 };
+ static const char *const kwlist[] = { "key", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|O&:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|O&:new", KWLIST,
&p, convflags, &f))
goto end;
me = (keydata_pyobj *)ty->tp_alloc(ty, 0);
static PyTypeObject keydatastr_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataString", /* @tp_name@ */
+ "KeyDataString", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for string keys.",
+"KeyDataString(KEY, [flags = 0]): key data for string keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
ec x = EC_INIT;
unsigned f = 0;
keydata_pyobj *me = 0;
- static char *kwlist[] = { "key", "flags", 0 };
+ static const char *const kwlist[] = { "key", "flags", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:new", KWLIST,
convecpt, &x, convflags, &f))
goto end;
me = (keydata_pyobj *)ty->tp_alloc(ty, 0);
static PyTypeObject keydataec_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataECPt", /* @tp_name@ */
+ "KeyDataECPt", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for elliptic-curve keys.",
+"KeyDataECPt(KEY, [flags = 0]): key data for elliptic-curve keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
static PyTypeObject subkeyiter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.SubKeyIter", /* @tp_name@ */
+ "SubKeyIter", /* @tp_name@ */
sizeof(subkeyiter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
char *p;
keydata_pyobj *me = 0;
key_data *kd = 0;
- static char *kwlist[] = { "subkeys", 0 };
+ static const char *const kwlist[] = { "subkeys", 0 };
Py_XINCREF(arg); Py_XINCREF(kw);
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O:new", kwlist, &sub))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O:new", KWLIST, &sub))
goto end;
kd = key_newstruct();
if (sub) {
static PyTypeObject keydatastruct_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyDataStructured", /* @tp_name@ */
+ "KeyDataStructured", /* @tp_name@ */
sizeof(keydata_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key data for structured keys.",
+"KeyDataStructured([subkeys = []]): key data for structured keys.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
static PyTypeObject keyattriter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyAttributeIter", /* @tp_name@ */
+ "KeyAttributeIter", /* @tp_name@ */
sizeof(keyattriter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyTypeObject keyattrs_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyAttributes", /* @tp_name@ */
+ "KeyAttributes", /* @tp_name@ */
sizeof(keyattrs_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
PyObject *kfobj;
uint32 id;
char *type;
- long exptime = KEXP_FOREVER;
- static char *kwlist[] = { "keyfile", "id", "type", "exptime", 0 };
+ unsigned long exptime = KEXP_FOREVER;
+ static const char *const kwlist[] =
+ { "keyfile", "id", "type", "exptime", 0 };
key *k;
int err;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&sl:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!O&s|O&:new", KWLIST,
keyfile_pytype, &kfobj, convu32, &id,
- &type, &exptime))
+ &type, convulong, &exptime))
goto end;
- if ((err = key_new(KEYFILE_KF(kfobj), id, type, exptime, &k)) == 0)
+ if ((err = key_new(KEYFILE_KF(kfobj), id, type, exptime, &k)) != 0)
KEYERR(err);
return (key_dowrap(ty, kfobj, k));
end:
PyObject *nameobj;
char *name;
FILE *fp;
- static char *kwlist[] = { "file", "filter", 0 };
+ static const char *const kwlist[] = { "file", "filter", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O&:extract", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O&:extract", KWLIST,
&PyFile_Type, &file,
convfilter, &f) ||
(fp = PyFile_AsFile(file)) == 0 ||
{
ghash *h;
key_filter f = { KF_NONSECRET, KF_NONSECRET };
- static char *kwlist[] = { "hash", "filter", 0 };
+ static const char *const kwlist[] = { "hash", "filter", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:fingerprint", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:fingerprint", KWLIST,
convghash, &h, convfilter, &f))
return (0);
return (getbool(key_fingerprint(KEY_K(me), h, &f)));
key *k = KEY_K(me);
unsigned long et;
+ if (!x) NIERR("__del__");
if (!convulong(x, &et))
goto end;
if (!(KEY_KF(me)->f & KF_WRITE))
key *k = KEY_K(me);
unsigned long dt;
+ if (!x) NIERR("__del__");
if (!convulong(x, &dt))
goto end;
if (dt == KEXP_FOREVER && k->exp != KEXP_FOREVER)
METH (delete, "KEY.delete()")
METH (expire, "KEY.expire()")
METH (used, "KEY.used(TIME)")
- KWMETH(extract, "KEY.extract(FILE, filter = '')")
- KWMETH(fingerprint, "KEY.fingerprint(HASH, filtr = '-secret')")
+ KWMETH(extract, "KEY.extract(FILE, [filter = <any>])")
+ KWMETH(fingerprint, "KEY.fingerprint(HASH, [filter = '-secret'])")
#undef METHNAME
{ 0 }
};
static PyTypeObject key_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.Key", /* @tp_name@ */
+ "Key", /* @tp_name@ */
sizeof(key_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Key object.",
+"Key(KF, ID, TYPE, [exptime = KEXP_FOREVER]): key object.",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
static PyTypeObject keyiter_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyFileIter", /* @tp_name@ */
+ "KeyFileIter", /* @tp_name@ */
sizeof(keyiter_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
char *file = 0;
unsigned how = KOPEN_READ;
keyfile_pyobj *rc = 0;
- static char *kwlist[] = { "file", "how", "report", 0 };
+ static const char *const kwlist[] = { "file", "how", "report", 0 };
Py_XINCREF(arg); Py_XINCREF(kw);
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|iO:new", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|iO:new", KWLIST,
&file, &how, &ri.func))
goto end;
if (ri.func && !PyCallable_Check(ri.func))
PyObject *x = 0;
FILE *fp = 0;
int rc;
- static char *kwlist[] = { "file", "report", 0 };
+ static const char *const kwlist[] = { "file", "report", 0 };
Py_XINCREF(arg); Py_XINCREF(kw);
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O:merge", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O:merge", KWLIST,
&PyFile_Type, &x, &ri.func))
goto end;
if (ri.func && !PyCallable_Check(ri.func))
uint32 id;
char *type;
long exptime = KEXP_FOREVER;
- static char *kwlist[] = { "id", "type", "exptime", 0 };
+ static const char *const kwlist[] = { "id", "type", "exptime", 0 };
key *k;
int err;
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&s|l:newkey", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&s|l:newkey", KWLIST,
convu32, &id, &type, &exptime))
goto end;
if ((err = key_new(KEYFILE_KF(me), id, type, exptime, &k)) != 0)
char *tag;
dstr d = DSTR_INIT;
PyObject *rc = 0;
- static char *kwlist[] = { "tag", "new", 0 };
+ static const char *const kwlist[] = { "tag", "new", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|O!:qtag", kwlist,
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "s|O!:qtag", KWLIST,
&tag, keydata_pytype, &newkdobj))
goto end;
if (key_qtag(KEYFILE_KF(me), tag, &d, &k, &kd))
}
key_incref(*kd);
rc = Py_BuildValue("(s#NN)",
- d.buf, d.len,
+ d.buf, (Py_ssize_t)d.len,
key_pywrap(me, k),
keydata_pywrap(okd));
end:
static PyMethodDef keyfile_pymethods[] = {
#define METHNAME(func) kfmeth_##func
METH (save, "KF.save()")
- KWMETH(merge, "KF.merge(FILE, report = <built-in-reporter>)")
- KWMETH(newkey, "KF.newkey(ID, TYPE, exptime = KEXP_FOREVER) -> KEY")
+ KWMETH(merge, "KF.merge(FILE, [report = <built-in-reporter>])")
+ KWMETH(newkey, "KF.newkey(ID, TYPE, "
+ "[exptime = KEXP_FOREVER]) -> KEY")
METH (byid, "KF.byid(KEYID) -> KEY|None")
METH (bytype, "KF.bytype(TYPE) -> KEY|None")
METH (bytag, "KF.bytag(TAG) -> KEY|None")
- KWMETH(qtag, "KF.qtag(TAG, new = KD) -> FULLTAG, KEY, OLDKD")
+ KWMETH(qtag, "KF.qtag(TAG, [new = KD]) -> FULLTAG, KEY, OLDKD")
GMAP_ROMETHODS
#undef METHNAME
{ 0 }
static PyTypeObject keyfile_pytype_skel = {
PyObject_HEAD_INIT(0) 0, /* Header */
- "catacomb.KeyFile", /* @tp_name@ */
+ "KeyFile", /* @tp_name@ */
sizeof(keyfile_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
Py_TPFLAGS_BASETYPE,
/* @tp_doc@ */
-"Keyring file.",
+"KeyFile(FILE, [how = KOPEN_READ], [report = ?]): Keyring file.\n\
+ calls REPORT(FILE, LINE, MSG) on problems",
0, /* @tp_traverse@ */
0, /* @tp_clear@ */
"KeyData.readflags(STRING) -> (FLAGS, MASK, REST)")
METH (_KeyData_writeflags, "KeyData.writeflags(FLAGS) -> STRING")
METH (_KeyData_read, "KeyData.read(STRING) -> (KD, REST)")
- METH (_KeyData_decode, "KeyData.read(BYTES) -> KD")
+ METH (_KeyData_decode, "KeyData.decode(BYTES) -> KD")
METH (barf, "barf(ERR)")
#undef METHNAME
{ 0 }