Move Base64Url helper internal methods from KeyVault to Azure Core. (#2528)
* Move Base64Url helper internal methods from KeyVault to Azure Core. * Run clang format.
This commit is contained in:
parent
773beffd64
commit
a6f3b530d5
@ -9,6 +9,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@ -45,4 +47,51 @@ namespace Azure { namespace Core {
|
||||
static std::vector<uint8_t> Base64Decode(const std::string& text);
|
||||
};
|
||||
|
||||
namespace _internal {
|
||||
|
||||
/**
|
||||
* @brief Provides conversion methods for Base64URL.
|
||||
*
|
||||
*/
|
||||
class Base64Url final {
|
||||
|
||||
public:
|
||||
static std::string Base64UrlEncode(const std::vector<uint8_t>& 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<uint8_t> 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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -1,60 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
/**
|
||||
* @brief Provides helper method for Base64URL.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
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<uint8_t>& 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<uint8_t> 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
|
||||
@ -1,11 +1,11 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include "azure/keyvault/keys/cryptography/decrypt_parameters.hpp"
|
||||
#include <azure/core/base64.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
#include "azure/keyvault/keys/cryptography/decrypt_parameters.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -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();
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/decrypt_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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 {
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp"
|
||||
#include <azure/core/base64.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
#include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -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();
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/encrypt_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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 {
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include "../private/key_sign_parameters.hpp"
|
||||
#include <azure/core/base64.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
#include "../private/key_sign_parameters.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include "../private/key_verify_parameters.hpp"
|
||||
#include <azure/core/base64.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
#include "../private/key_verify_parameters.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -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);
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/encrypt_parameters.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/sign_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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 {
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/unwrap_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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 {
|
||||
|
||||
@ -7,14 +7,11 @@
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/verify_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace Azure::Core::Json::_internal;
|
||||
using namespace Azure::Security::KeyVault::Keys::_detail;
|
||||
using namespace Azure::Security::KeyVault::_internal;
|
||||
|
||||
namespace Azure {
|
||||
namespace Security {
|
||||
|
||||
@ -1,20 +1,19 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
|
||||
#include "../private/cryptography_serializers.hpp"
|
||||
#include "../private/key_constants.hpp"
|
||||
#include "azure/keyvault/keys/cryptography/wrap_result.hpp"
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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 {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json_optional.hpp>
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include "azure/keyvault/keys/json_web_key.hpp"
|
||||
#include "azure/keyvault/keys/key_curve_name.hpp"
|
||||
@ -14,8 +14,8 @@
|
||||
#include <vector>
|
||||
|
||||
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(
|
||||
|
||||
@ -1,19 +1,18 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/internal/json/json.hpp>
|
||||
#include <azure/core/internal/json/json_optional.hpp>
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
|
||||
#include "private/key_backup.hpp"
|
||||
#include "private/key_constants.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
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
|
||||
{
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <azure/core/base64.hpp>
|
||||
#include <azure/core/exception.hpp>
|
||||
|
||||
#include <azure/keyvault/common/internal/base64url.hpp>
|
||||
#include <azure/keyvault/key_vault_keys.hpp>
|
||||
|
||||
#include "key_client_base_test.hpp"
|
||||
@ -17,6 +17,7 @@
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
using namespace Azure::Core::_internal;
|
||||
using namespace Azure::Security::KeyVault::Keys::Test;
|
||||
using namespace Azure::Security::KeyVault::Keys;
|
||||
using namespace Azure::Security::KeyVault::_internal;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user