summaryrefslogtreecommitdiff
path: root/include/xmlsec/mscng
diff options
context:
space:
mode:
Diffstat (limited to 'include/xmlsec/mscng')
-rw-r--r--include/xmlsec/mscng/Makefile.am16
-rw-r--r--include/xmlsec/mscng/app.h100
-rw-r--r--include/xmlsec/mscng/certkeys.h33
-rw-r--r--include/xmlsec/mscng/crypto.h515
-rw-r--r--include/xmlsec/mscng/keysstore.h41
-rw-r--r--include/xmlsec/mscng/symbols.h125
-rw-r--r--include/xmlsec/mscng/x509.h83
7 files changed, 913 insertions, 0 deletions
diff --git a/include/xmlsec/mscng/Makefile.am b/include/xmlsec/mscng/Makefile.am
new file mode 100644
index 00000000..3f366cd8
--- /dev/null
+++ b/include/xmlsec/mscng/Makefile.am
@@ -0,0 +1,16 @@
+NULL =
+
+xmlsecmscngincdir = $(includedir)/xmlsec1/xmlsec/mscng
+
+xmlsecmscnginc_HEADERS = \
+app.h \
+certkeys.h \
+crypto.h \
+keysstore.h \
+symbols.h \
+x509.h \
+$(NULL)
+
+install-exec-hook:
+ $(mkinstalldirs) $(DESTDIR)$(xmlsecmscngincdir)
+
diff --git a/include/xmlsec/mscng/app.h b/include/xmlsec/mscng/app.h
new file mode 100644
index 00000000..f1fbf6f8
--- /dev/null
+++ b/include/xmlsec/mscng/app.h
@@ -0,0 +1,100 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_APP_H__
+#define __XMLSEC_MSCNG_APP_H__
+
+#include <windows.h>
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/keys.h>
+#include <xmlsec/keysmngr.h>
+#include <xmlsec/transforms.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/********************************************************************
+ *
+ * Init/shutdown
+ *
+ ********************************************************************/
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppInit (const char* config);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppShutdown (void);
+XMLSEC_CRYPTO_EXPORT LPCTSTR xmlSecMSCngAppGetCertStoreName (void);
+
+/********************************************************************
+ *
+ * Keys Manager
+ *
+ ********************************************************************/
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppDefaultKeysMngrInit (xmlSecKeysMngrPtr mngr);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppDefaultKeysMngrAdoptKey(xmlSecKeysMngrPtr mngr,
+ xmlSecKeyPtr key);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppDefaultKeysMngrLoad (xmlSecKeysMngrPtr mngr,
+ const char* uri);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppDefaultKeysMngrSave (xmlSecKeysMngrPtr mngr,
+ const char* filename,
+ xmlSecKeyDataType type);
+#ifndef XMLSEC_NO_X509
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppKeysMngrCertLoad (xmlSecKeysMngrPtr mngr,
+ const char *filename,
+ xmlSecKeyDataFormat format,
+ xmlSecKeyDataType type);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppKeysMngrCertLoadMemory (xmlSecKeysMngrPtr mngr,
+ const xmlSecByte *data,
+ xmlSecSize dataSize,
+ xmlSecKeyDataFormat format,
+ xmlSecKeyDataType type);
+#endif /* XMLSEC_NO_X509 */
+
+
+/********************************************************************
+ *
+ * Keys
+ *
+ ********************************************************************/
+XMLSEC_CRYPTO_EXPORT xmlSecKeyPtr xmlSecMSCngAppKeyLoad (const char *filename,
+ xmlSecKeyDataFormat format,
+ const char *pwd,
+ void *pwdCallback,
+ void* pwdCallbackCtx);
+XMLSEC_CRYPTO_EXPORT xmlSecKeyPtr xmlSecMSCngAppKeyLoadMemory (const xmlSecByte *data,
+ xmlSecSize dataSize,
+ xmlSecKeyDataFormat format,
+ const char *pwd,
+ void *pwdCallback,
+ void* pwdCallbackCtx);
+#ifndef XMLSEC_NO_X509
+XMLSEC_CRYPTO_EXPORT xmlSecKeyPtr xmlSecMSCngAppPkcs12Load (const char *filename,
+ const char *pwd,
+ void* pwdCallback,
+ void* pwdCallbackCtx);
+XMLSEC_CRYPTO_EXPORT xmlSecKeyPtr xmlSecMSCngAppPkcs12LoadMemory (const xmlSecByte *data,
+ xmlSecSize dataSize,
+ const char *pwd,
+ void* pwdCallback,
+ void* pwdCallbackCtx);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppKeyCertLoad (xmlSecKeyPtr key,
+ const char* filename,
+ xmlSecKeyDataFormat format);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngAppKeyCertLoadMemory (xmlSecKeyPtr key,
+ const xmlSecByte *data,
+ xmlSecSize dataSize,
+ xmlSecKeyDataFormat format);
+#endif /* XMLSEC_NO_X509 */
+
+XMLSEC_CRYPTO_EXPORT void* xmlSecMSCngAppGetDefaultPwdCallback (void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_MSCNG_APP_H__ */
+
diff --git a/include/xmlsec/mscng/certkeys.h b/include/xmlsec/mscng/certkeys.h
new file mode 100644
index 00000000..16461088
--- /dev/null
+++ b/include/xmlsec/mscng/certkeys.h
@@ -0,0 +1,33 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_CERTKEYS_H__
+#define __XMLSEC_MSCNG_CERTKEYS_H__
+
+#include <windows.h>
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/keys.h>
+#include <xmlsec/transforms.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataPtr xmlSecMSCngCertAdopt (PCCERT_CONTEXT pCert,
+ xmlSecKeyDataType type);
+XMLSEC_CRYPTO_EXPORT BCRYPT_KEY_HANDLE xmlSecMSCngKeyDataGetPubKey (xmlSecKeyDataPtr data);
+XMLSEC_CRYPTO_EXPORT NCRYPT_KEY_HANDLE xmlSecMSCngKeyDataGetPrivKey(xmlSecKeyDataPtr data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_MSCNG_PCCERT_CONTEXT_H__ */
+
+
diff --git a/include/xmlsec/mscng/crypto.h b/include/xmlsec/mscng/crypto.h
new file mode 100644
index 00000000..c8afa792
--- /dev/null
+++ b/include/xmlsec/mscng/crypto.h
@@ -0,0 +1,515 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_CRYPTO_H__
+#define __XMLSEC_MSCNG_CRYPTO_H__
+
+#include <windows.h>
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/keys.h>
+#include <xmlsec/transforms.h>
+#include <xmlsec/dl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+XMLSEC_CRYPTO_EXPORT xmlSecCryptoDLFunctionsPtr xmlSecCryptoGetFunctions_mscng(void);
+
+XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT LPTSTR xmlSecMSCngConvertUtf8ToTstr(const xmlChar* str);
+XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT LPWSTR xmlSecMSCngConvertUtf8ToUnicode(const xmlChar* str);
+XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT xmlChar* xmlSecMSCngConvertTstrToUtf8(LPCTSTR str);
+XMLSEC_DEPRECATED XMLSEC_CRYPTO_EXPORT xmlChar* xmlSecMSCngConvertUnicodeToUtf8(LPCWSTR str);
+
+
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngGenerateRandom(xmlSecBufferPtr buffer, xmlSecSize size);
+
+/********************************************************************
+ *
+ * Init shutdown
+ *
+ ********************************************************************/
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngInit (void);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngShutdown (void);
+
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeysMngrInit (xmlSecKeysMngrPtr mngr);
+
+/********************************************************************
+ *
+ * DSA transforms
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_DSA
+
+/**
+ * xmlSecMSCngKeyDataDsaId:
+ *
+ * The DSA key klass.
+ */
+#define xmlSecMSCngKeyDataDsaId \
+ xmlSecMSCngKeyDataDsaGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataDsaGetKlass(void);
+
+#ifndef XMLSEC_NO_SHA1
+/**
+ * xmlSecMSCngTransformDsaSha1Id:
+ *
+ * The DSA-SHA1 signature transform klass.
+ */
+#define xmlSecMSCngTransformDsaSha1Id \
+ xmlSecMSCngTransformDsaSha1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformDsaSha1GetKlass(void);
+#endif /* XMLSEC_NO_SHA1 */
+
+#endif /* XMLSEC_NO_DSA */
+
+/********************************************************************
+ *
+ * RSA transforms
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_RSA
+
+/**
+ * xmlSecMSCngKeyDataRsaId:
+ *
+ * The RSA key klass.
+ */
+#define xmlSecMSCngKeyDataRsaId \
+ xmlSecMSCngKeyDataRsaGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataRsaGetKlass(void);
+
+#ifndef XMLSEC_NO_MD5
+/**
+ * xmlSecMSCngTransformRsaMd5Id:
+ *
+ * The RSA-MD5 signature transform klass.
+ */
+#define xmlSecMSCngTransformRsaMd5Id \
+ xmlSecMSCngTransformRsaMd5GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaMd5GetKlass(void);
+#endif /* XMLSEC_NO_MD5 */
+
+#ifndef XMLSEC_NO_SHA1
+/**
+ * xmlSecMSCngTransformRsaSha1Id:
+ *
+ * The RSA-SHA1 signature transform klass.
+ */
+#define xmlSecMSCngTransformRsaSha1Id \
+ xmlSecMSCngTransformRsaSha1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaSha1GetKlass(void);
+#endif /* XMLSEC_NO_SHA1 */
+
+#ifndef XMLSEC_NO_SHA256
+/**
+ * xmlSecMSCngTransformRsaSha256Id:
+ *
+ * The RSA-SHA256 signature transform klass.
+ */
+#define xmlSecMSCngTransformRsaSha256Id \
+ xmlSecMSCngTransformRsaSha256GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaSha256GetKlass(void);
+#endif /* XMLSEC_NO_SHA256 */
+
+#ifndef XMLSEC_NO_SHA384
+/**
+ * xmlSecMSCngTransformRsaSha384Id:
+ *
+ * The RSA-SHA384 signature transform klass.
+ */
+#define xmlSecMSCngTransformRsaSha384Id \
+ xmlSecMSCngTransformRsaSha384GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaSha384GetKlass(void);
+#endif /* XMLSEC_NO_SHA384 */
+
+#ifndef XMLSEC_NO_SHA512
+/**
+ * xmlSecMSCngTransformRsaSha512Id:
+ *
+ * The RSA-SHA512 signature transform klass.
+ */
+#define xmlSecMSCngTransformRsaSha512Id \
+ xmlSecMSCngTransformRsaSha512GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaSha512GetKlass(void);
+#endif /* XMLSEC_NO_SHA512 */
+
+/**
+ * xmlSecMSCngTransformRsaPkcs1Id:
+ *
+ * The RSA PKCS1 key transport transform klass.
+ */
+#define xmlSecMSCngTransformRsaPkcs1Id \
+ xmlSecMSCngTransformRsaPkcs1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaPkcs1GetKlass(void);
+
+/**
+ * xmlSecMSCngTransformRsaOaepId:
+ *
+ * The RSA OAEP key transport transform klass.
+ */
+#define xmlSecMSCngTransformRsaOaepId \
+ xmlSecMSCngTransformRsaOaepGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformRsaOaepGetKlass(void);
+
+#endif /* XMLSEC_NO_RSA */
+
+/********************************************************************
+ *
+ * ECDSA transforms
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_ECDSA
+
+/**
+ * xmlSecMSCngKeyDataEcdsaId:
+ *
+ * The ECDSA key klass.
+ */
+#define xmlSecMSCngKeyDataEcdsaId \
+ xmlSecMSCngKeyDataEcdsaGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataEcdsaGetKlass(void);
+
+#ifndef XMLSEC_NO_SHA1
+/**
+ * xmlSecMSCngTransformEcdsaSha1Id:
+ *
+ * The ECDSA-SHA1 signature transform klass.
+ */
+#define xmlSecMSCngTransformEcdsaSha1Id \
+ xmlSecMSCngTransformEcdsaSha1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformEcdsaSha1GetKlass(void);
+#endif /* XMLSEC_NO_SHA1 */
+
+#ifndef XMLSEC_NO_SHA256
+/**
+ * xmlSecMSCngTransformEcdsaSha256Id:
+ *
+ * The ECDSA-SHA256 signature transform klass.
+ */
+#define xmlSecMSCngTransformEcdsaSha256Id \
+ xmlSecMSCngTransformEcdsaSha256GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformEcdsaSha256GetKlass(void);
+#endif /* XMLSEC_NO_SHA256 */
+
+#ifndef XMLSEC_NO_SHA384
+/**
+ * xmlSecMSCngTransformEcdsaSha384Id:
+ *
+ * The ECDSA-SHA384 signature transform klass.
+ */
+#define xmlSecMSCngTransformEcdsaSha384Id \
+ xmlSecMSCngTransformEcdsaSha384GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformEcdsaSha384GetKlass(void);
+#endif /* XMLSEC_NO_SHA384 */
+
+#ifndef XMLSEC_NO_SHA512
+/**
+ * xmlSecMSCngTransformEcdsaSha512Id:
+ *
+ * The ECDSA-SHA512 signature transform klass.
+ */
+#define xmlSecMSCngTransformEcdsaSha512Id \
+ xmlSecMSCngTransformEcdsaSha512GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformEcdsaSha512GetKlass(void);
+#endif /* XMLSEC_NO_SHA512 */
+
+#endif /* XMLSEC_NO_ECDSA */
+
+/********************************************************************
+ *
+ * DES transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_DES
+
+/**
+ * xmlSecMSCngKeyDataDesId:
+ *
+ * The DES key data klass.
+ */
+#define xmlSecMSCngKeyDataDesId \
+ xmlSecMSCngKeyDataDesGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataDesGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformDes3CbcId:
+ *
+ * The DES3 CBC cipher transform klass.
+ */
+#define xmlSecMSCngTransformDes3CbcId \
+ xmlSecMSCngTransformDes3CbcGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformDes3CbcGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformKWDes3Id:
+ *
+ * The DES3 KW transform klass.
+ */
+#define xmlSecMSCngTransformKWDes3Id \
+ xmlSecMSCngTransformKWDes3GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformKWDes3GetKlass(void);
+
+#endif /* XMLSEC_NO_DES */
+
+/********************************************************************
+ *
+ * HMAC transforms
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_HMAC
+
+/**
+ * xmlSecMSCngKeyDataHmacId:
+ *
+ * The HMAC key klass.
+ */
+#define xmlSecMSCngKeyDataHmacId \
+ xmlSecMSCngKeyDataHmacGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataHmacGetKlass(void);
+
+#ifndef XMLSEC_NO_MD5
+/**
+ * xmlSecMSCngTransformHmacMd5Id:
+ *
+ * The HMAC-MD5 signature transform klass.
+ */
+#define xmlSecMSCngTransformHmacMd5Id \
+ xmlSecMSCngTransformHmacMd5GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformHmacMd5GetKlass(void);
+#endif /* XMLSEC_NO_MD5 */
+
+#ifndef XMLSEC_NO_SHA1
+/**
+ * xmlSecMSCngTransformHmacSha1Id:
+ *
+ * The HMAC-SHA1 signature transform klass.
+ */
+#define xmlSecMSCngTransformHmacSha1Id \
+ xmlSecMSCngTransformHmacSha1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformHmacSha1GetKlass(void);
+#endif /* XMLSEC_NO_SHA1 */
+
+#ifndef XMLSEC_NO_SHA256
+/**
+ * xmlSecMSCngTransformHmacSha256Id:
+ *
+ * The HMAC-SHA256 signature transform klass.
+ */
+#define xmlSecMSCngTransformHmacSha256Id \
+ xmlSecMSCngTransformHmacSha256GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformHmacSha256GetKlass(void);
+#endif /* XMLSEC_NO_SHA256 */
+
+#ifndef XMLSEC_NO_SHA384
+/**
+ * xmlSecMSCngTransformHmacSha384Id:
+ *
+ * The HMAC-SHA384 signature transform klass.
+ */
+#define xmlSecMSCngTransformHmacSha384Id \
+ xmlSecMSCngTransformHmacSha384GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformHmacSha384GetKlass(void);
+#endif /* XMLSEC_NO_SHA384 */
+
+#ifndef XMLSEC_NO_SHA512
+/**
+ * xmlSecMSCngTransformHmacSha512Id:
+ *
+ * The HMAC-SHA512 signature transform klass.
+ */
+#define xmlSecMSCngTransformHmacSha512Id \
+ xmlSecMSCngTransformHmacSha512GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformHmacSha512GetKlass(void);
+#endif /* XMLSEC_NO_SHA512 */
+
+#endif /* XMLSEC_NO_HMAC */
+
+/********************************************************************
+ *
+ * MD5 transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_MD5
+/**
+ * xmlSecMSCngTransformMd5Id:
+ *
+ * The MD5 digest transform klass.
+ */
+#define xmlSecMSCngTransformMd5Id \
+ xmlSecMSCngTransformMd5GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformMd5GetKlass(void);
+#endif /* XMLSEC_NO_MD5 */
+
+/********************************************************************
+ *
+ * SHA1 transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_SHA1
+/**
+ * xmlSecMSCngTransformSha1Id:
+ *
+ * The SHA1 digest transform klass.
+ */
+#define xmlSecMSCngTransformSha1Id \
+ xmlSecMSCngTransformSha1GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformSha1GetKlass(void);
+#endif /* XMLSEC_NO_SHA1 */
+
+/********************************************************************
+ *
+ * SHA256 transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_SHA256
+/**
+ * xmlSecMSCngTransformSha256Id:
+ *
+ * The SHA256 digest transform klass.
+ */
+#define xmlSecMSCngTransformSha256Id \
+ xmlSecMSCngTransformSha256GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformSha256GetKlass(void);
+#endif /* XMLSEC_NO_SHA256 */
+
+/********************************************************************
+ *
+ * SHA384 transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_SHA384
+/**
+ * xmlSecMSCngTransformSha384Id:
+ *
+ * The SHA384 digest transform klass.
+ */
+#define xmlSecMSCngTransformSha384Id \
+ xmlSecMSCngTransformSha384GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformSha384GetKlass(void);
+#endif /* XMLSEC_NO_SHA384 */
+
+/********************************************************************
+ *
+ * SHA512 transform
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_SHA512
+/**
+ * xmlSecMSCngTransformSha512Id:
+ *
+ * The SHA512 digest transform klass.
+ */
+#define xmlSecMSCngTransformSha512Id \
+ xmlSecMSCngTransformSha512GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformSha512GetKlass(void);
+#endif /* XMLSEC_NO_SHA512 */
+
+/********************************************************************
+ *
+ * AES transforms
+ *
+ *******************************************************************/
+#ifndef XMLSEC_NO_AES
+/**
+ * xmlSecMSCngKeyDataAesId:
+ *
+ * The AES key data klass.
+ */
+#define xmlSecMSCngKeyDataAesId \
+ xmlSecMSCngKeyDataAesGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataAesGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes128CbcId:
+ *
+ * The AES128 CBC cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes128CbcId \
+ xmlSecMSCngTransformAes128CbcGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes128CbcGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes192CbcId:
+ *
+ * The AES192 CBC cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes192CbcId \
+ xmlSecMSCngTransformAes192CbcGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes192CbcGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes256CbcId:
+ *
+ * The AES256 CBC cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes256CbcId \
+ xmlSecMSCngTransformAes256CbcGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes256CbcGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes128GcmId:
+ *
+ * The AES128 GCM cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes128GcmId \
+ xmlSecMSCngTransformAes128GcmGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes128GcmGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes192GcmId:
+ *
+ * The AES192 GCM cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes192GcmId \
+ xmlSecMSCngTransformAes192GcmGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes192GcmGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformAes256GcmId:
+ *
+ * The AES256 GCM cipher transform klass.
+ */
+#define xmlSecMSCngTransformAes256GcmId \
+ xmlSecMSCngTransformAes256GcmGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformAes256GcmGetKlass(void);
+
+/**
+ * xmlSecMSCngTransformKWAes128Id:
+ *
+ * The AES 128 key wrap transform klass.
+ */
+#define xmlSecMSCngTransformKWAes128Id \
+ xmlSecMSCngTransformKWAes128GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformKWAes128GetKlass(void);
+
+/**
+ * xmlSecMSCngTransformKWAes192Id:
+ *
+ * The AES 192 key wrap transform klass.
+ */
+#define xmlSecMSCngTransformKWAes192Id \
+ xmlSecMSCngTransformKWAes192GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformKWAes192GetKlass(void);
+
+/**
+ * xmlSecMSCngTransformKWAes256Id:
+ *
+ * The AES 256 key wrap transform klass.
+ */
+#define xmlSecMSCngTransformKWAes256Id \
+ xmlSecMSCngTransformKWAes256GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecMSCngTransformKWAes256GetKlass(void);
+#endif /* XMLSEC_NO_AES */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_MSCNG_CRYPTO_H__ */
diff --git a/include/xmlsec/mscng/keysstore.h b/include/xmlsec/mscng/keysstore.h
new file mode 100644
index 00000000..20a4eb13
--- /dev/null
+++ b/include/xmlsec/mscng/keysstore.h
@@ -0,0 +1,41 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_KEYSSTORE_H__
+#define __XMLSEC_MSCNG_KEYSSTORE_H__
+
+#include <xmlsec/xmlsec.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * xmlSecMSCngKeysStoreId:
+ *
+ * A MSCng keys store klass id.
+ */
+#define xmlSecMSCngKeysStoreId xmlSecMSCngKeysStoreGetKlass()
+
+XMLSEC_CRYPTO_EXPORT xmlSecKeyStoreId xmlSecMSCngKeysStoreGetKlass(void);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeysStoreAdoptKey(xmlSecKeyStorePtr store,
+ xmlSecKeyPtr key);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeysStoreLoad (xmlSecKeyStorePtr store,
+ const char *uri,
+ xmlSecKeysMngrPtr keysMngr);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeysStoreSave (xmlSecKeyStorePtr store,
+ const char *filename,
+ xmlSecKeyDataType type);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_MSCNG_PCCERT_CONTEXT_H__ */
+
+
diff --git a/include/xmlsec/mscng/symbols.h b/include/xmlsec/mscng/symbols.h
new file mode 100644
index 00000000..07fc0ef1
--- /dev/null
+++ b/include/xmlsec/mscng/symbols.h
@@ -0,0 +1,125 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_SYMBOLS_H__
+#define __XMLSEC_MSCNG_SYMBOLS_H__
+
+#if !defined(IN_XMLSEC) && defined(XMLSEC_CRYPTO_DYNAMIC_LOADING)
+#error To disable dynamic loading of xmlsec-crypto libraries undefine XMLSEC_CRYPTO_DYNAMIC_LOADING
+#endif /* !defined(IN_XMLSEC) && defined(XMLSEC_CRYPTO_DYNAMIC_LOADING) */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef XMLSEC_CRYPTO_MSCNG
+
+/********************************************************************
+ *
+ * Crypto Init/shutdown
+ *
+ ********************************************************************/
+#define xmlSecCryptoInit xmlSecMSCngInit
+#define xmlSecCryptoShutdown xmlSecMSCngShutdown
+
+#define xmlSecCryptoKeysMngrInit xmlSecMSCngKeysMngrInit
+
+/********************************************************************
+ *
+ * Key data ids
+ *
+ ********************************************************************/
+#define xmlSecKeyDataAesId xmlSecMSCngKeyDataAesId
+#define xmlSecKeyDataDesId xmlSecMSCngKeyDataDesId
+#define xmlSecKeyDataDsaId xmlSecMSCngKeyDataDsaId
+#define xmlSecKeyDataEcdsaId xmlSecMSCngKeyDataEcdsaId
+#define xmlSecKeyDataHmacId xmlSecMSCngKeyDataHmacId
+#define xmlSecKeyDataRsaId xmlSecMSCngKeyDataRsaId
+#define xmlSecKeyDataX509Id xmlSecMSCngKeyDataX509Id
+#define xmlSecKeyDataRawX509CertId xmlSecMSCngKeyDataRawX509CertId
+
+/********************************************************************
+ *
+ * Key data store ids
+ *
+ ********************************************************************/
+#define xmlSecX509StoreId xmlSecMSCngX509StoreId
+
+/********************************************************************
+ *
+ * Crypto transforms ids
+ *
+ ********************************************************************/
+#define xmlSecTransformAes128CbcId xmlSecMSCngTransformAes128CbcId
+#define xmlSecTransformAes192CbcId xmlSecMSCngTransformAes192CbcId
+#define xmlSecTransformAes256CbcId xmlSecMSCngTransformAes256CbcId
+#define xmlSecTransformAes128GcmId xmlSecMSCngTransformAes128GcmId
+#define xmlSecTransformAes192GcmId xmlSecMSCngTransformAes192GcmId
+#define xmlSecTransformAes256GcmId xmlSecMSCngTransformAes256GcmId
+#define xmlSecTransformKWAes128Id xmlSecMSCngTransformKWAes128Id
+#define xmlSecTransformKWAes192Id xmlSecMSCngTransformKWAes192Id
+#define xmlSecTransformKWAes256Id xmlSecMSCngTransformKWAes256Id
+#define xmlSecTransformDes3CbcId xmlSecMSCngTransformDes3CbcId
+#define xmlSecTransformKWDes3Id xmlSecMSCngTransformKWDes3Id
+#define xmlSecTransformDsaSha1Id xmlSecMSCngTransformDsaSha1Id
+#define xmlSecTransformDsaSha256Id xmlSecMSCngTransformDsaSha256Id
+#define xmlSecTransformEcdsaSha1Id xmlSecMSCngTransformEcdsaSha1Id
+#define xmlSecTransformEcdsaSha224Id xmlSecMSCngTransformEcdsaSha224Id
+#define xmlSecTransformEcdsaSha256Id xmlSecMSCngTransformEcdsaSha256Id
+#define xmlSecTransformEcdsaSha384Id xmlSecMSCngTransformEcdsaSha384Id
+#define xmlSecTransformEcdsaSha512Id xmlSecMSCngTransformEcdsaSha512Id
+#define xmlSecTransformHmacMd5Id xmlSecMSCngTransformHmacMd5Id
+#define xmlSecTransformHmacRipemd160Id xmlSecMSCngTransformHmacRipemd160Id
+#define xmlSecTransformHmacSha1Id xmlSecMSCngTransformHmacSha1Id
+#define xmlSecTransformHmacSha224Id xmlSecMSCngTransformHmacSha224Id
+#define xmlSecTransformHmacSha256Id xmlSecMSCngTransformHmacSha256Id
+#define xmlSecTransformHmacSha384Id xmlSecMSCngTransformHmacSha384Id
+#define xmlSecTransformHmacSha512Id xmlSecMSCngTransformHmacSha512Id
+#define xmlSecTransformMd5Id xmlSecMSCngTransformMd5Id
+#define xmlSecTransformRipemd160Id xmlSecMSCngTransformRipemd160Id
+#define xmlSecTransformRsaSha1Id xmlSecMSCngTransformRsaSha1Id
+#define xmlSecTransformRsaSha224Id xmlSecMSCngTransformRsaSha224Id
+#define xmlSecTransformRsaSha256Id xmlSecMSCngTransformRsaSha256Id
+#define xmlSecTransformRsaSha384Id xmlSecMSCngTransformRsaSha384Id
+#define xmlSecTransformRsaSha512Id xmlSecMSCngTransformRsaSha512Id
+#define xmlSecTransformRsaPkcs1Id xmlSecMSCngTransformRsaPkcs1Id
+#define xmlSecTransformRsaOaepId xmlSecMSCngTransformRsaOaepId
+#define xmlSecTransformSha1Id xmlSecMSCngTransformSha1Id
+#define xmlSecTransformSha224Id xmlSecMSCngTransformSha224Id
+#define xmlSecTransformSha256Id xmlSecMSCngTransformSha256Id
+#define xmlSecTransformSha384Id xmlSecMSCngTransformSha384Id
+#define xmlSecTransformSha512Id xmlSecMSCngTransformSha512Id
+
+/********************************************************************
+ *
+ * High level routines form xmlsec command line utility
+ *
+ ********************************************************************/
+#define xmlSecCryptoAppInit xmlSecMSCngAppInit
+#define xmlSecCryptoAppShutdown xmlSecMSCngAppShutdown
+#define xmlSecCryptoAppDefaultKeysMngrInit xmlSecMSCngAppDefaultKeysMngrInit
+#define xmlSecCryptoAppDefaultKeysMngrAdoptKey xmlSecMSCngAppDefaultKeysMngrAdoptKey
+#define xmlSecCryptoAppDefaultKeysMngrLoad xmlSecMSCngAppDefaultKeysMngrLoad
+#define xmlSecCryptoAppDefaultKeysMngrSave xmlSecMSCngAppDefaultKeysMngrSave
+#define xmlSecCryptoAppKeysMngrCertLoad xmlSecMSCngAppKeysMngrCertLoad
+#define xmlSecCryptoAppKeysMngrCertLoadMemory xmlSecMSCngAppKeysMngrCertLoadMemory
+#define xmlSecCryptoAppKeyLoad xmlSecMSCngAppKeyLoad
+#define xmlSecCryptoAppPkcs12Load xmlSecMSCngAppPkcs12Load
+#define xmlSecCryptoAppKeyCertLoad xmlSecMSCngAppKeyCertLoad
+#define xmlSecCryptoAppKeyLoadMemory xmlSecMSCngAppKeyLoadMemory
+#define xmlSecCryptoAppPkcs12LoadMemory xmlSecMSCngAppPkcs12LoadMemory
+#define xmlSecCryptoAppKeyCertLoadMemory xmlSecMSCngAppKeyCertLoadMemory
+#define xmlSecCryptoAppGetDefaultPwdCallback xmlSecMSCngAppGetDefaultPwdCallback
+
+#endif /* XMLSEC_CRYPTO_MSCNG */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __XMLSEC_MSCNG_CRYPTO_H__ */
diff --git a/include/xmlsec/mscng/x509.h b/include/xmlsec/mscng/x509.h
new file mode 100644
index 00000000..6c2f7415
--- /dev/null
+++ b/include/xmlsec/mscng/x509.h
@@ -0,0 +1,83 @@
+/*
+ * XML Security Library (http://www.aleksey.com/xmlsec).
+ *
+ * This is free software; see Copyright file in the source
+ * distribution for preciese wording.
+ *
+ * Copyright (C) 2018 Miklos Vajna. All Rights Reserved.
+ */
+#ifndef __XMLSEC_MSCNG_X509_H__
+#define __XMLSEC_MSCNG_X509_H__
+
+#ifndef XMLSEC_NO_X509
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/keys.h>
+#include <xmlsec/transforms.h>
+
+#include <windows.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * xmlSecMSCngKeyDataX509Id:
+ *
+ * The MSCng X509 data klass.
+ */
+#define xmlSecMSCngKeyDataX509Id \
+ xmlSecMSCngKeyDataX509GetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataX509GetKlass(void);
+
+/**
+ * xmlSecMSCngKeyDataRawX509CertId:
+ *
+ * The MSCng raw X509 certificate klass.
+ */
+#define xmlSecMSCngKeyDataRawX509CertId \
+ xmlSecMSCngKeyDataRawX509CertGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecMSCngKeyDataRawX509CertGetKlass(void);
+
+/**
+ * xmlSecMSCngX509StoreId:
+ *
+ * The MSCng X509 store klass.
+ */
+#define xmlSecMSCngX509StoreId \
+ xmlSecMSCngX509StoreGetKlass()
+XMLSEC_CRYPTO_EXPORT xmlSecKeyDataStoreId xmlSecMSCngX509StoreGetKlass(void);
+
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeyDataX509AdoptKeyCert (xmlSecKeyDataPtr data,
+ PCCERT_CONTEXT cert);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngKeyDataX509AdoptCert (xmlSecKeyDataPtr data,
+ PCCERT_CONTEXT cert);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngX509StoreAdoptCert (xmlSecKeyDataStorePtr store,
+ PCCERT_CONTEXT cert,
+ xmlSecKeyDataType type);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngX509StoreAdoptKeyStore (xmlSecKeyDataStorePtr store,
+ HCERTSTORE keyStore);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngX509StoreAdoptTrustedStore(xmlSecKeyDataStorePtr store,
+ HCERTSTORE trustedStore);
+XMLSEC_CRYPTO_EXPORT int xmlSecMSCngX509StoreAdoptUntrustedStore(xmlSecKeyDataStorePtr store,
+ HCERTSTORE untrustedStore);
+XMLSEC_CRYPTO_EXPORT PCCERT_CONTEXT xmlSecMSCngX509StoreVerify (xmlSecKeyDataStorePtr store,
+ HCERTSTORE certs,
+ xmlSecKeyInfoCtx* keyInfoCtx);
+PCCERT_CONTEXT xmlSecMSCngX509StoreFindCert (xmlSecKeyDataStorePtr store,
+ xmlChar *subjectName,
+ xmlChar *issuerName,
+ xmlChar *issuerSerial,
+ xmlChar *ski,
+ xmlSecKeyInfoCtx* keyInfoCtx);
+PCCERT_CONTEXT xmlSecMSCngX509FindCertBySubject (HCERTSTORE store,
+ LPTSTR wcSubject,
+ DWORD dwCertEncodingType);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* XMLSEC_NO_X509 */
+
+#endif /* __XMLSEC_MSCNG_X509_H__ */