# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

diff --git a/google/cloud/internal/win32/sign_using_sha256.cc b/google/cloud/internal/win32/sign_using_sha256.cc
index 15ecc6e6f9..9595ed9eb3 100644
--- a/google/cloud/internal/win32/sign_using_sha256.cc
+++ b/google/cloud/internal/win32/sign_using_sha256.cc
@@ -99,6 +99,11 @@ StatusOr<std::unique_ptr<std::remove_pointer_t<BCRYPT_KEY_HANDLE>,
                          decltype(&BCryptDestroyKey)>>
 CreateRsaBCryptKey(std::vector<BYTE> buffer) {
   BCRYPT_KEY_HANDLE key_handle;
+  // Workaround missing macros in MinGW-w64:
+  //     https://github.com/mingw-w64/mingw-w64/issues/49
+  #ifndef BCRYPT_RSA_ALG_HANDLE
+  #define BCRYPT_RSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000e1)
+  #endif
   if (BCryptImportKeyPair(BCRYPT_RSA_ALG_HANDLE, nullptr,
                           BCRYPT_RSAPRIVATE_BLOB, &key_handle, buffer.data(),
                           static_cast<DWORD>(buffer.size()),
diff --git a/google/cloud/storage/internal/md5hash.cc b/google/cloud/storage/internal/md5hash.cc
index 00c72e0e5d..7fbd04507f 100644
--- a/google/cloud/storage/internal/md5hash.cc
+++ b/google/cloud/storage/internal/md5hash.cc
@@ -31,6 +31,11 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
 std::vector<std::uint8_t> MD5Hash(absl::string_view payload) {
 #ifdef _WIN32
   std::vector<unsigned char> digest(16);
+  // Workaround missing macros in MinGW-w64:
+  //     https://github.com/mingw-w64/mingw-w64/issues/49
+  #ifndef BCRYPT_MD5_ALG_HANDLE
+  #define BCRYPT_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000021)
+  #endif
   BCryptHash(BCRYPT_MD5_ALG_HANDLE, nullptr, 0,
              reinterpret_cast<PUCHAR>(const_cast<char*>(payload.data())),
              static_cast<ULONG>(payload.size()), digest.data(),
diff --git a/google/cloud/storage/internal/win32/hash_function_impl.cc b/google/cloud/storage/internal/win32/hash_function_impl.cc
index 655c9f0991..07b2937c94 100644
--- a/google/cloud/storage/internal/win32/hash_function_impl.cc
+++ b/google/cloud/storage/internal/win32/hash_function_impl.cc
@@ -33,6 +33,11 @@ using ContextPtr =
 
 ContextPtr CreateMD5HashCtx() {
   BCRYPT_HASH_HANDLE hHash = nullptr;
+  // Workaround missing macros in MinGW-w64:
+  //     https://github.com/mingw-w64/mingw-w64/issues/49
+  #ifndef BCRYPT_MD5_ALG_HANDLE
+  #define BCRYPT_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000021)
+  #endif
   BCryptCreateHash(BCRYPT_MD5_ALG_HANDLE, &hHash, nullptr, 0, nullptr, 0, 0);
   return ContextPtr(hHash);
 }
