#ifndef COMPONENTS_TRUSTED_VAULT_TRUSTED_VAULT_CRYPTO_H_
#define COMPONENTS_TRUSTED_VAULT_TRUSTED_VAULT_CRYPTO_H_
#include <optional>
#include <vector>
#include "base/containers/span.h"
#include "components/trusted_vault/securebox.h"
namespace trusted_vault {
class SecureBoxPrivateKey;
class SecureBoxPublicKey;
std::optional<std::vector<uint8_t>> DecryptTrustedVaultWrappedKey(
const SecureBoxPrivateKey& private_key,
base::span<const uint8_t> wrapped_key);
std::vector<uint8_t> ComputeTrustedVaultWrappedKey(
const SecureBoxPublicKey& public_key,
base::span<const uint8_t> trusted_vault_key);
std::vector<uint8_t> ComputeMemberProof(
const SecureBoxPublicKey& key,
const std::vector<uint8_t>& trusted_vault_key);
bool VerifyMemberProof(const SecureBoxPublicKey& key,
const std::vector<uint8_t>& trusted_vault_key,
const std::vector<uint8_t>& member_proof);
std::vector<uint8_t> ComputeRotationProofForTesting(
const std::vector<uint8_t>& trusted_vault_key,
const std::vector<uint8_t>& prev_trusted_vault_key);
bool VerifyRotationProof(const std::vector<uint8_t>& trusted_vault_key,
const std::vector<uint8_t>& prev_trusted_vault_key,
const std::vector<uint8_t>& rotation_proof);
}
#endif