/* Copyright (C) 2022 CZ.NIC, z.s.p.o. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #pragma once #include #include #include "libdnssec/binary.h" #include "libdnssec/key.h" #include "libdnssec/keystore.h" typedef struct keystore_functions { // construction of internal context int (*ctx_new)(void **ctx_ptr); void (*ctx_free)(void *ctx); // keystore init/open/close int (*init)(void *ctx, const char *config); int (*open)(void *ctx, const char *config); int (*close)(void *ctx); // keystore access int (*generate_key)(void *ctx, gnutls_pk_algorithm_t algorithm, unsigned bits, const char *label, char **id_ptr); int (*import_key)(void *ctx, const dnssec_binary_t *pem, char **id_ptr); int (*remove_key)(void *ctx, const char *id); // private key access int (*get_private)(void *ctx, const char *id, gnutls_privkey_t *key_ptr); int (*set_private)(void *ctx, gnutls_privkey_t key); } keystore_functions_t; struct dnssec_keystore { const keystore_functions_t *functions; void *ctx; }; int keystore_create(dnssec_keystore_t **store_ptr, const keystore_functions_t *functions);