From a6f3b530d5619949fa0fc6394a8489e754ece7eb Mon Sep 17 00:00:00 2001 From: Ahson Khan Date: Thu, 1 Jul 2021 12:24:38 -0700 Subject: [PATCH] Move Base64Url helper internal methods from KeyVault to Azure Core. (#2528) * Move Base64Url helper internal methods from KeyVault to Azure Core. * Run clang format. --- sdk/core/azure-core/inc/azure/core/base64.hpp | 49 +++++++++++++++ .../CMakeLists.txt | 1 - .../keyvault/common/internal/base64url.hpp | 60 ------------------- .../src/cryptography/decrypt_parameters.cpp | 8 +-- .../src/cryptography/decrypt_result.cpp | 5 +- .../src/cryptography/encrypt_parameters.cpp | 8 +-- .../src/cryptography/encrypt_result.cpp | 5 +- .../src/cryptography/key_sign_parameters.cpp | 8 +-- .../cryptography/key_verify_parameters.cpp | 8 +-- .../src/cryptography/key_wrap_parameters.cpp | 6 +- .../src/cryptography/sign_result.cpp | 5 +- .../src/cryptography/unwrap_result.cpp | 5 +- .../src/cryptography/verify_result.cpp | 3 - .../src/cryptography/wrap_result.cpp | 5 +- .../src/json_web_key.cpp | 4 +- .../src/key_backup.cpp | 5 +- .../test/ut/key_client_import_test_live.cpp | 3 +- 17 files changed, 84 insertions(+), 104 deletions(-) delete mode 100644 sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/base64url.hpp diff --git a/sdk/core/azure-core/inc/azure/core/base64.hpp b/sdk/core/azure-core/inc/azure/core/base64.hpp index 0fbf5e84d..689736ab5 100644 --- a/sdk/core/azure-core/inc/azure/core/base64.hpp +++ b/sdk/core/azure-core/inc/azure/core/base64.hpp @@ -9,6 +9,8 @@ #pragma once +#include +#include #include #include @@ -45,4 +47,51 @@ namespace Azure { namespace Core { static std::vector Base64Decode(const std::string& text); }; + namespace _internal { + + /** + * @brief Provides conversion methods for Base64URL. + * + */ + class Base64Url final { + + public: + static std::string Base64UrlEncode(const std::vector& data) + { + auto base64 = Azure::Core::Convert::Base64Encode(data); + // update to base64url + auto trail = base64.find('='); + if (trail != std::string::npos) + { + base64 = base64.substr(0, trail); + } + std::replace(base64.begin(), base64.end(), '+', '-'); + std::replace(base64.begin(), base64.end(), '/', '_'); + return base64; + } + + static std::vector Base64UrlDecode(const std::string& text) + { + std::string base64url(text); + // base64url to base64 + std::replace(base64url.begin(), base64url.end(), '-', '+'); + std::replace(base64url.begin(), base64url.end(), '_', '/'); + switch (base64url.size() % 4) + { + case 0: + break; + case 2: + base64url.append("=="); + break; + case 3: + base64url.append("="); + break; + default: + throw std::invalid_argument("Unexpected Base64URL encoding in the HTTP response."); + } + return Azure::Core::Convert::Base64Decode(base64url); + } + }; + } // namespace _internal + }} // namespace Azure::Core diff --git a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt index d96128bd3..615f05be4 100644 --- a/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt +++ b/sdk/keyvault/azure-security-keyvault-common/CMakeLists.txt @@ -28,7 +28,6 @@ endif() set( AZURE_KEYVAULT_COMMON_HEADER - inc/azure/keyvault/common/internal/base64url.hpp inc/azure/keyvault/common/internal/keyvault_pipeline.hpp inc/azure/keyvault/common/internal/single_page.hpp inc/azure/keyvault/common/internal/sha_hash.hpp diff --git a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/base64url.hpp b/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/base64url.hpp deleted file mode 100644 index 8a83e8df3..000000000 --- a/sdk/keyvault/azure-security-keyvault-common/inc/azure/keyvault/common/internal/base64url.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// SPDX-License-Identifier: MIT - -/** - * @brief Provides helper method for Base64URL. - * - */ - -#pragma once - -#include -#include -#include -#include - -namespace Azure { namespace Security { namespace KeyVault { namespace _internal { - - /** - * @brief Provides conversion methods for Base64URL. - * - */ - struct Base64Url final - { - static inline std::string Base64UrlEncode(const std::vector& data) - { - auto base64 = Azure::Core::Convert::Base64Encode(data); - // update to base64url - auto trail = base64.find('='); - if (trail != std::string::npos) - { - base64 = base64.substr(0, trail); - } - std::replace(base64.begin(), base64.end(), '+', '-'); - std::replace(base64.begin(), base64.end(), '/', '_'); - return base64; - } - - static inline std::vector Base64UrlDecode(const std::string& text) - { - std::string base64url(text); - // base64url to base64 - std::replace(base64url.begin(), base64url.end(), '-', '+'); - std::replace(base64url.begin(), base64url.end(), '_', '/'); - switch (base64url.size() % 4) - { - case 0: - break; - case 2: - base64url.append("=="); - break; - case 3: - base64url.append("="); - break; - default: - throw std::invalid_argument("Unexpected Base64URL encoding in the HTTP response."); - } - return Azure::Core::Convert::Base64Decode(base64url); - } - }; -}}}} // namespace Azure::Security::KeyVault::_internal diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_parameters.cpp index 234f1bb5f..eae7ce898 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_parameters.cpp @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT -#include "azure/keyvault/keys/cryptography/decrypt_parameters.hpp" +#include + #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" - -#include +#include "azure/keyvault/keys/cryptography/decrypt_parameters.hpp" #include #include @@ -22,7 +22,7 @@ namespace Azure { Azure::Core::Json::_internal::json payload; using namespace Azure::Security::KeyVault::Keys::_detail; - using namespace Azure::Security::KeyVault::_internal; + using namespace Azure::Core::_internal; payload[AlgorithmValue] = parameters.Algorithm.ToString(); payload[ValueParameterValue] = Base64Url::Base64UrlEncode(parameters.Ciphertext); auto& iv = parameters.GetIv(); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_result.cpp index 77f7d1abc..7edd6112b 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/decrypt_result.cpp @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/decrypt_result.hpp" -#include - #include #include +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_parameters.cpp index eeca8898d..2cd713f3c 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_parameters.cpp @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT -#include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp" +#include + #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" - -#include +#include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp" #include #include @@ -22,7 +22,7 @@ namespace Azure { Azure::Core::Json::_internal::json payload; using namespace Azure::Security::KeyVault::Keys::_detail; - using namespace Azure::Security::KeyVault::_internal; + using namespace Azure::Core::_internal; payload[AlgorithmValue] = parameters.Algorithm.ToString(); payload[ValueParameterValue] = Base64Url::Base64UrlEncode(parameters.Plaintext); auto& iv = parameters.GetIv(); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_result.cpp index 34cfc80aa..d5a7ed357 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/encrypt_result.cpp @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/encrypt_result.hpp" -#include - #include #include +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_sign_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_sign_parameters.cpp index 9ae3d6941..6e3581169 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_sign_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_sign_parameters.cpp @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT -#include "../private/key_sign_parameters.hpp" +#include + #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" - -#include +#include "../private/key_sign_parameters.hpp" #include #include @@ -23,7 +23,7 @@ namespace Azure { Azure::Core::Json::_internal::json payload; using namespace Azure::Security::KeyVault::Keys::_detail; - using namespace Azure::Security::KeyVault::_internal; + using namespace Azure::Core::_internal; payload[AlgorithmValue] = parameters.Algorithm; payload[ValueParameterValue] = Base64Url::Base64UrlEncode(parameters.Digest); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_verify_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_verify_parameters.cpp index 6a6a77c6c..2b55efc33 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_verify_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_verify_parameters.cpp @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT -#include "../private/key_verify_parameters.hpp" +#include + #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" - -#include +#include "../private/key_verify_parameters.hpp" #include #include @@ -23,7 +23,7 @@ namespace Azure { Azure::Core::Json::_internal::json payload; using namespace Azure::Security::KeyVault::Keys::_detail; - using namespace Azure::Security::KeyVault::_internal; + using namespace Azure::Core::_internal; payload[AlgorithmValue] = parameters.Algorithm; payload[ValueParameterValue] = Base64Url::Base64UrlEncode(parameters.Signature); payload[DigestValue] = Base64Url::Base64UrlEncode(parameters.Digest); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_wrap_parameters.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_wrap_parameters.cpp index 28ff079e8..6880aa1cf 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_wrap_parameters.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/key_wrap_parameters.cpp @@ -1,12 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include + #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp" -#include - #include #include @@ -23,7 +23,7 @@ namespace Azure { Azure::Core::Json::_internal::json payload; using namespace Azure::Security::KeyVault::Keys::_detail; - using namespace Azure::Security::KeyVault::_internal; + using namespace Azure::Core::_internal; payload[AlgorithmValue] = parameters.Algorithm; payload[ValueParameterValue] = Base64Url::Base64UrlEncode(parameters.Key); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/sign_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/sign_result.cpp index 1e29bbe88..30a8e9dde 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/sign_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/sign_result.cpp @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/sign_result.hpp" -#include - #include #include +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/unwrap_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/unwrap_result.cpp index aa7946eec..f976e8855 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/unwrap_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/unwrap_result.cpp @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/unwrap_result.hpp" -#include - #include #include +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/verify_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/verify_result.cpp index 6df69ba84..034bd8375 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/verify_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/verify_result.cpp @@ -7,14 +7,11 @@ #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/verify_result.hpp" -#include - #include #include using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/wrap_result.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/wrap_result.cpp index db3662931..f47bb2489 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/wrap_result.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/cryptography/wrap_result.cpp @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include "../private/cryptography_serializers.hpp" #include "../private/key_constants.hpp" #include "azure/keyvault/keys/cryptography/wrap_result.hpp" -#include - #include #include +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; using namespace Azure::Security::KeyVault::Keys::_detail; -using namespace Azure::Security::KeyVault::_internal; namespace Azure { namespace Security { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/json_web_key.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/json_web_key.cpp index 75c928cbb..8aa110b83 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/json_web_key.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/json_web_key.cpp @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include -#include #include "azure/keyvault/keys/json_web_key.hpp" #include "azure/keyvault/keys/key_curve_name.hpp" @@ -14,8 +14,8 @@ #include using namespace Azure::Security::KeyVault::Keys; +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; -using namespace Azure::Security::KeyVault::_internal; namespace { void ParseStringOperationsToKeyOperations( diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/key_backup.cpp b/sdk/keyvault/azure-security-keyvault-keys/src/key_backup.cpp index ca983c477..76d1fe916 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/key_backup.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/src/key_backup.cpp @@ -1,19 +1,18 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // SPDX-License-Identifier: MIT +#include #include #include -#include - #include "private/key_backup.hpp" #include "private/key_constants.hpp" #include using namespace Azure::Security::KeyVault::Keys::_detail; +using namespace Azure::Core::_internal; using namespace Azure::Core::Json::_internal; -using namespace Azure::Security::KeyVault::_internal; std::string KeyBackup::Serialize() const { diff --git a/sdk/keyvault/azure-security-keyvault-keys/test/ut/key_client_import_test_live.cpp b/sdk/keyvault/azure-security-keyvault-keys/test/ut/key_client_import_test_live.cpp index b54f8e786..9b487433a 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/test/ut/key_client_import_test_live.cpp +++ b/sdk/keyvault/azure-security-keyvault-keys/test/ut/key_client_import_test_live.cpp @@ -7,9 +7,9 @@ #include "gtest/gtest.h" +#include #include -#include #include #include "key_client_base_test.hpp" @@ -17,6 +17,7 @@ #include #include +using namespace Azure::Core::_internal; using namespace Azure::Security::KeyVault::Keys::Test; using namespace Azure::Security::KeyVault::Keys; using namespace Azure::Security::KeyVault::_internal;