Tham chiếu cấu trúc keymaster2_device

Tham chiếu cấu trúc keymaster2_device

#include < keymaster2.h >

Trường dữ liệu

struct hw_device_t phổ thông
void * định nghĩa bài văn
uint32_t cờ
keymaster_error_t (* config ) (const struct keymaster2_device * dev, const keymaster_key_param_set_t * params)
keymaster_error_t (* add_rng_entropy ) (const struct keymaster2_device * dev, const uint8_t * data, size_t data_length)
keymaster_error_t (* create_key ) (const struct keymaster2_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 keymaster2_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 keymaster2_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 (* export_key ) (const struct keymaster2_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 (* attest_key ) (const struct keymaster2_device * dev, const keymaster_key_blob_t * key_to_attest, const keymaster_key_param_set_t * attest_params, keymaster_cert_chain_t * cert_chain)
keymaster_error_t (* lift_key ) (const struct keymaster2_device * dev, const keymaster_key_blob_t * key_to_upgrade, const keymaster_key_param_set_t * lift_params, keymaster_key_blob_t * lift_key)
keymaster_error_t (* delete_key ) (const struct keymaster2_device * dev, const keymaster_key_blob_t * key)
keymaster_error_t (* delete_all_keys ) (const struct keymaster2_device * dev)
keymaster_error_t (* begin ) (const struct keymaster2_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 (* cập nhật ) (const struct keymaster2_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 * output)
keymaster_error_t (* finish ) (const struct keymaster2_device * dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t * in_params, const keymaster_blob_t * input, const keymaster_blob_t * signature, keymaster_key_param_set_t * out_plob_tmaster * output)
keymaster_error_t (* hủy bỏ ) (const struct keymaster2_device * dev, keymaster_operation_handle_t operation_handle)

miêu tả cụ thể

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

Định nghĩa tại dòng 28 của tệp keymaster2.h .

Tài liệu thực địa

keymaster_error_t (* abort) (const struct keymaster2_device * dev, keymaster_operation_handle_t operation_handle)

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

Định nghĩa tại dòng 415 của tệp keymaster2.h .

keymaster_error_t (* add_rng_entropy) (const struct keymaster2_device * dev, const uint8_t * data, size_t data_length)

Thêm entropy vào RNG được sử dụng bởi keymaster. 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 được yêu cầu phải được bảo mật, theo nghĩa là nếu RNG được gieo (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 điều khiển), thì đầu ra RNG không thể phân biệt được với ngẫu nhiên. Do đó, 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 vào.
[Trong] data_length Độ dài của data .

Định nghĩa tại dòng 74 của tệp keymaster2.h .

keymaster_error_t (* attest_key) (const struct keymaster2_device * dev, const keymaster_key_blob_t * key_to_attest, const keymaster_key_param_set_t * attest_params, keymaster_cert_chain_t * cert_chain)

Tạo chuỗi chứng chỉ X.509 đã ký chứng thực sự hiện diện của key_to_attest trong keymaster (TODO (swillden): Mô tả nội dung chứng chỉ chi tiết hơn). Chứng chỉ sẽ chứa phần mở rộng với OID 1.3.6.1.4.1.11129.2.1.17 và giá trị được xác định trong <TODO: swillden - insert link here> chứa mô tả khóa.

Thông số
[Trong] nhà phát triển Cấu trúc thiết bị keymaster.
[Trong] key_to_attest Khóa keymaster để tạo chứng chỉ chứng thực.
[Trong] attest_params Các tham số xác định cách thực hiện chứng thực. Hiện tại, thông số duy nhất là KM_TAG_ALGORITHM, phải là KM_ALGORITHM_EC hoặc KM_ALGORITHM_RSA. Thao tác này sẽ chọn khóa chứng thực được cấp phép nào sẽ được sử dụng để ký chứng chỉ.
[ngoài] cert_chain Một mảng chứng chỉ X.509 được mã hóa DER. Đầu tiên sẽ là chứng chỉ cho key_to_attest . Các mục còn lại sẽ chuỗi trở lại thư mục gốc. Người gọi có quyền sở hữu và phải phân bổ bằng keymaster_free_cert_chain.

Định nghĩa tại dòng 239 của tệp keymaster2.h .

Bắt đầu một hoạt động mật mã 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 xử lý hoạt động phải được chuyển cho các lệnh gọi tiếp theo để cập nhật () , finish () hoặc abort () .

Điều quan trọng là mỗi lệnh gọi bắt đầu () phải được ghép nối với một lệnh gọi tiếp theo để kết thúc () hoặc hủy bỏ () , để cho phép triển khai quản trị viên khóa để xóa bất kỳ trạng thái hoạt động nội bộ nào. Không làm được điều này có thể làm rò rỉ không gian trạng thái bên trong 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ề 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 ngoài KM_ERROR_OK từ begin () , update () hoặc finish () đều hủy bỏ hoàn toàn 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 KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN hoặc KM_PURPOSE_VERIFY. Lưu ý rằng đối với các chế độ AEAD, mã hóa và giải mã có nghĩa là 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, hoặc 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, chúng phải được cung cấp tại đây, nếu không, hoạt động sẽ không thành công với KM_ERROR_INVALID_KEY_BLOB. Đối với các hoạt động 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.
[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 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, begin () sẽ trả về KM_ERROR_OUTPUT_PARAMETER_NULL.
[ngoài] Ope_handle Xử lý hoạt động mới được tạo phải được chuyển cho update () , finish () hoặc abort () . Nếu operation_handle là NULL, begin () sẽ trả về KM_ERROR_OUTPUT_PARAMETER_NULL.

Định nghĩa tại dòng 332 của tệp keymaster2.h .

struct hw_device_t common

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ẽ truyền một con trỏ hw_device_t tới keymaster_device trong ngữ cảnh mà nó được biết là hw_device_t tham chiếu đến keymaster_device.

Định nghĩa ở dòng 35 của tệp keymaster2.h .

keymaster_error_t (* config) (const struct keymaster2_device * dev, const keymaster_key_param_set_t * params)

Định cấu hình keymaster. Phương thức này phải được gọi một lần sau khi thiết bị được mở và trước khi nó được sử dụng. Nó được sử dụng để cung cấp KM_TAG_OS_VERSION và KM_TAG_OS_PATCHLEVEL cho quản trị viên khóa. Cho đến khi phương thức này được gọi, tất cả các phương thức khác sẽ trả về KM_ERROR_KEYMASTER_NOT_CONFIGURED. Các giá trị được cung cấp bởi phương pháp này chỉ được quản trị viên khóa chấp nhận một lần cho mỗi lần khởi động. Các cuộc gọi tiếp theo sẽ trả về KM_ERROR_OK, nhưng không làm gì cả.

Nếu triển khai keymaster trong phần cứng an toàn và phiên bản hệ điều hành cũng như các giá trị cấp bản vá được cung cấp không khớp với các giá trị được bootloader cung cấp cho phần cứng an toàn (hoặc nếu bootloader không cung cấp giá trị), thì phương pháp này sẽ trả về KM_ERROR_INVALID_ARGUMENT và tất cả các phương pháp khác sẽ tiếp tục trả về KM_ERROR_KEYMASTER_NOT_CONFIGURED.

Định nghĩa tại dòng 58 của tệp keymaster2.h .

void * bối cảnh

Định nghĩa tại dòng 37 của tệp keymaster2.h .

keymaster_error_t (* delete_all_keys) (const struct keymaster2_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 chính nào đã được tạo hoặc nhập trước đó cho bất kỳ hoạt động nào.

Chức năng này là tùy chọn và nên đượ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 288 của tệp keymaster2.h .

keymaster_error_t (* delete_key) (const struct keymaster2_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 đốm màu chính. Sau khi gọi hàm này, bạn sẽ không thể sử dụng phím cho bất kỳ thao tác nào khác. Có thể được áp dụng cho các khóa từ gốc tin cậy nước ngoài (các khóa không thể sử dụng được dưới gốc tin cậy hiện tại).

Chức năng này là tùy chọn và nên đượ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 xóa.

Định nghĩa tại dòng 276 của tệp keymaster2.h .

keymaster_error_t (* export_key) (const struct keymaster2_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_blob_t)

Xuất khóa công khai hoặc khóa đối xứng, trả về một mảng byte ở định dạng được chỉ định.

Lưu ý rằng chỉ cho phép xuất khóa đối xứng nếu khóa được tạo bằng KM_TAG_EXPORTABLE và chỉ khi đáp ứng tất cả các yêu cầu về sử dụng khóa (ví dụ: xác thực).

Thông số
[Trong] nhà phát triển Cấu trúc thiết bị keymaster.
[Trong] export_format Định dạng được sử dụng để xuất khóa.
[Trong] key_to_export Chìa khóa để xuất khẩu.
[Trong] client_id Khối ID khách hàng, phải khớp với khối được cung cấp trong KM_TAG_APPLICATION_ID trong quá trình tạo khóa (nếu có).
[Trong] dữ liệu chương trình Khối dữ liệu ứng dụng, phải khớp với khối được cung cấp trong KM_TAG_APPLICATION_DATA trong quá trình tạo khóa (nếu có).
[ngoài] xuất dữ liệu Vật liệu quan trọng đã xuất khẩu. Người gọi giả định quyền sở hữu.

Định nghĩa tại dòng 213 của tệp keymaster2.h .

keymaster_error_t (* finish) (const keymaster2_device * dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t * in_params, const keymaster_blob_t * input, const keymaster_blob_t * signature, keymaster_key_param_para_t * keymaster * outputm

Hoàn thành một hoạt động mật mã bắt đầu bằng begin () và làm mất hiệu lực của operation_handle .

Thông số
[Trong] nhà phát triển Cấu trúc thiết bị keymaster.
[Trong] Ope_handle Xử lý hoạt động được trả về bởi begin () . Tay cầm này sẽ bị vô hiệu.
[Trong] in_params Các thông số bổ sung cho hoạt động. Đối với các 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 để cập nhật () .
[Trong] đầu vào Dữ liệu được xử lý, theo các tham số được thiết lập trong lệnh gọi begin () . finish () phải sử dụng tất cả dữ liệu được cung cấp hoặc trả về KM_ERROR_INVALID_INPUT_LENGTH.
[Trong] Chữ ký Chữ ký sẽ được xác minh nếu mục đích được chỉ định trong cuộc gọi begin () 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 cấp phát.

Nếu thao tác 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ì finish () sẽ trả về KM_ERROR_VERIFICATION_FAILED.

Định nghĩa tại dòng 405 của tệp keymaster2.h .

cờ uint32_t

Xem các cờ được xác định cho keymaster0_devices :: flags trong keymaster_common.h . Chỉ được sử dụng để tương thích ngược; thiết bị phần cứng keymaster2 phải đặt giá trị này bằng 0.

Định nghĩa tại dòng 43 của tệp keymaster2.h .

keymaster_error_t (* create_key) (const struct keymaster2_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 đốm màu chính và / hoặc mô tả về khóa.

Tham số tạo khóa được xác định là các cặp thẻ / giá trị khóa quản trị viên khóa, được cung cấp trong các params số. 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 triển khai.

  • 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] params Mảng tham số tạo khóa
[ngoài] key_blob trả về khóa đã tạo. key_blob không được NULL. Người gọi giả định quyền sở hữu key_blob-> key_material và phải giải phóng () nó.
[ngoài] đặc điểm trả về các đặc tính của khóa được tạo, nếu không phải là NULL. Nếu không phải NULL, người gọi sẽ thừa nhận quyền sở hữu và phải phân bổ 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.

Định nghĩa tại dòng 112 của tệp keymaster2.h .

keymaster_error_t (* get_key_characteristics) (const struct keymaster2_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ệ (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 phân bổ bằng keymaster_free_characteristics () .

Lưu ý rằng 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 để rút lui các đặc điểm từ.
[Trong] client_id Dữ liệu ID ứng dụng khách hoặc NULL nếu không có dữ liệu nào được liên kết.
[Trong] 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.
[ngoài] đặc điểm Các đặc điểm chính. Nó không vô giá trị. Người gọi giả định quyền sở hữu nội dung và phải phân bổ bằng keymaster_free_characteristics () .

Định nghĩa tại dòng 139 của tệp keymaster2.h .

keymaster_error_t (* import_key) (const struct keymaster2_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_charact )

Nhập một khóa hoặc cặp khóa, trả về một đốm màu chính và / hoặc mô tả về khóa.

Hầu hết các thông số nhập khóa được xác định là các cặp thẻ / giá trị khóa quản trị viên khóa, đượ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 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. Nếu không xác đị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 các 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 thành 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 triển khai.

  • 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] params Các tham số xác định khóa đã nhập.
[Trong] params_count Số lượng mục nhập trong params số.
[Trong] key_format chỉ định định dạng của dữ liệu khóa trong key_data.
[ngoài] key_blob Được sử dụng để trả lại đốm màu mờ đục. Phải không phải là NULL. Người gọi giả định quyền sở hữu key_material được chứa.
[ngoài] đặc điểm Đượ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 này không có đặc điểm nào được trả về. Nếu không phải NULL, người gọi giả định quyền sở hữu nội dung và phải phân bổ bằng keymaster_free_characteristics () . Lưu ý rằng KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA không bao giờ được trả lại.

Định nghĩa tại dòng 186 của tệp keymaster2.h .

keymaster_error_t (* update) (const struct keymaster2_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_baramst * keymaster * outparam

Cung cấp dữ liệu và có thể nhận đầu ra từ một hoạt động mật mã đang diễn ra bắt đầu với begin () .

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

update () có thể không sử dụng tất cả 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 phải cung cấp dữ liệu chưa tích lũy 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] Ope_handle Xử lý hoạt động được trả về bởi begin () .
[Trong] in_params Các thông số bổ sung cho hoạt động. Đối với các 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 cập nhật () , nhưng chỉ cho đến khi dữ liệu đầu vào được cung cấp.
[Trong] đầu vào Dữ liệu được xử lý, theo các tham số được thiết lập trong lệnh gọi begin () . Lưu ý rằng update () có thể hoặc không thể sử dụng tất cả dữ liệu được cung cấp. Xem input_consumed .
[ngoài] input_consumed Lượng dữ liệu đã được sử dụng bởi update () . Nếu con số này ít hơn số tiền được cung cấp, người gọi phải cung cấp phần còn lại trong lần gọi cập nhật () tiếp theo.
[ngoài] out_params Các thông số đầu ra. Được sử dụng để trả về dữ liệu bổ sung từ hoạt động 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, 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 cấp phát. đầu ra không được 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 này, output-> data_length sẽ bằng 0 và dữ liệu output-> có thể là NULL hoặc zero-length (vì vậy người gọi phải luôn trống () nó).

Định nghĩa tại dòng 376 của tệp keymaster2.h .

keymaster_error_t (* lift_key) (const struct keymaster2_device * dev, const keymaster_key_blob_t * key_to_upgrade, const keymaster_key_param_set_t * lift_params, keymaster_key_blob_t * lift_key)

Nâng cấp khóa cũ. Các phím có thể trở nên "cũ" theo hai cách: Keymaster có thể được nâng cấp lên phiên bản mới hoặc hệ thống có thể được cập nhật để làm mất hiệu lực của phiên bản hệ điều hành và / hoặc cấp bản vá. Trong cả hai trường hợp, cố gắng sử dụng khóa cũ sẽ dẫn đến việc quản trị viên khóa trả về KM_ERROR_KEY_REQUIRES_UPGRADE. Phương thức này sau đó sẽ được gọi để nâng cấp khóa.

Thông số
[Trong] nhà phát triển Cấu trúc thiết bị keymaster.
[Trong] key_to_upgrade Khóa keymaster để nâng cấp.
[Trong] nâng cấp_params Các thông số cần thiết để hoàn tất nâng cấp. Cụ thể, KM_TAG_APPLICATION_ID và KM_TAG_APPLICATION_DATA sẽ được yêu cầu nếu chúng được xác định cho khóa.
[ngoài] khóa_cấp_cấp Chùm chìa khóa được nâng cấp.

Định nghĩa tại dòng 260 của tệp keymaster2.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 / keymaster2.h