5 #ifndef CRYPTOPP_IMPORTS
7 #define CRYPTOPP_DEFAULT_NO_DLL
10 #ifdef CRYPTOPP_WIN32_AVAILABLE
11 #define _WIN32_WINNT 0x0400
14 #if defined(_MSC_VER) && _MSC_VER >= 1400
16 #define _CRT_DEBUGGER_HOOK _crt_debugger_hook
18 #define _CRT_DEBUGGER_HOOK __crt_debugger_hook
20 extern "C" {_CRTIMP
void __cdecl _CRT_DEBUGGER_HOOK(
int);}
26 NAMESPACE_BEGIN(CryptoPP)
30 unsigned long g_macFileLocation = 0;
33 static const byte s_moduleMac[CryptoPP::
HMAC<CryptoPP::
SHA1>::DIGESTSIZE] = CRYPTOPP_DUMMY_DLL_MAC;
34 CRYPTOPP_COMPILE_ASSERT(sizeof(s_moduleMac) == CryptoPP::
SHA1::DIGESTSIZE);
36 #ifdef CRYPTOPP_WIN32_AVAILABLE
37 static HMODULE s_hModule = NULL;
40 const byte * CRYPTOPP_API GetActualMacAndLocation(
unsigned int &macSize,
unsigned int &fileLocation)
42 macSize = (
unsigned int)g_actualMac.size();
43 fileLocation = g_macFileLocation;
54 comparison.ChannelMessageSeriesEnd(
"0");
55 comparison.ChannelMessageSeriesEnd(
"1");
58 template <
class CIPHER>
59 void X917RNG_KnownAnswerTest(
62 const char *deterministicTimeVector,
66 #ifdef OS_RNG_AVAILABLE
67 std::string decodedKey, decodedSeed, decodedDeterministicTimeVector;
73 rng.Reseed((
const byte *)decodedKey.data(), decodedKey.size(), (
const byte *)decodedSeed.data(), (
const byte *)decodedDeterministicTimeVector.data());
74 KnownAnswerTest(rng, output);
90 comparison.ChannelMessageSeriesEnd(
"0");
91 comparison.ChannelMessageSeriesEnd(
"1");
94 template <
class CIPHER>
95 void SymmetricEncryptionKnownAnswerTest(
98 const char *plaintext,
104 CIPHER *dummy = NULL)
106 std::string decodedKey;
109 typename CIPHER::Encryption encryption((
const byte *)decodedKey.data(), decodedKey.size());
110 typename CIPHER::Decryption decryption((
const byte *)decodedKey.data(), decodedKey.size());
127 void KnownAnswerTest(
HashTransformation &hash,
const char *message,
const char *digest)
133 comparison.ChannelMessageSeriesEnd(
"0");
134 comparison.ChannelMessageSeriesEnd(
"1");
137 template <
class HASH>
138 void SecureHashKnownAnswerTest(
const char *message,
const char *digest, HASH *dummy = NULL)
141 KnownAnswerTest(hash, message, digest);
145 void MAC_KnownAnswerTest(
const char *key,
const char *message,
const char *digest, MAC *dummy = NULL)
147 std::string decodedKey;
150 MAC mac((
const byte *)decodedKey.data(), decodedKey.size());
151 KnownAnswerTest(mac, message, digest);
154 template <
class SCHEME>
155 void SignatureKnownAnswerTest(
const char *key,
const char *message,
const char *signature, SCHEME *dummy = NULL)
158 typename SCHEME::Verifier verifier(signer);
166 comparison.ChannelMessageSeriesEnd(
"0");
167 comparison.ChannelMessageSeriesEnd(
"1");
169 VerifierFilter verifierFilter(verifier, NULL, VerifierFilter::SIGNATURE_AT_BEGIN | VerifierFilter::THROW_EXCEPTION);
179 const char *testMessage =
"test message";
180 std::string ciphertext, decrypted;
190 if (ciphertext == testMessage)
201 if (decrypted != testMessage)
222 new VerifierFilter(verifier, NULL, VerifierFilter::THROW_EXCEPTION),
231 template <
class SCHEME>
232 void SignaturePairwiseConsistencyTest(
const char *key, SCHEME *dummy = NULL)
235 typename SCHEME::Verifier verifier(signer);
237 SignaturePairwiseConsistencyTest(signer, verifier);
242 byte key[] = {0x47, 0x1E, 0x33, 0x96, 0x65, 0xB1, 0x6A, 0xED, 0x0B, 0xF8, 0x6B, 0xFD, 0x01, 0x65, 0x05, 0xCC};
246 bool IntegrityCheckModule(
const char *moduleFilename,
const byte *expectedModuleMac,
SecByteBlock *pActualMac,
unsigned long *pMacFileLocation)
248 std::auto_ptr<MessageAuthenticationCode> mac(NewIntegrityCheckingMAC());
249 unsigned int macSize = mac->DigestSize();
252 SecByteBlock &actualMac = pActualMac ? *pActualMac : tempMac;
253 actualMac.
resize(macSize);
255 unsigned long tempLocation;
256 unsigned long &macFileLocation = pMacFileLocation ? *pMacFileLocation : tempLocation;
261 std::ifstream moduleStream;
263 #ifdef CRYPTOPP_WIN32_AVAILABLE
266 char moduleFilenameBuf[MAX_PATH] =
"";
267 if (moduleFilename == NULL)
269 #if (_MSC_VER >= 1400 && !defined(_STLPORT_VERSION)) // ifstream doesn't support wide filename on other compilers
270 wchar_t wideModuleFilename[MAX_PATH];
271 if (GetModuleFileNameW(s_hModule, wideModuleFilename, MAX_PATH) > 0)
273 moduleStream.open(wideModuleFilename, std::ios::in | std::ios::binary);
274 h = GetModuleHandleW(wideModuleFilename);
279 GetModuleFileNameA(s_hModule, moduleFilenameBuf, MAX_PATH);
280 moduleFilename = moduleFilenameBuf;
284 if (moduleFilename != NULL)
286 moduleStream.open(moduleFilename, std::ios::in | std::ios::binary);
287 #ifdef CRYPTOPP_WIN32_AVAILABLE
288 h = GetModuleHandleA(moduleFilename);
289 moduleFilename = NULL;
296 #ifdef CRYPTOPP_WIN32_AVAILABLE
297 OutputDebugString(
"Crypto++ DLL integrity check failed. Cannot open file for reading.");
303 #ifdef CRYPTOPP_WIN32_AVAILABLE
305 const byte *memBase = (
const byte *)h;
306 const IMAGE_DOS_HEADER *ph = (IMAGE_DOS_HEADER *)memBase;
307 const IMAGE_NT_HEADERS *phnt = (IMAGE_NT_HEADERS *)(memBase + ph->e_lfanew);
308 const IMAGE_SECTION_HEADER *phs = IMAGE_FIRST_SECTION(phnt);
309 DWORD nSections = phnt->FileHeader.NumberOfSections;
310 size_t currentFilePos = 0;
312 size_t checksumPos = (byte *)&phnt->OptionalHeader.CheckSum - memBase;
313 size_t checksumSize =
sizeof(phnt->OptionalHeader.CheckSum);
314 size_t certificateTableDirectoryPos = (byte *)&phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY] - memBase;
315 size_t certificateTableDirectorySize =
sizeof(phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]);
316 size_t certificateTablePos = phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress;
317 size_t certificateTableSize = phnt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size;
319 verifier.AddRangeToSkip(0, checksumPos, checksumSize);
320 verifier.AddRangeToSkip(0, certificateTableDirectoryPos, certificateTableDirectorySize);
321 verifier.AddRangeToSkip(0, certificateTablePos, certificateTableSize);
325 switch (phs->Characteristics)
329 case IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ:
330 case IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ:
331 unsigned int sectionSize = STDMIN(phs->SizeOfRawData, phs->Misc.VirtualSize);
332 const byte *sectionMemStart = memBase + phs->VirtualAddress;
333 unsigned int sectionFileStart = phs->PointerToRawData;
334 size_t subSectionStart = 0, nextSubSectionStart;
338 const byte *subSectionMemStart = sectionMemStart + subSectionStart;
339 size_t subSectionFileStart = sectionFileStart + subSectionStart;
340 size_t subSectionSize = sectionSize - subSectionStart;
341 nextSubSectionStart = 0;
343 unsigned int entriesToReadFromDisk[] = {IMAGE_DIRECTORY_ENTRY_IMPORT, IMAGE_DIRECTORY_ENTRY_IAT};
344 for (
unsigned int i=0; i<
sizeof(entriesToReadFromDisk)/
sizeof(entriesToReadFromDisk[0]); i++)
346 const IMAGE_DATA_DIRECTORY &entry = phnt->OptionalHeader.DataDirectory[entriesToReadFromDisk[i]];
347 const byte *entryMemStart = memBase + entry.VirtualAddress;
348 if (subSectionMemStart <= entryMemStart && entryMemStart < subSectionMemStart + subSectionSize)
350 subSectionSize = entryMemStart - subSectionMemStart;
351 nextSubSectionStart = entryMemStart - sectionMemStart + entry.Size;
355 #if defined(_MSC_VER) && _MSC_VER >= 1400
357 if (IsDebuggerPresent())
359 if (subSectionMemStart <= (byte *)&_CRT_DEBUGGER_HOOK && (byte *)&_CRT_DEBUGGER_HOOK < subSectionMemStart + subSectionSize)
361 subSectionSize = (byte *)&_CRT_DEBUGGER_HOOK - subSectionMemStart;
362 nextSubSectionStart = (byte *)&_CRT_DEBUGGER_HOOK - sectionMemStart + 1;
367 if (subSectionMemStart <= expectedModuleMac && expectedModuleMac < subSectionMemStart + subSectionSize)
370 macFileLocation = (
unsigned long)(subSectionFileStart + (expectedModuleMac - subSectionMemStart));
371 verifier.AddRangeToSkip(0, macFileLocation, macSize);
374 file.TransferTo(verifier, subSectionFileStart - currentFilePos);
375 verifier.Put(subSectionMemStart, subSectionSize);
376 file.Skip(subSectionSize);
377 currentFilePos = subSectionFileStart + subSectionSize;
378 subSectionStart = nextSubSectionStart;
379 }
while (nextSubSectionStart != 0);
384 file.TransferAllTo(verifier);
386 #ifdef CRYPTOPP_WIN32_AVAILABLE
389 if (!VerifyBufsEqual(expectedModuleMac, actualMac, macSize))
391 OutputDebugString(
"In memory integrity check failed. This may be caused by debug breakpoints or DLL relocation.\n");
392 moduleStream.clear();
393 moduleStream.seekg(0);
396 verifier.AddRangeToSkip(0, checksumPos, checksumSize);
397 verifier.AddRangeToSkip(0, certificateTableDirectoryPos, certificateTableDirectorySize);
398 verifier.AddRangeToSkip(0, certificateTablePos, certificateTableSize);
399 verifier.AddRangeToSkip(0, macFileLocation, macSize);
400 FileStore(moduleStream).TransferAllTo(verifier);
404 if (VerifyBufsEqual(expectedModuleMac, actualMac, macSize))
407 #ifdef CRYPTOPP_WIN32_AVAILABLE
410 OutputDebugString(((
"Crypto++ DLL integrity check failed. Actual MAC is: " + hexMac) +
"\n").c_str());
417 g_powerUpSelfTestStatus = POWER_UP_SELF_TEST_NOT_DONE;
418 SetPowerUpSelfTestInProgressOnThisThread(
true);
424 if (!IntegrityCheckModule(moduleFilename, expectedModuleMac, &g_actualMac, &g_macFileLocation))
430 X917RNG_KnownAnswerTest<AES>(
431 "2b7e151628aed2a6abf7158809cf4f3c",
432 "000102030405060708090a0b0c0d0e0f",
433 "00000000000000000000000000000001",
434 "D176EDD27493B0395F4D10546232B0693DC7061C03C3A554F09CECF6F6B46D945A");
436 SymmetricEncryptionKnownAnswerTest<DES_EDE3>(
437 "385D7189A5C3D485E1370AA5D408082B5CCCCB5E19F2D90E",
439 "6E1BD7C6120947A464A6AAB293A0F89A563D8D40D3461B68",
440 "64EAAD4ACBB9CEAD6C7615E7C7E4792FE587D91F20C7D2F4",
441 "6235A461AFD312973E3B4F7AA7D23E34E03371F8E8C376C9",
442 "E26BA806A59B0330DE40CA38E77A3E494BE2B212F6DD624B",
443 "E26BA806A59B03307DE2BCC25A08BA40A8BA335F5D604C62",
444 "E26BA806A59B03303C62C2EFF32D3ACDD5D5F35EBCC53371");
446 SymmetricEncryptionKnownAnswerTest<SKIPJACK>(
447 "1555E5531C3A169B2D65",
449 "00AFA48E9621E52E8CBDA312660184EDDB1F33D9DACDA8DA",
450 "DBEC73562EFCAEB56204EB8AE9557EBF77473FBB52D17CD1",
451 "0C7B0B74E21F99B8F2C8DF37879F6C044967F42A796DCA8B",
452 "79FDDA9724E36CC2E023E9A5C717A8A8A7FDA465CADCBF63",
453 "79FDDA9724E36CC26CACBD83C1ABC06EAF5B249BE5B1E040",
454 "79FDDA9724E36CC211B0AEC607B95A96BCDA318440B82F49");
456 SymmetricEncryptionKnownAnswerTest<AES>(
457 "2b7e151628aed2a6abf7158809cf4f3c",
458 "000102030405060708090a0b0c0d0e0f",
459 "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710",
460 "3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4",
461 "7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7",
462 "3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6",
463 "3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e",
466 SymmetricEncryptionKnownAnswerTest<AES>(
467 "2b7e151628aed2a6abf7158809cf4f3c",
468 "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
469 "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710",
474 "874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee");
477 SecureHashKnownAnswerTest<SHA1>(
479 "A9993E364706816ABA3E25717850C26C9CD0D89D");
481 SecureHashKnownAnswerTest<SHA224>(
483 "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7");
485 SecureHashKnownAnswerTest<SHA256>(
487 "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad");
489 SecureHashKnownAnswerTest<SHA384>(
491 "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7");
493 SecureHashKnownAnswerTest<SHA512>(
495 "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");
497 MAC_KnownAnswerTest<HMAC<SHA1> >(
498 "303132333435363738393a3b3c3d3e3f40414243",
500 "0922d3405faa3d194f82a45830737d5cc6c75d24");
502 const char *keyRSA1 =
503 "30820150020100300d06092a864886f70d01010105000482013a3082013602010002400a66791dc6988168de7ab77419bb7fb0"
504 "c001c62710270075142942e19a8d8c51d053b3e3782a1de5dc5af4ebe99468170114a1dfe67cdc9a9af55d655620bbab0203010001"
505 "02400123c5b61ba36edb1d3679904199a89ea80c09b9122e1400c09adcf7784676d01d23356a7d44d6bd8bd50e94bfc723fa"
506 "87d8862b75177691c11d757692df8881022033d48445c859e52340de704bcdda065fbb4058d740bd1d67d29e9c146c11cf61"
507 "0220335e8408866b0fd38dc7002d3f972c67389a65d5d8306566d5c4f2a5aa52628b0220045ec90071525325d3d46db79695e9af"
508 "acc4523964360e02b119baa366316241022015eb327360c7b60d12e5e2d16bdcd97981d17fba6b70db13b20b436e24eada590220"
509 "2ca6366d72781dfa24d34a9a24cbc2ae927a9958af426563ff63fb11658a461d";
511 const char *keyRSA2 =
512 "30820273020100300D06092A864886F70D01010105000482025D3082025902010002818100D40AF9"
513 "A2B713034249E5780056D70FC7DE75D76E44565AA6A6B8ED9646F3C19F9E254D72D7DE6E49DB2264"
514 "0C1D05AB9E2A5F901D8F3FE1F7AE02CEE2ECCE54A40ABAE55A004692752E70725AEEE7CDEA67628A"
515 "82A9239B4AB660C2BC56D9F01E90CBAAB9BF0FC8E17173CEFC5709A29391A7DDF3E0B758691AAF30"
516 "725B292F4F020111027F18C0BA087D082C45D75D3594E0767E4820818EB35612B80CEAB8C880ACA5"
517 "44B6876DFFEF85A576C0D45B551AFAA1FD63209CD745DF75C5A0F0B580296EA466CD0338207E4752"
518 "FF4E7DB724D8AE18CE5CF4153BB94C27869FBB50E64F02546E4B02997A0B8623E64017CC770759C6"
519 "695DB649EEFD829D688D441BCC4E7348F1024100EF86DD7AF3F32CDE8A9F6564E43A559A0C9F8BAD"
520 "36CC25330548B347AC158A345631FA90F7B873C36EFFAE2F7823227A3F580B5DD18304D5932751E7"
521 "43E9234F024100E2A039854B55688740E32A51DF4AF88613D91A371CF8DDD95D780A89D7CF2119A9"
522 "54F1AC0F3DCDB2F6959926E6D9D37D8BC07A4C634DE6F16315BD5F0DAC340102407ECEEDB9903572"
523 "1B76909F174BA6698DCA72953D957B22C0A871C8531EDE3A1BB52984A719BC010D1CA57A555DB83F"
524 "6DE54CBAB932AEC652F38D497A6F3F30CF024100854F30E4FF232E6DADB2CD99926855F484255AB7"
525 "01FBCDCB27EC426F33A7046972AA700ADBCA008763DF87440F52F4E070531AC385B55AAC1C2AE7DD"
526 "8F9278F1024100C313F4AF9E4A9DE1253C21080CE524251560C111550772FD08690F13FBE658342E"
527 "BD2D41C9DCB12374E871B1839E26CAE252E1AE3DAAD5F1EE1F42B4D0EE7581";
529 SignatureKnownAnswerTest<RSASS<PKCS1v15, SHA1> >(
531 "Everyone gets Friday off.",
532 "0610761F95FFD1B8F29DA34212947EC2AA0E358866A722F03CC3C41487ADC604A48FF54F5C6BEDB9FB7BD59F82D6E55D8F3174BA361B2214B2D74E8825E04E81");
534 SignatureKnownAnswerTest<RSASS_ISO<SHA1> >(
537 "32F6BA41C8930DE71EE67F2627172CC539EDE04267FDE03AC295E3C50311F26C3B275D3AF513AC96"
538 "8EE493BAB7DA3A754661D1A7C4A0D1A2B7EE8B313AACD8CB8BFBC5C15EFB0EF15C86A9334A1E87AD"
539 "291EB961B5CA0E84930429B28780816AA94F96FC2367B71E2D2E4866FA966795B147F00600E5207E"
542 SignaturePairwiseConsistencyTest<DSA>(
543 "3082014A0201003082012B06072A8648CE3804013082011E02818100F468699A6F6EBCC0120D3B34C8E007F125EC7D81F763B8D0F33869AE3BD6B9F2ECCC7DF34DF84C0307449E9B85D30D57194BCCEB310F48141914DD13A077AAF9B624A6CBE666BBA1D7EBEA95B5BA6F54417FD5D4E4220C601E071D316A24EA814E8B0122DBF47EE8AEEFD319EBB01DD95683F10DBB4FEB023F8262A07EAEB7FD02150082AD4E034DA6EEACDFDAE68C36F2BAD614F9E53B02818071AAF73361A26081529F7D84078ADAFCA48E031DB54AD57FB1A833ADBD8672328AABAA0C756247998D7A5B10DACA359D231332CE8120B483A784FE07D46EEBFF0D7D374A10691F78653E6DC29E27CCB1B174923960DFE5B959B919B2C3816C19251832AFD8E35D810E598F82877ABF7D40A041565168BD7F0E21E3FE2A8D8C1C0416021426EBA66E846E755169F84A1DA981D86502405DDF");
545 SignaturePairwiseConsistencyTest<ECDSA<EC2N, SHA1> >(
546 "302D020100301006072A8648CE3D020106052B8104000404163014020101040F0070337065E1E196980A9D00E37211");
548 SignaturePairwiseConsistencyTest<ECDSA<ECP, SHA1> >(
549 "3039020100301306072A8648CE3D020106082A8648CE3D030101041F301D02010104182BB8A13C8B867010BD9471D9E81FDB01ABD0538C64D6249A");
551 SignaturePairwiseConsistencyTest<RSASS<PSS, SHA1> >(keyRSA1);
555 g_powerUpSelfTestStatus = POWER_UP_SELF_TEST_FAILED;
559 g_powerUpSelfTestStatus = POWER_UP_SELF_TEST_PASSED;
562 SetPowerUpSelfTestInProgressOnThisThread(
false);
566 #ifdef CRYPTOPP_WIN32_AVAILABLE
577 throw NotImplemented(
"DoDllPowerUpSelfTest() only available on Windows");
580 #endif // #ifdef CRYPTOPP_WIN32_AVAILABLE
584 #ifdef CRYPTOPP_WIN32_AVAILABLE
587 BOOL APIENTRY DllMain(HANDLE hModule,
588 DWORD ul_reason_for_call,
591 if (ul_reason_for_call == DLL_PROCESS_ATTACH)
593 CryptoPP::s_hModule = (HMODULE)hModule;
599 #endif // #ifdef CRYPTOPP_WIN32_AVAILABLE
601 #endif // #ifndef CRYPTOPP_IMPORTS
interface for message authentication codes
Filter Wrapper for PK_Verifier.
void resize(size_type newSize)
change size and preserve contents
Converts given data to base 16.
interface for public-key signers
interface for public-key encryptors
Decode base 16 data back to bytes.
Filter Wrapper for PK_Signer.
interface for random number generators
Append input to a string object.
string-based implementation of Source interface
Route input to different and/or multiple channels based on channel ID.
bool FIPS_140_2_ComplianceEnabled()
returns whether FIPS 140-2 compliance features were enabled at compile time
Copy input to a memory buffer.
interface for public-key decryptors
exception thrown by a class if a non-implemented method is called
Filter Wrapper for HashTransformation.
RNG-based implementation of Source interface.
exception thrown when a crypto algorithm is used after a self test fails
virtual std::string AlgorithmName() const
returns name of this algorithm, not universally implemented yet
proxy for the filter created by PK_Decryptor::CreateDecryptionFilter
void DoDllPowerUpSelfTest()
perform the power-up self test using the filename of this DLL and the embedded module MAC ...
RNG from ANSI X9.17 Appendix C, seeded using an OS provided RNG.
Redirect input to another BufferedTransformation without owning it.
file-based implementation of Store interface
const char * OutputBuffer()
ByteArrayParameter.
proxy for the filter created by PK_Encryptor::CreateEncryptionFilter
interface for public-key signature verifiers
void DoPowerUpSelfTest(const char *moduleFilename, const byte *expectedModuleMac)
perform the power-up self test, and set the self test status
PowerUpSelfTestStatus
enum values representing status of the power-up self test
measure how many byte and messages pass through, also serves as valve
A filter that checks messages on two channels for equality.