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:
Ahson Khan 2021-07-01 12:24:38 -07:00 committed by GitHub
parent 773beffd64
commit a6f3b530d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 84 additions and 104 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -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 {

View File

@ -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();

View File

@ -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 {

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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(

View File

@ -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
{

View File

@ -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;