This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
pxz-hos-client-cpp-module/support/aws-sdk-cpp-master/aws-cpp-sdk-s3-encryption/include/aws/s3-encryption/CryptoConfiguration.h

149 lines
5.7 KiB
C++

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#pragma once
#include <aws/s3-encryption/s3Encryption_EXPORTS.h>
#include <aws/s3-encryption/materials/KMSEncryptionMaterials.h>
#include <aws/s3-encryption/materials/SimpleEncryptionMaterials.h>
namespace Aws
{
namespace S3Encryption
{
class S3EncryptionClient;
enum class StorageMethod
{
METADATA,
INSTRUCTION_FILE
};
enum class CryptoMode
{
/*
* Encrypt with a non-authenticated mode of operation.
*
* NOTE: This feature is in maintenance mode, no new updates will be released.
* Please see https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html for more information.
*/
ENCRYPTION_ONLY,
/*
* Encrypt with an authenticated mode of operation, but do not require that objects be authenticated on Get.
*
* NOTE: This feature is in maintenance mode, no new updates will be released.
* Please see https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html for more information.
*/
AUTHENTICATED_ENCRYPTION,
/*
* Encrypt and decrypt with an authenticated mode of operation only.
*/
STRICT_AUTHENTICATED_ENCRYPTION
};
enum class SecurityProfile
{
V2, // Client only decrypt objects encrypted using best practice key wrap algorithms (KMS_CONTEXT and AES_GCM ) and best practice content crypto schemes (AES_GCM)
V2_AND_LEGACY, // Client will try to decrypt objects encrypted using all key wrap algorithms (KMS_CONTEXT, KMS, AES_KeyWrap, AES_GCM) and content crypto schemes (AES_GCM, AES_CBC).
};
enum class RangeGetMode
{
DISABLED, // Range get is not allowed
ALL, // Range get is allowed
};
class AWS_S3ENCRYPTION_API CryptoConfiguration
{
public:
/*
* Default constructor.
*/
CryptoConfiguration();
/*
* Constructor that accepts a storage method and defaults the cryptoMode to authenticated encryption.
*/
CryptoConfiguration(StorageMethod storageMethod);
/*
* Constructor that accepts a crypto mode and defaults the storage method to metadata.
*/
CryptoConfiguration(CryptoMode cryptoMode);
/*
* Constructor that accepts storage method and crypto mode. Default storage method is metadata and default crypto mode is authenticated encryption.
*/
CryptoConfiguration(StorageMethod storageMode, CryptoMode cryptoMode);
/**
* Gets the underlying storage mode.
*/
inline StorageMethod GetStorageMethod() const
{
return m_storageMethod;
}
/**
* Gets the underlying crypto mode.
*/
inline CryptoMode GetCryptoMode() const
{
return m_cryptoMode;
}
/**
* Sets the underlying storage method. Copies from parameter storageMethod.
*/
inline void SetStorageMethod(StorageMethod storageMethod)
{
m_storageMethod = storageMethod;
}
/**
* Sets the underlying cryptoMode. Copies from parameter cryptoMode
*/
inline void SetCryptoMode(CryptoMode cryptoMode)
{
m_cryptoMode = cryptoMode;
}
private:
inline void SetSecurityProfile(SecurityProfile profile) { m_securityProfile = profile; }
inline void SetUnAuthenticatedRangeGet(RangeGetMode mode) { m_unAuthenticatedRangeGet = mode; }
inline RangeGetMode GetUnAuthenticatedRangeGet() const { return m_unAuthenticatedRangeGet; }
inline SecurityProfile GetSecurityProfile() const { return m_securityProfile; }
StorageMethod m_storageMethod;
CryptoMode m_cryptoMode;
RangeGetMode m_unAuthenticatedRangeGet;
SecurityProfile m_securityProfile;
friend class S3EncryptionClientBase;
friend class S3EncryptionClientV2;
};
class AWS_S3ENCRYPTION_API CryptoConfigurationV2
{
public:
CryptoConfigurationV2(const std::shared_ptr<Aws::S3Encryption::Materials::KMSWithContextEncryptionMaterials>& materials);
CryptoConfigurationV2(const std::shared_ptr<Aws::S3Encryption::Materials::SimpleEncryptionMaterialsWithGCMAAD>& materials);
inline void SetSecurityProfile(SecurityProfile profile) { m_securityProfile = profile; }
inline void SetUnAuthenticatedRangeGet(RangeGetMode mode) { m_unAuthenticatedRangeGet = mode; }
inline void SetStorageMethod(StorageMethod storageMethod) { m_storageMethod = storageMethod; }
inline SecurityProfile GetSecurityProfile() const { return m_securityProfile; }
inline RangeGetMode GetUnAuthenticatedRangeGet() const { return m_unAuthenticatedRangeGet; }
inline StorageMethod GetStorageMethod() const { return m_storageMethod; }
std::shared_ptr<Aws::Utils::Crypto::EncryptionMaterials> GetEncryptionMaterials() const { return m_encryptionMaterials; }
private:
StorageMethod m_storageMethod;
RangeGetMode m_unAuthenticatedRangeGet;
SecurityProfile m_securityProfile;
std::shared_ptr<Aws::Utils::Crypto::EncryptionMaterials> m_encryptionMaterials;
};
}
}