Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

fips140.cpp

00001 // fips140.cpp - written and placed in the public domain by Wei Dai 00002 00003 #include "pch.h" 00004 00005 #ifndef CRYPTOPP_IMPORTS 00006 00007 #include "fips140.h" 00008 #include "trdlocal.h" // needs to be included last for cygwin 00009 00010 NAMESPACE_BEGIN(CryptoPP) 00011 00012 // Define this to 1 to turn on FIPS 140-2 compliance features, including additional tests during 00013 // startup, random number generation, and key generation. These tests may affect performance. 00014 #ifndef CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00015 #define CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 0 00016 #endif 00017 00018 #if (CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 && !defined(THREADS_AVAILABLE)) 00019 #error FIPS 140-2 compliance requires the availability of thread local storage. 00020 #endif 00021 00022 #if (CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 && !defined(OS_RNG_AVAILABLE)) 00023 #error FIPS 140-2 compliance requires the availability of OS provided RNG. 00024 #endif 00025 00026 PowerUpSelfTestStatus g_powerUpSelfTestStatus = POWER_UP_SELF_TEST_NOT_DONE; 00027 00028 bool FIPS_140_2_ComplianceEnabled() 00029 { 00030 return CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2; 00031 } 00032 00033 void SimulatePowerUpSelfTestFailure() 00034 { 00035 g_powerUpSelfTestStatus = POWER_UP_SELF_TEST_FAILED; 00036 } 00037 00038 PowerUpSelfTestStatus CRYPTOPP_API GetPowerUpSelfTestStatus() 00039 { 00040 return g_powerUpSelfTestStatus; 00041 } 00042 00043 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00044 ThreadLocalStorage & AccessPowerUpSelfTestInProgress() 00045 { 00046 static ThreadLocalStorage selfTestInProgress; 00047 return selfTestInProgress; 00048 } 00049 #endif 00050 00051 bool PowerUpSelfTestInProgressOnThisThread() 00052 { 00053 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00054 return AccessPowerUpSelfTestInProgress().GetValue() != NULL; 00055 #else 00056 assert(false); // should not be called 00057 return false; 00058 #endif 00059 } 00060 00061 void SetPowerUpSelfTestInProgressOnThisThread(bool inProgress) 00062 { 00063 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00064 AccessPowerUpSelfTestInProgress().SetValue((void *)inProgress); 00065 #endif 00066 } 00067 00068 void EncryptionPairwiseConsistencyTest_FIPS_140_Only(const PK_Encryptor &encryptor, const PK_Decryptor &decryptor) 00069 { 00070 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00071 EncryptionPairwiseConsistencyTest(encryptor, decryptor); 00072 #endif 00073 } 00074 00075 void SignaturePairwiseConsistencyTest_FIPS_140_Only(const PK_Signer &signer, const PK_Verifier &verifier) 00076 { 00077 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 00078 SignaturePairwiseConsistencyTest(signer, verifier); 00079 #endif 00080 } 00081 00082 NAMESPACE_END 00083 00084 #endif

Generated on Fri Aug 27 11:32:35 2004 for Crypto++ by doxygen 1.3.8