static char *tpm_engine_get_auth(UI_METHOD *ui_method, char *auth, int maxlen, char *input_string, void *cb_data) { UI *ui; DBG("%s", __FUNCTION__); ui = UI_new(); if (ui_method) UI_set_method(ui, ui_method); UI_add_user_data(ui, cb_data); if (!UI_add_input_string(ui, input_string, 0, auth, 0, maxlen)) { TSSerr(TPM_F_TPM_ENGINE_GET_AUTH, TPM_R_UI_METHOD_FAILED); UI_free(ui); return NULL; } if (UI_process(ui)) { TSSerr(TPM_F_TPM_ENGINE_GET_AUTH, TPM_R_UI_METHOD_FAILED); UI_free(ui); return NULL; } UI_free(ui); return auth; }
/* Get the PIN via asking user interface. The supplied call-back data are * passed to the user interface implemented by an application. Only the * application knows how to interpret the call-back data. * A (strdup'ed) copy of the PIN code will be stored in the pin variable. */ static int get_pin(ENGINE_CTX *ctx, UI_METHOD *ui_method, void *callback_data) { UI *ui; /* call ui to ask for a pin */ ui = UI_new(); if (ui == NULL) { fprintf(stderr, "UI_new failed\n"); return 0; } if (ui_method != NULL) UI_set_method(ui, ui_method); if (callback_data != NULL) UI_add_user_data(ui, callback_data); destroy_pin(ctx); ctx->pin = OPENSSL_malloc(MAX_PIN_LENGTH * sizeof(char)); if (ctx->pin == NULL) return 0; memset(ctx->pin, 0, MAX_PIN_LENGTH * sizeof(char)); ctx->pin_length = MAX_PIN_LENGTH; if (!UI_add_input_string(ui, "PKCS#11 token PIN: ", UI_INPUT_FLAG_DEFAULT_PWD, ctx->pin, 1, MAX_PIN_LENGTH)) { fprintf(stderr, "UI_add_input_string failed\n"); UI_free(ui); return 0; } if (UI_process(ui)) { fprintf(stderr, "UI_process failed\n"); UI_free(ui); return 0; } UI_free(ui); return 1; }
static char *file_get_pass(const UI_METHOD *ui_method, char *pass, size_t maxsize, const char *prompt_info, void *data) { UI *ui = UI_new(); char *prompt = NULL; if (ui == NULL) { OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_MALLOC_FAILURE); return NULL; } if (ui_method != NULL) UI_set_method(ui, ui_method); UI_add_user_data(ui, data); if ((prompt = UI_construct_prompt(ui, "pass phrase", prompt_info)) == NULL) { OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_MALLOC_FAILURE); pass = NULL; } else if (!UI_add_input_string(ui, prompt, UI_INPUT_FLAG_DEFAULT_PWD, pass, 0, maxsize - 1)) { OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_UI_LIB); pass = NULL; } else { switch (UI_process(ui)) { case -2: OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED); pass = NULL; break; case -1: OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_UI_LIB); pass = NULL; break; default: break; } } OPENSSL_free(prompt); UI_free(ui); return pass; }