Skip to main content
Loads an existing encrypted index and returns an instance of EncryptedIndex.
std::unique_ptr<cyborg::EncryptedIndex>
    LoadIndex(const std::string index_name,
              const std::array<uint8_t, 32>& index_key,
              cyborg::Logger* logger = nullptr,
              std::optional<std::array<uint8_t, 16>> user_id = std::nullopt);

Parameters

ParameterTypeDescription
index_namestd::stringName of the index to load.
index_keystd::array<uint8_t, 32>32-byte encryption key (KEK) for the index. For a root load this is the root index KEK; for an RBAC user-scoped load (see user_id) this is that user’s KEK.
loggercyborg::Logger*(Optional) Pointer to a logger instance for capturing operation logs (default is nullptr).
user_idstd::optional<std::array<uint8_t, 16>>(Optional) 16-byte RBAC user identifier. When provided, the index is loaded user-scoped: index_key is treated as that user’s KEK and per-operation permissions are enforced. Defaults to std::nullopt (root load).

Returns

std::unique_ptr<cyborg::EncryptedIndex>: A pointer to the loaded index (EncryptedIndex).

Exceptions

  • Throws if the index name does not exist.
  • Throws if the index could not be loaded or decrypted.

Example Usage

#include "cyborgdb_core/client.hpp"
#include "cyborgdb_core/encrypted_index.hpp"
#include "cyborgdb_core/logger.hpp"
#include <array>

// ... Initialize the client ...

// Create a secure 32-byte key (example: all zeros)
std::array<uint8_t, 32> index_key = {0};

// Optional: Create and configure a logger
cyborg::Logger logger;
logger.Configure(LogLevel::Debug, true, "index_loading.log");

auto index = client.LoadIndex("my_index", index_key, &logger);