| // Copyright 2022 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBHWSEC_STRUCTURES_KEY_H_ | |
| #define LIBHWSEC_STRUCTURES_KEY_H_ | |
| #include <optional> | |
| #include "libhwsec/hwsec_export.h" | |
| #include "libhwsec/middleware/middleware_derivative.h" | |
| #include "libhwsec/structures/no_default_init.h" | |
| namespace hwsec { | |
| using KeyToken = uint32_t; | |
| enum class KeyAlgoType { | |
| kRsa, | |
| kEcc, | |
| }; | |
| enum class KeyRestriction : bool { | |
| kUnrestricted, | |
| kRestricted, | |
| }; | |
| struct Key { | |
| NoDefault<KeyToken> token; | |
| }; | |
| class HWSEC_EXPORT ScopedKey { | |
| public: | |
| ScopedKey(ScopedKey&& scoped_key); | |
| ScopedKey(const ScopedKey& scoped_key) = delete; | |
| ScopedKey(Key key, MiddlewareDerivative middleware_derivative); | |
| ~ScopedKey(); | |
| ScopedKey& operator=(ScopedKey&& scoped_key); | |
| ScopedKey& operator=(const ScopedKey& scoped_key) = delete; | |
| const Key& GetKey() const; | |
| private: | |
| void Invalidate(); | |
| std::optional<Key> key_; | |
| MiddlewareDerivative middleware_derivative_; | |
| }; | |
| } // namespace hwsec | |
| #endif // LIBHWSEC_STRUCTURES_KEY_H_ |