diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2000-01-24 01:50:17 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2000-01-24 01:50:17 +0000 |
commit | fd38fecc1a79b9365a6ecbc2a908f2eb9751db6f (patch) | |
tree | a65ace94487ee7b0b299ff37614499bc3423b554 /doc/crypto/RSA_get_ex_new_index.pod | |
parent | 3bec05e93307eee7088b3a74d5e2cfa319485c50 (diff) |
Document how CRYPTO_EX_DATA stuff works for
RSA structures. Other structures behave in
a similar way.
Diffstat (limited to 'doc/crypto/RSA_get_ex_new_index.pod')
-rw-r--r-- | doc/crypto/RSA_get_ex_new_index.pod | 102 |
1 files changed, 95 insertions, 7 deletions
diff --git a/doc/crypto/RSA_get_ex_new_index.pod b/doc/crypto/RSA_get_ex_new_index.pod index 2afcc20401..c56adb8b7f 100644 --- a/doc/crypto/RSA_get_ex_new_index.pod +++ b/doc/crypto/RSA_get_ex_new_index.pod @@ -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 |