epoc32/include/stdapis/openssl/ui.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
     1.1 --- a/epoc32/include/stdapis/openssl/ui.h	Tue Nov 24 13:55:44 2009 +0000
     1.2 +++ b/epoc32/include/stdapis/openssl/ui.h	Tue Mar 16 16:12:26 2010 +0000
     1.3 @@ -1,1 +1,391 @@
     1.4 -ui.h
     1.5 +/* crypto/ui/ui.h -*- mode:C; c-file-style: "eay" -*- */
     1.6 +/* Written by Richard Levitte (richard@levitte.org) for the OpenSSL
     1.7 + * project 2001.
     1.8 + */
     1.9 +/* ====================================================================
    1.10 + * Copyright (c) 2001 The OpenSSL Project.  All rights reserved.
    1.11 + *
    1.12 + * Redistribution and use in source and binary forms, with or without
    1.13 + * modification, are permitted provided that the following conditions
    1.14 + * are met:
    1.15 + *
    1.16 + * 1. Redistributions of source code must retain the above copyright
    1.17 + *    notice, this list of conditions and the following disclaimer. 
    1.18 + *
    1.19 + * 2. Redistributions in binary form must reproduce the above copyright
    1.20 + *    notice, this list of conditions and the following disclaimer in
    1.21 + *    the documentation and/or other materials provided with the
    1.22 + *    distribution.
    1.23 + *
    1.24 + * 3. All advertising materials mentioning features or use of this
    1.25 + *    software must display the following acknowledgment:
    1.26 + *    "This product includes software developed by the OpenSSL Project
    1.27 + *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
    1.28 + *
    1.29 + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
    1.30 + *    endorse or promote products derived from this software without
    1.31 + *    prior written permission. For written permission, please contact
    1.32 + *    openssl-core@openssl.org.
    1.33 + *
    1.34 + * 5. Products derived from this software may not be called "OpenSSL"
    1.35 + *    nor may "OpenSSL" appear in their names without prior written
    1.36 + *    permission of the OpenSSL Project.
    1.37 + *
    1.38 + * 6. Redistributions of any form whatsoever must retain the following
    1.39 + *    acknowledgment:
    1.40 + *    "This product includes software developed by the OpenSSL Project
    1.41 + *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
    1.42 + *
    1.43 + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
    1.44 + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.45 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    1.46 + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
    1.47 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.48 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
    1.49 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    1.50 + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    1.51 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    1.52 + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    1.53 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    1.54 + * OF THE POSSIBILITY OF SUCH DAMAGE.
    1.55 + * ====================================================================
    1.56 + *
    1.57 + * This product includes cryptographic software written by Eric Young
    1.58 + * (eay@cryptsoft.com).  This product includes software written by Tim
    1.59 + * Hudson (tjh@cryptsoft.com).
    1.60 + *
    1.61 + */
    1.62 +/*
    1.63 + © Portions copyright (c) 2006 Nokia Corporation.  All rights reserved.
    1.64 + */
    1.65 +
    1.66 +#ifndef HEADER_UI_H
    1.67 +#define HEADER_UI_H
    1.68 +
    1.69 +#if (defined(__SYMBIAN32__) && !defined(SYMBIAN))
    1.70 +#define SYMBIAN
    1.71 +#endif
    1.72 +
    1.73 +#ifdef SYMBIAN
    1.74 +#include <e32def.h>
    1.75 +#endif
    1.76 +#ifndef OPENSSL_NO_DEPRECATED
    1.77 +#include <openssl/crypto.h>
    1.78 +#endif
    1.79 +#include <openssl/safestack.h>
    1.80 +#include <openssl/ossl_typ.h>
    1.81 +
    1.82 +#ifdef  __cplusplus
    1.83 +extern "C" {
    1.84 +#endif
    1.85 +
    1.86 +/* Declared already in ossl_typ.h */
    1.87 +/* typedef struct ui_st UI; */
    1.88 +/* typedef struct ui_method_st UI_METHOD; */
    1.89 +
    1.90 +
    1.91 +/* All the following functions return -1 or NULL on error and in some cases
    1.92 +   (UI_process()) -2 if interrupted or in some other way cancelled.
    1.93 +   When everything is fine, they return 0, a positive value or a non-NULL
    1.94 +   pointer, all depending on their purpose. */
    1.95 +
    1.96 +/* Creators and destructor.   */
    1.97 +IMPORT_C UI *UI_new(void);
    1.98 +IMPORT_C UI *UI_new_method(const UI_METHOD *method);
    1.99 +IMPORT_C void UI_free(UI *ui);
   1.100 +
   1.101 +/* The following functions are used to add strings to be printed and prompt
   1.102 +   strings to prompt for data.  The names are UI_{add,dup}_<function>_string
   1.103 +   and UI_{add,dup}_input_boolean.
   1.104 +
   1.105 +   UI_{add,dup}_<function>_string have the following meanings:
   1.106 +	add	add a text or prompt string.  The pointers given to these
   1.107 +		functions are used verbatim, no copying is done.
   1.108 +	dup	make a copy of the text or prompt string, then add the copy
   1.109 +		to the collection of strings in the user interface.
   1.110 +	<function>
   1.111 +		The function is a name for the functionality that the given
   1.112 +		string shall be used for.  It can be one of:
   1.113 +			input	use the string as data prompt.
   1.114 +			verify	use the string as verification prompt.  This
   1.115 +				is used to verify a previous input.
   1.116 +			info	use the string for informational output.
   1.117 +			error	use the string for error output.
   1.118 +   Honestly, there's currently no difference between info and error for the
   1.119 +   moment.
   1.120 +
   1.121 +   UI_{add,dup}_input_boolean have the same semantics for "add" and "dup",
   1.122 +   and are typically used when one wants to prompt for a yes/no response.
   1.123 +
   1.124 +
   1.125 +   All of the functions in this group take a UI and a prompt string.
   1.126 +   The string input and verify addition functions also take a flag argument,
   1.127 +   a buffer for the result to end up with, a minimum input size and a maximum
   1.128 +   input size (the result buffer MUST be large enough to be able to contain
   1.129 +   the maximum number of characters).  Additionally, the verify addition
   1.130 +   functions takes another buffer to compare the result against.
   1.131 +   The boolean input functions take an action description string (which should
   1.132 +   be safe to ignore if the expected user action is obvious, for example with
   1.133 +   a dialog box with an OK button and a Cancel button), a string of acceptable
   1.134 +   characters to mean OK and to mean Cancel.  The two last strings are checked
   1.135 +   to make sure they don't have common characters.  Additionally, the same
   1.136 +   flag argument as for the string input is taken, as well as a result buffer.
   1.137 +   The result buffer is required to be at least one byte long.  Depending on
   1.138 +   the answer, the first character from the OK or the Cancel character strings
   1.139 +   will be stored in the first byte of the result buffer.  No NUL will be
   1.140 +   added, so the result is *not* a string.
   1.141 +
   1.142 +   On success, the all return an index of the added information.  That index
   1.143 +   is usefull when retrieving results with UI_get0_result(). */
   1.144 +IMPORT_C int UI_add_input_string(UI *ui, const char *prompt, int flags,
   1.145 +	char *result_buf, int minsize, int maxsize);
   1.146 +IMPORT_C int UI_dup_input_string(UI *ui, const char *prompt, int flags,
   1.147 +	char *result_buf, int minsize, int maxsize);
   1.148 +IMPORT_C int UI_add_verify_string(UI *ui, const char *prompt, int flags,
   1.149 +	char *result_buf, int minsize, int maxsize, const char *test_buf);
   1.150 +IMPORT_C int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
   1.151 +	char *result_buf, int minsize, int maxsize, const char *test_buf);
   1.152 +IMPORT_C int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
   1.153 +	const char *ok_chars, const char *cancel_chars,
   1.154 +	int flags, char *result_buf);
   1.155 +IMPORT_C int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
   1.156 +	const char *ok_chars, const char *cancel_chars,
   1.157 +	int flags, char *result_buf);
   1.158 +IMPORT_C int UI_add_info_string(UI *ui, const char *text);
   1.159 +IMPORT_C int UI_dup_info_string(UI *ui, const char *text);
   1.160 +IMPORT_C int UI_add_error_string(UI *ui, const char *text);
   1.161 +IMPORT_C int UI_dup_error_string(UI *ui, const char *text);
   1.162 +
   1.163 +/* These are the possible flags.  They can be or'ed together. */
   1.164 +/* Use to have echoing of input */
   1.165 +#define UI_INPUT_FLAG_ECHO		0x01
   1.166 +/* Use a default password.  Where that password is found is completely
   1.167 +   up to the application, it might for example be in the user data set
   1.168 +   with UI_add_user_data().  It is not recommended to have more than
   1.169 +   one input in each UI being marked with this flag, or the application
   1.170 +   might get confused. */
   1.171 +#define UI_INPUT_FLAG_DEFAULT_PWD	0x02
   1.172 +
   1.173 +/* The user of these routines may want to define flags of their own.  The core
   1.174 +   UI won't look at those, but will pass them on to the method routines.  They
   1.175 +   must use higher bits so they don't get confused with the UI bits above.
   1.176 +   UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use.  A good
   1.177 +   example of use is this:
   1.178 +
   1.179 +	#define MY_UI_FLAG1	(0x01 << UI_INPUT_FLAG_USER_BASE)
   1.180 +
   1.181 +*/
   1.182 +#define UI_INPUT_FLAG_USER_BASE	16
   1.183 +
   1.184 +
   1.185 +/* The following function helps construct a prompt.  object_desc is a
   1.186 +   textual short description of the object, for example "pass phrase",
   1.187 +   and object_name is the name of the object (might be a card name or
   1.188 +   a file name.
   1.189 +   The returned string shall always be allocated on the heap with
   1.190 +   OPENSSL_malloc(), and need to be free'd with OPENSSL_free().
   1.191 +
   1.192 +   If the ui_method doesn't contain a pointer to a user-defined prompt
   1.193 +   constructor, a default string is built, looking like this:
   1.194 +
   1.195 +	"Enter {object_desc} for {object_name}:"
   1.196 +
   1.197 +   So, if object_desc has the value "pass phrase" and object_name has
   1.198 +   the value "foo.key", the resulting string is:
   1.199 +
   1.200 +	"Enter pass phrase for foo.key:"
   1.201 +*/
   1.202 +IMPORT_C char *UI_construct_prompt(UI *ui_method,
   1.203 +	const char *object_desc, const char *object_name);
   1.204 +
   1.205 +
   1.206 +/* The following function is used to store a pointer to user-specific data.
   1.207 +   Any previous such pointer will be returned and replaced.
   1.208 +
   1.209 +   For callback purposes, this function makes a lot more sense than using
   1.210 +   ex_data, since the latter requires that different parts of OpenSSL or
   1.211 +   applications share the same ex_data index.
   1.212 +
   1.213 +   Note that the UI_OpenSSL() method completely ignores the user data.
   1.214 +   Other methods may not, however.  */
   1.215 +IMPORT_C void *UI_add_user_data(UI *ui, void *user_data);
   1.216 +/* We need a user data retrieving function as well.  */
   1.217 +IMPORT_C void *UI_get0_user_data(UI *ui);
   1.218 +
   1.219 +/* Return the result associated with a prompt given with the index i. */
   1.220 +IMPORT_C const char *UI_get0_result(UI *ui, int i);
   1.221 +
   1.222 +/* When all strings have been added, process the whole thing. */
   1.223 +IMPORT_C int UI_process(UI *ui);
   1.224 +
   1.225 +/* Give a user interface parametrised control commands.  This can be used to
   1.226 +   send down an integer, a data pointer or a function pointer, as well as
   1.227 +   be used to get information from a UI. */
   1.228 +IMPORT_C int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)(void));
   1.229 +
   1.230 +/* The commands */
   1.231 +/* Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the
   1.232 +   OpenSSL error stack before printing any info or added error messages and
   1.233 +   before any prompting. */
   1.234 +#define UI_CTRL_PRINT_ERRORS		1
   1.235 +/* Check if a UI_process() is possible to do again with the same instance of
   1.236 +   a user interface.  This makes UI_ctrl() return 1 if it is redoable, and 0
   1.237 +   if not. */
   1.238 +#define UI_CTRL_IS_REDOABLE		2
   1.239 +
   1.240 +
   1.241 +/* Some methods may use extra data */
   1.242 +#define UI_set_app_data(s,arg)         UI_set_ex_data(s,0,arg)
   1.243 +#define UI_get_app_data(s)             UI_get_ex_data(s,0)
   1.244 +IMPORT_C int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
   1.245 +	CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
   1.246 +IMPORT_C int UI_set_ex_data(UI *r,int idx,void *arg);
   1.247 +IMPORT_C void *UI_get_ex_data(UI *r, int idx);
   1.248 +
   1.249 +/* Use specific methods instead of the built-in one */
   1.250 +IMPORT_C void UI_set_default_method(const UI_METHOD *meth);
   1.251 +IMPORT_C const UI_METHOD *UI_get_default_method(void);
   1.252 +IMPORT_C const UI_METHOD *UI_get_method(UI *ui);
   1.253 +IMPORT_C const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
   1.254 +
   1.255 +/* The method with all the built-in thingies */
   1.256 +IMPORT_C UI_METHOD *UI_OpenSSL(void);
   1.257 +
   1.258 +
   1.259 +/* ---------- For method writers ---------- */
   1.260 +/* A method contains a number of functions that implement the low level
   1.261 +   of the User Interface.  The functions are:
   1.262 +
   1.263 +	an opener	This function starts a session, maybe by opening
   1.264 +			a channel to a tty, or by opening a window.
   1.265 +	a writer	This function is called to write a given string,
   1.266 +			maybe to the tty, maybe as a field label in a
   1.267 +			window.
   1.268 +	a flusher	This function is called to flush everything that
   1.269 +			has been output so far.  It can be used to actually
   1.270 +			display a dialog box after it has been built.
   1.271 +	a reader	This function is called to read a given prompt,
   1.272 +			maybe from the tty, maybe from a field in a
   1.273 +			window.  Note that it's called wth all string
   1.274 +			structures, not only the prompt ones, so it must
   1.275 +			check such things itself.
   1.276 +	a closer	This function closes the session, maybe by closing
   1.277 +			the channel to the tty, or closing the window.
   1.278 +
   1.279 +   All these functions are expected to return:
   1.280 +
   1.281 +	0	on error.
   1.282 +	1	on success.
   1.283 +	-1	on out-of-band events, for example if some prompting has
   1.284 +		been canceled (by pressing Ctrl-C, for example).  This is
   1.285 +		only checked when returned by the flusher or the reader.
   1.286 +
   1.287 +   The way this is used, the opener is first called, then the writer for all
   1.288 +   strings, then the flusher, then the reader for all strings and finally the
   1.289 +   closer.  Note that if you want to prompt from a terminal or other command
   1.290 +   line interface, the best is to have the reader also write the prompts
   1.291 +   instead of having the writer do it.  If you want to prompt from a dialog
   1.292 +   box, the writer can be used to build up the contents of the box, and the
   1.293 +   flusher to actually display the box and run the event loop until all data
   1.294 +   has been given, after which the reader only grabs the given data and puts
   1.295 +   them back into the UI strings.
   1.296 +
   1.297 +   All method functions take a UI as argument.  Additionally, the writer and
   1.298 +   the reader take a UI_STRING.
   1.299 +*/
   1.300 +
   1.301 +/* The UI_STRING type is the data structure that contains all the needed info
   1.302 +   about a string or a prompt, including test data for a verification prompt.
   1.303 +*/
   1.304 +DECLARE_STACK_OF(UI_STRING)
   1.305 +typedef struct ui_string_st UI_STRING;
   1.306 +
   1.307 +/* The different types of strings that are currently supported.
   1.308 +   This is only needed by method authors. */
   1.309 +enum UI_string_types
   1.310 +	{
   1.311 +	UIT_NONE=0,
   1.312 +	UIT_PROMPT,		/* Prompt for a string */
   1.313 +	UIT_VERIFY,		/* Prompt for a string and verify */
   1.314 +	UIT_BOOLEAN,		/* Prompt for a yes/no response */
   1.315 +	UIT_INFO,		/* Send info to the user */
   1.316 +	UIT_ERROR		/* Send an error message to the user */
   1.317 +	};
   1.318 +
   1.319 +/* Create and manipulate methods */
   1.320 +IMPORT_C UI_METHOD *UI_create_method(char *name);
   1.321 +IMPORT_C void UI_destroy_method(UI_METHOD *ui_method);
   1.322 +IMPORT_C int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui));
   1.323 +IMPORT_C int UI_method_set_writer(UI_METHOD *method, int (*writer)(UI *ui, UI_STRING *uis));
   1.324 +IMPORT_C int UI_method_set_flusher(UI_METHOD *method, int (*flusher)(UI *ui));
   1.325 +IMPORT_C int UI_method_set_reader(UI_METHOD *method, int (*reader)(UI *ui, UI_STRING *uis));
   1.326 +IMPORT_C int UI_method_set_closer(UI_METHOD *method, int (*closer)(UI *ui));
   1.327 +IMPORT_C int (*UI_method_get_opener(UI_METHOD *method))(UI*);
   1.328 +IMPORT_C int (*UI_method_get_writer(UI_METHOD *method))(UI*,UI_STRING*);
   1.329 +IMPORT_C int (*UI_method_get_flusher(UI_METHOD *method))(UI*);
   1.330 +IMPORT_C int (*UI_method_get_reader(UI_METHOD *method))(UI*,UI_STRING*);
   1.331 +IMPORT_C int (*UI_method_get_closer(UI_METHOD *method))(UI*);
   1.332 +
   1.333 +/* The following functions are helpers for method writers to access relevant
   1.334 +   data from a UI_STRING. */
   1.335 +
   1.336 +/* Return type of the UI_STRING */
   1.337 +IMPORT_C enum UI_string_types UI_get_string_type(UI_STRING *uis);
   1.338 +/* Return input flags of the UI_STRING */
   1.339 +IMPORT_C int UI_get_input_flags(UI_STRING *uis);
   1.340 +/* Return the actual string to output (the prompt, info or error) */
   1.341 +IMPORT_C const char *UI_get0_output_string(UI_STRING *uis);
   1.342 +/* Return the optional action string to output (the boolean promtp instruction) */
   1.343 +IMPORT_C const char *UI_get0_action_string(UI_STRING *uis);
   1.344 +/* Return the result of a prompt */
   1.345 +IMPORT_C const char *UI_get0_result_string(UI_STRING *uis);
   1.346 +/* Return the string to test the result against.  Only useful with verifies. */
   1.347 +IMPORT_C const char *UI_get0_test_string(UI_STRING *uis);
   1.348 +/* Return the required minimum size of the result */
   1.349 +IMPORT_C int UI_get_result_minsize(UI_STRING *uis);
   1.350 +/* Return the required maximum size of the result */
   1.351 +IMPORT_C int UI_get_result_maxsize(UI_STRING *uis);
   1.352 +/* Set the result of a UI_STRING. */
   1.353 +IMPORT_C int UI_set_result(UI *ui, UI_STRING *uis, const char *result);
   1.354 +
   1.355 +
   1.356 +/* A couple of popular utility functions */
   1.357 +IMPORT_C int UI_UTIL_read_pw_string(char *buf,int length,const char *prompt,int verify);
   1.358 +IMPORT_C int UI_UTIL_read_pw(char *buf,char *buff,int size,const char *prompt,int verify);
   1.359 +
   1.360 +
   1.361 +/* BEGIN ERROR CODES */
   1.362 +/* The following lines are auto generated by the script mkerr.pl. Any changes
   1.363 + * made after this point may be overwritten when the script is next run.
   1.364 + */
   1.365 +IMPORT_C void ERR_load_UI_strings(void);
   1.366 +
   1.367 +/* Error codes for the UI functions. */
   1.368 +
   1.369 +/* Function codes. */
   1.370 +#define UI_F_GENERAL_ALLOCATE_BOOLEAN			 108
   1.371 +#define UI_F_GENERAL_ALLOCATE_PROMPT			 109
   1.372 +#define UI_F_GENERAL_ALLOCATE_STRING			 100
   1.373 +#define UI_F_UI_CTRL					 111
   1.374 +#define UI_F_UI_DUP_ERROR_STRING			 101
   1.375 +#define UI_F_UI_DUP_INFO_STRING				 102
   1.376 +#define UI_F_UI_DUP_INPUT_BOOLEAN			 110
   1.377 +#define UI_F_UI_DUP_INPUT_STRING			 103
   1.378 +#define UI_F_UI_DUP_VERIFY_STRING			 106
   1.379 +#define UI_F_UI_GET0_RESULT				 107
   1.380 +#define UI_F_UI_NEW_METHOD				 104
   1.381 +#define UI_F_UI_SET_RESULT				 105
   1.382 +
   1.383 +/* Reason codes. */
   1.384 +#define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS		 104
   1.385 +#define UI_R_INDEX_TOO_LARGE				 102
   1.386 +#define UI_R_INDEX_TOO_SMALL				 103
   1.387 +#define UI_R_NO_RESULT_BUFFER				 105
   1.388 +#define UI_R_RESULT_TOO_LARGE				 100
   1.389 +#define UI_R_RESULT_TOO_SMALL				 101
   1.390 +#define UI_R_UNKNOWN_CONTROL_COMMAND			 106
   1.391 +
   1.392 +#ifdef  __cplusplus
   1.393 +}
   1.394 +#endif
   1.395 +#endif