MCPcopy Create free account
hub / github.com/ValveSoftware/GameNetworkingSockets / Init

Method Init

src/common/crypto_bcrypt.cpp:56–114  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

54} BCryptContext;
55
56void CCrypto::Init()
57{
58 // Init one time init. This is threadsafe if we assume C++11 compliance
59 static bool once = [](){
60 ULONG garbage;
61
62 VPROF_BUDGET( "CCrypto::Init", VPROF_BUDGETGROUP_ENCRYPTION );
63
64 BCryptOpenAlgorithmProvider(
65 &hAlgRandom,
66 BCRYPT_RNG_ALGORITHM,
67 nullptr,
68 0
69 );
70 AssertFatal( hAlgRandom != INVALID_HANDLE_VALUE );
71
72 BCryptOpenAlgorithmProvider(
73 &hAlgSHA256,
74 BCRYPT_SHA256_ALGORITHM,
75 nullptr,
76 0
77 );
78 AssertFatal( hAlgSHA256 != INVALID_HANDLE_VALUE );
79 BCryptGetProperty(hAlgSHA256, BCRYPT_OBJECT_LENGTH, (PUCHAR)&cbBufferSHA256, sizeof(cbBufferSHA256), &garbage, 0 );
80 AssertFatal( cbBufferSHA256 > 0 && cbBufferSHA256 < 16 * 1024 * 1024 );
81
82 BCryptOpenAlgorithmProvider(
83 &hAlgHMACSHA256,
84 BCRYPT_SHA256_ALGORITHM,
85 nullptr,
86 BCRYPT_ALG_HANDLE_HMAC_FLAG
87 );
88 AssertFatal( hAlgHMACSHA256 != INVALID_HANDLE_VALUE );
89 BCryptGetProperty(hAlgHMACSHA256, BCRYPT_OBJECT_LENGTH, (PUCHAR)&cbBufferHMACSHA256, sizeof(cbBufferHMACSHA256), &garbage, 0 );
90 AssertFatal( cbBufferHMACSHA256 > 0 && cbBufferHMACSHA256 < 16 * 1024 * 1024 );
91
92 BCryptOpenAlgorithmProvider(
93 &hAlgHMACSHA1,
94 BCRYPT_SHA1_ALGORITHM,
95 nullptr,
96 BCRYPT_ALG_HANDLE_HMAC_FLAG
97 );
98 AssertFatal( hAlgHMACSHA1 != INVALID_HANDLE_VALUE );
99 BCryptGetProperty(hAlgHMACSHA1, BCRYPT_OBJECT_LENGTH, (PUCHAR)&cbBufferHMACSHA1, sizeof(cbBufferHMACSHA1), &garbage, 0 );
100 AssertFatal( cbBufferHMACSHA1 > 0 && cbBufferHMACSHA1 < 16 * 1024 * 1024 );
101
102 BCryptOpenAlgorithmProvider(
103 &hAlgMD5,
104 BCRYPT_MD5_ALGORITHM,
105 nullptr,
106 0
107 );
108 AssertFatal( hAlgMD5 != INVALID_HANDLE_VALUE );
109 BCryptGetProperty(hAlgMD5, BCRYPT_OBJECT_LENGTH, (PUCHAR)&cbBufferMD5, sizeof(cbBufferMD5), &garbage, 0 );
110 AssertFatal( cbBufferMD5 > 0 && cbBufferMD5 < 16 * 1024 * 1024 );
111
112 return true;
113 }();

Calls

no outgoing calls