1e1051a39Sopenharmony_ci/*
2e1051a39Sopenharmony_ci * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
3e1051a39Sopenharmony_ci *
4e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License").  You may not use
5e1051a39Sopenharmony_ci * this file except in compliance with the License.  You can obtain a copy
6e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at
7e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html
8e1051a39Sopenharmony_ci */
9e1051a39Sopenharmony_ci
10e1051a39Sopenharmony_ci#include "internal/cryptlib.h"
11e1051a39Sopenharmony_ci
12e1051a39Sopenharmony_citypedef struct ossl_namemap_st OSSL_NAMEMAP;
13e1051a39Sopenharmony_ci
14e1051a39Sopenharmony_ciOSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx);
15e1051a39Sopenharmony_ci
16e1051a39Sopenharmony_ciOSSL_NAMEMAP *ossl_namemap_new(void);
17e1051a39Sopenharmony_civoid ossl_namemap_free(OSSL_NAMEMAP *namemap);
18e1051a39Sopenharmony_ciint ossl_namemap_empty(OSSL_NAMEMAP *namemap);
19e1051a39Sopenharmony_ci
20e1051a39Sopenharmony_ciint ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name);
21e1051a39Sopenharmony_ciint ossl_namemap_add_name_n(OSSL_NAMEMAP *namemap, int number,
22e1051a39Sopenharmony_ci                            const char *name, size_t name_len);
23e1051a39Sopenharmony_ci
24e1051a39Sopenharmony_ci/*
25e1051a39Sopenharmony_ci * The number<->name relationship is 1<->many
26e1051a39Sopenharmony_ci * Therefore, the name->number mapping is a simple function, while the
27e1051a39Sopenharmony_ci * number->name mapping is an iterator.
28e1051a39Sopenharmony_ci */
29e1051a39Sopenharmony_ciint ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name);
30e1051a39Sopenharmony_ciint ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap,
31e1051a39Sopenharmony_ci                            const char *name, size_t name_len);
32e1051a39Sopenharmony_ciconst char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number,
33e1051a39Sopenharmony_ci                                  size_t idx);
34e1051a39Sopenharmony_ciint ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number,
35e1051a39Sopenharmony_ci                             void (*fn)(const char *name, void *data),
36e1051a39Sopenharmony_ci                             void *data);
37e1051a39Sopenharmony_ci
38e1051a39Sopenharmony_ci/*
39e1051a39Sopenharmony_ci * A utility that handles several names in a string, divided by a given
40e1051a39Sopenharmony_ci * separator.
41e1051a39Sopenharmony_ci */
42e1051a39Sopenharmony_ciint ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number,
43e1051a39Sopenharmony_ci                           const char *names, const char separator);
44