| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| /* DO NOT MODIFY THIS MANUALLY! This file was generated using cbindgen. |
| * To generate this file: |
| * 1. Get the latest cbindgen using `cargo install --force cbindgen` |
| * 2. Run `cbindgen ../rust -c cbindgen.toml -o |
| teaclave_client_sdk.h` or `make`. |
| */ |
| |
| #include <stdarg.h> |
| #include <stdbool.h> |
| #include <stdint.h> |
| #include <stdlib.h> |
| |
| typedef struct AuthenticationClient AuthenticationClient; |
| |
| typedef struct FrontendClient FrontendClient; |
| |
| typedef struct c_entry { |
| int64_t microsecond; |
| uint8_t ip[16]; |
| void *user; |
| void *message; |
| bool result; |
| } c_entry; |
| |
| /** |
| * Connect to Teaclave Authentication Service. |
| * |
| * This function connects and establishes trusted channel to the remote |
| * authentication service with `address`. The function gets *enclave info* from |
| * the file located in `enclave_info_path`. The file in `as_root_ca_cert_path` |
| * will be used to verify the attestation report from the remote service. |
| * |
| * # Arguments |
| * |
| * * `address`: address of remote services, normally,it's a domain name with port number. |
| * * `enclave_info_path`: file path of the *enclave info* TOML file. |
| * * `as_root_ca_cert_path`: file path of the certificate for remote attestation service. |
| * |
| * # Return |
| * |
| * * The function returns an opaque pointer (handle) of the service. On error, |
| * the function returns NULL. |
| * |
| * # Safety |
| * |
| * `address`, `enclave_info_path`, `as_root_ca_cert_path` should be C string (null terminated). |
| */ |
| struct AuthenticationClient *teaclave_connect_authentication_service(const char *address, |
| const char *enclave_info_path, |
| const char *as_root_ca_cert_path); |
| |
| /** |
| * Close and free the authentication service handle, i.e., the |
| * `AuthenticaionClient` type opaque pointer. The function returns 0 for |
| * success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * This function is unsafe because improper use may lead to |
| * memory problems. For example, a double-free may occur if the |
| * function is called twice on the same raw pointer. |
| */ |
| int teaclave_close_authentication_service(struct AuthenticationClient *client); |
| |
| /** |
| * Register a new user with `user_id` and `user_password`. The function returns |
| * 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * `user_id`, `user_password`, `role`, `attribute` should be C string (null terminated). |
| */ |
| int teaclave_user_register(struct AuthenticationClient *client, |
| const char *user_id, |
| const char *user_password, |
| const char *role, |
| const char *attribute); |
| |
| /** |
| * Login a new user with `user_id` and `user_password`. The login session token |
| * will be save in the `token` buffer, and length will be set in the |
| * `token_len` argument. The function returns 0 for success. On error, the |
| * function returns 1. |
| * |
| * # Safety |
| * |
| * `user_id`, `user_password` should be C string (null terminated), token and token_len should be consistent. |
| */ |
| int teaclave_user_login(struct AuthenticationClient *client, |
| const char *user_id, |
| const char *user_password, |
| char *token, |
| size_t *token_len); |
| |
| /** |
| * Connect to Teaclave Frontend Service. |
| * |
| * This function connects and establishes trusted channel to the remote |
| * frontend service with `address`. The function gets *enclave info* from |
| * the file located in `enclave_info_path`. The file in `as_root_ca_cert_path` |
| * will be used to verify the attestation report from the remote service. |
| * |
| * # Arguments |
| * |
| * * `address`: address of remote services, normally,it's a domain name with port number. |
| * * `enclave_info_path`: file path of the *enclave info* TOML file. |
| * * `as_root_ca_cert_path`: file path of the certificate for remote attestation service. |
| * |
| * # Return |
| * |
| * * The function returns an opaque pointer (handle) of the service. On error, |
| * the function returns NULL. |
| * |
| * # Safety |
| * |
| * All arguments should be C string (null terminated). |
| */ |
| struct FrontendClient *teaclave_connect_frontend_service(const char *address, |
| const char *enclave_info_path, |
| const char *as_root_ca_cert_path); |
| |
| /** |
| * Close and free the frontend service handle, i.e., the `FrontendClient` type |
| * opaque pointer. The function returns 0 for success. On error, the function |
| * returns 1. |
| * |
| * # Safety |
| * |
| * This function is unsafe because improper use may lead to |
| * memory problems. For example, a double-free may occur if the |
| * function is called twice on the same raw pointer. |
| */ |
| int teaclave_close_frontend_service(struct FrontendClient *client); |
| |
| /** |
| * Set user's credential with `user_id` and `user_token`. The function returns |
| * 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * `user_id` and `user_token` should be C string (null terminated). |
| */ |
| int teaclave_authentication_set_credential(struct AuthenticationClient *client, |
| const char *user_id, |
| const char *user_token); |
| |
| /** |
| * Set user's credential with `user_id` and `user_token`. The function returns |
| * 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * `user_id` and `user_token` should be C string (null terminated). |
| */ |
| int teaclave_frontend_set_credential(struct FrontendClient *client, |
| const char *user_id, |
| const char *user_token); |
| |
| /** |
| * Invoke task with `task_id`. The function returns 0 for success. On error, |
| * the function returns 1. |
| * |
| * # Safety |
| * |
| * `task_id` should be C string (null terminated). |
| */ |
| int teaclave_invoke_task(struct FrontendClient *client, const char *task_id); |
| |
| /** |
| * Cancel task with `task_id`. The function returns 0 for success. On error, |
| * the function returns 1. |
| * |
| * # Safety |
| * |
| * `task_id` should be C string (null terminated). |
| */ |
| int teaclave_cancel_task(struct FrontendClient *client, const char *task_id); |
| |
| /** |
| * Get task result of `task_id`. The result will be save in the `task_result` |
| * buffer, and set corresponding `task_result_len` argument. Note that this is |
| * a blocking function and wait for the return of the task. The function |
| * returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_get_task_result(struct FrontendClient *client, |
| const char *task_id, |
| char *task_result, |
| size_t *task_result_len); |
| |
| /** |
| * Query audit logs according to `query`. `query` is the query statement for tantivy. The result |
| * will be saved in the `log_buffer` buffer with the corresponding `log_len` argument set. |
| * Remember to free the user and message inside c_entry to avoid memory leak. |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_query_audit_logs(struct FrontendClient *client, |
| const char *query, |
| struct c_entry *log_buffer, |
| size_t *log_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_user_register_serialized(struct AuthenticationClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_user_login_serialized(struct AuthenticationClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_register_function_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_get_function_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_get_function_usage_stats_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_register_input_file_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_register_output_file_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_register_fusion_output_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_register_input_from_output_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_create_task_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_assign_data_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_approve_task_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_invoke_task_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_cancel_task_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_get_task_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |
| |
| /** |
| * Send JSON serialized request to the service with the `client` and |
| * get the serialized response. |
| * |
| * # Arguments |
| * |
| * * `client`: service client. |
| * * `serialized_request`; JSON serialized request |
| * * `serialized_response`: buffer to store the JSON serialized response. |
| * * `serialized_response_len`: length of the allocated |
| * `serialized_response`, will be set as the length of |
| * `serialized_response` when return successfully. |
| * |
| * # Return |
| * |
| * The function returns 0 for success. On error, the function returns 1. |
| * |
| * # Safety |
| * |
| * Inconsistent length of allocated buffer may caused overflow. |
| */ |
| int teaclave_query_audit_logs_serialized(struct FrontendClient *client, |
| const char *serialized_request, |
| char *serialized_response, |
| size_t *serialized_response_len); |