Tham chiếu cấu trúc keymaster1_device
#include < keymaster1.h >
Trường dữ liệu | |
struct hw_device_t | phổ thông |
uint32_t | client_version |
uint32_t | cờ |
void * | định nghĩa bài văn |
int (* | create_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 * sign_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * data, const size_t data_length, uint8_t ** sign_data, size_t * sign_data_length) |
int (* | verify_data ) (const struct keymaster1_device * dev, const void * sign_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * sign_data, const size_t sign_data_length, const uint8_t * signature, const size_t signature_length) |
keymaster_error_t (* | get_supported_algorithm ) (const struct keymaster1_device * dev, keymaster_algorithm_t ** thuật toán, size_t * crypt_length) |
keymaster_error_t (* | get_supported_block_modes ) (const struct keymaster1_device * dev, thuật toán keymaster_algorithm_t , keymaster_purpose_t mục đích, keymaster_block_mode_t ** các chế độ, size_t * mode_length) |
keymaster_error_t (* | get_supported_padding_modes ) (const struct keymaster1_device * dev, keymaster_algorithm_t , keymaster_purpose_t purpose, keymaster_padding_t **, size_t * mode_length) |
keymaster_error_t (* | get_supported_digests ) (const struct keymaster1_device * dev, thuật toán keymaster_algorithm_t , keymaster_purpose_t mục đích, 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 * format_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 * format_length) |
keymaster_error_t (* | add_rng_entropy ) (const struct keymaster1_device * dev, const uint8_t * data, size_t data_length) |
keymaster_error_t (* | create_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 (* | 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 (* | 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 * 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 (* | 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 tệp keymaster1.h .
Tài liệu thực địa
keymaster_error_t (* abort) (const struct keymaster1_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 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 đượ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 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) |
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ớipurpose
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. Đối với các hoạt động AEAD, KM_TAG_CHUNK_SIZE được chỉ định tại đâ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 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 451 của tệp keymaster1.h .
uint32_t client_version |
ĐIỀU NÀY KHÔNG ĐƯỢC CHỨNG MINH. Thay vào đó, hãy sử dụng các trường "module_api_version" và "hal_api_version" trong phần khởi tạo keymaster_module.
Định nghĩa tại dòng 41 của tệp keymaster1.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 keymaster1.h .
void * bối cảnh |
Định nghĩa ở dòng 48 của tệp keymaster1.h .
int (* delete_all) (const struct keymaster1_device * dev) |
- Không được chấp nhận:
- 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à nên được đặt thành NULL nếu nó không được triển khai.
Trả về 0 khi thành công hoặc mã lỗi nhỏ hơn 0.
Định nghĩa ở dòng 100 của tệp 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 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 407 của tệp 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 đố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 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) |
- Không được chấp nhận:
- Xóa cặp khóa được liên kết với đốm màu chính.
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.
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_blob_t) |
Xuất khóa công khai, trả về một mảng byte ở định dạng được chỉ định.
- 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. [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. [ngoài] 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 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 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] 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] 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 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 (* create_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 đố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. [Trong] params_count Chiều dài của các params
số.[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 282 của tệp keymaster1.h .
int (* create_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 được chấp nhận:
- Tạo khóa công khai và khóa riêng tư. Key-blob trả về là không rõ ràng và sau đó phải được cung cấp để 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 ** đặ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_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 để 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.
Đị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) |
- Không được chấp nhận:
- Nhận phần khóa công khai của một cặp khóa. Khóa công khai phải ở định dạng X.509 (tiêu chuẩn Java) mảng byte được mã hóa.
Trả về: 0 khi thành công hoặc mã lỗi nhỏ hơn 0. Khi có lỗi, không nên cấp phát dữ liệu x509_data.
Định nghĩa tại dòng 76 của tệp keymaster1.h .
keymaster_error_t (* get_supported_algorit) (const struct keymaster1_device * dev, keymaster_algorithm_t **, size_t *ists_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] độ dài của thuật toán Độ dài của các 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, thuật toán keymaster_algorithm_t , keymaster_purpose_t purpose, keymaster_block_mode_t ** mode, size_t * mode_length) |
Nhận các chế độ khối được hỗ trợ cho thuật toán được 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 mà các chế độ được hỗ trợ sẽ được trả về. [ngoài] các chế độ Mảng các 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] mode_length Độ dài của các 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, thuật toán keymaster_algorithm_t , keymaster_purpose_t mục đích, keymaster_digest_t ** digests, size_t * digests_length) |
Nhận thông báo được hỗ trợ cho thuật toán được 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à các thông báo được hỗ trợ sẽ được trả về. [ngoài] tiêu hóa Hỗ trợ mảng tiêu hóa. Người gọi có quyền sở hữu mảng và phải giải phóng () nó. [ngoài] digests_length Chiều dài 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, thuật toán keymaster_algorithm_t , định dạng keymaster_key_format_t **, size_t * format_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 được 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à 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] format_length Độ dài của các 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, thuật toán keymaster_algorithm_t , định dạng keymaster_key_format_t **, size_t * format_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 được 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à 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] format_length Độ dài của các 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, thuật toán keymaster_algorithm_t , keymaster_purpose_t purpose, keymaster_padding_t ** mode, size_t * mode_length) |
Nhận các chế độ đệm được hỗ trợ cho thuật toán được 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à các chế độ đệm được hỗ trợ sẽ được trả về. [ngoài] các chế độ Hỗ trợ mảng chế độ đệm. Người gọi có quyền sở hữu mảng và phải giải phóng () nó. [ngoài] mode_length Độ dài của các 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_keyt_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 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 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) |
- Không được chấp nhận:
- Nhập cặp khóa công khai và khóa riêng tư. 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ả lại là không rõ ràng và sau đó sẽ được cung cấp để 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 * sign_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * data, const size_t data_length, uint8_t ** sign_data, size_t * sign_data_length) |
- Không được chấp nhận:
- Đánh dấu dữ liệu bằ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 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 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_baramst * keymaster_param_param |
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 495 của tệp keymaster1.h .
int (* verify_data) (const struct keymaster1_device * dev, const void * sign_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * sign_data, const size_t sign_data_length, const uint8_t * signature, const size_t signature_length) |
- Không được chấp nhận:
- 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 tệp 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