Tham chiếu Cấu trúc keymaster1_device
#include <
keymaster1.h
>
Trường dữ liệu |
|
struct hw_device_t | common |
uint32_t | client_version |
uint32_t | cờ |
void * | ngữ cảnh |
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 (* | huỷ bỏ )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
Nội dung mô tả chi tiết
Định nghĩa thiết bị Keymaster1
Định nghĩa tại dòng 28 của tệp keymaster1.h .
Tài liệu về trường
keymaster_error_t (* abort)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
Huỷ một thao tác mã hoá bắt đầu bằng
begin()
, giải phóng tất cả tài nguyên nội bộ và vô hiệu hoá
operation_handle
.
Định nghĩa tại dòng 531 của tệp keymaster1.h .
keymaster_error_t (* add_rng_entropy)(const struct keymaster1_device *dev, const uint8_t *data, size_t data_length) |
Thêm entropy vào RNG do keymaster sử dụng. Độ hỗn loạn được thêm thông qua phương thức này được đảm bảo không phải là nguồn độ hỗn loạn duy nhất được sử dụng và hàm trộn phải an toàn, theo nghĩa là nếu RNG được tạo hạt (từ bất kỳ nguồn nào) bằng bất kỳ dữ liệu nào mà kẻ tấn công không thể dự đoán (hoặc kiểm soát), thì đầu ra của RNG không thể phân biệt được với dữ liệu ngẫu nhiên. Do đó, nếu entropy từ bất kỳ nguồn nào đều tốt, thì kết quả sẽ tốt.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] khác Dữ liệu ngẫu nhiên sẽ được trộn vào. [in] data_length Độ dài của data
.
Định nghĩa tại dòng 242 của tệp keymaster1.h .
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) |
Bắt đầu một thao tác mã hoá bằng khoá đã chỉ định. Nếu mọi thứ đều ổn, begin() sẽ trả về KM_ERROR_OK và tạo một handle thao tác phải được truyền đến các lệnh gọi tiếp theo đến update() , finish() hoặc abort() .
Điều quan trọng là mỗi lệnh gọi đến begin() phải được ghép nối với lệnh gọi tiếp theo đến finish() hoặc abort() để cho phép triển khai keymaster dọn dẹp mọi trạng thái hoạt động nội bộ. Nếu không làm như vậy, có thể làm rò rỉ không gian trạng thái nội bộ hoặc các tài nguyên nội bộ khác và cuối cùng có thể khiến begin() trả về lỗi KM_ERROR_TOO_MANY_OPERATIONS khi hết không gian cho các thao tác. Mọi kết quả khác với KM_ERROR_OK từ begin() , update() hoặc finish() sẽ ngầm huỷ thao tác, trong trường hợp đó, bạn không cần gọi abort() (và sẽ trả về KM_ERROR_INVALID_OPERATION_HANDLE nếu được gọi).
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] mục đích Mục đích của thao tác, một trong các giá trị KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN hoặc KM_PURPOSE_VERIFY. Xin lưu ý rằng đối với các chế độ AEAD, việc mã hoá và giải mã tương ứng với việc ký và xác minh, nhưng phải được chỉ định là KM_PURPOSE_ENCRYPT và KM_PURPOSE_DECRYPT. [in] key Khoá được dùng cho thao tác. key
phải có mục đích tương thích vớipurpose
và phải đáp ứng tất cả các yêu cầu về việc sử dụng, nếu không begin() sẽ trả về một mã lỗi thích hợp.[in] in_params Các tham số bổ sung cho toán tử. Thuộc tính này thường được dùng để cung cấp dữ liệu xác thực, với KM_TAG_AUTH_TOKEN. Nếu bạn đã cung cấp KM_TAG_APPLICATION_ID hoặc KM_TAG_APPLICATION_DATA trong quá trình tạo, thì bạn phải cung cấp các giá trị này tại đây, nếu không thao tác sẽ không thành công với lỗi KM_ERROR_INVALID_KEY_BLOB. Đối với các thao tác yêu cầu số chỉ dùng một lần hoặc IV, trên các khoá được tạo bằng KM_TAG_CALLER_NONCE, in_params có thể chứa thẻ KM_TAG_NONCE. Đối với các thao tác AEAD, KM_TAG_CHUNK_SIZE được chỉ định tại đây. [out] out_params Tham số đầu ra. Dùng để trả về dữ liệu bổ sung từ quá trình khởi chạy thao tác, đặc biệt là để trả về IV hoặc số chỉ dùng một lần từ các thao tác tạo IV hoặc số chỉ dùng một lần. Phương thức gọi nắm quyền sở hữu mảng tham số đầu ra và phải giải phóng mảng đó bằng keymaster_free_param_set() . Bạn có thể đặt out_params thành NULL nếu không có tham số đầu ra nào được dự kiến. Nếu out_params là NULL và các tham số đầu ra được tạo, thì begin() sẽ trả về KM_ERROR_OUTPUT_PARAMETER_NULL. [out] handle_operation Tay điều khiển thao tác mới tạo phải được chuyển đến update() , finish() hoặc abort() . Nếu operation_handle là NULL, thì begin() sẽ trả về KM_ERROR_OUTPUT_PARAMETER_NULL.
Định nghĩa tại dòng 451 của tệp keymaster1.h .
uint32_t client_version |
ĐÃ NGƯNG SỬ DỤNG. Thay vào đó, hãy sử dụng các trường "module_api_version" và "hal_api_version" mới trong quá trình khởi tạo keymaster_module.
Định nghĩa tại dòng 41 của tệp keymaster1.h .
cấu trúc hw_device_t phổ biến |
Các phương thức phổ biến của thiết bị keymaster. Đây phải là thành phần đầu tiên của keymaster_device vì người dùng của cấu trúc này sẽ truyền một hw_device_t đến con trỏ keymaster_device trong các ngữ cảnh mà người dùng biết rằng hw_device_t tham chiếu đến một keymaster_device.
Định nghĩa tại dòng 35 của tệp keymaster1.h .
void* context |
Định nghĩa tại dòng 48 của tệp keymaster1.h .
int(* delete_all)(const struct keymaster1_device *dev) |
- Ngừng sử dụng:
- Xoá tất cả khoá trong kho khoá phần cứng. Được dùng khi kho khoá được đặt lại hoàn toàn.
Hàm này là không bắt buộc và bạn nên đặt thành NULL nếu không triển khai.
Trả về 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 100 của tệp keymaster1.h .
keymaster_error_t (* delete_all_keys)(const struct keymaster1_device *dev) |
Xoá tất cả khoá trong kho khoá phần cứng. Được dùng khi kho khoá được đặt lại hoàn toàn. Sau khi gọi hàm này, bạn sẽ không thể sử dụng bất kỳ blob khoá nào đã tạo hoặc nhập trước đó cho bất kỳ thao tác nào.
Hàm này là không bắt buộc và bạn nên đặt thành NULL nếu không triển khai.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster.
Định nghĩa tại dòng 407 của tệp keymaster1.h .
keymaster_error_t (* delete_key)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key) |
Xoá khoá hoặc cặp khoá liên kết với blob khoá. Sau khi gọi hàm này, bạn sẽ không thể sử dụng khoá cho bất kỳ thao tác nào khác. Có thể áp dụng cho các khoá từ gốc tin cậy nước ngoài (các khoá không sử dụng được trong gốc tin cậy hiện tại).
Hàm này là không bắt buộc và bạn nên đặt thành NULL nếu không triển khai.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] key Khoá cần xoá.
Định nghĩa tại dòng 395 của tệp keymaster1.h .
int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length) |
- Ngừng sử dụng:
- Xoá cặp khoá liên kết với blob khoá.
Hàm này là không bắt buộc và bạn nên đặt thành NULL nếu không triển khai.
Trả về 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 88 của tệp keymaster1.h .
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) |
Xuất khoá công khai, trả về một mảng byte ở định dạng đã chỉ định.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] export_format Định dạng dùng để xuất khoá. [in] key_to_export Khoá để xuất. [out] export_data Tài liệu khoá đã xuất. Phương thức gọi giả định quyền sở hữu. [out] export_data_length Độ dài của export_data
.
Định nghĩa tại dòng 377 của tệp keymaster1.h .
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) |
Hoàn tất một thao tác mã hoá bắt đầu bằng
begin()
và vô hiệu hoá
operation_handle
.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] handle_operation Tay điều khiển thao tác do begin() trả về. Tên người dùng này sẽ không hợp lệ. [in] tham số Các tham số bổ sung cho toán tử. Đối với các chế độ AEAD, giá trị này được dùng để chỉ định KM_TAG_ADDITIONAL_DATA, nhưng chỉ khi không có dữ liệu đầu vào nào được cung cấp cho update() . [in] Chữ ký Chữ ký cần được xác minh nếu mục đích được chỉ định trong lệnh gọi begin() là KM_PURPOSE_VERIFY. [out] output Dữ liệu đầu ra, nếu có. Phương thức gọi giả định quyền sở hữu vùng đệm được phân bổ.
Nếu thao tác đang hoàn tất là xác minh chữ ký hoặc giải mã và xác minh ở chế độ AEAD không thành công, thì finish() sẽ trả về KM_ERROR_VERIFICATION_FAILED.
Định nghĩa tại dòng 521 của tệp keymaster1.h .
Cờ uint32_t |
Xem các cờ được xác định cho keymaster0_devices::flags trong keymaster_common.h
Định nghĩa tại dòng 46 của tệp keymaster1.h .
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) |
Tạo một khoá hoặc cặp khoá, trả về một blob khoá và/hoặc nội dung mô tả khoá.
Các tham số tạo khoá được xác định là cặp thẻ/giá trị keymaster, được cung cấp trong
params
. Hãy xem keymaster_tag_t để biết danh sách đầy đủ. Một số giá trị luôn bắt buộc để tạo khoá hữu ích là:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; và
- (KM_TAG_USER_SECURE_ID và KM_TAG_USER_AUTH_TYPE) hoặc KM_TAG_NO_AUTH_REQUIRED.
Thông thường, bạn nên chỉ định KM_TAG_AUTH_TIMEOUT trừ phi có KM_TAG_NO_AUTH_REQUIRED, nếu không người dùng sẽ phải xác thực mỗi khi sử dụng.
Bạn phải chỉ định KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH và KM_TAG_DIGEST cho các thuật toán yêu cầu các giá trị này.
Bạn không thể chỉ định các thẻ sau; giá trị của các thẻ này sẽ do quá trình triển khai cung cấp.
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] tham số Mảng tham số tạo khoá. [in] params_count Độ dài của params
.[out] key_blob trả về khoá đã tạo. key_blob
không được là NULL. Phương thức gọi giả định quyền sở hữu key_blob->key_material và phải giải phóng() quyền đó.[out] đặc điểm trả về các đặc điểm của khoá đã được tạo, nếu không phải là giá trị NULL. Nếu không phải là NULL, phương thức gọi sẽ giả định quyền sở hữu và phải giải phóng bằng keymaster_free_characteristics() . Xin lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả về.
Định nghĩa tại dòng 282 của tệp keymaster1.h .
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) |
- Ngừng sử dụng:
- Tạo khoá công khai và khoá riêng tư. Blob khoá được trả về là mờ và phải được cung cấp sau đó để ký và xác minh.
Trả về: 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 56 của tệp keymaster1.h .
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) |
Trả về các đặc điểm của khoá đã chỉ định hoặc KM_ERROR_INVALID_KEY_BLOB nếu key_blob không hợp lệ (các hoạt động triển khai phải xác thực đầy đủ tính toàn vẹn của khoá). client_id và app_data phải là mã nhận dạng và dữ liệu được cung cấp khi khoá được tạo hoặc nhập, hoặc để trống nếu KM_TAG_APPLICATION_ID và/hoặc KM_TAG_APPLICATION_DATA không được cung cấp trong quá trình tạo. Các giá trị đó không được đưa vào các đặc điểm được trả về. Phương thức gọi giả định quyền sở hữu đối tượng đặc điểm được phân bổ, đối tượng này phải được giải phóng bằng keymaster_free_characteristics() .
Xin lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả về.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] key_blob Khoá để truy xuất các đặc điểm. [in] client_id Dữ liệu mã ứng dụng hoặc giá trị NULL nếu không có mã nào được liên kết. [in] app_id Dữ liệu ứng dụng hoặc NULL nếu không có dữ liệu nào được liên kết. [out] đặc điểm Các đặc điểm chính.
Định nghĩa tại dòng 309 của tệp keymaster1.h .
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) |
- Ngừng sử dụng:
- Lấy phần khoá công khai của một cặp khoá. Khoá công khai phải ở định dạng X.509 (tiêu chuẩn Java) được mã hoá theo mảng byte.
Trả về: 0 khi thành công hoặc mã lỗi nhỏ hơn 0. Khi xảy ra lỗi, bạn không nên phân bổ x509_data.
Định nghĩa tại dòng 76 của tệp keymaster1.h .
keymaster_error_t (* get_supported_algorithms)(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length) |
Nhận các thuật toán được hỗ trợ.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [out] thuật toán Mảng thuật toán được hỗ trợ. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] algorithms_length Độ dài của algorithms
.
Định nghĩa tại dòng 133 của tệp keymaster1.h .
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) |
Lấy các chế độ khối được hỗ trợ cho thuật toán đã chỉ định.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] thuật toán Thuật toán sẽ trả về các chế độ được hỗ trợ. [out] chế độ Mảng các chế độ được hỗ trợ. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] modes_length Độ dài của modes
.
Định nghĩa tại dòng 149 của tệp keymaster1.h .
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) |
Lấy các chuỗi đại diện được hỗ trợ cho thuật toán đã chỉ định. Phương thức gọi giả định quyền sở hữu của mảng được phân bổ.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] thuật toán Thuật toán mà hàm này sẽ trả về các chuỗi đại diện được hỗ trợ. [out] thông báo tổng hợp Hỗ trợ mảng chuỗi đại diện. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] digests_length Độ dài của digests
.
Định nghĩa tại dòng 187 của tệp keymaster1.h .
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) |
Lấy các định dạng xuất khoá được hỗ trợ cho khoá của thuật toán đã chỉ định. Phương thức gọi giả định quyền sở hữu của mảng được phân bổ.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] thuật toán Thuật toán sẽ trả về các định dạng được hỗ trợ. [out] định dạng Mảng các định dạng được hỗ trợ. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] formats_length Độ dài của formats
.
Định nghĩa tại dòng 224 của tệp keymaster1.h .
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) |
Lấy các định dạng nhập khoá được hỗ trợ cho khoá của thuật toán đã chỉ định. Phương thức gọi giả định quyền sở hữu của mảng được phân bổ.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] thuật toán Thuật toán sẽ trả về các định dạng được hỗ trợ. [out] định dạng Mảng các định dạng được hỗ trợ. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] formats_length Độ dài của formats
.
Định nghĩa tại dòng 206 của tệp keymaster1.h .
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) |
Lấy các chế độ khoảng đệm được hỗ trợ cho thuật toán đã chỉ định. Phương thức gọi giả định quyền sở hữu của mảng được phân bổ.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] thuật toán Thuật toán sẽ trả về các chế độ khoảng đệm được hỗ trợ. [out] chế độ Mảng các chế độ khoảng đệm được hỗ trợ. Phương thức gọi nắm quyền sở hữu mảng và phải free() mảng đó. [out] modes_length Độ dài của modes
.
Định nghĩa tại dòng 168 của tệp keymaster1.h .
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) |
Nhập một khoá hoặc cặp khoá, trả về một blob khoá và/hoặc nội dung mô tả khoá.
Hầu hết các tham số nhập khoá được xác định là cặp thẻ/giá trị keymaster, được cung cấp trong "params". Hãy xem keymaster_tag_t để biết danh sách đầy đủ. Các giá trị luôn bắt buộc để nhập các khoá hữu ích là:
- KM_TAG_ALGORITHM;
- KM_TAG_PURPOSE; và
- (KM_TAG_USER_SECURE_ID và KM_TAG_USER_AUTH_TYPE) hoặc KM_TAG_NO_AUTH_REQUIRED.
Bạn thường phải chỉ định KM_TAG_AUTH_TIMEOUT. Nếu không chỉ định, người dùng sẽ phải xác thực cho mỗi lần sử dụng.
Các thẻ sau đây sẽ lấy giá trị mặc định nếu không được chỉ định:
- KM_TAG_KEY_SIZE sẽ mặc định là kích thước của khoá được cung cấp.
- KM_TAG_RSA_PUBLIC_EXPONENT sẽ mặc định là giá trị trong khoá được cung cấp (đối với khoá RSA)
Bạn không thể chỉ định các thẻ sau; giá trị của các thẻ này sẽ do quá trình triển khai cung cấp.
- KM_TAG_ORIGIN,
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] tham số Các tham số xác định khoá đã nhập. [in] params_count Số mục nhập trong params
.[in] key_format chỉ định định dạng của dữ liệu khoá trong key_data. [out] key_blob Dùng để trả về blob khoá mờ. Không được là giá trị NULL. Phương thức gọi giả định quyền sở hữu đối với key_material được chứa. [out] đặc điểm Dùng để trả về các đặc điểm của khoá đã nhập. Có thể là giá trị NULL, trong trường hợp này, hệ thống sẽ không trả về đặc điểm nào. Nếu không phải là NULL, phương thức gọi sẽ giả định quyền sở hữu và phải giải phóng bằng keymaster_free_characteristics() . Xin lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả về.
Định nghĩa tại dòng 357 của tệp keymaster1.h .
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) |
- Ngừng sử dụng:
- Nhập một cặp khoá công khai và riêng tư. Các khoá đã nhập sẽ ở định dạng PKCS#8 với phương thức mã hoá DER (tiêu chuẩn Java). Blob khoá được trả về là mờ và sẽ được cung cấp sau đó để ký và xác minh.
Trả về: 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 66 của tệp keymaster1.h .
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) |
- Ngừng sử dụng:
- ký dữ liệu bằng một blob khoá được tạo trước đó. Phương thức này có thể sử dụng khoá bất đối xứng hoặc khoá bí mật.
Trả về: 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 108 của tệp keymaster1.h .
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) |
Cung cấp dữ liệu cho và có thể nhận đầu ra từ một thao tác mã hoá đang diễn ra bắt đầu bằng begin() .
Nếu operation_handle không hợp lệ, thì update() sẽ trả về lỗi KM_ERROR_INVALID_OPERATION_HANDLE.
update() có thể không sử dụng hết tất cả dữ liệu được cung cấp trong vùng đệm dữ liệu. update() sẽ trả về lượng dữ liệu đã tiêu thụ trong *data_consumed. Phương thức gọi phải cung cấp dữ liệu chưa được sử dụng trong lệnh gọi tiếp theo.
- Tham số
-
[in] dev Cấu trúc thiết bị keymaster. [in] handle_operation Tay điều khiển thao tác do begin() trả về. [in] in_params Các tham số bổ sung cho toán tử. Đối với các chế độ AEAD, thuộc tính này được dùng để chỉ định KM_TAG_ADDITIONAL_DATA. Xin lưu ý rằng dữ liệu bổ sung có thể được cung cấp trong nhiều lệnh gọi đến update() , nhưng chỉ cho đến khi dữ liệu đầu vào được cung cấp. [in] input Dữ liệu cần xử lý, theo các tham số được thiết lập trong lệnh gọi đến begin() . Xin lưu ý rằng update() có thể sử dụng hoặc không sử dụng tất cả dữ liệu được cung cấp. Xem input_consumed
.[out] input_consumed Lượng dữ liệu mà update() đã sử dụng. Nếu số lượng này ít hơn số lượng đã cung cấp, thì phương thức gọi phải cung cấp số lượng còn lại trong lệnh gọi tiếp theo đến update() . [out] out_params Tham số đầu ra. Dùng để trả về dữ liệu bổ sung từ thao tác. Phương thức gọi sẽ sở hữu mảng tham số đầu ra và phải giải phóng mảng đó bằng keymaster_free_param_set() . Bạn có thể đặt out_params thành NULL nếu không có tham số đầu ra nào được dự kiến. Nếu out_params là NULL và các tham số đầu ra được tạo, thì begin() sẽ trả về KM_ERROR_OUTPUT_PARAMETER_NULL. [out] output Dữ liệu đầu ra, nếu có. Phương thức gọi giả định quyền sở hữu vùng đệm được phân bổ. đầu ra không được là giá trị NULL.
Xin lưu ý rằng update() có thể không cung cấp bất kỳ kết quả nào, trong trường hợp đó, output->data_length sẽ bằng 0 và output->data có thể là NULL hoặc có độ dài bằng 0 (vì vậy, phương thức gọi phải luôn giải phóng() dữ liệu đó).
Định nghĩa tại dòng 495 của tệp keymaster1.h .
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) |
- Ngừng sử dụng:
- Xác minh dữ liệu được ký bằng blob khoá. Phương thức này có thể sử dụng khoá bất đối xứng hoặc khoá bí mật.
Trả về: 0 khi xác minh thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa tại dòng 118 của tệp keymaster1.h .
Tài liệu cho cấu trúc này được tạo từ tệp sau:
- hardware/libhardware/include/hardware/ keymaster1.h