You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.3 KiB
136 lines
5.3 KiB
/*
|
|
* Copyright (C) 2020 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
using ApcCompatServiceHandle = void*;
|
|
|
|
#define APC_COMPAT_ERROR_OK 0
|
|
#define APC_COMPAT_ERROR_CANCELLED 1
|
|
#define APC_COMPAT_ERROR_ABORTED 2
|
|
#define APC_COMPAT_ERROR_OPERATION_PENDING 3
|
|
#define APC_COMPAT_ERROR_IGNORED 4
|
|
#define APC_COMPAT_ERROR_SYSTEM_ERROR 5
|
|
|
|
extern "C" {
|
|
|
|
extern const ApcCompatServiceHandle INVALID_SERVICE_HANDLE;
|
|
|
|
/**
|
|
* This struct holds the ui options for the protected confirmation dialog.
|
|
*/
|
|
struct ApcCompatUiOptions {
|
|
/**
|
|
* If set to true inverted color mode is used.
|
|
*/
|
|
bool inverted;
|
|
/**
|
|
* If set to true magnified fonts are used.
|
|
*/
|
|
bool magnified;
|
|
};
|
|
|
|
/**
|
|
* Represents a result callback that is called when a confirmation session was successfully
|
|
* started.
|
|
* The field `data` is an opaque callback context handle. It must be passed to the `result`
|
|
* function.
|
|
*
|
|
* IMPORTANT: The life cycle of `data` ends when `result` is called. The callback must not
|
|
* be called a second time.
|
|
*
|
|
* The callback function `result` has the prototype:
|
|
* void result(
|
|
* void* data,
|
|
* uint32_t rc,
|
|
* const uint8_t* tbs_message,
|
|
* size_t tbs_message_size,
|
|
* const uint8_t* confirmation_token,
|
|
* size_t confirmation_token_size)
|
|
*
|
|
* * data - must be the data field of the structure.
|
|
* * rc - response code, one of:
|
|
* * APC_COMPAT_ERROR_OK - The user confirmed the prompt text.
|
|
* * APC_COMPAT_ERROR_CANCELLED - The user rejected the prompt text.
|
|
* * APC_COMPAT_ERROR_ABORTED - `abortUserConfirmation` was called.
|
|
* * APC_COMPAT_ERROR_SYSTEM_ERROR - An unspecified system error occurred.
|
|
* * tbs_message(_size) - Pointer to and size of the to-be-signed message. Must
|
|
* be NULL and 0 respectively if `rc != APC_COMPAT_ERROR_OK`.
|
|
* * confirmation_token(_size) - Pointer to and size of the confirmation token. Must
|
|
* be NULL and 0 respectively if `rc != APC_COMPAT_ERROR_OK`.
|
|
*/
|
|
struct ApcCompatCallback {
|
|
void* data;
|
|
void (*result)(void*, uint32_t, const uint8_t*, size_t, const uint8_t*, size_t);
|
|
};
|
|
|
|
/**
|
|
* Attempts to make a connection to the confirmationui HIDL backend.
|
|
* If a valid service handle is returned it stays valid until
|
|
* `closeUserConfirmationService` is called.
|
|
*
|
|
* @return A valid service handle on success or INVALID_SERVICE_HANDLE
|
|
* on failure.
|
|
*/
|
|
ApcCompatServiceHandle tryGetUserConfirmationService();
|
|
|
|
/**
|
|
* Attempts to start a protected confirmation session on the given service handle.
|
|
* The function takes ownership of the callback object (`cb`) IFF APC_COMPAT_ERROR_OK
|
|
* is returned. The resources referenced by the callback object must stay valid
|
|
* until the callback is called.
|
|
*
|
|
* @param handle A valid service handle as returned by `tryGetUserConfirmationService()`.
|
|
* @cb A ApcCompatCallback structure that represents a callback function with session data.
|
|
* @param prompt_text A UTF-8 encoded prompt string.
|
|
* @param extra_data Free form extra data.
|
|
* @param extra_data_size size of the extra data buffer in bytes.
|
|
* @param locale A locale string.
|
|
* @param ui_options A UI options. See ApcCompatUiOptions above.
|
|
* @retval APC_COMPAT_ERROR_OK on success.
|
|
* @retval APC_COMPAT_ERROR_OPERATION_PENDING if another operation was already in progress.
|
|
* @retval APC_COMPAT_ERROR_SYSTEM_ERROR if an unspecified system error occurred.
|
|
*/
|
|
uint32_t promptUserConfirmation(ApcCompatServiceHandle handle, struct ApcCompatCallback cb,
|
|
const char* prompt_text, const uint8_t* extra_data,
|
|
size_t extra_data_size, char const* locale,
|
|
ApcCompatUiOptions ui_options);
|
|
|
|
/**
|
|
* Aborts a running confirmation session or no-op if no session is running.
|
|
* If a session is running this results in a `result` callback with
|
|
* `rc == APC_COMPAT_ERROR_ABORTED`. Mind though that the callback can still yield other
|
|
* results even after this function was called, because it may race with an actual user
|
|
* response. In any case, there will be only one callback response for each session
|
|
* successfully started with promptUserConfirmation.
|
|
*
|
|
* @param handle A valid session handle as returned by `tryGetUserConfirmationService()`
|
|
*/
|
|
void abortUserConfirmation(ApcCompatServiceHandle handle);
|
|
|
|
/**
|
|
* Closes a valid service session as returned by `tryGetUserConfirmationService()`.
|
|
* If a session is still running it is implicitly aborted. In this case, freeing up of the resources
|
|
* referenced by the service handle is deferred until the callback has completed.
|
|
*
|
|
* @param handle A valid session handle as returned by `tryGetUserConfirmationService()`
|
|
*/
|
|
void closeUserConfirmationService(ApcCompatServiceHandle);
|
|
|
|
}
|