mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
Document how CRYPTO_EX_DATA stuff works for
RSA structures. Other structures behave in a similar way.
This commit is contained in:
parent
3bec05e933
commit
fd38fecc1a
@ -2,26 +2,114 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data - ...
|
||||
RSA_get_ex_new_index, RSA_set_ex_data, RSA_get_ex_data - add application specific data to RSA structures.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
#include <openssl/rsa.h>
|
||||
|
||||
int RSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
|
||||
int (*dup_func)(), void (*free_func)());
|
||||
int RSA_get_ex_new_index(long argl, void *argp,
|
||||
CRYPTO_EX_new *new_func,
|
||||
CRYPTO_EX_dup *dup_func,
|
||||
CRYPTO_EX_free *free_func);
|
||||
|
||||
int RSA_set_ex_data(RSA *r,int idx,void *arg);
|
||||
|
||||
void *RSA_get_ex_data(RSA *r, int idx);
|
||||
|
||||
int new_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
|
||||
int idx, long argl, void *argp);
|
||||
|
||||
void free_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
|
||||
int idx, long argl, void *argp);
|
||||
int dup_func(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d,
|
||||
int idx, long argl, void *argp);
|
||||
|
||||
int RSA_set_ex_data(RSA *r,int idx,char *arg);
|
||||
|
||||
char *RSA_get_ex_data(RSA *r, int idx);
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
...
|
||||
Several OpenSSL structures can have application specific data attached to them.
|
||||
This has several potential uses, it can be used to cache data associated with
|
||||
a structure (for example the hash of some part of the structure) or some
|
||||
additional data (for example a handle to the data in an external library).
|
||||
|
||||
Since the application data can be anything at all it is passed and retrieved
|
||||
as a B<void *> type.
|
||||
|
||||
The B<RSA_get_ex_new_index()> function is initially called to "register" some
|
||||
new application specific data. It takes three optional function pointers which
|
||||
are called when the parent structure (in this case an RSA structure) is
|
||||
initially created, when it is copied and when it is freed up. If any or all of
|
||||
these function pointer arguments are not used they should be set to NULL. The
|
||||
precise manner in which these function pointer are called is described in more
|
||||
detail below. B<RSA_get_ex_new_index()> also takes additional long and pointer
|
||||
parameters which will be passed to the supplied functions but which otherwise
|
||||
have no special meaning. It returns an B<index> which should be stored
|
||||
(typically in a static variable) and passed used in the B<idx> parameter in
|
||||
the remaining functions. Each successful call to B<RSA_get_ex_new_index()>
|
||||
will return an index greater than any previously returned, this is important
|
||||
because the optional functions are called in order of increasing index value.
|
||||
|
||||
B<RSA_set_ex_data()> is used to set application specific data, the data is
|
||||
supplied in the B<arg> parameter and its precise meaning is up to the
|
||||
application.
|
||||
|
||||
B<RSA_get_ex_data()> is used to retrieve application specific data. The data
|
||||
is returned to the application, this will be the same value as supplied to
|
||||
a previous B<RSA_set_ex_data()> call.
|
||||
|
||||
B<new_func()> is called when a structure is initially allocated (for example
|
||||
with B<RSA_new()>. The parent structure members will not have any meaningful
|
||||
values at this point. This function will typically be used to allocate any
|
||||
application specific structure.
|
||||
|
||||
B<free_func()> is called when a structure is being freed up. The dynamic parent
|
||||
structure members should not be accessed because they will be freed up when
|
||||
this function is called.
|
||||
|
||||
B<new_func()> and B<free_func()> take the same parameters. B<parent> is a
|
||||
pointer to the parent RSA structure. B<ptr> is a the application specific data
|
||||
(this wont be of much use in B<new_func()>. B<ad> is a pointer to the
|
||||
B<CRYPTO_EX_DATA> structure from the parent RSA structure: the functions
|
||||
B<CRYPTO_get_ex_data()> and B<CRYPTO_get_ex_data()> can be called to manipulate
|
||||
it. The B<idx> parameter is the index: this will be the same value returned by
|
||||
B<RSA_get_ex_new_index()> when the functions were initially registered. Finally
|
||||
the B<argl> and B<argp> parameters are the values originally passed to the same
|
||||
corresponding parameters when B<RSA_get_ex_new_index()> was called.
|
||||
|
||||
B<dup_func()> is called when a structure is being copied. Pointers to the
|
||||
destination and source B<CRYPTO_EX_DATA> structures are passed in the B<to> and
|
||||
B<from> parameters respectively. The B<from_d> parameter is passed a pointer to
|
||||
the source application data when the function is called, when the function returns
|
||||
the value is copied to the destination: the application can thus modify the data
|
||||
pointed to by B<from_d> and have different values in the source and destination.
|
||||
The B<idx>, B<argl> and B<argp> parameters are the same as those in B<new_func()>
|
||||
and B<free_func()>.
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
...
|
||||
B<RSA_get_ex_new_index()> returns a new index or -1 on failure (note 0 is a valid
|
||||
index value).
|
||||
|
||||
B<RSA_set_ex_data()> returns 1 on success or 0 on failure.
|
||||
|
||||
B<RSA_get_ex_data()> returns the application data or 0 on failure. 0 may also
|
||||
be valid application data but currently it can only fail if given an invalid B<idx>
|
||||
parameter.
|
||||
|
||||
B<new_func()> and B<dup_func()> should return 0 for failure and 1 for success.
|
||||
|
||||
On failure an error code can be obtained from B<ERR_get_error(3)>.
|
||||
|
||||
=head1 BUGS
|
||||
|
||||
B<dup_func()> is currently never called.
|
||||
|
||||
The return value of B<new_func()> is ignored.
|
||||
|
||||
The B<new_func()> function isn't very useful because no meaningful values are
|
||||
present in the parent RSA structure when it is called.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user