| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2016-05-18 03:38:09 +08:00
										 |  |  |  * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2001-05-07 07:19:37 +08:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-12-06 20:59:46 +08:00
										 |  |  |  * Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 03:38:09 +08:00
										 |  |  |  * this file except in compliance with the License.  You can obtain a copy | 
					
						
							|  |  |  |  * in the file LICENSE in the source distribution or at | 
					
						
							|  |  |  |  * https://www.openssl.org/source/license.html
 | 
					
						
							| 
									
										
										
										
											2001-05-07 07:19:37 +08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 06:45:57 +08:00
										 |  |  | #ifndef OSSL_CRYPTO_UI_LOCAL_H
 | 
					
						
							|  |  |  | # define OSSL_CRYPTO_UI_LOCAL_H
 | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | # include <openssl/ui.h>
 | 
					
						
							|  |  |  | # include <openssl/crypto.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ifdef _
 | 
					
						
							|  |  |  | #  undef _
 | 
					
						
							|  |  |  | # endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ui_method_st { | 
					
						
							|  |  |  |     char *name; | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * All the functions return 1 or non-NULL for success and 0 or NULL for | 
					
						
							|  |  |  |      * failure | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * Open whatever channel for this, be it the console, an X window or | 
					
						
							|  |  |  |      * whatever. This function should use the ex_data structure to save | 
					
						
							|  |  |  |      * intermediate data. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     int (*ui_open_session) (UI *ui); | 
					
						
							|  |  |  |     int (*ui_write_string) (UI *ui, UI_STRING *uis); | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * Flush the output.  If a GUI dialog box is used, this function can be | 
					
						
							|  |  |  |      * used to actually display it. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     int (*ui_flush) (UI *ui); | 
					
						
							|  |  |  |     int (*ui_read_string) (UI *ui, UI_STRING *uis); | 
					
						
							|  |  |  |     int (*ui_close_session) (UI *ui); | 
					
						
							| 
									
										
										
										
											2017-05-28 15:35:11 +08:00
										 |  |  |     /*
 | 
					
						
							|  |  |  |      * Duplicate the ui_data that often comes alongside a ui_method.  This | 
					
						
							|  |  |  |      * allows some backends to save away UI information for later use. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void *(*ui_duplicate_data) (UI *ui, void *ui_data); | 
					
						
							|  |  |  |     void (*ui_destroy_data) (UI *ui, void *ui_data); | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  |     /*
 | 
					
						
							|  |  |  |      * Construct a prompt in a user-defined manner.  object_desc is a textual | 
					
						
							|  |  |  |      * short description of the object, for example "pass phrase", and | 
					
						
							|  |  |  |      * object_name is the name of the object (might be a card name or a file | 
					
						
							|  |  |  |      * name. The returned string shall always be allocated on the heap with | 
					
						
							|  |  |  |      * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     char *(*ui_construct_prompt) (UI *ui, const char *object_desc, | 
					
						
							|  |  |  |                                   const char *object_name); | 
					
						
							| 
									
										
										
										
											2016-12-06 21:36:04 +08:00
										 |  |  |     /*
 | 
					
						
							|  |  |  |      * UI_METHOD specific application data. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     CRYPTO_EX_DATA ex_data; | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ui_string_st { | 
					
						
							|  |  |  |     enum UI_string_types type;  /* Input */ | 
					
						
							|  |  |  |     const char *out_string;     /* Input */ | 
					
						
							|  |  |  |     int input_flags;            /* Flags from the user */ | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * The following parameters are completely irrelevant for UIT_INFO, and | 
					
						
							|  |  |  |      * can therefore be set to 0 or NULL | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     char *result_buf;           /* Input and Output: If not NULL,
 | 
					
						
							|  |  |  |                                  * user-defined with size in result_maxsize. | 
					
						
							|  |  |  |                                  * Otherwise, it may be allocated by the UI | 
					
						
							|  |  |  |                                  * routine, meaning result_minsize is going | 
					
						
							|  |  |  |                                  * to be overwritten. */ | 
					
						
							| 
									
										
										
										
											2017-07-01 18:39:51 +08:00
										 |  |  |     size_t result_len; | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  |     union { | 
					
						
							|  |  |  |         struct { | 
					
						
							|  |  |  |             int result_minsize; /* Input: minimum required size of the
 | 
					
						
							|  |  |  |                                  * result. */ | 
					
						
							|  |  |  |             int result_maxsize; /* Input: maximum permitted size of the
 | 
					
						
							|  |  |  |                                  * result */ | 
					
						
							|  |  |  |             const char *test_buf; /* Input: test string to verify against */ | 
					
						
							|  |  |  |         } string_data; | 
					
						
							|  |  |  |         struct { | 
					
						
							|  |  |  |             const char *action_desc; /* Input */ | 
					
						
							|  |  |  |             const char *ok_chars; /* Input */ | 
					
						
							|  |  |  |             const char *cancel_chars; /* Input */ | 
					
						
							|  |  |  |         } boolean_data; | 
					
						
							|  |  |  |     } _; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # define OUT_STRING_FREEABLE 0x01
 | 
					
						
							|  |  |  |     int flags;                  /* flags for internal use */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ui_st { | 
					
						
							|  |  |  |     const UI_METHOD *meth; | 
					
						
							|  |  |  |     STACK_OF(UI_STRING) *strings; /* We might want to prompt for more than
 | 
					
						
							|  |  |  |                                    * one thing at a time, and with different | 
					
						
							|  |  |  |                                    * echoing status.  */ | 
					
						
							|  |  |  |     void *user_data; | 
					
						
							|  |  |  |     CRYPTO_EX_DATA ex_data; | 
					
						
							|  |  |  | # define UI_FLAG_REDOABLE        0x0001
 | 
					
						
							| 
									
										
										
										
											2017-05-28 15:35:11 +08:00
										 |  |  | # define UI_FLAG_DUPL_DATA       0x0002 /* user_data was duplicated */
 | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | # define UI_FLAG_PRINT_ERRORS    0x0100
 | 
					
						
							|  |  |  |     int flags; | 
					
						
							| 
									
										
										
										
											2016-03-01 01:12:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     CRYPTO_RWLOCK *lock; | 
					
						
							| 
									
										
										
										
											2015-01-22 11:40:55 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2001-05-07 07:19:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif
 |