in kmscng/main/bridge.cc [163:202]
absl::Status OpenKey(__inout NCRYPT_PROV_HANDLE hProvider,
__out NCRYPT_KEY_HANDLE* phKey, __in LPCWSTR pszKeyName,
__in_opt DWORD dwLegacyKeySpec, __in DWORD dwFlags) {
LOG_IF(INFO, std::getenv(kVerboseLoggingEnvVariable))
<< "OpenKey invoked\n"
<< "Provider: " << hProvider << "\n"
<< "Key name: " << WideToString(std::wstring(pszKeyName)) << "\n"
<< "LegacyKeySpec: " << dwLegacyKeySpec << "\n"
<< "Flags: " << dwFlags << "\n\n";
if (hProvider == 0) {
return NewInvalidArgumentError("The provider handle cannot be null",
NTE_INVALID_HANDLE, SOURCE_LOCATION);
}
if (phKey == nullptr) {
return NewInvalidArgumentError("the key handle cannot be null",
NTE_INVALID_PARAMETER, SOURCE_LOCATION);
}
if (!pszKeyName) {
return NewInvalidArgumentError("the key name cannot be null",
NTE_INVALID_PARAMETER, SOURCE_LOCATION);
}
if (dwLegacyKeySpec != AT_KEYEXCHANGE && dwLegacyKeySpec != AT_SIGNATURE) {
return NewInvalidArgumentError(
absl::StrFormat("unsupported legacy key spec specified: %u",
dwLegacyKeySpec),
NTE_INVALID_PARAMETER, SOURCE_LOCATION);
}
dwFlags = dwFlags & ~NCRYPT_SILENT_FLAG;
dwFlags = dwFlags & ~NCRYPT_MACHINE_KEY_FLAG;
if (dwFlags != 0) {
return NewInvalidArgumentError(
absl::StrFormat("unsupported flag specified: %u", dwFlags),
NTE_BAD_FLAGS, SOURCE_LOCATION);
}
ASSIGN_OR_RETURN(Object * object,
Object::New(hProvider, WideToString(pszKeyName)));
*phKey = reinterpret_cast<NCRYPT_KEY_HANDLE>(object);
return absl::OkStatus();
}