xref: /netbsd-src/crypto/external/bsd/openssl.old/dist/doc/man3/UI_new.pod (revision 4724848cf0da353df257f730694b7882798e5daf)
1*4724848cSchristos=pod
2*4724848cSchristos
3*4724848cSchristos=head1 NAME
4*4724848cSchristos
5*4724848cSchristosUI,
6*4724848cSchristosUI_new, UI_new_method, UI_free, UI_add_input_string, UI_dup_input_string,
7*4724848cSchristosUI_add_verify_string, UI_dup_verify_string, UI_add_input_boolean,
8*4724848cSchristosUI_dup_input_boolean, UI_add_info_string, UI_dup_info_string,
9*4724848cSchristosUI_add_error_string, UI_dup_error_string, UI_construct_prompt,
10*4724848cSchristosUI_add_user_data, UI_dup_user_data, UI_get0_user_data, UI_get0_result,
11*4724848cSchristosUI_get_result_length,
12*4724848cSchristosUI_process, UI_ctrl, UI_set_default_method, UI_get_default_method,
13*4724848cSchristosUI_get_method, UI_set_method, UI_OpenSSL, UI_null - user interface
14*4724848cSchristos
15*4724848cSchristos=head1 SYNOPSIS
16*4724848cSchristos
17*4724848cSchristos #include <openssl/ui.h>
18*4724848cSchristos
19*4724848cSchristos typedef struct ui_st UI;
20*4724848cSchristos
21*4724848cSchristos UI *UI_new(void);
22*4724848cSchristos UI *UI_new_method(const UI_METHOD *method);
23*4724848cSchristos void UI_free(UI *ui);
24*4724848cSchristos
25*4724848cSchristos int UI_add_input_string(UI *ui, const char *prompt, int flags,
26*4724848cSchristos                         char *result_buf, int minsize, int maxsize);
27*4724848cSchristos int UI_dup_input_string(UI *ui, const char *prompt, int flags,
28*4724848cSchristos                         char *result_buf, int minsize, int maxsize);
29*4724848cSchristos int UI_add_verify_string(UI *ui, const char *prompt, int flags,
30*4724848cSchristos                          char *result_buf, int minsize, int maxsize,
31*4724848cSchristos                          const char *test_buf);
32*4724848cSchristos int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
33*4724848cSchristos                          char *result_buf, int minsize, int maxsize,
34*4724848cSchristos                          const char *test_buf);
35*4724848cSchristos int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
36*4724848cSchristos                          const char *ok_chars, const char *cancel_chars,
37*4724848cSchristos                          int flags, char *result_buf);
38*4724848cSchristos int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
39*4724848cSchristos                          const char *ok_chars, const char *cancel_chars,
40*4724848cSchristos                          int flags, char *result_buf);
41*4724848cSchristos int UI_add_info_string(UI *ui, const char *text);
42*4724848cSchristos int UI_dup_info_string(UI *ui, const char *text);
43*4724848cSchristos int UI_add_error_string(UI *ui, const char *text);
44*4724848cSchristos int UI_dup_error_string(UI *ui, const char *text);
45*4724848cSchristos
46*4724848cSchristos char *UI_construct_prompt(UI *ui_method,
47*4724848cSchristos        const char *object_desc, const char *object_name);
48*4724848cSchristos
49*4724848cSchristos void *UI_add_user_data(UI *ui, void *user_data);
50*4724848cSchristos int UI_dup_user_data(UI *ui, void *user_data);
51*4724848cSchristos void *UI_get0_user_data(UI *ui);
52*4724848cSchristos
53*4724848cSchristos const char *UI_get0_result(UI *ui, int i);
54*4724848cSchristos int UI_get_result_length(UI *ui, int i);
55*4724848cSchristos
56*4724848cSchristos int UI_process(UI *ui);
57*4724848cSchristos
58*4724848cSchristos int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)());
59*4724848cSchristos
60*4724848cSchristos void UI_set_default_method(const UI_METHOD *meth);
61*4724848cSchristos const UI_METHOD *UI_get_default_method(void);
62*4724848cSchristos const UI_METHOD *UI_get_method(UI *ui);
63*4724848cSchristos const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
64*4724848cSchristos
65*4724848cSchristos UI_METHOD *UI_OpenSSL(void);
66*4724848cSchristos const UI_METHOD *UI_null(void);
67*4724848cSchristos
68*4724848cSchristos=head1 DESCRIPTION
69*4724848cSchristos
70*4724848cSchristosUI stands for User Interface, and is general purpose set of routines to
71*4724848cSchristosprompt the user for text-based information.  Through user-written methods
72*4724848cSchristos(see L<UI_create_method(3)>), prompting can be done in any way
73*4724848cSchristosimaginable, be it plain text prompting, through dialog boxes or from a
74*4724848cSchristoscell phone.
75*4724848cSchristos
76*4724848cSchristosAll the functions work through a context of the type UI.  This context
77*4724848cSchristoscontains all the information needed to prompt correctly as well as a
78*4724848cSchristosreference to a UI_METHOD, which is an ordered vector of functions that
79*4724848cSchristoscarry out the actual prompting.
80*4724848cSchristos
81*4724848cSchristosThe first thing to do is to create a UI with UI_new() or UI_new_method(),
82*4724848cSchristosthen add information to it with the UI_add or UI_dup functions.  Also,
83*4724848cSchristosuser-defined random data can be passed down to the underlying method
84*4724848cSchristosthrough calls to UI_add_user_data() or UI_dup_user_data().  The default
85*4724848cSchristosUI method doesn't care about these data, but other methods might.  Finally,
86*4724848cSchristosuse UI_process() to actually perform the prompting and UI_get0_result()
87*4724848cSchristosand UI_get_result_length() to find the result to the prompt and its length.
88*4724848cSchristos
89*4724848cSchristosA UI can contain more than one prompt, which are performed in the given
90*4724848cSchristossequence.  Each prompt gets an index number which is returned by the
91*4724848cSchristosUI_add and UI_dup functions, and has to be used to get the corresponding
92*4724848cSchristosresult with UI_get0_result() and UI_get_result_length().
93*4724848cSchristos
94*4724848cSchristosUI_process() can be called more than once on the same UI, thereby allowing
95*4724848cSchristosa UI to have a long lifetime, but can just as well have a short lifetime.
96*4724848cSchristos
97*4724848cSchristosThe functions are as follows:
98*4724848cSchristos
99*4724848cSchristosUI_new() creates a new UI using the default UI method.  When done with
100*4724848cSchristosthis UI, it should be freed using UI_free().
101*4724848cSchristos
102*4724848cSchristosUI_new_method() creates a new UI using the given UI method.  When done with
103*4724848cSchristosthis UI, it should be freed using UI_free().
104*4724848cSchristos
105*4724848cSchristosUI_OpenSSL() returns the built-in UI method (note: not necessarily the
106*4724848cSchristosdefault one, since the default can be changed.  See further on).  This
107*4724848cSchristosmethod is the most machine/OS dependent part of OpenSSL and normally
108*4724848cSchristosgenerates the most problems when porting.
109*4724848cSchristos
110*4724848cSchristosUI_null() returns a UI method that does nothing.  Its use is to avoid
111*4724848cSchristosgetting internal defaults for passed UI_METHOD pointers.
112*4724848cSchristos
113*4724848cSchristosUI_free() removes a UI from memory, along with all other pieces of memory
114*4724848cSchristosthat's connected to it, like duplicated input strings, results and others.
115*4724848cSchristosIf B<ui> is NULL nothing is done.
116*4724848cSchristos
117*4724848cSchristosUI_add_input_string() and UI_add_verify_string() add a prompt to the UI,
118*4724848cSchristosas well as flags and a result buffer and the desired minimum and maximum
119*4724848cSchristossizes of the result, not counting the final NUL character.  The given
120*4724848cSchristosinformation is used to prompt for information, for example a password,
121*4724848cSchristosand to verify a password (i.e. having the user enter it twice and check
122*4724848cSchristosthat the same string was entered twice).  UI_add_verify_string() takes
123*4724848cSchristosand extra argument that should be a pointer to the result buffer of the
124*4724848cSchristosinput string that it's supposed to verify, or verification will fail.
125*4724848cSchristos
126*4724848cSchristosUI_add_input_boolean() adds a prompt to the UI that's supposed to be answered
127*4724848cSchristosin a boolean way, with a single character for yes and a different character
128*4724848cSchristosfor no.  A set of characters that can be used to cancel the prompt is given
129*4724848cSchristosas well.  The prompt itself is divided in two, one part being the
130*4724848cSchristosdescriptive text (given through the I<prompt> argument) and one describing
131*4724848cSchristosthe possible answers (given through the I<action_desc> argument).
132*4724848cSchristos
133*4724848cSchristosUI_add_info_string() and UI_add_error_string() add strings that are shown at
134*4724848cSchristosthe same time as the prompt for extra information or to show an error string.
135*4724848cSchristosThe difference between the two is only conceptual.  With the builtin method,
136*4724848cSchristosthere's no technical difference between them.  Other methods may make a
137*4724848cSchristosdifference between them, however.
138*4724848cSchristos
139*4724848cSchristosThe flags currently supported are B<UI_INPUT_FLAG_ECHO>, which is relevant for
140*4724848cSchristosUI_add_input_string() and will have the users response be echoed (when
141*4724848cSchristosprompting for a password, this flag should obviously not be used, and
142*4724848cSchristosB<UI_INPUT_FLAG_DEFAULT_PWD>, which means that a default password of some
143*4724848cSchristossort will be used (completely depending on the application and the UI
144*4724848cSchristosmethod).
145*4724848cSchristos
146*4724848cSchristosUI_dup_input_string(), UI_dup_verify_string(), UI_dup_input_boolean(),
147*4724848cSchristosUI_dup_info_string() and UI_dup_error_string() are basically the same
148*4724848cSchristosas their UI_add counterparts, except that they make their own copies
149*4724848cSchristosof all strings.
150*4724848cSchristos
151*4724848cSchristosUI_construct_prompt() is a helper function that can be used to create
152*4724848cSchristosa prompt from two pieces of information: an description and a name.
153*4724848cSchristosThe default constructor (if there is none provided by the method used)
154*4724848cSchristoscreates a string "Enter I<description> for I<name>:".  With the
155*4724848cSchristosdescription "pass phrase" and the filename "foo.key", that becomes
156*4724848cSchristos"Enter pass phrase for foo.key:".  Other methods may create whatever
157*4724848cSchristosstring and may include encodings that will be processed by the other
158*4724848cSchristosmethod functions.
159*4724848cSchristos
160*4724848cSchristosUI_add_user_data() adds a user data pointer for the method to use at any
161*4724848cSchristostime.  The builtin UI method doesn't care about this info.  Note that several
162*4724848cSchristoscalls to this function doesn't add data, it replaces the previous blob
163*4724848cSchristoswith the one given as argument.
164*4724848cSchristos
165*4724848cSchristosUI_dup_user_data() duplicates the user data and works as an alternative
166*4724848cSchristosto UI_add_user_data() when the user data needs to be preserved for a longer
167*4724848cSchristosduration, perhaps even the lifetime of the application.  The UI object takes
168*4724848cSchristosownership of this duplicate and will free it whenever it gets replaced or
169*4724848cSchristosthe UI is destroyed.  UI_dup_user_data() returns 0 on success, or -1 on memory
170*4724848cSchristosallocation failure or if the method doesn't have a duplicator function.
171*4724848cSchristos
172*4724848cSchristosUI_get0_user_data() retrieves the data that has last been given to the
173*4724848cSchristosUI with UI_add_user_data() or UI_dup_user_data.
174*4724848cSchristos
175*4724848cSchristosUI_get0_result() returns a pointer to the result buffer associated with
176*4724848cSchristosthe information indexed by I<i>.
177*4724848cSchristos
178*4724848cSchristosUI_get_result_length() returns the length of the result buffer associated with
179*4724848cSchristosthe information indexed by I<i>.
180*4724848cSchristos
181*4724848cSchristosUI_process() goes through the information given so far, does all the printing
182*4724848cSchristosand prompting and returns the final status, which is -2 on out-of-band events
183*4724848cSchristos(Interrupt, Cancel, ...), -1 on error and 0 on success.
184*4724848cSchristos
185*4724848cSchristosUI_ctrl() adds extra control for the application author.  For now, it
186*4724848cSchristosunderstands two commands: B<UI_CTRL_PRINT_ERRORS>, which makes UI_process()
187*4724848cSchristosprint the OpenSSL error stack as part of processing the UI, and
188*4724848cSchristosB<UI_CTRL_IS_REDOABLE>, which returns a flag saying if the used UI can
189*4724848cSchristosbe used again or not.
190*4724848cSchristos
191*4724848cSchristosUI_set_default_method() changes the default UI method to the one given.
192*4724848cSchristosThis function is not thread-safe and should not be called at the same time
193*4724848cSchristosas other OpenSSL functions.
194*4724848cSchristos
195*4724848cSchristosUI_get_default_method() returns a pointer to the current default UI method.
196*4724848cSchristos
197*4724848cSchristosUI_get_method() returns the UI method associated with a given UI.
198*4724848cSchristos
199*4724848cSchristosUI_set_method() changes the UI method associated with a given UI.
200*4724848cSchristos
201*4724848cSchristos=head1 NOTES
202*4724848cSchristos
203*4724848cSchristosThe resulting strings that the built in method UI_OpenSSL() generate
204*4724848cSchristosare assumed to be encoded according to the current locale or (for
205*4724848cSchristosWindows) code page.
206*4724848cSchristosFor applications having different demands, these strings need to be
207*4724848cSchristosconverted appropriately by the caller.
208*4724848cSchristosFor Windows, if the OPENSSL_WIN32_UTF8 environment variable is set,
209*4724848cSchristosthe built-in method UI_OpenSSL() will produce UTF-8 encoded strings
210*4724848cSchristosinstead.
211*4724848cSchristos
212*4724848cSchristos=head1 RETURN VALUES
213*4724848cSchristos
214*4724848cSchristosUI_new() and UI_new_method() return a valid B<UI> structure or NULL if an error
215*4724848cSchristosoccurred.
216*4724848cSchristos
217*4724848cSchristosUI_add_input_string(), UI_dup_input_string(), UI_add_verify_string(),
218*4724848cSchristosUI_dup_verify_string(), UI_add_input_boolean(), UI_dup_input_boolean(),
219*4724848cSchristosUI_add_info_string(), UI_dup_info_string(), UI_add_error_string()
220*4724848cSchristosand UI_dup_error_string() return a positive number on success or a value which
221*4724848cSchristosis less than or equal to 0 otherwise.
222*4724848cSchristos
223*4724848cSchristosUI_construct_prompt() returns a string or NULL if an error occurred.
224*4724848cSchristos
225*4724848cSchristosUI_dup_user_data() returns 0 on success or -1 on error.
226*4724848cSchristos
227*4724848cSchristosUI_get0_result() returns a string or NULL on error.
228*4724848cSchristos
229*4724848cSchristosUI_get_result_length() returns a positive integer or 0 on success; otherwise it
230*4724848cSchristosreturns -1 on error.
231*4724848cSchristos
232*4724848cSchristosUI_process() returns 0 on success or a negative value on error.
233*4724848cSchristos
234*4724848cSchristosUI_ctrl() returns a mask on success or -1 on error.
235*4724848cSchristos
236*4724848cSchristosUI_get_default_method(), UI_get_method(), UI_OpenSSL(), UI_null() and
237*4724848cSchristosUI_set_method() return either a valid B<UI_METHOD> structure or NULL
238*4724848cSchristosrespectively.
239*4724848cSchristos
240*4724848cSchristos=head1 HISTORY
241*4724848cSchristos
242*4724848cSchristosThe UI_dup_user_data() function was added in OpenSSL 1.1.1.
243*4724848cSchristos
244*4724848cSchristos=head1 COPYRIGHT
245*4724848cSchristos
246*4724848cSchristosCopyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
247*4724848cSchristos
248*4724848cSchristosLicensed under the OpenSSL license (the "License").  You may not use
249*4724848cSchristosthis file except in compliance with the License.  You can obtain a copy
250*4724848cSchristosin the file LICENSE in the source distribution or at
251*4724848cSchristosL<https://www.openssl.org/source/license.html>.
252*4724848cSchristos
253*4724848cSchristos=cut
254