#ifndef ALGORITHM_REGISTRY_H #define ALGORITHM_REGISTRY_H #include "unified_crypto_interface.h" #ifdef __cplusplus extern "C" { #endif typedef int (*uci_keygen_func_t)(uci_keypair_t *keypair); typedef int (*uci_sign_func_t)(const uci_keypair_t *keypair, const uint8_t *message, size_t message_len, uci_signature_t *signature); typedef int (*uci_verify_func_t)(const uci_keypair_t *keypair, const uint8_t *message, size_t message_len, const uci_signature_t *signature); typedef int (*uci_encrypt_func_t)(const uci_keypair_t *keypair, const uint8_t *plaintext, size_t plaintext_len, uci_ciphertext_t *ciphertext); typedef int (*uci_decrypt_func_t)(const uci_keypair_t *keypair, const uci_ciphertext_t *ciphertext, uint8_t *plaintext, size_t *plaintext_len); typedef int (*uci_kem_keygen_func_t)(uci_keypair_t *keypair); typedef int (*uci_kem_encaps_func_t)(const uci_keypair_t *keypair, uci_kem_encaps_result_t *result); typedef int (*uci_kem_decaps_func_t)(const uci_keypair_t *keypair, const uint8_t *ciphertext, size_t ciphertext_len, uint8_t *shared_secret, size_t *shared_secret_len); typedef struct { uci_algorithm_info_t info; uci_keygen_func_t keygen; uci_sign_func_t sign; uci_verify_func_t verify; uci_encrypt_func_t encrypt; uci_decrypt_func_t decrypt; uci_kem_keygen_func_t kem_keygen; uci_kem_encaps_func_t kem_encaps; uci_kem_decaps_func_t kem_decaps; } uci_algorithm_impl_t; int registry_init(void); int registry_cleanup(void); int registry_register_algorithm(const uci_algorithm_impl_t *impl); const uci_algorithm_impl_t *registry_get_algorithm(uci_algorithm_id_t algorithm); int registry_list_algorithms(uci_algorithm_type_t type, uci_algorithm_id_t *algorithms, size_t *count); #ifdef __cplusplus } #endif #endif