Tham chiếu cấu trúc keymaster1_device

Tham chiếu cấu trúc keymaster1_device

#include < keymaster1.h >

Trường dữ liệu

cấu trúc hw_device_t chung
uint32_t client_version
uint32_t cờ
trống * bối 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 signature_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, thuật toán keymaster_algorithm_t , mục đích keymaster_target_t , keymaster_block_mode_t **chế độ, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , mục đích keymaster_padding_t , keymaster_padding_t **chế độ, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , mục đích keymaster_util_t , keymaster_digest_t **digests, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , keymaster_key_format_t **format, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , keymaster_key_format_t **format, 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 **đặc điểm)
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 **đặc điểm)
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 **đặc điểm)
keymaster_error_t (* import_key )(const struct keymaster1_device *dev, keymaster_key_format_t import_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 (* bắt đầu )(const struct keymaster1_device *dev, keymaster_Pure_t mục đích, 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 (* cập nhật )(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 (* kết thúc )(const struct keymaster1_device *dev, keymaster_Operation_handle_t Operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *chữ ký, keymaster_key_param_set_t *out_params, keymaster_blob_t *output)
keymaster_error_t (* hủy bỏ )(const struct keymaster1_device *dev, keymaster_Operation_handle_t Operation_handle)

miêu tả cụ thể

Định nghĩa thiết bị Keymaster1

Định nghĩa tại dòng 28 của file keymaster1.h .

Tài liệu hiện trường

keymaster_error_t (* hủy bỏ)(const struct keymaster1_device *dev, keymaster_Operation_handle_t Operation_handle)

Hủy bỏ một hoạt động mã hóa bắt đầu bằng Begin() , giải phóng tất cả tài nguyên nội bộ và vô hiệu hóa operation_handle .

Định nghĩa tại dòng 531 của file 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 được keymaster sử dụng. Entropy được thêm vào thông qua phương pháp này được đảm bảo không phải là nguồn entropy duy nhất được sử dụng và chức năng trộn bắt buộc phải an toàn, theo nghĩa là nếu RNG được gieo mầm (từ bất kỳ nguồn nào) với bất kỳ dữ liệu nào thì kẻ tấn công không thể dự đoán (hoặc control), thì đầu ra RNG không thể phân biệt được với ngẫu nhiên. Vì vậy, nếu entropy từ bất kỳ nguồn nào tốt thì đầu ra sẽ tốt.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] dữ liệu Dữ liệu ngẫu nhiên được trộn lẫn vào.
[TRONG] dữ liệu_độ dài Độ dài của data .

Định nghĩa tại dòng 242 của file keymaster1.h .

keymaster_error_t (* bắt đầu)(const struct keymaster1_device *dev, keymaster_pure_t mục đích, 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 hoạt động mã hóa bằng cách sử dụng khóa được chỉ định. Nếu tất cả đều ổn, Begin() sẽ trả về KM_ERROR_OK và tạo một bộ điều khiển thao tác phải được chuyển cho các lệnh gọi tiếp theo tới update() , finish() hoặc abort() .

Điều quan trọng là mỗi lệnh gọi hàm started() phải được ghép nối với lệnh gọi tiếp theo tới finish() hoặc abort() để cho phép quá trình triển khai keymaster dọn sạch mọi trạng thái hoạt động nội bộ. Việc không thực hiện điều nà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 start() trả về KM_ERROR_TOO_MANY_OPERATIONS khi hết dung lượng cho các hoạt động. Bất kỳ kết quả nào khác ngoài KM_ERROR_OK từ Begin() , update() hoặc finish() đều ngầm hủy bỏ thao tác, trong trường hợp đó abort() không cần được gọi (và sẽ trả về KM_ERROR_INVALID_OPERATION_HANDLE nếu được gọi).

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] mục đích Mục đích của hoạt động, một trong các KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN hoặc KM_PURPOSE_VERIFY. Lưu ý rằng đối với chế độ AEAD, mã hóa và giải mã ngụ ý việc ký và xác minh tương ứng nhưng phải được chỉ định là KM_PURPOSE_ENCRYPT và KM_PURPOSE_DECRYPT.
[TRONG] chìa khóa Chìa khóa được sử dụng cho hoạt động. key phải có mục đích tương thích với purpose và tất cả các yêu cầu sử dụng của nó phải được đáp ứng, nếu không Begin() sẽ trả về mã lỗi thích hợp.
[TRONG] in_params Các thông số bổ sung cho hoạt động. Điều này thường được sử dụng để cung cấp dữ liệu xác thực với KM_TAG_AUTH_TOKEN. Nếu KM_TAG_APPLICATION_ID hoặc KM_TAG_APPLICATION_DATA được cung cấp trong quá trình tạo thì chúng phải được cung cấp ở đây, nếu không thao tác sẽ không thành công với KM_ERROR_INVALID_KEY_BLOB. Đối với các thao tác yêu cầu nonce hoặc IV, trên các khóa được tạo bằng KM_TAG_CALLER_NONCE, in_params có thể chứa thẻ KM_TAG_NONCE. Đối với các hoạt động AEAD KM_TAG_CHUNK_SIZE được chỉ định ở đây.
[ngoài] out_params Các thông số đầu ra. Được sử dụng để trả về dữ liệu bổ sung từ quá trình khởi tạo hoạt động, đặc biệt là trả về IV hoặc nonce từ các hoạt động tạo ra IV hoặc nonce. Người gọi có quyền sở hữu mảng tham số đầu ra và phải giải phóng nó bằng keymaster_free_param_set() . out_params có thể được đặt thành NULL nếu không có tham số đầu ra nào được mong đợi. 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.
[ngoài] thao tác_xử lý Bộ điều khiển thao tác mới được tạo phải được chuyển tới 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 file keymaster1.h .

uint32_t client_version

ĐIỀU NÀY KHÔNG ĐƯỢC DÙNG NỮA. 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 file keymaster1.h .

cấu trúc hw_device_t chung

Các phương pháp phổ biến của thiết bị keymaster. Đây phải là thành viên đầu tiên của keymaster_device vì người dùng cấu trúc này sẽ chuyển một con trỏ hw_device_t tới keymaster_device trong các ngữ cảnh đã biết hw_device_t tham chiếu đến keymaster_device.

Định nghĩa tại dòng 35 của file keymaster1.h .

bối cảnh trống*

Định nghĩa tại dòng 48 của file keymaster1.h .

int(* delete_all)(const struct keymaster1_device *dev)
Không dùng nữa:
Xóa tất cả các khóa trong kho khóa phần cứng. Được sử dụng khi kho khóa được đặt lại hoàn toàn.

Chức năng này là tùy chọn và phải được đặt thành NULL nếu nó không được triển khai.

Trả về 0 nếu thành công hoặc mã lỗi nhỏ hơn 0.

Định nghĩa tại dòng 100 của file keymaster1.h .

keymaster_error_t (* delete_all_keys)(const struct keymaster1_device *dev)

Xóa tất cả các khóa trong kho khóa phần cứng. Được sử dụng khi kho khóa đượ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ỳ đốm màu khóa nào được tạo hoặc nhập trước đó cho bất kỳ thao tác nào.

Chức năng này là tùy chọn và phải được đặt thành NULL nếu nó không được triển khai.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster

Định nghĩa tại dòng 407 của file keymaster1.h .

keymaster_error_t (* delete_key)(const struct keymaster1_device *dev, const keymaster_key_blob_t *key)

Xóa khóa hoặc cặp khóa được liên kết với blob khóa. Sau khi gọi hàm này, bạn sẽ không thể sử dụng phím này cho bất kỳ thao tác nào khác. Có thể được áp dụng cho các khóa từ nguồn gốc tin cậy nước ngoài (các khóa không thể sử dụng được theo nguồn gốc tin cậy hiện tại).

Chức năng này là tùy chọn và phải được đặt thành NULL nếu nó không được triển khai.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] chìa khóa Chìa khóa cần xóa.

Định nghĩa tại dòng 395 của file keymaster1.h .

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
Không dùng nữa:
Xóa cặp khóa được liên kết với blob khóa.

Chức năng này là tùy chọn và phải được đặt thành NULL nếu nó không được triển khai.

Trả về 0 nếu thành công hoặc mã lỗi nhỏ hơn 0.

Định nghĩa tại dòng 88 của file keymaster1.h .

keymaster_error_t (*export_key)(const struct keymaster1_device *dev, keymaster_key_format_t import_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 khóa chung, trả về mảng byte theo định dạng đã chỉ định.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] định dạng xuất Định dạng được sử dụng để xuất khóa.
[TRONG] key_to_export Chìa khóa để xuất khẩu.
[ngoài] xuất dữ liệu Vật liệu chính được xuất khẩu. Người gọi thừa nhận quyền sở hữu.
[ngoài] xuất_data_length Độ dài của export_data .

Định nghĩa tại dòng 377 của file keymaster1.h .

keymaster_error_t (* kết thúc)(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ã hóa bắt đầu bằng start() và vô hiệu hóa operation_handle .

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thao tác_xử lý Bộ điều khiển thao tác được trả về bởi Begin() . Tay cầm này sẽ bị vô hiệu.
[TRONG] thông số Các thông số bổ sung cho hoạt động. Đối với chế độ AEAD, điều này được sử 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() .
[TRONG] chữ ký Chữ ký cần được xác minh nếu mục đích được chỉ định trong lệnh gọi start() là KM_PURPOSE_VERIFY.
[ngoài] đầu ra Dữ liệu đầu ra, nếu có. Người gọi giả định quyền sở hữu bộ đệm được phân bổ.

Nếu thao tác đang kết thúc là xác minh chữ ký hoặc giải mã và xác minh ở chế độ AEAD không thành công thì kết thúc() sẽ trả về KM_ERROR_VERIFICATION_FAILED.

Định nghĩa tại dòng 521 của file 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 file 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 **đặc điểm)

Tạo một khóa hoặc cặp khóa, trả về một blob khóa và/hoặc mô tả về khóa.

Các tham số tạo khóa được xác định là cặp thẻ/giá trị keymaster, được cung cấp trong params . Xem keymaster_tag_t để biết danh sách đầy đủ. Một số giá trị luôn được yêu cầu để tạo khóa 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.

KM_TAG_AUTH_TIMEOUT thường phải được chỉ định trừ khi có KM_TAG_NO_AUTH_REQUIRED hoặc người dùng sẽ phải xác thực cho mỗi lần sử dụng.

KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH và KM_TAG_DIGEST phải được chỉ định cho các thuật toán yêu cầu chúng.

Các thẻ sau có thể không được chỉ định; giá trị của chúng sẽ được cung cấp bởi việc thực hiện.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thông số Mảng các tham số tạo khóa.
[TRONG] thông số_count Độ dài của params
[ngoài] key_blob trả về khóa được tạo. key_blob không được là NULL. Người gọi thừa nhận quyền sở hữu key_blob->key_material và phải giải phóng() nó.
[ngoài] đặc trưng trả về các đặc điểm của khóa đã được tạo nếu không phải là NULL. Nếu không phải là NULL, người gọi sẽ có quyền sở hữu và phải phân bổ keymaster_free_characteristics() . Lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả lại.

Định nghĩa tại dòng 282 của file 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)
Không dùng nữa:
Tạo khóa công khai và khóa riêng. Key-blob được trả về không rõ ràng và sau đó phải được cung cấp để ký và xác minh.

