diff options
Diffstat (limited to 'include/xmlsec/xmlenc.h')
-rw-r--r-- | include/xmlsec/xmlenc.h | 163 |
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__ */ + |