Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
pyxmlsec / templates.c
Size: Mime:
/* $Id: templates.c 347 2005-08-17 12:48:42Z valos $ 
 *
 * PyXMLSec - Python bindings for XML Security library (XMLSec)
 *
 * Copyright (C) 2003-2005 Easter-eggs, Valery Febvre
 * http://pyxmlsec.labs.libre-entreprise.org
 * 
 * Author: Valery Febvre <vfebvre@easter-eggs.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "xmlsecmod.h"

#include "templates.h"
#include "transforms.h"

PyObject *xmlsec_TmplSignatureCreate(PyObject *self, PyObject *args) {
  PyObject *doc_obj, *c14nMethodId_obj, *signMethodId_obj;
  xmlDocPtr doc = NULL;
  xmlSecTransformId c14nMethodId;
  xmlSecTransformId signMethodId;
  const xmlChar *id = NULL;
  xmlNodePtr node;
  
  if (CheckArgs(args, "oOOs:tmplSignatureCreate")) {
    if (!PyArg_ParseTuple(args, "OOOz:tmplSignatureCreate", &doc_obj,
			  &c14nMethodId_obj, &signMethodId_obj, &id))
      return NULL;
  }
  else return NULL;
    
  doc = xmlDocPtr_get(doc_obj);
  c14nMethodId = xmlSecTransformId_get(c14nMethodId_obj);
  signMethodId = xmlSecTransformId_get(signMethodId_obj);

  node = xmlSecTmplSignatureCreate(doc, c14nMethodId, signMethodId, id);

  return (wrap_xmlNodePtr(node));
}

PyObject *xmlsec_TmplSignatureEnsureKeyInfo(PyObject *self, PyObject *args) {
  PyObject *signNode_obj;
  xmlNodePtr signNode;
  const xmlChar *id = NULL;
  xmlNodePtr eki;

  if (CheckArgs(args, "Os:tmplSignatureEnsureKeyInfo")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplSignatureEnsureKeyInfo",
			  &signNode_obj, &id))
      return NULL;
  }
  else return NULL;

  signNode = xmlNodePtr_get(signNode_obj);
  eki = xmlSecTmplSignatureEnsureKeyInfo(signNode, id);

  return (wrap_xmlNodePtr(eki));
}

PyObject *xmlsec_TmplSignatureAddReference(PyObject *self, PyObject *args) {
  PyObject *signNode_obj, *digestMethodId_obj;
  xmlNodePtr signNode;
  xmlSecTransformId digestMethodId;
  const xmlChar *id = NULL;
  const xmlChar *uri = NULL;
  const xmlChar *type = NULL;
  xmlNodePtr ref;

  if (CheckArgs(args, "OOsss:tmplSignatureAddReference")) {
    if (!PyArg_ParseTuple(args, "OOzzz:tmplSignatureAddReference",
			  &signNode_obj, &digestMethodId_obj,
			  &id, &uri, &type))
      return NULL;
  }
  else return NULL;

  signNode = xmlNodePtr_get(signNode_obj);
  digestMethodId = xmlSecTransformId_get(digestMethodId_obj);
  ref = xmlSecTmplSignatureAddReference(signNode, digestMethodId,
					id, uri, type);

  return (wrap_xmlNodePtr(ref));
}

PyObject *xmlsec_TmplSignatureAddObject(PyObject *self, PyObject *args) {
  PyObject * signNode_obj;
  xmlNodePtr signNode;
  const xmlChar *id = NULL;
  const xmlChar *mimeType = NULL;
  const xmlChar *encoding = NULL;
  xmlNodePtr obj;

  if (CheckArgs(args, "Osss:tmplSignatureAddObject")) {
    if (!PyArg_ParseTuple(args, "Ozzz:tmplSignatureAddObject", &signNode_obj,
			&id, &mimeType, &encoding))
      return NULL;
  }
  else return NULL;

  signNode = xmlNodePtr_get(signNode_obj);
  obj = xmlSecTmplSignatureAddObject(signNode, id, mimeType, encoding);

  return (wrap_xmlNodePtr(obj));
}

PyObject *xmlsec_TmplSignatureGetSignMethodNode(PyObject *self, PyObject *args) {
  PyObject * signNode_obj;
  xmlNodePtr signNode;
  xmlNodePtr node;

  if (CheckArgs(args, "O:tmplSignatureGetSignMethodNode")) {
    if (!PyArg_ParseTuple(args, "O:tmplSignatureGetSignMethodNode",
			  &signNode_obj))
      return NULL;
  }
  else return NULL;

  signNode = xmlNodePtr_get(signNode_obj);
  node = xmlSecTmplSignatureGetSignMethodNode(signNode);
  
  return (wrap_xmlNodePtr(node));
}

PyObject *xmlsec_TmplSignatureGetC14NMethodNode(PyObject *self, PyObject *args) {
  PyObject * signNode_obj;
  xmlNodePtr signNode;
  xmlNodePtr node;
  
  if (CheckArgs(args, "O:tmplSignatureGetC14NMethodNode")) {
    if (!PyArg_ParseTuple(args, "O:tmplSignatureGetC14NMethodNode",
			  &signNode_obj))
      return NULL;
  }
  else return NULL;

  signNode = xmlNodePtr_get(signNode_obj);
  node = xmlSecTmplSignatureGetC14NMethodNode(signNode);
  
  return (wrap_xmlNodePtr(node));
}

PyObject *xmlsec_TmplReferenceAddTransform(PyObject *self, PyObject *args) {
  PyObject *referenceNode_obj, *transformId_obj;
  xmlNodePtr referenceNode;
  xmlSecTransformId transformId;
  xmlNodePtr transform;

  if (CheckArgs(args, "OO:tmplReferenceAddTransform")) {
    if (!PyArg_ParseTuple(args, "OO:tmplReferenceAddTransform",
			  &referenceNode_obj, &transformId_obj))
      return NULL;
  }
  else return NULL;

  referenceNode = xmlNodePtr_get(referenceNode_obj);
  transformId = xmlSecTransformId_get(transformId_obj);
  transform = xmlSecTmplReferenceAddTransform(referenceNode, transformId);

  return (wrap_xmlNodePtr(transform));
}

PyObject *xmlsec_TmplObjectAddSignProperties(PyObject *self, PyObject *args) {
  PyObject *objectNode_obj;
  xmlNodePtr objectNode;
  const xmlChar *id = NULL;
  const xmlChar *target = NULL;
  xmlNodePtr signProperties;

  if (CheckArgs(args, "Oss:tmplObjectAddSignProperties")) {
    if (!PyArg_ParseTuple(args, "Ozz:tmplObjectAddSignProperties",
			  &objectNode_obj, &id, &target))
    return NULL;
  }
  else return NULL;

  objectNode = xmlNodePtr_get(objectNode_obj);
  signProperties = xmlSecTmplObjectAddSignProperties(objectNode, id, target);

  return (wrap_xmlNodePtr(signProperties));
}

PyObject *xmlsec_TmplObjectAddManifest(PyObject *self, PyObject *args) {
  PyObject *objectNode_obj;
  xmlNodePtr objectNode;
  const xmlChar *id = NULL;
  xmlNodePtr manifest;

  if (CheckArgs(args, "Os:tmplObjectAddManifest")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplObjectAddManifest", &objectNode_obj,
			  &id))
      return NULL;
  }
  else return NULL;

  objectNode = xmlNodePtr_get(objectNode_obj);
  manifest = xmlSecTmplObjectAddManifest(objectNode, id);

  return (wrap_xmlNodePtr(manifest));
}

PyObject *xmlsec_TmplManifestAddReference(PyObject *self, PyObject *args) {
  PyObject *manifestNode_obj, *digestMethodId_obj;
  xmlNodePtr manifestNode;
  xmlSecTransformId digestMethodId;
  const xmlChar *id = NULL;
  const xmlChar *uri = NULL;
  const xmlChar *type = NULL;
  xmlNodePtr reference;

  if (CheckArgs(args, "OOsss:tmplManifestAddReference")) {
    if (!PyArg_ParseTuple(args, "OOzzz:tmplManifestAddReference",
			  &manifestNode_obj, &digestMethodId_obj,
			  &id, &uri, &type))
      return NULL;
  }
  else return NULL;

  manifestNode = xmlNodePtr_get(manifestNode_obj);
  digestMethodId = xmlSecTransformId_get(digestMethodId_obj);
  reference = xmlSecTmplManifestAddReference(manifestNode, digestMethodId,
					     id, uri, type);

  return (wrap_xmlNodePtr(reference));
}

PyObject *xmlsec_TmplEncDataCreate(PyObject *self, PyObject *args) {
  PyObject *doc_obj, *encMethodId_obj;
  xmlDocPtr doc = NULL;
  xmlSecTransformId encMethodId = NULL;
  const xmlChar *id = NULL;
  const xmlChar *type = NULL;
  const xmlChar *mimeType = NULL;
  const xmlChar *encoding = NULL;
  xmlNodePtr encDataNode;

  if (CheckArgs(args, "oossss:tmplEncDataCreate")) {
    if (!PyArg_ParseTuple(args, "OOzzzz:tmplEncDataCreate", &doc_obj,
			  &encMethodId_obj, &id, &type, &mimeType, &encoding))
      return NULL;
  }
  else return NULL;

  doc = xmlDocPtr_get(doc_obj);
  encMethodId = xmlSecTransformId_get(encMethodId_obj);
  encDataNode = xmlSecTmplEncDataCreate(doc, encMethodId,
					id, type, mimeType, encoding);

  return (wrap_xmlNodePtr(encDataNode));
}

PyObject *xmlsec_TmplEncDataEnsureKeyInfo(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *id = NULL;
  xmlNodePtr keyInfoNode;

  if (CheckArgs(args, "Os:tmplEncDataEnsureKeyInfo")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplEncDataEnsureKeyInfo", &encNode_obj,
			  &id))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  keyInfoNode = xmlSecTmplEncDataEnsureKeyInfo(encNode, id);

  return (wrap_xmlNodePtr(keyInfoNode));
}

PyObject *xmlsec_TmplEncDataEnsureEncProperties(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *id = NULL;
  xmlNodePtr encPropNode;

  if (CheckArgs(args, "Os:tmplEncDataEnsureEncProperties")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplEncDataEnsureEncProperties",
			  &encNode_obj, &id))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  encPropNode = xmlSecTmplEncDataEnsureEncProperties(encNode, id);

  return (wrap_xmlNodePtr(encPropNode));
}

PyObject *xmlsec_TmplEncDataAddEncProperty(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *id = NULL;
  const xmlChar *target = NULL;
  xmlNodePtr encPropNode;

  if (CheckArgs(args, "Oss:tmplEncDataAddEncProperty")) {
    if (!PyArg_ParseTuple(args, "Ozz:tmplEncDataAddEncProperty", &encNode_obj,
			  &id, &target))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  encPropNode = xmlSecTmplEncDataAddEncProperty(encNode, id, target);

  return (wrap_xmlNodePtr(encPropNode));
}

PyObject *xmlsec_TmplEncDataEnsureCipherValue(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  xmlNodePtr cipherValNode;

  if (CheckArgs(args, "O:tmplEncDataEnsureCipherValue")) {
    if (!PyArg_ParseTuple(args, "O:tmplEncDataEnsureCipherValue", &encNode_obj))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  cipherValNode = xmlSecTmplEncDataEnsureCipherValue(encNode);

  return (wrap_xmlNodePtr(cipherValNode));
}

PyObject *xmlsec_TmplEncDataEnsureCipherReference(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *uri = NULL;
  xmlNodePtr cipherRefNode;

  if (CheckArgs(args, "Os:tmplEncDataEnsureCipherReference")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplEncDataEnsureCipherReference",
			  &encNode_obj, &uri))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  cipherRefNode = xmlSecTmplEncDataEnsureCipherReference(encNode, uri);

  return (wrap_xmlNodePtr(cipherRefNode));
}

PyObject *xmlsec_TmplEncDataGetEncMethodNode(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  xmlNodePtr encMethNode;

  if (CheckArgs(args, "O:tmplEncDataGetEncMethodNode")) {
    if (!PyArg_ParseTuple(args, "O:tmplEncDataGetEncMethodNode", &encNode_obj))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  encMethNode = xmlSecTmplEncDataGetEncMethodNode(encNode);

  return (wrap_xmlNodePtr(encMethNode));
}

PyObject *xmlsec_TmplCipherReferenceAddTransform(PyObject *self, PyObject *args) {
  PyObject *cipherReferenceNode_obj, *transformId_obj;
  xmlNodePtr cipherReferenceNode;
  xmlSecTransformId transformId;
  xmlNodePtr dsigTransNode;

  if (CheckArgs(args, "OO:tmplCipherReferenceAddTransform")) {
    if (!PyArg_ParseTuple(args, "OO:tmplCipherReferenceAddTransform",
			  &cipherReferenceNode_obj, &transformId_obj))
      return NULL;
  }
  else return NULL;

  cipherReferenceNode = xmlNodePtr_get(cipherReferenceNode_obj);
  transformId = xmlSecTransformId_get(transformId_obj);
  dsigTransNode = xmlSecTmplCipherReferenceAddTransform(cipherReferenceNode,
							transformId);

  return (wrap_xmlNodePtr(dsigTransNode));
}

PyObject *xmlsec_TmplReferenceListAddDataReference(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *uri = NULL;
  xmlNodePtr dataRefNode;

  if (CheckArgs(args, "Os:tmplReferenceListAddDataReference")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplReferenceListAddDataReference",
			  &encNode_obj, &uri))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  dataRefNode = xmlSecTmplReferenceListAddDataReference(encNode, uri);

  return (wrap_xmlNodePtr(dataRefNode));
}

PyObject *xmlsec_TmplReferenceListAddKeyReference(PyObject *self, PyObject *args) {
  PyObject *encNode_obj;
  xmlNodePtr encNode;
  const xmlChar *uri = NULL;
  xmlNodePtr keyRefNode;

  if (CheckArgs(args, "Os:tmplReferenceListAddKeyReference")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplReferenceListAddKeyReference",
			  &encNode_obj, &uri))
      return NULL;
  }
  else return NULL;

  encNode = xmlNodePtr_get(encNode_obj);
  keyRefNode = xmlSecTmplReferenceListAddKeyReference(encNode, uri);

  return (wrap_xmlNodePtr(keyRefNode));
}

PyObject *xmlsec_TmplKeyInfoAddKeyName(PyObject *self, PyObject *args) {
  PyObject *keyInfoNode_obj;
  xmlNodePtr keyInfoNode;
  const xmlChar *name;
  xmlNodePtr keyName;

  if (CheckArgs(args, "Os:tmplKeyInfoAddKeyName")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplKeyInfoAddKeyName",
			  &keyInfoNode_obj, &name))
      return NULL;
  }
  else return NULL;

  keyInfoNode = xmlNodePtr_get(keyInfoNode_obj);
  keyName = xmlSecTmplKeyInfoAddKeyName(keyInfoNode, name);

  return (wrap_xmlNodePtr(keyName));
}

PyObject *xmlsec_TmplKeyInfoAddKeyValue(PyObject *self, PyObject *args) {
  PyObject *keyInfoNode_obj;
  xmlNodePtr keyInfoNode;
  xmlNodePtr keyValue;

  if (CheckArgs(args, "O:tmplKeyInfoAddKeyValue")) {
    if (!PyArg_ParseTuple(args, "O:tmplKeyInfoAddKeyValue", &keyInfoNode_obj))
      return NULL;
  }
  else return NULL;

  keyInfoNode = xmlNodePtr_get(keyInfoNode_obj);
  keyValue = xmlSecTmplKeyInfoAddKeyValue(keyInfoNode);

  return (wrap_xmlNodePtr(keyValue));
}

PyObject *xmlsec_TmplKeyInfoAddX509Data(PyObject *self, PyObject *args) {
  PyObject *keyInfoNode_obj;
  xmlNodePtr keyInfoNode;
  xmlNodePtr X509Data;

  if (CheckArgs(args, "O:tmplKeyInfoAddX509Data")) {
    if (!PyArg_ParseTuple(args, "O:tmplKeyInfoAddX509Data", &keyInfoNode_obj))
      return NULL;
  }
  else return NULL;

  keyInfoNode = xmlNodePtr_get(keyInfoNode_obj);
  X509Data = xmlSecTmplKeyInfoAddX509Data(keyInfoNode);

  return (wrap_xmlNodePtr(X509Data));
}

PyObject *xmlsec_TmplKeyInfoAddRetrievalMethod(PyObject *self, PyObject *args) {
  PyObject *keyInfoNode_obj;
  xmlNodePtr keyInfoNode;
  const xmlChar *uri = NULL;
  const xmlChar *type = NULL;
  xmlNodePtr node;

  if (CheckArgs(args, "Oss:tmplKeyInfoAddRetrievalMethod")) {
    if (!PyArg_ParseTuple(args, "Ozz:tmplKeyInfoAddRetrievalMethod",
			  &keyInfoNode_obj, &uri, &type))
      return NULL;
  }
  else return NULL;
  
  keyInfoNode = xmlNodePtr_get(keyInfoNode_obj);
  node = xmlSecTmplKeyInfoAddRetrievalMethod(keyInfoNode, uri, type);

  return (wrap_xmlNodePtr(node));
}

PyObject *xmlsec_TmplRetrievalMethodAddTransform(PyObject *self, PyObject *args) {
  PyObject *retrMethodNode_obj, *transformId_obj;
  xmlNodePtr retrMethodNode;
  xmlSecTransformId transformId;
  xmlNodePtr node;

  if (CheckArgs(args, "OO:tmplRetrievalMethodAddTransform")) {
    if (!PyArg_ParseTuple(args, "OO:tmplRetrievalMethodAddTransform",
			  &retrMethodNode_obj, &transformId_obj))
      return NULL;
  }
  else return NULL;
  
  retrMethodNode = xmlNodePtr_get(retrMethodNode_obj);
  transformId = xmlSecTransformId_get(transformId_obj);

  node = xmlSecTmplRetrievalMethodAddTransform(retrMethodNode, transformId);

  return (wrap_xmlNodePtr(node));
}

PyObject *xmlsec_TmplKeyInfoAddEncryptedKey(PyObject *self, PyObject *args) {
  PyObject *keyInfoNode_obj, *encMethodId_obj;
  xmlNodePtr keyInfoNode;
  xmlSecTransformId encMethodId = NULL;
  const xmlChar *id = NULL;
  const xmlChar *type = NULL;
  const xmlChar *recipient = NULL;
  xmlNodePtr encKeyNode;

  if (CheckArgs(args, "Oosss:tmplKeyInfoAddEncryptedKey")) {
    if (!PyArg_ParseTuple(args, "OOzzz:tmplKeyInfoAddEncryptedKey",
			  &keyInfoNode_obj, &encMethodId_obj, &id, &type,
			  &recipient))
      return NULL;
  }
  else return NULL;

  encMethodId = xmlSecTransformId_get(encMethodId_obj);
  keyInfoNode = xmlNodePtr_get(keyInfoNode_obj);
  encKeyNode = xmlSecTmplKeyInfoAddEncryptedKey(keyInfoNode, encMethodId,
						id, type, recipient);

  return (wrap_xmlNodePtr(encKeyNode));
}

PyObject *xmlsec_TmplTransformAddHmacOutputLength(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj;
  xmlNodePtr transformNode;
  xmlSecSize bitsLen;
  int ret;

  if (CheckArgs(args, "OI:tmplTransformAddHmacOutputLength")) {
    if (!PyArg_ParseTuple(args, "Oi:tmplTransformAddHmacOutputLength",
			  &transformNode_obj, &bitsLen))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);

  ret = xmlSecTmplTransformAddHmacOutputLength(transformNode, bitsLen);
  
  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddRsaOaepParam(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj;
  xmlNodePtr transformNode;
  const xmlSecByte *buf;
  xmlSecSize size;
  int ret;

  if (CheckArgs(args, "OS:tmplTransformAddRsaOaepParam")) {
    if (!PyArg_ParseTuple(args, "Os#:tmplTransformAddRsaOaepParam",
			  &transformNode_obj, &buf, &size))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  
  ret = xmlSecTmplTransformAddRsaOaepParam(transformNode, buf, size);
  
  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddXsltStylesheet(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj;
  xmlNodePtr transformNode;
  const xmlChar *xslt;
  int ret;

  if (CheckArgs(args, "OS:tmplTransformAddXsltStylesheet")) {
    if (!PyArg_ParseTuple(args, "Os:tmplTransformAddXsltStylesheet",
			  &transformNode_obj, &xslt))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  
  ret = xmlSecTmplTransformAddXsltStylesheet(transformNode, xslt);
  
  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddC14NInclNamespaces(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj;
  xmlNodePtr transformNode;
  const xmlChar *prefixList = NULL;
  int ret;

  if (CheckArgs(args, "Os:tmplTransformAddC14NInclNamespaces")) {
    if (!PyArg_ParseTuple(args, "Oz:tmplTransformAddC14NInclNamespaces",
			  &transformNode_obj, &prefixList))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  
  ret = xmlSecTmplTransformAddC14NInclNamespaces(transformNode, prefixList);
  
  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddXPath(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj, *nsList_obj;
  xmlNodePtr transformNode;
  const xmlChar *expression;
  xmlChar **nsList = NULL;
  int ret;

  if (CheckArgs(args, "OSo:tmplTransformAddXPath")) {
    if (!PyArg_ParseTuple(args, "OsO:tmplTransformAddXPath",
			  &transformNode_obj, &expression, &nsList_obj))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  /* convert Python string list into C string array */
  nsList = PythonStringList_get(nsList_obj);

  ret = xmlSecTmplTransformAddXPath(transformNode, expression,
				    (const xmlChar **)nsList);
  xmlFree(nsList);
  
  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddXPath2(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj, *nsList_obj;
  xmlNodePtr transformNode;
  const xmlChar *type;
  const xmlChar *expression;
  xmlChar **nsList = NULL;
  int ret;

  if (CheckArgs(args, "OSSo:tmplTransformAddXPath2")) {
    if (!PyArg_ParseTuple(args, "OssO:tmplTransformAddXPath2",
			  &transformNode_obj, &type, &expression, &nsList_obj))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  nsList = PythonStringList_get(nsList_obj);

  ret = xmlSecTmplTransformAddXPath2(transformNode, type, expression,
				     (const xmlChar **)nsList);
  xmlFree(nsList);

  return (wrap_int(ret));
}

PyObject *xmlsec_TmplTransformAddXPointer(PyObject *self, PyObject *args) {
  PyObject *transformNode_obj, *nsList_obj;
  xmlNodePtr transformNode;
  const xmlChar *expression;
  xmlChar **nsList = NULL;
  int ret;

  if (CheckArgs(args, "OSo:tmplTransformAddXPointer")) {
    if (!PyArg_ParseTuple(args, "OsO:tmplTransformAddXPointer",
			  &transformNode_obj, &expression, &nsList_obj))
      return NULL;
  }
  else return NULL;

  transformNode = xmlNodePtr_get(transformNode_obj);
  nsList = PythonStringList_get(nsList_obj);

  ret = xmlSecTmplTransformAddXPointer(transformNode, expression,
				       (const xmlChar **)nsList);
  xmlFree(nsList);
  
  return (wrap_int(ret));
}