Trả về: 0 nếu thành công hoặc mã lỗi nhỏ hơn 0.

Định nghĩa tại dòng 56 của file 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 **đặc điểm)

Trả về các đặc điểm của khóa được chỉ định hoặc KM_ERROR_INVALID_KEY_BLOB nếu key_blob không hợp lệ (việc triển khai phải xác thực đầy đủ tính toàn vẹn của khóa). client_id và app_data phải là ID và dữ liệu được cung cấp khi khóa đượ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. Những giá trị đó không được bao gồm trong các đặc tính được trả về. Người 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() .

Lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả lại.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] key_blob Chìa khóa để lấy lại các đặc điểm từ.
[TRONG] client_id Dữ liệu ID khách hàng hoặc NULL nếu không được liên kết.
[TRONG] id ứng dụng Dữ liệu ứng dụng hoặc NULL nếu không được liên kết.
[ngoài] đặc trưng Các đặc điểm chính.

Định nghĩa tại dòng 309 của file 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)
Không dùng nữa:
Lấy phần khóa công khai của cặp khóa. Khóa chung phải ở dạng mảng byte được mã hóa ở định dạng X.509 (tiêu chuẩn Java).

Trả về: 0 nếu thành công hoặc mã lỗi nhỏ hơn 0. Nếu có lỗi, x509_data sẽ không được phân bổ.

