You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
5.1 KiB
120 lines
5.1 KiB
=pod |
|
|
|
=head1 NAME |
|
|
|
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, 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); |
|
|
|
typedef int CRYPTO_EX_new(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
|
int idx, long argl, void *argp); |
|
typedef void CRYPTO_EX_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, |
|
int idx, long argl, void *argp); |
|
typedef int CRYPTO_EX_dup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, |
|
int idx, long argl, void *argp); |
|
|
|
=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 pointers 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_set_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 L<ERR_get_error(3)|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 |
|
|
|
L<rsa(3)|rsa(3)>, L<CRYPTO_set_ex_data(3)|CRYPTO_set_ex_data(3)> |
|
|
|
=head1 HISTORY |
|
|
|
RSA_get_ex_new_index(), RSA_set_ex_data() and RSA_get_ex_data() are |
|
available since SSLeay 0.9.0. |
|
|
|
=cut
|
|
|