summaryrefslogtreecommitdiff
path: root/include/xmlsec/xmlenc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/xmlsec/xmlenc.h')
-rw-r--r--include/xmlsec/xmlenc.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/include/xmlsec/xmlenc.h b/include/xmlsec/xmlenc.h
new file mode 100644
index 00000000..8f972779
--- /dev/null
+++ b/include/xmlsec/xmlenc.h
@@ -0,0 +1,163 @@
+/**
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * "XML Encryption" implementation
+ * http://www.w3.org/TR/xmlenc-core
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
+ */
+#ifndef __XMLSEC_XMLENC_H__
+#define __XMLSEC_XMLENC_H__
+
+#ifndef XMLSEC_NO_XMLENC
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#include <stdio.h>
+
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/buffer.h>
+#include <xmlsec/keys.h>
+#include <xmlsec/keysmngr.h>
+#include <xmlsec/keyinfo.h>
+#include <xmlsec/transforms.h>
+
+/**
+ * xmlEncCtxMode:
+ * @xmlEncCtxModeEncryptedData: the <enc:EncryptedData/> element procesing.
+ * @xmlEncCtxModeEncryptedKey: the <enc:EncryptedKey/> element processing.
+ *
+ * The #xmlSecEncCtx mode.
+ */
+typedef enum {
+ xmlEncCtxModeEncryptedData = 0,
+ xmlEncCtxModeEncryptedKey
+} xmlEncCtxMode;
+
+
+/**
+ * XMLSEC_ENC_RETURN_REPLACED_NODE:
+ *
+ * If this flag is set, then the replaced node will be returned in the replacedNodeList
+ */
+#define XMLSEC_ENC_RETURN_REPLACED_NODE 0x00000001
+
+/**
+ * xmlSecEncCtx:
+ * @userData: the pointer to user data (xmlsec and xmlsec-crypto libraries
+ * never touches this).
+ * @flags: the XML Encryption processing flags.
+ * @flags2: the XML Encryption processing flags.
+ * @mode: the mode.
+ * @keyInfoReadCtx: the reading key context.
+ * @keyInfoWriteCtx: the writing key context (not used for signature verification).
+ * @transformCtx: the transforms processing context.
+ * @defEncMethodId: the default encryption method (used if
+ * <enc:EncryptionMethod/> node is not present).
+ * @encKey: the signature key; application may set #encKey
+ * before calling encryption/decryption functions.
+ * @operation: the operation: encrypt or decrypt.
+ * @result: the pointer to signature (not valid for signature verificaction).
+ * @resultBase64Encoded: the flag: if set then result in #result is base64 encoded.
+ * @resultReplaced: the flag: if set then resulted <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node is added to the document.
+ * @encMethod: the pointer to encryption transform.
+ * @replacedNodeList: the first node of the list of replaced nodes depending on the nodeReplacementMode
+ * @id: the ID attribute of <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node.
+ * @type: the Type attribute of <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node.
+ * @mimeType: the MimeType attribute of <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node.
+ * @encoding: the Encoding attributeof <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node.
+ * @recipient: the Recipient attribute of <enc:EncryptedKey/> node..
+ * @carriedKeyName: the CarriedKeyName attribute of <enc:EncryptedKey/> node.
+ * @encDataNode: the pointer to <enc:EncryptedData/>
+ * or <enc:EncryptedKey/> node.
+ * @encMethodNode: the pointer to <enc:EncryptionMethod/> node.
+ * @keyInfoNode: the pointer to <enc:KeyInfo/> node.
+ * @cipherValueNode: the pointer to <enc:CipherValue/> node.
+ * @reserved1: reserved for the future.
+ *
+ * XML Encrypiton context.
+ */
+struct _xmlSecEncCtx {
+ /* these data user can set before performing the operation */
+ void* userData;
+ unsigned int flags;
+ unsigned int flags2;
+ xmlEncCtxMode mode;
+ xmlSecKeyInfoCtx keyInfoReadCtx;
+ xmlSecKeyInfoCtx keyInfoWriteCtx;
+ xmlSecTransformCtx transformCtx;
+ xmlSecTransformId defEncMethodId;
+
+ /* these data are returned */
+ xmlSecKeyPtr encKey;
+ xmlSecTransformOperation operation;
+ xmlSecBufferPtr result;
+ int resultBase64Encoded;
+ int resultReplaced;
+ xmlSecTransformPtr encMethod;
+
+ /* attributes from EncryptedData or EncryptedKey */
+ xmlChar* id;
+ xmlChar* type;
+ xmlChar* mimeType;
+ xmlChar* encoding;
+ xmlChar* recipient;
+ xmlChar* carriedKeyName;
+
+ /* these are internal data, nobody should change that except us */
+ xmlNodePtr encDataNode;
+ xmlNodePtr encMethodNode;
+ xmlNodePtr keyInfoNode;
+ xmlNodePtr cipherValueNode;
+
+ xmlNodePtr replacedNodeList; /* the pointer to the replaced node */
+ void* reserved1; /* reserved for future */
+};
+
+XMLSEC_EXPORT xmlSecEncCtxPtr xmlSecEncCtxCreate (xmlSecKeysMngrPtr keysMngr);
+XMLSEC_EXPORT void xmlSecEncCtxDestroy (xmlSecEncCtxPtr encCtx);
+XMLSEC_EXPORT int xmlSecEncCtxInitialize (xmlSecEncCtxPtr encCtx,
+ xmlSecKeysMngrPtr keysMngr);
+XMLSEC_EXPORT void xmlSecEncCtxFinalize (xmlSecEncCtxPtr encCtx);
+XMLSEC_EXPORT int xmlSecEncCtxCopyUserPref (xmlSecEncCtxPtr dst,
+ xmlSecEncCtxPtr src);
+XMLSEC_EXPORT void xmlSecEncCtxReset (xmlSecEncCtxPtr encCtx);
+XMLSEC_EXPORT int xmlSecEncCtxBinaryEncrypt (xmlSecEncCtxPtr encCtx,
+ xmlNodePtr tmpl,
+ const xmlSecByte* data,
+ xmlSecSize dataSize);
+XMLSEC_EXPORT int xmlSecEncCtxXmlEncrypt (xmlSecEncCtxPtr encCtx,
+ xmlNodePtr tmpl,
+ xmlNodePtr node);
+XMLSEC_EXPORT int xmlSecEncCtxUriEncrypt (xmlSecEncCtxPtr encCtx,
+ xmlNodePtr tmpl,
+ const xmlChar *uri);
+XMLSEC_EXPORT int xmlSecEncCtxDecrypt (xmlSecEncCtxPtr encCtx,
+ xmlNodePtr node);
+XMLSEC_EXPORT xmlSecBufferPtr xmlSecEncCtxDecryptToBuffer (xmlSecEncCtxPtr encCtx,
+ xmlNodePtr node );
+XMLSEC_EXPORT void xmlSecEncCtxDebugDump (xmlSecEncCtxPtr encCtx,
+ FILE* output);
+XMLSEC_EXPORT void xmlSecEncCtxDebugXmlDump (xmlSecEncCtxPtr encCtx,
+ FILE* output);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XMLSEC_NO_XMLENC */
+
+#endif /* __XMLSEC_XMLENC_H__ */
+