Định nghĩa tại dòng 76 của file keymaster1.h .

keymaster_error_t (* get_supported_algorithms)(const struct keymaster1_device *dev, keymaster_algorithm_t **thuật toán, size_t *algorithms_length)

Được hỗ trợ các thuật toán.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[ngoài] thuật toán Mảng thuật toán được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] thuật toán_length Độ dài của algorithms

Định nghĩa tại dòng 133 của file keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , mục đích keymaster_block_t , keymaster_block_mode_t **chế độ, size_t *modes_length)

Nhận các chế độ khối được hỗ trợ cho thuật toán đã chỉ định.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thuật toán Thuật toán cho các chế độ được hỗ trợ sẽ được trả về.
[ngoài] chế độ Mảng chế độ được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] chế độ_độ dài Độ dài của modes

Định nghĩa tại dòng 149 của file keymaster1.h .

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , mục đích keymaster_util_t , keymaster_digest_t **digests, size_t *digests_length)

Nhận các thông báo được hỗ trợ cho thuật toán đã chỉ định. Người gọi giả định quyền sở hữu mảng được phân bổ.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thuật toán Thuật toán mà thông báo tóm tắt được hỗ trợ sẽ được trả về.
[ngoài] tiêu hóa Mảng thông báo được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] thông báo_length Độ dài của digests .

