ossl_namemap_new.pod 4.5 KB
Newer Older
1 2 3 4
=pod

=head1 NAME

5
ossl_namemap_new, ossl_namemap_free, ossl_namemap_stored, ossl_namemap_empty,
6
ossl_namemap_add_name, ossl_namemap_add_name_n, ossl_namemap_add_names,
7 8
ossl_namemap_name2num, ossl_namemap_name2num_n,
ossl_namemap_doall_names
9 10 11 12 13 14
- internal number E<lt>-E<gt> name map

=head1 SYNOPSIS

 #include "internal/cryptlib.h"

15
 OSSL_NAMEMAP *ossl_namemap_stored(OSSL_LIB_CTX *libctx);
16 17 18

 OSSL_NAMEMAP *ossl_namemap_new(void);
 void ossl_namemap_free(OSSL_NAMEMAP *namemap);
19
 int ossl_namemap_empty(OSSL_NAMEMAP *namemap);
20

21 22 23
 int ossl_namemap_add_name(OSSL_NAMEMAP *namemap, int number, const char *name);
 int ossl_namemap_add_name_n(OSSL_NAMEMAP *namemap, int number,
                             const char *name, size_t name_len);
24 25

 int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name);
26 27
 int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap,
                             const char *name, size_t name_len);
28 29 30
 void ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number,
                               void (*fn)(const char *name, void *data),
                               void *data);
31

32 33 34
 int ossl_namemap_add_names(OSSL_NAMEMAP *namemap, int number,
                            const char *names, const char separator);

35 36
=head1 DESCRIPTION

37 38 39
A B<OSSL_NAMEMAP> is a one-to-many number E<lt>-E<gt> names map, which
can be used to give any arbitrary set of names (any string) a unique
dynamic identity that is valid throughout the lifetime of the associated
40 41 42 43 44 45 46
library context.

ossl_namemap_new() and ossl_namemap_free() construct and destruct a
new B<OSSL_NAMEMAP>.
This is suitable to use when the B<OSSL_NAMEMAP> is embedded in other
structures, or should be independent for any reason.

47 48 49
ossl_namemap_empty() checks if the given B<OSSL_NAMEMAP> is empty or
not.

50 51 52 53 54
ossl_namemap_stored() finds or auto-creates the default namemap in the
given library context.
The returned B<OSSL_NAMEMAP> can't be destructed using
ossl_namemap_free().

55
ossl_namemap_add_name() adds a new name to the namemap if it's not already
56
present.
57 58
If the given I<number> is zero, a new number will be allocated to
identify this I<name>.
R
Rich Salz 已提交
59
If the given I<number> is nonzero, the I<name> is added to the set of
60
names already associated with that number.
61

62 63
ossl_namemap_name2num() finds the number corresponding to the given
I<name>.
64

65 66
ossl_namemap_add_name_n() and ossl_namemap_name2num_n() do the same thing
as ossl_namemap_add_name() and ossl_namemap_name2num(), but take a string
67 68 69
length I<name_len> as well, allowing the caller to use a fragment of
a string as a name.

70 71 72 73 74
ossl_namemap_doall_names() walks through all names associated with
I<number> in the given I<namemap> and calls the function I<fn> for
each of them.
I<fn> is also passed the I<data> argument, which allows any caller to
pass extra data for that function to use.
75

76 77 78 79 80 81
ossl_namemap_add_names() divides up a set of names given in I<names>,
separated by I<separator>, and adds each to the I<namemap>, all with
the same number.  If some of them already exist in the I<namemap>,
they must all have the same associated number, which will be adopted
for any name that doesn't exist yet.

82 83 84 85 86
=head1 RETURN VALUES

ossl_namemap_new() and ossl_namemap_stored() return the pointer to a
B<OSSL_NAMEMAP>, or NULL on error.

87 88 89
ossl_namemap_empty() returns 1 if the B<OSSL_NAMEMAP> is NULL or
empty, or 0 if it's not empty.

90 91
ossl_namemap_add_name() and ossl_namemap_add_name_n() return the number
associated with the added string, or zero on error.
92

93 94 95
ossl_namemap_num2names() returns a pointer to a NULL-terminated list of
pointers to the names corresponding to the given number, or NULL if
it's undefined in the given B<OSSL_NAMEMAP>.
96

97 98 99
ossl_namemap_name2num() and ossl_namemap_name2num_n() return the number
corresponding to the given name, or 0 if it's undefined in the given
B<OSSL_NAMEMAP>.
100

101 102 103
ossl_namemap_add_names() returns the number associated with the added
names, or zero on error.

104 105 106 107 108 109 110 111
=head1 NOTES

The result from ossl_namemap_num2names() isn't thread safe, other threads
dealing with the same namemap may cause the list of names to change
location.
It is therefore strongly recommended to only use the result in code
guarded by a thread lock.

112 113 114 115 116 117
=head1 HISTORY

The functions described here were all added in OpenSSL 3.0.

=head1 COPYRIGHT

M
Matt Caswell 已提交
118
Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
119 120 121 122 123 124 125

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut