chiark / gitweb /
Release 1.0.5.
[catacomb-python] / key.c
diff --git a/key.c b/key.c
index 19a57923403ed7f272dc7a0885fb527f4bf080b6..7deb3825e71deda4b2a4f307ef218a4d491042e0 100644 (file)
--- a/key.c
+++ b/key.c
@@ -1,6 +1,4 @@
 /* -*-c-*-
- *
- * $Id$
  *
  * Key files and data
  *
@@ -270,7 +268,7 @@ static int convflags(PyObject *x, void *p)
   rc = 1;
   goto end;
 tyerr:
-  TYERR("expected flag string or flag/mask pair");
+  TYERR("expected flag string or integer bitfield");
 end:
   return (rc);
 }
@@ -350,6 +348,21 @@ static PyObject *kdmeth_split(PyObject *me, PyObject *arg)
   RETURN_ME;
 }
 
+static PyObject *kdmeth_copy(PyObject *me, PyObject *arg, PyObject *kw)
+{
+  key_filter f = { 0, 0 };
+  static char *kwlist[] = { "filter", 0 };
+  key_data *kd;
+
+  if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:copy", kwlist,
+                                  convfilter, &f))
+    return (0);
+  if ((kd = key_copydata(KEYDATA_KD(me), &f)) == 0)
+    RETURN_NONE;
+  else
+    return (keydata_pywrap(kd));
+}
+
 static PyObject *kdmeth_write(PyObject *me, PyObject *arg, PyObject *kw)
 {
   key_filter f = { 0, 0 };
@@ -454,6 +467,7 @@ static PyMethodDef keydata_pymethods[] = {
   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")
   METH (plock,                 "KD.plock(TAG) -> ENCRYPTED-KD")
   METH (lock,                  "KD.lock(KEY) -> ENCRYPTED-KD")
 #undef METHNAME