Định nghĩa tại dòng 187 của file keymaster1.h .

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , keymaster_key_format_t **định dạng, size_t *formats_length)

Nhận các định dạng xuất khóa được hỗ trợ cho các khóa của thuật toán đã chỉ định. Người gọi giả định quyền sở hữu mảng được phân bổ.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thuật toán Thuật toán cho các định dạng được hỗ trợ sẽ được trả về.
[ngoài] định dạng Mảng định dạng được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] định dạng_length Độ dài của formats

Định nghĩa tại dòng 224 của file keymaster1.h .

keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , keymaster_key_format_t **định dạng, size_t *formats_length)

Nhận các định dạng nhập khóa được hỗ trợ cho các khóa của thuật toán đã chỉ định. Người gọi giả định quyền sở hữu mảng được phân bổ.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thuật toán Thuật toán cho các định dạng được hỗ trợ sẽ được trả về.
[ngoài] định dạng Mảng định dạng được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] định dạng_length Độ dài của formats

Định nghĩa tại dòng 206 của file keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, thuật toán keymaster_algorithm_t , mục đích keymaster_padding_t , keymaster_padding_t **chế độ, size_t *modes_length)

Nhận các chế độ đệm được hỗ trợ cho thuật toán đã chỉ định. Người gọi giả định quyền sở hữu mảng được phân bổ.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thuật toán Thuật toán cho các chế độ đệm được hỗ trợ sẽ được trả về.
[ngoài] chế độ Mảng chế độ đệm được hỗ trợ. Người gọi có quyền sở hữu mảng và phải giải phóng() nó.
[ngoài] chế độ_độ dài Độ dài của modes

Định nghĩa tại dòng 168 của file 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 **đặc điểm)

Nhập một khóa hoặc cặp khóa, trả về một blob khóa và/hoặc mô tả về khóa.

Hầu hết các tham số nhập khóa được xác định dưới dạng cặp thẻ/giá trị keymaster, được cung cấp trong "params". Xem keymaster_tag_t để biết danh sách đầy đủ. Các giá trị luôn được yêu cầu để nhập các khóa 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.

Nói chung nên chỉ định KM_TAG_AUTH_TIMEOUT. Nếu không được 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 sẽ nhận giá trị mặc định nếu không được chỉ định:

  • KM_TAG_KEY_SIZE sẽ mặc định theo kích thước của khóa được cung cấp.
  • KM_TAG_RSA_PUBLIC_EXPONENT sẽ mặc định có giá trị trong khóa được cung cấp (đối với khóa RSA)

Các thẻ sau có thể không được chỉ định; giá trị của chúng sẽ được cung cấp bởi việc thực hiện.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thông số Các tham số xác định khóa được nhập.
[TRONG] thông số_count Số lượng mục trong params .
[TRONG] key_format chỉ định định dạng của dữ liệu chính trong key_data.
[ngoài] key_blob Được sử dụng để trả về đốm màu khóa mờ. Phải là non-NULL. Người gọi thừa nhận quyền sở hữu key_material chứa trong đó.
[ngoài] đặc trưng Được sử dụng để trả về các đặc tính của khóa đã nhập. Có thể là NULL, trong trường hợp đó sẽ không có đặc điểm nào được trả về. Nếu không phải là NULL, người gọi sẽ có quyền sở hữu và phải phân bổ keymaster_free_characteristics() . Lưu ý rằng KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả lại.

