blob: af7a4f9da84a142300785a545450355693268c33 [file]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PRIVATE_AI_SECURE_SESSION_H_
#define COMPONENTS_PRIVATE_AI_SECURE_SESSION_H_
#include <cstdint>
#include <optional>
#include <vector>
#include "base/functional/callback.h"
#include "components/private_ai/private_ai_common.h"
namespace oak::session::v1 {
class EncryptedMessage;
class HandshakeRequest;
class HandshakeResponse;
} // namespace oak::session::v1
namespace private_ai {
// Interface for secure session management.
// Handles cryptographic operations, including handshake, encryption, and
// decryption.
class SecureSession {
public:
using GetHandshakeMessageOnceCallback = base::OnceCallback<void(
std::optional<oak::session::v1::HandshakeRequest>)>;
using ProcessHandshakeResponseOnceCallback = base::OnceCallback<void(bool)>;
using EncryptOnceCallback = base::OnceCallback<void(
std::optional<oak::session::v1::EncryptedMessage>)>;
using DecryptOnceCallback =
base::OnceCallback<void(const std::optional<Response>&)>;
virtual ~SecureSession() = default;
// Generates the initial handshake message.
//
// Runs callback with `std::nullopt` on failure.
virtual void GetHandshakeMessage(
GetHandshakeMessageOnceCallback callback) = 0;
// Processes the server's handshake response (e.g., keys).
// This should be called after the initial handshake message has been sent
// and a response has been received from the transport layer.
//
// Runs callback with `true` on success.
virtual void ProcessHandshakeResponse(
const oak::session::v1::HandshakeResponse& response,
ProcessHandshakeResponseOnceCallback callback) = 0;
// Encrypts the given data.
// This should only be called after the handshake is complete.
//
// Runs callback with `std::nullopt` on failure.
virtual void Encrypt(const Request& data, EncryptOnceCallback callback) = 0;
// Decrypts the given data.
// This should only be called after the handshake is complete.
//
// Runs callback with `std::nullopt` on failure.
virtual void Decrypt(const oak::session::v1::EncryptedMessage& data,
DecryptOnceCallback callback) = 0;
};
} // namespace private_ai
#endif // COMPONENTS_PRIVATE_AI_SECURE_SESSION_H_