AWS Encryption SDK for C v2.4
Loading...
Searching...
No Matches
kms_mrk_keyring.h
Go to the documentation of this file.
1/*
2 * Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. A copy of the License is
6 * located at
7 *
8 * http://aws.amazon.com/apache2.0/
9 *
10 * or in the "license" file accompanying this file. This file is distributed on an
11 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12 * implied. See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef AWS_ENCRYPTION_SDK_KMS_MRK_KEYRING_H
16#define AWS_ENCRYPTION_SDK_KMS_MRK_KEYRING_H
17
18#include <aws/cryptosdk/cpp/exports.h>
20
21#include <aws/core/Aws.h>
22#include <aws/core/utils/Outcome.h>
23#include <aws/core/utils/memory/stl/AWSMap.h>
24#include <aws/core/utils/memory/stl/AWSSet.h>
25#include <aws/core/utils/memory/stl/AWSString.h>
26#include <aws/core/utils/memory/stl/AWSVector.h>
28#include <aws/kms/KMSClient.h>
29#include <functional>
30#include <mutex>
31
32namespace Aws {
33namespace Cryptosdk {
35
48
64class AWS_CRYPTOSDK_CPP_API Builder {
65 public:
74 Builder &WithGrantToken(const Aws::String &grant_token);
75
84 Builder &WithGrantTokens(const Aws::Vector<Aws::String> &grant_tokens);
85
94 Builder &WithClientSupplier(const std::shared_ptr<KmsKeyring::ClientSupplier> &client_supplier);
95
102 Builder &WithKmsClient(const std::shared_ptr<KMS::KMSClient> &kms_client);
103
134 aws_cryptosdk_keyring *Build(const Aws::String &key_id) const;
135
152 aws_cryptosdk_keyring *BuildDiscovery(const Aws::String &region) const;
153
177 const Aws::String &region, std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter) const;
178
179 private:
180 std::shared_ptr<KMS::KMSClient> kms_client;
181 Aws::Vector<Aws::String> grant_tokens;
182 std::shared_ptr<KmsKeyring::ClientSupplier> client_supplier;
183 Aws::String region;
184};
185
190class AWS_CRYPTOSDK_CPP_API MultiKeyringBuilder {
191 public:
200 MultiKeyringBuilder &WithGrantToken(const Aws::String &grant_token);
201
210 MultiKeyringBuilder &WithGrantTokens(const Aws::Vector<Aws::String> &grant_tokens);
211
217 MultiKeyringBuilder &WithClientSupplier(const std::shared_ptr<KmsKeyring::ClientSupplier> &client_supplier);
218
227 const Aws::String &generator_key_id, const Aws::Vector<Aws::String> &additional_key_ids = {}) const;
228
239 aws_cryptosdk_keyring *Build(const Aws::Vector<Aws::String> &additional_key_ids = {}) const;
240
247 const Aws::Set<Aws::String> &regions,
248 std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter = nullptr) const;
249
250 private:
251 Aws::Vector<Aws::String> grant_tokens;
252 std::shared_ptr<KmsKeyring::ClientSupplier> client_supplier;
253
258 aws_cryptosdk_keyring *_Build(
259 const Aws::String &generator_key_id, const Aws::Vector<Aws::String> &additional_key_ids = {}) const;
260};
261 // doxygen group kms_mrk_keyring
263
264} // namespace KmsMrkAwareSymmetricKeyring
265} // namespace Cryptosdk
266} // namespace Aws
267
268#endif // AWS_ENCRYPTION_SDK_KMS_KEYRING_H
Builder & WithClientSupplier(const std::shared_ptr< KmsKeyring::ClientSupplier > &client_supplier)
Builder & WithKmsClient(const std::shared_ptr< KMS::KMSClient > &kms_client)
Builder & WithGrantTokens(const Aws::Vector< Aws::String > &grant_tokens)
aws_cryptosdk_keyring * BuildDiscovery(const Aws::String &region) const
Builder & WithGrantToken(const Aws::String &grant_token)
aws_cryptosdk_keyring * Build(const Aws::String &key_id) const
aws_cryptosdk_keyring * BuildDiscovery(const Aws::String &region, std::shared_ptr< KmsKeyring::DiscoveryFilter > discovery_filter) const
MultiKeyringBuilder & WithGrantToken(const Aws::String &grant_token)
MultiKeyringBuilder & WithClientSupplier(const std::shared_ptr< KmsKeyring::ClientSupplier > &client_supplier)
aws_cryptosdk_keyring * BuildDiscovery(const Aws::Set< Aws::String > &regions, std::shared_ptr< KmsKeyring::DiscoveryFilter > discovery_filter=nullptr) const
aws_cryptosdk_keyring * Build(const Aws::Vector< Aws::String > &additional_key_ids={}) const
aws_cryptosdk_keyring * Build(const Aws::String &generator_key_id, const Aws::Vector< Aws::String > &additional_key_ids={}) const
MultiKeyringBuilder & WithGrantTokens(const Aws::Vector< Aws::String > &grant_tokens)