diff options
Diffstat (limited to 'src/kw_aes_des.h')
-rw-r--r-- | src/kw_aes_des.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/kw_aes_des.h b/src/kw_aes_des.h new file mode 100644 index 00000000..46e85273 --- /dev/null +++ b/src/kw_aes_des.h @@ -0,0 +1,148 @@ +/** + * XMLSec library + * + * THIS IS A PRIVATE XMLSEC HEADER FILE + * DON'T USE IT IN YOUR APPLICATION + * + * Implementation of AES/DES Key Transport algorithm + * + * This is free software; see Copyright file in the source + * distribution for preciese wording. + * + * Copyright (C) 2010 Aleksey Sanin, All rights reserved. + */ +#ifndef __XMLSEC_KT_AES_DES_H__ +#define __XMLSEC_KT_AES_DES_H__ + +#ifndef XMLSEC_PRIVATE +#error "private.h file contains private xmlsec definitions and should not be used outside xmlsec or xmlsec-<crypto> libraries" +#endif /* XMLSEC_PRIVATE */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef XMLSEC_NO_DES +/******************************************************************** + * + * KT DES + * + ********************************************************************/ +#define XMLSEC_KW_DES3_KEY_LENGTH 24 +#define XMLSEC_KW_DES3_IV_LENGTH 8 +#define XMLSEC_KW_DES3_BLOCK_LENGTH 8 +#define XMLSEC_KW_DES3_SHA_DIGEST_LENGTH 20 + + +typedef int (*xmlSecKWDes3Sha1Method) (void * context, + const xmlSecByte * in, + xmlSecSize inSize, + xmlSecByte * out, + xmlSecSize outSize); +typedef int (*xmlSecKWDes3GenerateRandomMethod) (void * context, + xmlSecByte * out, + xmlSecSize outSize); +typedef int (*xmlSecKWDes3BlockEncryptMethod) (void * context, + const xmlSecByte * iv, + xmlSecSize ivSize, + const xmlSecByte * in, + xmlSecSize inSize, + xmlSecByte * out, + xmlSecSize outSize); +typedef int (*xmlSecKWDes3BlockDecryptMethod) (void * context, + const xmlSecByte * iv, + xmlSecSize ivSize, + const xmlSecByte * in, + xmlSecSize inSize, + xmlSecByte * out, + xmlSecSize outSize); + + +struct _xmlSecKWDes3Klass { + /* callbacks */ + xmlSecKWDes3GenerateRandomMethod generateRandom; + xmlSecKWDes3Sha1Method sha1; + xmlSecKWDes3BlockEncryptMethod encrypt; + xmlSecKWDes3BlockDecryptMethod decrypt; + + /* for the future */ + void* reserved0; + void* reserved1; +}; +typedef const struct _xmlSecKWDes3Klass xmlSecKWDes3Klass, + *xmlSecKWDes3Id; + +#define xmlSecKWDes3CheckId(id) \ + ( \ + ((id) != NULL) && \ + ((id)->generateRandom != NULL) && \ + ((id)->sha1 != NULL) && \ + ((id)->encrypt != NULL) && \ + ((id)->decrypt != NULL) \ + ) + +XMLSEC_EXPORT int +xmlSecKWDes3Encode(xmlSecKWDes3Id kwDes3Id, void *context, + const xmlSecByte *in, xmlSecSize inSize, + xmlSecByte *out, xmlSecSize outSize); + +XMLSEC_EXPORT int +xmlSecKWDes3Decode(xmlSecKWDes3Id kwDes3Id, void *context, + const xmlSecByte *in, xmlSecSize inSize, + xmlSecByte *out, xmlSecSize outSize); +#endif /* XMLSEC_NO_DES */ + +#ifndef XMLSEC_NO_AES +/******************************************************************** + * + * KT AES + * + ********************************************************************/ +#define XMLSEC_KW_AES_MAGIC_BLOCK_SIZE 8 +#define XMLSEC_KW_AES_BLOCK_SIZE 16 +#define XMLSEC_KW_AES128_KEY_SIZE 16 +#define XMLSEC_KW_AES192_KEY_SIZE 24 +#define XMLSEC_KW_AES256_KEY_SIZE 32 + +typedef int (*xmlSecKWAesBlockEncryptMethod) (const xmlSecByte * in, + xmlSecSize inSize, + xmlSecByte * out, + xmlSecSize outSize, + void * context); +typedef int (*xmlSecKWAesBlockDecryptMethod) (const xmlSecByte * in, + xmlSecSize inSize, + xmlSecByte * out, + xmlSecSize outSize, + void * context); + + +struct _xmlSecKWAesKlass { + /* callbacks */ + xmlSecKWAesBlockEncryptMethod encrypt; + xmlSecKWAesBlockDecryptMethod decrypt; + + /* for the future */ + void* reserved0; + void* reserved1; +}; +typedef const struct _xmlSecKWAesKlass xmlSecKWAesKlass, + *xmlSecKWAesId; + +XMLSEC_EXPORT int +xmlSecKWAesEncode(xmlSecKWAesId kwAesId, void *context, + const xmlSecByte *in, xmlSecSize inSize, + xmlSecByte *out, xmlSecSize outSize); + +XMLSEC_EXPORT int +xmlSecKWAesDecode(xmlSecKWAesId kwAesId, void *context, + const xmlSecByte *in, xmlSecSize inSize, + xmlSecByte *out, xmlSecSize outSize); + +#endif /* XMLSEC_NO_AES */ + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __XMLSEC_KT_AES_DES_H__ */ |