keymaster1_device 結構體參考資料
#include <
keymaster1.h
>
資料欄位 |
|
struct hw_device_t | 通用 |
uint32_t | client_version |
uint32_t | flags |
void * | context |
int(* | generate_keypair )(const struct keymaster1_device *dev, const keymaster_keypair_t key_type, const void *key_params, uint8_t **key_blob, size_t *key_blob_length) |
int(* | import_keypair )(const struct keymaster1_device *dev, const uint8_t *key, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length) |
int(* | get_keypair_public )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length, uint8_t **x509_data, size_t *x509_data_length) |
int(* | delete_keypair )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length) |
int(* | delete_all )(const struct keymaster1_device *dev) |
int(* | sign_data )(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length) |
int(* | verify_data )(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *signed_data, const size_t signed_data_length, const uint8_t *signature, const size_t signature_length) |
keymaster_error_t (* | get_supported_algorithms )(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length) |
keymaster_error_t (* | get_supported_block_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length) |
keymaster_error_t (* | get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length) |
keymaster_error_t (* | get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length) |
keymaster_error_t (* | get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
keymaster_error_t (* | get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
keymaster_error_t (* | add_rng_entropy )(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length) |
keymaster_error_t (* | generate_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | get_key_characteristics )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | import_key )(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
keymaster_error_t (* | export_key )(const struct keymaster1_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data) |
keymaster_error_t (* | delete_key )(const struct keymaster1_device *dev, const keymaster_key_blob_t *key) |
keymaster_error_t (* | delete_all_keys )(const struct keymaster1_device *dev) |
keymaster_error_t (* | begin )(const struct keymaster1_device *dev, keymaster_purpose_t purpose, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle) |
keymaster_error_t (* | update )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, size_t *input_consumed, keymaster_key_param_set_t *out_params, keymaster_blob_t *output) |
keymaster_error_t (* | finish )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output) |
keymaster_error_t (* | abort )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
詳細說明
Keymaster1 裝置定義
定義位於檔案 keymaster1.h 的第 28 行。
欄位說明文件
keymaster_error_t (* abort)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
中止以
begin()
開始的加密編譯作業,釋放所有內部資源並使
operation_handle
失效。
定義位於檔案 keymaster1.h 的 531 行。
keymaster_error_t (* add_rng_entropy)(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length) |
為 Keymaster 使用的 RNG 新增隨機性。透過這種方法新增的熵值,保證不會是唯一使用的熵值來源,且混合函式必須安全,也就是說,如果 RNG 的種子 (來自任何來源) 是攻擊者無法預測 (或控制) 的任何資料,那麼 RNG 輸出內容就無法與隨機輸出內容區分。因此,如果任何來源的熵值都良好,輸出結果也會良好。
- 參數
-
[in] dev 主控裝置結構。 [in] 資料 要混入的隨機資料。 [in] data_length data
的長度。
定義位於檔案 keymaster1.h 的 242 行。
keymaster_error_t (* begin)(const struct keymaster1_device *dev, keymaster_purpose_t purpose, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle) |
使用指定的金鑰開始加密編譯作業。如果一切正常, begin() 會傳回 KM_ERROR_OK,並建立作業句柄,必須傳遞至後續對 update() 、 finish() 或 abort() 的呼叫。
請務必在每次呼叫 begin() 時,搭配後續呼叫 finish() 或 abort() ,以便 Keymaster 實作清除任何內部作業狀態。如果未執行此操作,可能會導致內部狀態空間或其他內部資源外洩,並可能最終導致 begin() 在運算空間用盡時傳回 KM_ERROR_TOO_MANY_OPERATIONS。 begin() 、 update() 或 finish() 傳回的結果若不是 KM_ERROR_OK,就會隱含地中止作業,在這種情況下,就不需要呼叫 abort() (如果呼叫,則會傳回 KM_ERROR_INVALID_OPERATION_HANDLE)。
- 參數
-
[in] dev 主控裝置結構。 [in] 目的 作業用途,可選值為 KM_PURPOSE_ENCRYPT、KM_PURPOSE_DECRYPT、KM_PURPOSE_SIGN 或 KM_PURPOSE_VERIFY。請注意,對於 AEAD 模式,加密和解密分別代表簽署和驗證,但應指定為 KM_PURPOSE_ENCRYPT 和 KM_PURPOSE_DECRYPT。 [in] 鍵 用於該作業的鍵。 key
必須具有與purpose
相容的用途,且必須符合其所有使用需求,否則 begin() 會傳回適當的錯誤代碼。[in] in_params 作業的其他參數。這個屬性通常會搭配 KM_TAG_AUTH_TOKEN 使用,用於提供驗證資料。如果在產生期間提供 KM_TAG_APPLICATION_ID 或 KM_TAG_APPLICATION_DATA,則必須在此提供,否則作業會失敗,並顯示 KM_ERROR_INVALID_KEY_BLOB。對於需要 Nonce 或 IV 的作業,如果金鑰是使用 KM_TAG_CALLER_NONCE 產生的,in_params 可能會包含標記 KM_TAG_NONCE。針對 AEAD 作業,這裡會指定 KM_TAG_CHUNK_SIZE。 [out] out_params 輸出參數。用於從作業初始化傳回其他資料,特別是從產生 IV 或 Nonce 的作業中傳回 IV 或 Nonce。呼叫端會取得輸出參數陣列的擁有權,且必須使用 keymaster_free_param_set() 釋出該陣列。如果沒有預期的輸出參數,則可以將 out_params 設為 NULL。如果 out_params 為 NULL,且產生輸出參數, begin() 會傳回 KM_ERROR_OUTPUT_PARAMETER_NULL。 [out] operation_handle 新建立的作業句柄,必須傳遞至 update() 、 finish() 或 abort() 。如果 operation_handle 為空值, begin() 會傳回 KM_ERROR_OUTPUT_PARAMETER_NULL。
定義位於檔案 keymaster1.h 的 451 行。
uint32_t client_version |
已淘汰。請改為在 keymaster_module 初始化中使用新的「module_api_version」和「hal_api_version」欄位。
定義位於檔案 keymaster1.h 的 41 行。
struct hw_device_t common |
主控裝置的常用方法。這個 必須是 keymaster_device 的第一個成員,因為這個結構體的使用者會在已知 hw_device_t 參照 keymaster_device 的情況下,將 hw_device_t 轉換為 keymaster_device 指標。
定義位於檔案 keymaster1.h 的 35 行。
void* context |
定義位於檔案 keymaster1.h 的 48 行。
int(* delete_all)(const struct keymaster1_device *dev) |
- 已淘汰:
- 會刪除硬體 KeyStore 中的所有金鑰。當 KeyStore 已完全重設時使用。
這個函式為選用,如果未實作,應設為 NULL。
成功時會傳回 0,失敗時會傳回小於 0 的錯誤代碼。
定義位於檔案 keymaster1.h 的 100 行。
keymaster_error_t (* delete_all_keys)(const struct keymaster1_device *dev) |
刪除硬體 KeyStore 中的所有金鑰。當 KeyStore 已完全重設時使用。在呼叫這個函式後,就無法將先前產生或匯入的任何金鑰 Blob 用於任何作業。
這個函式為選用,如果未實作,應設為 NULL。
- 參數
-
[in] dev 主控裝置結構。
定義位於檔案 keymaster1.h 的 407 行。
keymaster_error_t (* delete_key)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key) |
刪除與金鑰 blob 相關聯的金鑰或金鑰組。呼叫此函式後,就無法將金鑰用於任何其他作業。可套用至來自外部信任根的金鑰 (在目前信任根下無法使用的金鑰)。
這個函式為選用,如果未實作,應設為 NULL。
- 參數
-
[in] dev 主控裝置結構。 [in] 鍵 要刪除的鍵。
定義位於檔案 keymaster1.h 的 395 行。
int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length) |
- 已淘汰:
- 刪除與金鑰 blob 相關聯的金鑰組。
這個函式為選用,如果未實作,應設為 NULL。
成功時會傳回 0,失敗時會傳回小於 0 的錯誤代碼。
定義位於檔案 keymaster1.h 的 88 行。
keymaster_error_t (* export_key)(const struct keymaster1_device *dev, keymaster_key_format_t export_format, const keymaster_key_blob_t *key_to_export, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_blob_t *export_data) |
匯出公開金鑰,以指定格式傳回位元組陣列。
- 參數
-
[in] dev 主控裝置結構。 [in] export_format 用於匯出金鑰的格式。 [in] key_to_export 要匯出的金鑰。 [out] export_data 匯出的金鑰內容。呼叫端會假設擁有權。 [out] export_data_length export_data
的長度。
定義位於檔案 keymaster1.h 的 377 行。
keymaster_error_t (* finish)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *output) |
以
begin()
開始的加密編譯作業會在此完成,並使
operation_handle
失效。
- 參數
-
[in] dev 主控裝置結構。 [in] operation_handle begin() 傳回的作業句柄。這個句柄將失效。 [in] params 作業的其他參數。針對 AEAD 模式,這會用於指定 KM_TAG_ADDITIONAL_DATA,但只有在 update() 未提供任何輸入資料時才會使用。 [in] 簽名 如果 begin() 呼叫中指定的用途為 KM_PURPOSE_VERIFY,則為要驗證的簽章。 [out] 輸出 輸出資料 (如果有的話)。呼叫端會假設已取得已配置緩衝區的擁有權。
如果完成的作業是簽名驗證或 AEAD 模式解密,且驗證失敗,則 finish() 會傳回 KM_ERROR_VERIFICATION_FAILED。
定義位於檔案 keymaster1.h 的 521 行。
uint32_t 旗標 |
請參閱 keymaster_common.h 中為 keymaster0_devices::flags 定義的旗標。
定義位於檔案 keymaster1.h 的 46 行。
keymaster_error_t (* generate_key)(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
產生金鑰或金鑰組,並傳回金鑰 blob 和/或金鑰說明。
鍵產生參數會定義為 Keymaster 標記/值組合,並提供在
params
中。如需完整清單,請參閱 keymaster_tag_t。以下是產生實用鍵時一律需要的值:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; 和
- (KM_TAG_USER_SECURE_ID 和 KM_TAG_USER_AUTH_TYPE) 或 KM_TAG_NO_AUTH_REQUIRED。
除非使用 KM_TAG_NO_AUTH_REQUIRED,否則通常應指定 KM_TAG_AUTH_TIMEOUT,否則使用者每次使用都必須進行驗證。
對於需要這些值的演算法,必須指定 KM_TAG_BLOCK_MODE、KM_TAG_PADDING、KM_TAG_MAC_LENGTH 和 KM_TAG_DIGEST。
下列標記不必指定,其值會由實作提供。
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- 參數
-
[in] dev 主控裝置結構。 [in] params 金鑰產生參數的陣列。 [in] params_count params
的長度。[out] key_blob 傳回產生的金鑰。 key_blob
不得為空值。呼叫端會假設擁有權 key_blob->key_material,且必須 free() 該權限。[out] 特性 傳回產生的鍵的特性 (如果非空值)。如果非空值,則呼叫端會假設擁有權,並必須使用 keymaster_free_characteristics() 釋出。請注意,系統不會傳回 KM_TAG_ROOT_OF_TRUST、KM_TAG_APPLICATION_ID 和 KM_TAG_APPLICATION_DATA。
定義位於檔案 keymaster1.h 的第 282 行。
int(* generate_keypair)(const struct keymaster1_device *dev, const keymaster_keypair_t key_type, const void *key_params, uint8_t **key_blob, size_t *key_blob_length) |
keymaster_error_t (* get_key_characteristics)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t **characteristics) |
傳回指定金鑰的特性,如果 key_blob 無效,則會傳回 KM_ERROR_INVALID_KEY_BLOB (實作必須完全驗證金鑰的完整性)。client_id 和 app_data 必須是產生或匯入金鑰時提供的 ID 和資料,如果產生時未提供 KM_TAG_APPLICATION_ID 和/或 KM_TAG_APPLICATION_DATA,則會傳回空白。這些值不會包含在傳回的特性中。呼叫端會假設已分配特徵物件擁有權,而該物件必須使用 keymaster_free_characteristics() 取消分配。
請注意,系統不會傳回 KM_TAG_ROOT_OF_TRUST、KM_TAG_APPLICATION_ID 和 KM_TAG_APPLICATION_DATA。
- 參數
-
[in] dev 主控裝置結構。 [in] key_blob 要擷取特徵值的鍵。 [in] client_id 用戶端 ID 資料,如果沒有相關聯的資料,則傳回空值。 [in] app_id 應用程式資料,如果沒有關聯則為 NULL。 [out] 特性 主要特徵。
定義位於檔案 keymaster1.h 的 309 行。
int(* get_keypair_public)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length, uint8_t **x509_data, size_t *x509_data_length) |
- 已淘汰:
- 取得金鑰組的公開金鑰部分。公開金鑰必須採用 X.509 格式 (Java 標準) 編碼的位元組陣列。
傳回值:成功時為 0,錯誤代碼小於 0。發生錯誤時,請勿分配 x509_data。
定義位於檔案 keymaster1.h 的 76 行。
keymaster_error_t (* get_supported_algorithms)(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length) |
取得支援的演算法。
- 參數
-
[in] dev 主控裝置結構。 [out] 演算法 支援的演算法陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] algorithms_length algorithms
的長度。
定義位於檔案 keymaster1.h 的 133 行。
keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length) |
取得指定演算法支援的封鎖模式。
- 參數
-
[in] dev 主控裝置結構。 [in] 演算法 系統會傳回支援模式的演算法。 [out] 模式 支援的模式陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] modes_length modes
的長度。
定義位於檔案 keymaster1.h 的 149 行。
keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length) |
取得指定演算法支援的摘要。呼叫端會假設已取得已配置的陣列擁有權。
- 參數
-
[in] dev 主控裝置結構。 [in] 演算法 系統會傳回支援的摘要演算法。 [out] 摘要 支援摘要陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] digests_length digests
的長度。
定義位於檔案 keymaster1.h 的 187 行。
keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
取得指定演算法金鑰支援的金鑰匯出格式。呼叫端會假設已取得已配置的陣列擁有權。
- 參數
-
[in] dev 主控裝置結構。 [in] 演算法 系統會傳回支援格式的演算法。 [out] 格式 支援的格式陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] formats_length formats
的長度。
定義位於檔案 keymaster1.h 的 224 行。
keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length) |
取得指定演算法金鑰支援的金鑰匯入格式。呼叫端會假設已取得已配置的陣列擁有權。
- 參數
-
[in] dev 主控裝置結構。 [in] 演算法 系統會傳回支援格式的演算法。 [out] 格式 支援的格式陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] formats_length formats
的長度。
定義位於檔案 keymaster1.h 的 206 行。
keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length) |
取得指定演算法支援的填充模式。呼叫端會假設已取得已配置的陣列擁有權。
- 參數
-
[in] dev 主控裝置結構。 [in] 演算法 會傳回支援的邊框間距模式所用的演算法。 [out] 模式 支援的邊框模式陣列。呼叫端會取得陣列的擁有權,且必須 free() 陣列。 [out] modes_length modes
的長度。
定義位於檔案 keymaster1.h 的 168 行。
keymaster_error_t (* import_key)(const struct keymaster1_device *dev, const keymaster_key_param_set_t *params, keymaster_key_format_t key_format, const keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t **characteristics) |
匯入金鑰或金鑰組,並傳回金鑰 blob 和/或金鑰說明。
大部分的關鍵匯入參數都定義為「params」中提供的 Keymaster 標記/值組合。如需完整清單,請參閱 keymaster_tag_t。匯入實用鍵時,必須一律提供的值如下:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; 和
- (KM_TAG_USER_SECURE_ID 和 KM_TAG_USER_AUTH_TYPE) 或 KM_TAG_NO_AUTH_REQUIRED。
通常應指定 KM_TAG_AUTH_TIMEOUT。如未指定,使用者每次使用都必須進行驗證。
如未指定,下列標記會採用預設值:
- KM_TAG_KEY_SIZE 預設為提供的金鑰大小。
- KM_TAG_RSA_PUBLIC_EXPONENT 的預設值為提供的金鑰值 (RSA 金鑰)
下列標記不必指定,其值會由實作提供。
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- 參數
-
[in] dev 主控裝置結構。 [in] params 定義匯入金鑰的參數。 [in] params_count params
中的項目數量。[in] key_format 指定 key_data 中的鍵資料格式。 [out] key_blob 用於傳回不透明金鑰 blob。不得為空值。呼叫端會假設所含 key_material 的擁有權。 [out] 特性 用於傳回匯入鍵的特性。可能為 NULL,在這種情況下,系統不會傳回任何特徵。如果非空值,則呼叫端會假設擁有權,並必須使用 keymaster_free_characteristics() 釋出。請注意,系統不會傳回 KM_TAG_ROOT_OF_TRUST、KM_TAG_APPLICATION_ID 和 KM_TAG_APPLICATION_DATA。
定義位於檔案 keymaster1.h 的 357 行。
int(* import_keypair)(const struct keymaster1_device *dev, const uint8_t *key, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length) |
- 已淘汰:
- 匯入公開和私密金鑰組。匯入的金鑰會採用 PKCS#8 格式,並使用 DER 編碼 (Java 標準)。傳回的金鑰 blob 是不可見的,並會在之後提供用於簽署和驗證。
傳回值:成功時為 0,錯誤代碼小於 0。
定義位於檔案 keymaster1.h 的 66 行。
int(* sign_data)(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length) |
keymaster_error_t (* update)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, size_t *input_consumed, keymaster_key_param_set_t *out_params, keymaster_blob_t *output) |
為以 begin() 開始的持續性加密作業提供資料,並可能接收該作業的輸出內容。
如果 operation_handle 無效, update() 會傳回 KM_ERROR_INVALID_OPERATION_HANDLE。
update() 可能不會使用資料緩衝區提供的所有資料。 update() 會傳回 *data_consumed 中消耗的金額。呼叫端應在後續呼叫中提供未使用的資料。
- 參數
-
[in] dev 主控裝置結構。 [in] operation_handle begin() 傳回的作業句柄。 [in] in_params 作業的其他參數。針對 AEAD 模式,這會用於指定 KM_TAG_ADDITIONAL_DATA。請注意,您必須先提供輸入資料,才能在多次呼叫 update() 時提供其他資料。 [in] 輸入 根據呼叫 begin() 時建立的參數,所要處理的資料。請注意, update() 可能會或不會使用所有提供的資料。請參閱 input_consumed
。[out] input_consumed update() 所耗用的資料量。如果此值小於提供的金額,呼叫端應在後續呼叫 update() 時提供其餘額。 [out] out_params 輸出參數。用於從作業中傳回其他資料。呼叫端會取得輸出參數陣列的擁有權,並必須使用 keymaster_free_param_set() 釋放該陣列。如果沒有預期的輸出參數,則可以將 out_params 設為 NULL。如果 out_params 為 NULL,且產生輸出參數, begin() 會傳回 KM_ERROR_OUTPUT_PARAMETER_NULL。 [out] 輸出 輸出資料 (如果有的話)。呼叫端會假設已配置緩衝區的擁有權。輸出內容不得為空值。
請注意, update() 可能不會提供任何輸出內容,在這種情況下,output->data_length 會為零,而 output->data 可能為空值或零長度 (因此呼叫端應一律應 free() 這項資料)。
定義位於檔案 keymaster1.h 的 495 行。
int(* verify_data)(const struct keymaster1_device *dev, const void *signing_params, const uint8_t *key_blob, const size_t key_blob_length, const uint8_t *signed_data, const size_t signed_data_length, const uint8_t *signature, const size_t signature_length) |
這個結構體的說明文件是由下列檔案產生:
- hardware/libhardware/include/hardware/ keymaster1.h