File indexing completed on 2026-05-11 08:49:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef OPENSSL_UI_H
0018 #define OPENSSL_UI_H
0019 #pragma once
0020
0021 #include <openssl/macros.h>
0022 #ifndef OPENSSL_NO_DEPRECATED_3_0
0023 #define HEADER_UI_H
0024 #endif
0025
0026 #include <openssl/opensslconf.h>
0027
0028 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
0029 #include <openssl/crypto.h>
0030 #endif
0031 #include <openssl/safestack.h>
0032 #include <openssl/pem.h>
0033 #include <openssl/types.h>
0034 #include <openssl/uierr.h>
0035
0036
0037 #ifndef OPENSSL_NO_DEPRECATED_3_0
0038 #ifdef OPENSSL_NO_UI_CONSOLE
0039 #define OPENSSL_NO_UI
0040 #endif
0041 #endif
0042
0043 #ifdef __cplusplus
0044 extern "C" {
0045 #endif
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 UI *UI_new(void);
0056 UI *UI_new_method(const UI_METHOD *method);
0057 void UI_free(UI *ui);
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 int UI_add_input_string(UI *ui, const char *prompt, int flags,
0103 char *result_buf, int minsize, int maxsize);
0104 int UI_dup_input_string(UI *ui, const char *prompt, int flags,
0105 char *result_buf, int minsize, int maxsize);
0106 int UI_add_verify_string(UI *ui, const char *prompt, int flags,
0107 char *result_buf, int minsize, int maxsize,
0108 const char *test_buf);
0109 int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
0110 char *result_buf, int minsize, int maxsize,
0111 const char *test_buf);
0112 int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,
0113 const char *ok_chars, const char *cancel_chars,
0114 int flags, char *result_buf);
0115 int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,
0116 const char *ok_chars, const char *cancel_chars,
0117 int flags, char *result_buf);
0118 int UI_add_info_string(UI *ui, const char *text);
0119 int UI_dup_info_string(UI *ui, const char *text);
0120 int UI_add_error_string(UI *ui, const char *text);
0121 int UI_dup_error_string(UI *ui, const char *text);
0122
0123
0124
0125 #define UI_INPUT_FLAG_ECHO 0x01
0126
0127
0128
0129
0130
0131
0132
0133 #define UI_INPUT_FLAG_DEFAULT_PWD 0x02
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145 #define UI_INPUT_FLAG_USER_BASE 16
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166 char *UI_construct_prompt(UI *ui_method,
0167 const char *phrase_desc, const char *object_name);
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180 void *UI_add_user_data(UI *ui, void *user_data);
0181
0182
0183
0184
0185
0186 int UI_dup_user_data(UI *ui, void *user_data);
0187
0188 void *UI_get0_user_data(UI *ui);
0189
0190
0191 const char *UI_get0_result(UI *ui, int i);
0192 int UI_get_result_length(UI *ui, int i);
0193
0194
0195 int UI_process(UI *ui);
0196
0197
0198
0199
0200
0201
0202 int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f)(void));
0203
0204
0205
0206
0207
0208
0209
0210 #define UI_CTRL_PRINT_ERRORS 1
0211
0212
0213
0214
0215
0216 #define UI_CTRL_IS_REDOABLE 2
0217
0218
0219 #define UI_set_app_data(s, arg) UI_set_ex_data(s, 0, arg)
0220 #define UI_get_app_data(s) UI_get_ex_data(s, 0)
0221
0222 #define UI_get_ex_new_index(l, p, newf, dupf, freef) \
0223 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef)
0224 int UI_set_ex_data(UI *r, int idx, void *arg);
0225 void *UI_get_ex_data(const UI *r, int idx);
0226
0227
0228 void UI_set_default_method(const UI_METHOD *meth);
0229 const UI_METHOD *UI_get_default_method(void);
0230 const UI_METHOD *UI_get_method(UI *ui);
0231 const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
0232
0233 #ifndef OPENSSL_NO_UI_CONSOLE
0234
0235
0236 UI_METHOD *UI_OpenSSL(void);
0237
0238 #endif
0239
0240
0241
0242
0243
0244 const UI_METHOD *UI_null(void);
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293 typedef struct ui_string_st UI_STRING;
0294
0295
0296 SKM_DEFINE_STACK_OF_INTERNAL(UI_STRING, UI_STRING, UI_STRING)
0297 #define sk_UI_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_UI_STRING_sk_type(sk))
0298 #define sk_UI_STRING_value(sk, idx) ((UI_STRING *)OPENSSL_sk_value(ossl_check_const_UI_STRING_sk_type(sk), (idx)))
0299 #define sk_UI_STRING_new(cmp) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new(ossl_check_UI_STRING_compfunc_type(cmp)))
0300 #define sk_UI_STRING_new_null() ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_null())
0301 #define sk_UI_STRING_new_reserve(cmp, n) ((STACK_OF(UI_STRING) *)OPENSSL_sk_new_reserve(ossl_check_UI_STRING_compfunc_type(cmp), (n)))
0302 #define sk_UI_STRING_reserve(sk, n) OPENSSL_sk_reserve(ossl_check_UI_STRING_sk_type(sk), (n))
0303 #define sk_UI_STRING_free(sk) OPENSSL_sk_free(ossl_check_UI_STRING_sk_type(sk))
0304 #define sk_UI_STRING_zero(sk) OPENSSL_sk_zero(ossl_check_UI_STRING_sk_type(sk))
0305 #define sk_UI_STRING_delete(sk, i) ((UI_STRING *)OPENSSL_sk_delete(ossl_check_UI_STRING_sk_type(sk), (i)))
0306 #define sk_UI_STRING_delete_ptr(sk, ptr) ((UI_STRING *)OPENSSL_sk_delete_ptr(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr)))
0307 #define sk_UI_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
0308 #define sk_UI_STRING_unshift(sk, ptr) OPENSSL_sk_unshift(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
0309 #define sk_UI_STRING_pop(sk) ((UI_STRING *)OPENSSL_sk_pop(ossl_check_UI_STRING_sk_type(sk)))
0310 #define sk_UI_STRING_shift(sk) ((UI_STRING *)OPENSSL_sk_shift(ossl_check_UI_STRING_sk_type(sk)))
0311 #define sk_UI_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_freefunc_type(freefunc))
0312 #define sk_UI_STRING_insert(sk, ptr, idx) OPENSSL_sk_insert(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), (idx))
0313 #define sk_UI_STRING_set(sk, idx, ptr) ((UI_STRING *)OPENSSL_sk_set(ossl_check_UI_STRING_sk_type(sk), (idx), ossl_check_UI_STRING_type(ptr)))
0314 #define sk_UI_STRING_find(sk, ptr) OPENSSL_sk_find(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
0315 #define sk_UI_STRING_find_ex(sk, ptr) OPENSSL_sk_find_ex(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr))
0316 #define sk_UI_STRING_find_all(sk, ptr, pnum) OPENSSL_sk_find_all(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_type(ptr), pnum)
0317 #define sk_UI_STRING_sort(sk) OPENSSL_sk_sort(ossl_check_UI_STRING_sk_type(sk))
0318 #define sk_UI_STRING_is_sorted(sk) OPENSSL_sk_is_sorted(ossl_check_const_UI_STRING_sk_type(sk))
0319 #define sk_UI_STRING_dup(sk) ((STACK_OF(UI_STRING) *)OPENSSL_sk_dup(ossl_check_const_UI_STRING_sk_type(sk)))
0320 #define sk_UI_STRING_deep_copy(sk, copyfunc, freefunc) ((STACK_OF(UI_STRING) *)OPENSSL_sk_deep_copy(ossl_check_const_UI_STRING_sk_type(sk), ossl_check_UI_STRING_copyfunc_type(copyfunc), ossl_check_UI_STRING_freefunc_type(freefunc)))
0321 #define sk_UI_STRING_set_cmp_func(sk, cmp) ((sk_UI_STRING_compfunc)OPENSSL_sk_set_cmp_func(ossl_check_UI_STRING_sk_type(sk), ossl_check_UI_STRING_compfunc_type(cmp)))
0322
0323
0324
0325
0326
0327
0328
0329 enum UI_string_types {
0330 UIT_NONE = 0,
0331 UIT_PROMPT,
0332 UIT_VERIFY,
0333 UIT_BOOLEAN,
0334 UIT_INFO,
0335 UIT_ERROR
0336 };
0337
0338
0339 UI_METHOD *UI_create_method(const char *name);
0340 void UI_destroy_method(UI_METHOD *ui_method);
0341 int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui));
0342 int UI_method_set_writer(UI_METHOD *method,
0343 int (*writer)(UI *ui, UI_STRING *uis));
0344 int UI_method_set_flusher(UI_METHOD *method, int (*flusher)(UI *ui));
0345 int UI_method_set_reader(UI_METHOD *method,
0346 int (*reader)(UI *ui, UI_STRING *uis));
0347 int UI_method_set_closer(UI_METHOD *method, int (*closer)(UI *ui));
0348 int UI_method_set_data_duplicator(UI_METHOD *method,
0349 void *(*duplicator)(UI *ui, void *ui_data),
0350 void (*destructor)(UI *ui, void *ui_data));
0351 int UI_method_set_prompt_constructor(UI_METHOD *method,
0352 char *(*prompt_constructor)(UI *ui,
0353 const char
0354 *phrase_desc,
0355 const char
0356 *object_name));
0357 int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data);
0358 int (*UI_method_get_opener(const UI_METHOD *method))(UI *);
0359 int (*UI_method_get_writer(const UI_METHOD *method))(UI *, UI_STRING *);
0360 int (*UI_method_get_flusher(const UI_METHOD *method))(UI *);
0361 int (*UI_method_get_reader(const UI_METHOD *method))(UI *, UI_STRING *);
0362 int (*UI_method_get_closer(const UI_METHOD *method))(UI *);
0363 char *(*UI_method_get_prompt_constructor(const UI_METHOD *method))(UI *, const char *, const char *);
0364 void *(*UI_method_get_data_duplicator(const UI_METHOD *method))(UI *, void *);
0365 void (*UI_method_get_data_destructor(const UI_METHOD *method))(UI *, void *);
0366 const void *UI_method_get_ex_data(const UI_METHOD *method, int idx);
0367
0368
0369
0370
0371
0372
0373
0374 enum UI_string_types UI_get_string_type(UI_STRING *uis);
0375
0376 int UI_get_input_flags(UI_STRING *uis);
0377
0378 const char *UI_get0_output_string(UI_STRING *uis);
0379
0380
0381
0382
0383 const char *UI_get0_action_string(UI_STRING *uis);
0384
0385 const char *UI_get0_result_string(UI_STRING *uis);
0386 int UI_get_result_string_length(UI_STRING *uis);
0387
0388
0389
0390 const char *UI_get0_test_string(UI_STRING *uis);
0391
0392 int UI_get_result_minsize(UI_STRING *uis);
0393
0394 int UI_get_result_maxsize(UI_STRING *uis);
0395
0396 int UI_set_result(UI *ui, UI_STRING *uis, const char *result);
0397 int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len);
0398
0399
0400 int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt,
0401 int verify);
0402 int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt,
0403 int verify);
0404 UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag);
0405
0406 #ifdef __cplusplus
0407 }
0408 #endif
0409 #endif