blob: bbacb900f58d97d61608abf934e5ac903ccc3ca9 [file] [log] [blame]
// 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_