You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by bl...@apache.org on 2003/10/12 03:29:46 UTC
cvs commit: xml-security/c/src/enc/WinCAPI WinCAPICryptoHashHMAC.cpp WinCAPICryptoKeyHMAC.cpp WinCAPICryptoKeyHMAC.hpp WinCAPICryptoProvider.cpp WinCAPICryptoProvider.hpp
blautenb 2003/10/11 18:29:46
Modified: c/src/enc/OpenSSL OpenSSLCryptoSymmetricKey.cpp
c/src/enc/WinCAPI WinCAPICryptoHashHMAC.cpp
WinCAPICryptoKeyHMAC.cpp WinCAPICryptoKeyHMAC.hpp
WinCAPICryptoProvider.cpp WinCAPICryptoProvider.hpp
Log:
Updated to start handling keys in Windows with their own context
Revision Changes Path
1.5 +5 -1 xml-security/c/src/enc/OpenSSL/OpenSSLCryptoSymmetricKey.cpp
Index: OpenSSLCryptoSymmetricKey.cpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/OpenSSL/OpenSSLCryptoSymmetricKey.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- OpenSSLCryptoSymmetricKey.cpp 3 Oct 2003 09:54:46 -0000 1.4
+++ OpenSSLCryptoSymmetricKey.cpp 12 Oct 2003 01:29:46 -0000 1.5
@@ -74,6 +74,8 @@
#include <xsec/framework/XSECError.hpp>
#include <xsec/enc/XSECCryptoException.hpp>
+#if defined (HAVE_OPENSSL)
+
#include <string.h>
#include <openssl/rand.h>
@@ -507,3 +509,5 @@
return outl;
}
+
+#endif /* HAVE_OPENSSL */
1.4 +3 -2 xml-security/c/src/enc/WinCAPI/WinCAPICryptoHashHMAC.cpp
Index: WinCAPICryptoHashHMAC.cpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/WinCAPI/WinCAPICryptoHashHMAC.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- WinCAPICryptoHashHMAC.cpp 5 Jul 2003 10:30:33 -0000 1.3
+++ WinCAPICryptoHashHMAC.cpp 12 Oct 2003 01:29:46 -0000 1.4
@@ -199,10 +199,11 @@
if (strEquals(key->getProviderName(), DSIGConstants::s_unicodeStrPROVWinCAPI) &&
((WinCAPICryptoKeyHMAC *) key)->getWinKey() != 0) {
+ HCRYPTPROV p = ((WinCAPICryptoKeyHMAC *) key)->getWinKeyProv();
HCRYPTKEY k = ((WinCAPICryptoKeyHMAC *) key)->getWinKey();
fResult = CryptCreateHash(
- mp_ownerProvider->getProviderRSA(),
+ p,
CALG_HMAC,
k,
0,
1.4 +32 -2 xml-security/c/src/enc/WinCAPI/WinCAPICryptoKeyHMAC.cpp
Index: WinCAPICryptoKeyHMAC.cpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/WinCAPI/WinCAPICryptoKeyHMAC.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- WinCAPICryptoKeyHMAC.cpp 5 Jul 2003 10:30:33 -0000 1.3
+++ WinCAPICryptoKeyHMAC.cpp 12 Oct 2003 01:29:46 -0000 1.4
@@ -70,12 +70,14 @@
#include <xsec/enc/WinCAPI/WinCAPICryptoKeyHMAC.hpp>
#include <xsec/framework/XSECError.hpp>
+#include <xsec/enc/XSECCryptoException.hpp>
WinCAPICryptoKeyHMAC::WinCAPICryptoKeyHMAC() :m_keyBuf("") {
m_keyBuf.isSensitive();
m_keyLen = 0;
m_k = 0;
+ m_p = 0;
};
@@ -102,6 +104,27 @@
ret->m_keyBuf = m_keyBuf;
ret->m_keyLen = m_keyLen;
+ ret->m_p = m_p;
+
+ if (m_k != 0) {
+#if (_WIN32_WINNT > 0x0400)
+ if (CryptDuplicateKey(m_k,
+ 0,
+ 0,
+ &(ret->m_k)) == 0 ) {
+
+ throw XSECCryptoException(XSECCryptoException::MDError,
+ "WinCAPI:KeyHMAC Error attempting to clone key parameters");
+
+ }
+#else
+ throw XSECCryptoException(XSECCryptoException::MDError,
+ "Unable to clone keys in Windows NT 4.0 and below");
+#endif
+ }
+ else
+ ret->m_k = 0;
+
return ret;
}
@@ -110,7 +133,7 @@
// Windows Specific Keys
// --------------------------------------------------------------------------------
-void WinCAPICryptoKeyHMAC::setWinKey(HCRYPTKEY k) {
+void WinCAPICryptoKeyHMAC::setWinKey(HCRYPTPROV p, HCRYPTKEY k) {
if (m_k != 0) {
@@ -119,11 +142,18 @@
}
m_k = k;
+ m_p = p;
}
HCRYPTKEY WinCAPICryptoKeyHMAC::getWinKey(void) {
return m_k;
+
+}
+
+HCRYPTPROV WinCAPICryptoKeyHMAC::getWinKeyProv(void) {
+
+ return m_p;
}
1.4 +17 -2 xml-security/c/src/enc/WinCAPI/WinCAPICryptoKeyHMAC.hpp
Index: WinCAPICryptoKeyHMAC.hpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/WinCAPI/WinCAPICryptoKeyHMAC.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- WinCAPICryptoKeyHMAC.hpp 5 Jul 2003 10:30:33 -0000 1.3
+++ WinCAPICryptoKeyHMAC.hpp 12 Oct 2003 01:29:46 -0000 1.4
@@ -178,10 +178,13 @@
* Set a Windows Crypto key that has been either derived via the
* various Crypt functions or has been loaded from an encrypted BLOB
*
+ * @param p Handle to provider context used to create this key. Note
+ * it is the responsibility of the caller to release the context.
* @param k Windows CAPI key to load
+ * Note that the library now owns this key (and will destroy it).
*/
- void setWinKey(HCRYPTKEY k);
+ void setWinKey(HCRYPTPROV p, HCRYPTKEY k);
/**
* \brief Get a windows key
@@ -194,6 +197,17 @@
HCRYPTKEY getWinKey(void);
+ /**
+ * \brief Get a windows key provider
+ *
+ * Used by WinCAPICryptoHashHMAC to retrieve the provider handle associated
+ * with an HMAC key in order to load it into the HMAC function.
+ *
+ * @returns The key to use or 0 if this object does not hold one
+ */
+
+ HCRYPTPROV getWinKeyProv(void);
+
//@}
private:
@@ -202,6 +216,7 @@
unsigned int m_keyLen;
HCRYPTKEY m_k;
+ HCRYPTPROV m_p;
};
#endif /* WINCAPICRYPTOKEYHMAC_INCLUDE */
1.7 +22 -16 xml-security/c/src/enc/WinCAPI/WinCAPICryptoProvider.cpp
Index: WinCAPICryptoProvider.cpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/WinCAPI/WinCAPICryptoProvider.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WinCAPICryptoProvider.cpp 3 Oct 2003 09:54:46 -0000 1.6
+++ WinCAPICryptoProvider.cpp 12 Oct 2003 01:29:46 -0000 1.7
@@ -85,22 +85,12 @@
XSEC_USING_XERCES(ArrayJanitor);
WinCAPICryptoProvider::WinCAPICryptoProvider(
- HCRYPTPROV provDSS,
- HCRYPTPROV provRSA) {
+ LPCSTR provDSSName,
+ LPCSTR provRSAName) {
- // Copy parameters for later use
-
- m_provDSS = provDSS;
- m_provRSA = provRSA;
-
-}
-
-WinCAPICryptoProvider::WinCAPICryptoProvider() {
-
- // Obtain default PROV_DSS and PROV_RSA_FULL, with default user key containers
if (!CryptAcquireContext(&m_provDSS,
NULL,
- NULL,
+ provDSSName,
PROV_DSS,
CRYPT_VERIFYCONTEXT))
{
@@ -110,17 +100,33 @@
if (!CryptAcquireContext(&m_provRSA,
NULL,
- NULL,
+ provRSAName,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
throw XSECException(XSECException::InternalError,
"WinCAPICryptoProvider() - Error obtaining default PROV_RSA_FULL");
}
-}
+ // Copy parameters for later use
+
+ if (provDSSName != NULL)
+ m_provDSSName = strdup(provDSSName);
+ else
+ m_provDSSName = NULL;
+
+ if (provRSAName != NULL)
+ m_provRSAName = strdup(provRSAName);
+ else
+ m_provRSAName = NULL;
+
+}
WinCAPICryptoProvider::~WinCAPICryptoProvider() {
+
+
+ CryptReleaseContext(m_provRSA, 0);
+ CryptReleaseContext(m_provDSS, 0);
}
1.8 +9 -16 xml-security/c/src/enc/WinCAPI/WinCAPICryptoProvider.hpp
Index: WinCAPICryptoProvider.hpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/enc/WinCAPI/WinCAPICryptoProvider.hpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- WinCAPICryptoProvider.hpp 3 Oct 2003 09:54:46 -0000 1.7
+++ WinCAPICryptoProvider.hpp 12 Oct 2003 01:29:46 -0000 1.8
@@ -119,24 +119,15 @@
* \brief Create a Windows CAPI interface layer
*
* Windows CSPs work under a provider model. The user should specify
- * which CSP to use and which key container to use.
+ * which CSP to use.
*
- * @param provDSS DSS provider - must be of type PROV_DSS
- * @param provRSA RSA provider - must be of type PROV_RSA_FULL
+ * @param provDSSName Name of DSS provider - must be of type PROV_DSS.
+ * Will use the default Windows DSS provider if nothing passed in.
+ * @param provRSAName RSA provider - must be of type PROV_RSA_FULL.
+ * Will use the default RSA_FULL provider if nothing passed in
*/
- WinCAPICryptoProvider(HCRYPTPROV provDSS, HCRYPTPROV provRSA);
-
- /**
- * \brief Create a Windows CAPI interface layer.
- *
- * The default constructor will use the default providers and containers
- *
- * @note This call will fail if the user has not generated keys in the
- * default DSS and RSA provider containers
- */
-
- WinCAPICryptoProvider();
+ WinCAPICryptoProvider(LPCSTR provDSSName = NULL, LPCSTR provRSAName = NULL);
virtual ~WinCAPICryptoProvider();
@@ -338,6 +329,8 @@
HCRYPTPROV m_provDSS;
HCRYPTPROV m_provRSA;
+ LPCSTR m_provDSSName;
+ LPCSTR m_provRSAName;
};