Skip to main content

Advanced Utility Extensions

TOML Configuration File Management​

We support reading strings, integers and their arrays in toml files, but other types are not supported yet.

toml file example:

[server]
host="http://127.0.0.1"
port=80

toml file reading example:

TomlConfig config;
config.LoadFile("./test.toml");
std::optional<std::string> host = config.GetString("server", "host");
if (!host.has_value()) return false;

std::optional<int64_t> port = config.GetInteger("server", "port");
if (!port.has_value()) return false;

JSON Support​

We provide a json library that can be used in a trusted environment.

nlohmann::json test_json = {{"name", "OpenAI"},
{"age", 3},
{"active", true},
{"tags", {"AI", "ML", "NLP"}},
{"info", {{"type", "organization"}, {"founded", 2015}}}};
bool ok;
std::string value;
std::string err_msg;
ok = ssgx::json_t::fetch_json_string_node(test_json, "name", value, err_msg);
if (!ok) return false;

High-precision Numerical Computation​

We provide high-precision number calculations running in a trusted environment, which currently only supports addition, subtraction, multiplication and division.

BigDecimal a("8932483294839248234309483204802.38408499");
BigDecimal b("123");
BigDecimal result = a.Multiply(b);
if (result != BigDecimal("1098695445265227532820066434190693.24245377")) return false;

Precision prec3(RoundType::RoundFloor, 6);
result = a.Multiply(b, prec3);
if (result != BigDecimal("1098695445265227532820066434190693.242453")) return false;

Logging System Support​

We provide a very easy to use logging function with no output length limit.

// Multiple placeholders with varying types
SSGX_LOG(INFO) << "User: " << "John" << ", Age: " << 30 << ", Height: " << 1.75 << ", Status: " << "OK" << "\n";

// Chaining logs
SSGX_LOG(INFO) << "Start of chain...\n";
SSGX_LOG(WARN) << "Middle of chain...\n";
SSGX_LOG(FATAL) << "End of chain!\n";

HTTP Functionality​

We encapsulate secure HttpClient and server communication interfaces, to enhance enclaves networking capabilities.

http client example:

ssgx::http_t::Client client("http://127.0.0.1", 80);
ssgx::http_t::Result result = client.Get("/check");

ssgx::utils_t::Printf("%d\n", result->StatusCode());
ssgx::utils_t::Printf("%s\n\n", result->Body().c_str());

http server example:

Server srv;
std::string url = "http://0.0.0.0:83";
srv.Listen(url);
srv.Get("/hello", [](auto& req, auto& resp) { HandleHello(req, resp); });
srv.Post("/echo", [](auto& req, auto& resp) { HandleEcho(req, resp); });
srv.Start();
while (1) {
ssgx::utils_t::sleep(10);
}