/* $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 * * 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)); }