| // Copyright 2020 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| #ifndef TINK_INTERNAL_KEYSET_WRAPPER_H_ |
| #define TINK_INTERNAL_KEYSET_WRAPPER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "absl/container/flat_hash_map.h" |
| #include "tink/util/statusor.h" |
| #include "proto/tink.pb.h" |
| |
| namespace crypto { |
| namespace tink { |
| namespace internal { |
| |
| // A Keyset wrapper wraps a Tink Keyset into a set of primitives. This is a |
| // Tink internal object, which is created from a PrimitiveWrapper. |
| // |
| // The KeysetWrapper is used because the only moment during compilation in which |
| // the registry knows the input primitive type of a PrimitiveWrapper<P, Q> is |
| // when RegisterPrimitiveWrapper(transforming_wrapper) is called. (There, the |
| // compiler infers the template arguments. This means that all the work which |
| // handles Q needs to be done in that compilation unit, and when creating the |
| // primitive we cannot refer to Q. |
| // |
| // Hence, when registering the object, we first use type erasure to forget about |
| // Q and create a subclass (KeysetWrapperImpl<P,Q>) of this object. |
| template <typename Primitive> |
| class KeysetWrapper { |
| public: |
| virtual ~KeysetWrapper() = default; |
| |
| // Wraps a given `keyset` with annotations `annotations`. |
| virtual crypto::tink::util::StatusOr<std::unique_ptr<Primitive>> Wrap( |
| const google::crypto::tink::Keyset& keyset, |
| const absl::flat_hash_map<std::string, std::string>& annotations) |
| const = 0; |
| }; |
| |
| } // namespace internal |
| } // namespace tink |
| } // namespace crypto |
| |
| #endif // TINK_INTERNAL_KEYSET_WRAPPER_H_ |