Định nghĩa tại dòng 357 của file 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)
Không dùng nữa:
Nhập cặp khóa công khai và khóa riêng. Các khóa đã nhập sẽ ở định dạng PKCS#8 với mã hóa DER (tiêu chuẩn Java). Key-blob được trả về không rõ ràng và sau đó sẽ được cung cấp để ký và xác minh.

Trả về: 0 nếu thành công hoặc mã lỗi nhỏ hơn 0.

Định nghĩa tại dòng 66 của file 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)
Không dùng nữa:
Ký hiệu dữ liệu bằng cách sử dụng key-blob được tạo trước đó. Điều này có thể sử dụng khóa bất đối xứng hoặc khóa bí mật.

Trả về: 0 nếu thành công hoặc mã lỗi nhỏ hơn 0.

Định nghĩa tại dòng 108 của file keymaster1.h .

keymaster_error_t (* cập nhật)(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 và có thể nhận đầu ra từ một hoạt động mã hóa đang diễn ra bắt đầu bằng Begin() .

Nếu Operation_handle không hợp lệ, update() sẽ trả về KM_ERROR_INVALID_OPERATION_HANDLE.

update() có thể không tiêu thụ hết dữ liệu được cung cấp trong bộ đệm dữ liệu. update() sẽ trả về số tiền đã tiêu thụ trong *data_consumed. Người gọi sẽ cung cấp dữ liệu chưa được sử dụng trong cuộc gọi tiếp theo.

Thông số
[TRONG] nhà phát triển Cấu trúc thiết bị keymaster
[TRONG] thao tác_xử lý Bộ điều khiển thao tác được trả về bởi Begin() .
[TRONG] in_params Các thông số bổ sung cho hoạt động. Đối với chế độ AEAD, điều này được sử dụng để chỉ định KM_TAG_ADDITIONAL_DATA. Lưu ý rằng dữ liệu bổ sung có thể được cung cấp trong nhiều lệnh gọi tới update() , nhưng chỉ cho đến khi dữ liệu đầu vào được cung cấp.
[TRONG] đầu vào Dữ liệu cần được xử lý, theo các tham số được thiết lập trong lệnh gọi hàm started() . Lưu ý rằng update() có thể tiêu thụ hoặc không tiêu thụ tất cả dữ liệu được cung cấp. Xem input_consumed .
[ngoài] đầu vào_tiêu thụ Lượng dữ liệu đã được sử dụng bởi update() . Nếu số tiền này nhỏ hơn số tiền được cung cấp, người gọi sẽ cung cấp phần còn lại trong lệnh gọi tiếp theo tới update() .
[ngoài] out_params Các thông số đầu ra. Được sử dụng để trả về dữ liệu bổ sung từ thao tác Người gọi có quyền sở hữu mảng tham số đầu ra và phải giải phóng nó bằng keymaster_free_param_set() . out_params có thể được đặt thành NULL nếu không có tham số đầu ra nào được mong đợi. 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.
[ngoài] đầu ra Dữ liệu đầu ra, nếu có. Người gọi giả định quyền sở hữu bộ đệm được phân bổ. đầu ra không được là NULL.

Lưu ý rằng update() có thể không cung cấp bất kỳ đầu ra nào, trong trường hợp đó, đầu ra->data_length sẽ bằng 0 và đầu ra->dữ liệu có thể là NULL hoặc có độ dài bằng 0 (vì vậy người gọi phải luôn free() nó).

Định nghĩa tại dòng 495 của file 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 signature_data_length, const uint8_t *signature, const size_t signature_length)
Không dùng nữa:
Xác minh dữ liệu được ký bằng key-blob. Điều này có thể sử dụng khóa bất đối xứng hoặc khóa 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 file keymaster1.h .


Tài liệu cho cấu trúc này được tạo từ tệp sau:
  • phần cứng/libhardware/bao gồm/phần cứng/ keymaster1.h