summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dll.cpp28
-rw-r--r--dll.h2
-rw-r--r--fips140.h3
-rw-r--r--fipstest.cpp40
4 files changed, 42 insertions, 31 deletions
diff --git a/dll.cpp b/dll.cpp
index 9efaec7..24edf14 100644
--- a/dll.cpp
+++ b/dll.cpp
@@ -23,22 +23,6 @@ NAMESPACE_BEGIN(CryptoPP)
template<> const byte PKCS_DigestDecoration<SHA>::decoration[] = {0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E,0x03,0x02,0x1A,0x05,0x00,0x04,0x14};
template<> const unsigned int PKCS_DigestDecoration<SHA>::length = sizeof(PKCS_DigestDecoration<SHA>::decoration);
-static const byte s_moduleMac[CryptoPP::HMAC<CryptoPP::SHA1>::DIGESTSIZE] = "reserved for mac";
-#ifdef CRYPTOPP_WIN32_AVAILABLE
-static HMODULE s_hModule = NULL;
-#endif
-
-void DoDllPowerUpSelfTest()
-{
-#ifdef CRYPTOPP_WIN32_AVAILABLE
- char moduleFileName[MAX_PATH];
- GetModuleFileNameA(s_hModule, moduleFileName, sizeof(moduleFileName));
- CryptoPP::DoPowerUpSelfTest(moduleFileName, s_moduleMac);
-#else
- throw NotImplemented("DoDllPowerUpSelfTest() only available on Windows");
-#endif
-}
-
NAMESPACE_END
#endif
@@ -127,16 +111,4 @@ void CRYPTOPP_CDECL operator delete (void * p)
s_pDelete(p);
}
-BOOL APIENTRY DllMain(HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved)
-{
- if (ul_reason_for_call == DLL_PROCESS_ATTACH)
- {
- s_hModule = (HMODULE)hModule;
- DoDllPowerUpSelfTest();
- }
- return TRUE;
-}
-
#endif // #ifdef CRYPTOPP_EXPORTS
diff --git a/dll.h b/dll.h
index 4bf44ee..0a17550 100644
--- a/dll.h
+++ b/dll.h
@@ -61,8 +61,6 @@ typedef void (CRYPTOPP_CDECL * PGetNewAndDelete)(PNew &, PDelete &);
typedef new_handler (CRYPTOPP_CDECL * PSetNewHandler)(new_handler);
typedef void (CRYPTOPP_CDECL * PSetNewAndDelete)(PNew, PDelete, PSetNewHandler);
-CRYPTOPP_DLL void DoDllPowerUpSelfTest();
-
NAMESPACE_END
#endif
diff --git a/fips140.h b/fips140.h
index 8d255cf..d792c30 100644
--- a/fips140.h
+++ b/fips140.h
@@ -26,6 +26,9 @@ enum PowerUpSelfTestStatus {POWER_UP_SELF_TEST_NOT_DONE, POWER_UP_SELF_TEST_FAIL
//! perform the power-up self test, and set the self test status
CRYPTOPP_DLL void DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleMac);
+//! perform the power-up self test using the filename of this DLL and the embedded module MAC
+CRYPTOPP_DLL void DoDllPowerUpSelfTest();
+
//! set the power-up self test status to POWER_UP_SELF_TEST_FAILED
CRYPTOPP_DLL void SimulatePowerUpSelfTestFailure();
diff --git a/fipstest.cpp b/fipstest.cpp
index ae277eb..f4fb694 100644
--- a/fipstest.cpp
+++ b/fipstest.cpp
@@ -474,6 +474,44 @@ done:
return;
}
+#ifdef CRYPTOPP_WIN32_AVAILABLE
+
+static const byte s_moduleMac[CryptoPP::HMAC<CryptoPP::SHA1>::DIGESTSIZE] = "reserved for mac";
+static HMODULE s_hModule = NULL;
+
+void DoDllPowerUpSelfTest()
+{
+ char moduleFileName[MAX_PATH];
+ GetModuleFileNameA(s_hModule, moduleFileName, sizeof(moduleFileName));
+ CryptoPP::DoPowerUpSelfTest(moduleFileName, s_moduleMac);
+}
+
+#else
+
+void DoDllPowerUpSelfTest()
+{
+ throw NotImplemented("DoDllPowerUpSelfTest() only available on Windows");
+}
+
+#endif // #ifdef CRYPTOPP_WIN32_AVAILABLE
+
NAMESPACE_END
-#endif
+#ifdef CRYPTOPP_WIN32_AVAILABLE
+
+// DllMain needs to be in the global namespace
+BOOL APIENTRY DllMain(HANDLE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved)
+{
+ if (ul_reason_for_call == DLL_PROCESS_ATTACH)
+ {
+ CryptoPP::s_hModule = (HMODULE)hModule;
+ CryptoPP::DoDllPowerUpSelfTest();
+ }
+ return TRUE;
+}
+
+#endif // #ifdef CRYPTOPP_WIN32_AVAILABLE
+
+#endif // #ifndef CRYPTOPP_IMPORTS