การอ้างอิงโครงสร้าง keymaster1_device
#include < keymaster1.h >
เขตข้อมูล | |
โครงสร้าง hw_device_t | ทั่วไป |
uint32_t | ลูกค้า_รุ่น |
uint32_t | ธง |
เป็นโมฆะ * | บริบท |
อินท์(* | 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) |
อินท์(* | import_keypair )(const struct keymaster1_device *dev, const uint8_t *คีย์, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length) |
อินท์(* | 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) |
อินท์(* | Delete_keypair )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length) |
อินท์(* | Delete_all )(const struct keymaster1_device *dev) |
อินท์(* | 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 *ข้อมูล, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length) |
อินท์(* | 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 *ลายเซ็น, const size_t Signature_length) |
keymaster_error_t (* | get_supported_algorithms )(const struct keymaster1_device *dev, keymaster_algorithm_t **อัลกอริทึม, size_t *algorithms_length) |
keymaster_error_t (* | get_supported_block_modes ) (const struct keymaster1_device *dev, อัลกอริธึ ม keymaster_algorithm_t , วัตถุประสงค์ของ keymaster_Purpose_t , keymaster_block_mode_t ** โหมด, size_t *modes_length) |
keymaster_error_t (* | get_supported_padding_modes ) (const struct keymaster1_device *dev, อัลกอริธึ ม keymaster_algorithm_t , วัตถุประสงค์ของ keymaster_Purpose_t , keymaster_padding_t ** โหมด, size_t *modes_length) |
keymaster_error_t (* | get_supported_digests )(const struct keymaster1_device *dev, อัลกอริธึ ม keymaster_algorithm_t , วัตถุประสงค์ของ keymaster_Purpose_t , keymaster_digest_t **การย่อย, size_t *digests_length) |
keymaster_error_t (* | get_supported_import_formats ) (const struct keymaster1_device *dev, อัลกอริทึม keymaster_algorithm_t , keymaster_key_format_t **รูปแบบ, size_t *formats_length) |
keymaster_error_t (* | get_supported_export_formats )(const struct keymaster1_device *dev, อัลกอริทึม keymaster_algorithm_t , keymaster_key_format_t **รูปแบบ, 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 **ลักษณะเฉพาะ) |
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 **ลักษณะเฉพาะ) |
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 **ลักษณะเฉพาะ) |
keymaster_error_t (* | Export_key )(const struct keymaster1_device *dev, keymaster_key_format_t ส่งออก_รูปแบบ, 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 *คีย์) |
keymaster_error_t (* | Delete_all_keys )(const struct keymaster1_device *dev) |
keymaster_error_t (* | เริ่มต้น )(const struct keymaster1_device *dev, วัตถุประสงค์ของ keymaster_Purpose_t , 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 (* | อัปเดต )(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 (* | เสร็จสิ้น )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *ลายเซ็น, keymaster_key_param_set_t *out_params, keymaster_blob_t *output) |
keymaster_error_t (* | ยกเลิก )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle) |
คำอธิบายโดยละเอียด
คำจำกัดความของอุปกรณ์ Keymaster1
คำจำกัดความที่บรรทัดที่ 28 ของไฟล์ keymaster1.h
เอกสารภาคสนาม
keymaster_error_t (* ยกเลิก) (const struct keymaster1_device * dev, keymaster_operation_handle_t operation_handle) |
ยกเลิกการดำเนินการเข้ารหัสลับที่เริ่มต้นด้วย beginning() ทำให้ทรัพยากรภายในว่างทั้งหมดและทำให้ operation_handle
เป็นโมฆะ
คำจำกัดความที่บรรทัด 531 ของไฟล์ keymaster1.h
keymaster_error_t (* add_rng_entropy) (const struct keymaster1_device *dev, const uint8_t *ข้อมูล, size_t data_length) |
เพิ่มเอนโทรปีให้กับ RNG ที่ใช้โดยคีย์มาสเตอร์ เอนโทรปีที่เพิ่มผ่านวิธีนี้รับประกันว่าจะไม่ใช่แหล่งเดียวของเอนโทรปีที่ใช้ และฟังก์ชันการผสมจำเป็นต้องปลอดภัย ในแง่ที่ว่าหาก RNG ได้รับการเพาะ (จากแหล่งใดๆ ก็ตาม) ด้วยข้อมูลใดๆ ที่ผู้โจมตีไม่สามารถคาดเดาได้ (หรือ ควบคุม) ดังนั้นเอาท์พุต RNG จะแยกไม่ออกจากการสุ่ม ดังนั้นหากเอนโทรปีจากแหล่งใดๆ ดี ผลลัพธ์ก็จะออกมาดี
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] ข้อมูล ข้อมูลสุ่มที่จะนำมาผสม [ใน] ข้อมูล_ความยาว ความยาวของ data
คำจำกัดความที่บรรทัด 242 ของไฟล์ keymaster1.h
keymaster_error_t (* เริ่มต้น) (const struct keymaster1_device *dev, วัตถุประสงค์ ของ keymaster_Purpose_t , 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) |
เริ่มต้นการดำเนินการเข้ารหัสลับโดยใช้คีย์ที่ระบุ หากทุกอย่างเรียบร้อยดี start() จะส่งคืน KM_ERROR_OK และสร้างตัวจัดการการดำเนินการซึ่งจะต้องส่งผ่านไปยังการเรียกครั้งต่อไปเพื่อ update() , finish() หรือ abort()
จำเป็นอย่างยิ่งที่จะต้องจับคู่การเรียก start() แต่ละครั้งกับการเรียกที่ตามมาเพื่อ เสร็จสิ้น() หรือ ยกเลิก() เพื่อให้การใช้งานคีย์มาสเตอร์สามารถล้างสถานะการดำเนินการภายในใดๆ ได้ การไม่ทำเช่นนี้อาจทำให้พื้นที่สถานะภายในหรือทรัพยากรภายในอื่นๆ รั่วไหล และในที่สุดอาจทำให้ start() ส่งคืน KM_ERROR_TOO_MANY_OPERATIONS เมื่อพื้นที่ไม่เพียงพอสำหรับการดำเนินการ ผลลัพธ์ใดๆ นอกเหนือจาก KM_ERROR_OK จาก beginning() , update() หรือ finish() จะยกเลิกการดำเนินการโดยปริยาย ซึ่งในกรณีนี้ ไม่จำเป็นต้องเรียกใช้ abort() (และจะส่งคืน KM_ERROR_INVALID_OPERATION_HANDLE หากเรียกใช้)
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] วัตถุประสงค์ วัตถุประสงค์ของการดำเนินการ หนึ่งใน KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN หรือ KM_PURPOSE_VERIFY โปรดทราบว่าสำหรับโหมด AEAD การเข้ารหัสและการถอดรหัสหมายถึงการลงนามและการตรวจสอบ ตามลำดับ แต่ควรระบุเป็น KM_PURPOSE_ENCRYPT และ KM_PURPOSE_DECRYPT [ใน] สำคัญ กุญแจที่จะใช้ในการดำเนินการ key
จะต้องมีวัตถุประสงค์ที่สอดคล้องกับpurpose
และต้องปฏิบัติตามข้อกำหนดการใช้งานทั้งหมด มิฉะนั้น start() จะส่งรหัสข้อผิดพลาดที่เหมาะสมกลับมา[ใน] in_params พารามิเตอร์เพิ่มเติมสำหรับการดำเนินการ โดยทั่วไปจะใช้เพื่อให้ข้อมูลการตรวจสอบสิทธิ์ด้วย KM_TAG_AUTH_TOKEN หากมีการระบุ KM_TAG_APPLICATION_ID หรือ KM_TAG_APPLICATION_DATA ในระหว่างการสร้าง จะต้องระบุไว้ที่นี่ ไม่เช่นนั้นการดำเนินการจะล้มเหลวด้วย KM_ERROR_INVALID_KEY_BLOB สำหรับการดำเนินการที่ต้องใช้ nonce หรือ IV บนคีย์ที่สร้างด้วย KM_TAG_CALLER_NONCE นั้น in_params อาจมีแท็ก KM_TAG_NONCE สำหรับการดำเนินการ AEAD มีการระบุ KM_TAG_CHUNK_SIZE ที่นี่ [ออก] out_params พารามิเตอร์เอาท์พุต ใช้เพื่อส่งคืนข้อมูลเพิ่มเติมจากการเตรียมใช้งานการดำเนินการ โดยเฉพาะอย่างยิ่งเพื่อส่งคืน IV หรือ nonce จากการดำเนินการที่สร้าง IV หรือ nonce ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์พารามิเตอร์เอาต์พุต และต้องปล่อยอาร์เรย์พารามิเตอร์เอาต์พุตด้วย keymaster_free_param_set() out_params อาจถูกตั้งค่าเป็น NULL หากไม่ต้องการพารามิเตอร์เอาต์พุต หาก out_params เป็น NULL และสร้างพารามิเตอร์เอาต์พุต start() จะส่งกลับ KM_ERROR_OUTPUT_PARAMETER_NULL [ออก] การดำเนินงาน_การจัดการ ตัวจัดการการดำเนินการที่สร้างขึ้นใหม่ซึ่งจะต้องส่งผ่านไปยัง update() , finish() หรือ abort() หาก operation_handle เป็น NULL, start() จะส่งกลับ KM_ERROR_OUTPUT_PARAMETER_NULL
คำจำกัดความที่บรรทัด 451 ของไฟล์ keymaster1.h
uint32_t ลูกค้า_รุ่น |
สิ่งนี้เลิกใช้แล้ว ใช้ฟิลด์ "module_api_version" และ "hal_api_version" ใหม่ในการเริ่มต้น keymaster_module แทน
คำจำกัดความที่บรรทัดที่ 41 ของไฟล์ keymaster1.h
struct hw_device_t ทั่วไป |
วิธีการทั่วไปของอุปกรณ์คีย์มาสเตอร์ นี่ จะต้อง เป็นสมาชิกคนแรกของ keymaster_device เนื่องจากผู้ใช้ของโครงสร้างนี้จะส่ง hw_device_t ไปยังตัวชี้ keymaster_device ในบริบทที่ทราบว่า hw_device_t อ้างอิงถึง keymaster_device
คำจำกัดความที่บรรทัดที่ 35 ของไฟล์ keymaster1.h
บริบทเป็นโมฆะ* |
คำจำกัดความที่บรรทัดที่ 48 ของไฟล์ keymaster1.h
int(* Delete_all)(const struct keymaster1_device *dev) |
- เลิกใช้แล้ว:
- ลบคีย์ทั้งหมดในที่เก็บคีย์ฮาร์ดแวร์ ใช้เมื่อรีเซ็ตที่เก็บคีย์โดยสมบูรณ์
ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน
ส่งกลับ 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 100 ของไฟล์ keymaster1.h
keymaster_error_t (* Delete_all_keys) (const struct keymaster1_device *dev) |
ลบคีย์ทั้งหมดในที่เก็บคีย์ฮาร์ดแวร์ ใช้เมื่อรีเซ็ตที่เก็บคีย์โดยสมบูรณ์ หลังจากเรียกใช้ฟังก์ชันนี้แล้ว คุณจะไม่สามารถใช้คีย์ blobs ที่สร้างหรือนำเข้าไว้ก่อนหน้านี้สำหรับการดำเนินการใดๆ ได้
ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์
คำจำกัดความที่บรรทัด 407 ของไฟล์ keymaster1.h
keymaster_error_t (* Delete_key) (const struct keymaster1_device * dev, const keymaster_key_blob_t * คีย์) |
ลบคีย์หรือคู่คีย์ที่เชื่อมโยงกับคีย์บล็อบ หลังจากเรียกใช้ฟังก์ชันนี้แล้ว คุณจะไม่สามารถใช้คีย์สำหรับการดำเนินการอื่นใดได้ อาจนำไปใช้กับคีย์จากรากของความไว้วางใจต่างประเทศ (คีย์ไม่สามารถใช้งานได้ภายใต้รากของความไว้วางใจในปัจจุบัน)
ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] สำคัญ คีย์ที่จะถูกลบ
คำจำกัดความที่บรรทัด 395 ของไฟล์ keymaster1.h
int(* Delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length) |
- เลิกใช้แล้ว:
- ลบคู่คีย์ที่เกี่ยวข้องกับคีย์บล็อบ
ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน
ส่งกลับ 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 88 ของไฟล์ keymaster1.h
keymaster_error_t (* ส่งออกคีย์) (const struct keymaster1_device *dev, keymaster_key_format_t ส่งออกรูปแบบ, 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) |
ส่งออกคีย์สาธารณะโดยส่งคืนอาร์เรย์ไบต์ในรูปแบบที่ระบุ
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] ส่งออก_รูปแบบ รูปแบบที่จะใช้สำหรับการส่งออกคีย์ [ใน] คีย์_to_ส่งออก กุญแจสำคัญในการส่งออก [ออก] ส่งออก_ข้อมูล วัสดุหลักที่ส่งออก ผู้โทรเข้าถือสิทธิ์ความเป็นเจ้าของ [ออก] ส่งออก_ข้อมูล_ความยาว ความยาวของ export_data
คำจำกัดความที่บรรทัด 377 ของไฟล์ keymaster1.h
keymaster_error_t (* เสร็จสิ้น) (const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *ลายเซ็น, keymaster_key_param_set_t *out_params, keymaster_blob_t *เอาต์พุต) |
สิ้นสุดการดำเนินการเข้ารหัสลับที่เริ่มต้นด้วย start() และทำให้ operation_handle
เป็นโมฆะ
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] การดำเนินงาน_การจัดการ หมายเลขอ้างอิงการดำเนินการที่ส่งคืนโดย start() หมายเลขอ้างอิงนี้จะใช้งานไม่ได้ [ใน] พารามิเตอร์ พารามิเตอร์เพิ่มเติมสำหรับการดำเนินการ สำหรับโหมด AEAD สิ่งนี้ใช้เพื่อระบุ KM_TAG_ADDITIONAL_DATA แต่เฉพาะในกรณีที่ไม่มีการป้อนข้อมูลอินพุตให้ update() [ใน] ลายเซ็น ลายเซ็นที่จะตรวจสอบหากวัตถุประสงค์ที่ระบุไว้ในการเรียก beginning() คือ KM_PURPOSE_VERIFY [ออก] เอาท์พุท ข้อมูลเอาท์พุต ถ้ามี ผู้เรียกถือว่าความเป็นเจ้าของบัฟเฟอร์ที่จัดสรร
หากการดำเนินการที่เสร็จสิ้นเป็นการตรวจสอบลายเซ็นหรือการถอดรหัสในโหมด AEAD และการตรวจสอบล้มเหลว finish() จะส่งกลับ KM_ERROR_VERIFICATION_FAILED
คำจำกัดความที่บรรทัด 521 ของไฟล์ keymaster1.h
ธง uint32_t |
ดูการตั้งค่าสถานะที่กำหนดไว้สำหรับ keymaster0_devices::flags ใน keymaster_common.h
คำจำกัดความที่บรรทัดที่ 46 ของไฟล์ 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 **ลักษณะเฉพาะ) |
สร้างคีย์หรือคู่คีย์ โดยส่งคืนคีย์หยดและ/หรือคำอธิบายของคีย์
พารามิเตอร์การสร้างคีย์ถูกกำหนดให้เป็นคู่แท็ก/ค่าของคีย์มาสเตอร์ ซึ่งระบุไว้ใน params
ดู keymaster_tag_t สำหรับรายการทั้งหมด ค่าบางค่าที่จำเป็นสำหรับการสร้างคีย์ที่มีประโยชน์เสมอคือ:
- KM_TAG_ALGORITHM;
- KM_TAG_วัตถุประสงค์; และ
- (KM_TAG_USER_SECURE_ID และ KM_TAG_USER_AUTH_TYPE) หรือ KM_TAG_NO_AUTH_REQUIRED
โดยทั่วไปควรระบุ KM_TAG_AUTH_TIMEOUT เว้นแต่ KM_TAG_NO_AUTH_REQUIRED มีอยู่ ไม่เช่นนั้นผู้ใช้จะต้องตรวจสอบสิทธิ์สำหรับการใช้งานทุกครั้ง
ต้องระบุ KM_TAG_BLOCK_MODE, KM_TAG_PADDING, KM_TAG_MAC_LENGTH และ KM_TAG_DIGEST สำหรับอัลกอริทึมที่ต้องการ
แท็กต่อไปนี้ไม่สามารถระบุได้ คุณค่าของพวกเขาจะได้รับจากการดำเนินการ
- KM_TAG_ORIGIN
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] พารามิเตอร์ อาร์เรย์ของพารามิเตอร์การสร้างคีย์ [ใน] พารามิเตอร์_count ความยาวของ params
[ออก] key_blob ส่งคืนคีย์ที่สร้างขึ้น key_blob
ต้องไม่เป็น NULL ผู้เรียกถือว่าความเป็นเจ้าของ key_blob->key_material และต้อง free() มัน[ออก] ลักษณะเฉพาะ ส่งคืนคุณสมบัติของคีย์ที่สร้างขึ้นหากไม่ใช่ NULL หากไม่ใช่ NULL ผู้เรียกจะถือว่าเป็นเจ้าของและต้องจัดสรรคืนด้วย keymaster_free_Characteristics() โปรดทราบว่า KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID และ KM_TAG_APPLICATION_DATA จะไม่ถูกส่งคืน
คำจำกัดความที่บรรทัด 282 ของไฟล์ 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) |
- เลิกใช้แล้ว:
- สร้างคีย์สาธารณะและส่วนตัว คีย์-บล็อบที่ส่งคืนนั้นทึบแสง และต้องจัดเตรียมไว้เพื่อการลงนามและการตรวจสอบในภายหลัง
ส่งกลับ: 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 56 ของไฟล์ 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 **ลักษณะเฉพาะ) |
ส่งกลับลักษณะของคีย์ที่ระบุ หรือ KM_ERROR_INVALID_KEY_BLOB หาก key_blob ไม่ถูกต้อง (การใช้งานจะต้องตรวจสอบความสมบูรณ์ของคีย์โดยสมบูรณ์) client_id และ app_data ต้องเป็น ID และข้อมูลที่ให้ไว้เมื่อมีการสร้างหรือนำเข้าคีย์ หรือว่างเปล่าหากไม่มีการระบุ KM_TAG_APPLICATION_ID และ/หรือ KM_TAG_APPLICATION_DATA ในระหว่างการสร้าง ค่าเหล่านั้นจะไม่รวมอยู่ในลักษณะที่ส่งคืน ผู้เรียกจะถือว่าเป็นเจ้าของวัตถุลักษณะที่จัดสรร ซึ่งจะต้องจัดสรรคืนด้วย keymaster_free_Characteristics()
โปรดทราบว่า KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID และ KM_TAG_APPLICATION_DATA จะไม่ถูกส่งคืน
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] key_blob กุญแจสำคัญในการดึงคุณลักษณะมาจาก [ใน] ลูกค้า_id ข้อมูลรหัสลูกค้า หรือ NULL หากไม่มีการเชื่อมโยง [ใน] app_id ข้อมูลแอป หรือ NULL หากไม่มีการเชื่อมโยงกัน [ออก] ลักษณะเฉพาะ ลักษณะสำคัญ
คำจำกัดความที่บรรทัด 309 ของไฟล์ 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) |
- เลิกใช้แล้ว:
- รับส่วนคีย์สาธารณะของคู่คีย์ คีย์สาธารณะต้องอยู่ในรูปแบบ X.509 (มาตรฐาน Java) ที่เข้ารหัสอาร์เรย์ไบต์
ส่งกลับ: 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0 หากเกิดข้อผิดพลาด ไม่ควรจัดสรร x509_data
คำจำกัดความที่บรรทัด 76 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_algorithms) (const struct keymaster1_device *dev, keymaster_algorithm_t **อัลกอริทึม, size_t *algorithms_length) |
รับอัลกอริทึมที่รองรับ
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ออก] อัลกอริธึม รองรับอาร์เรย์ของอัลกอริธึม ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] อัลกอริทึม_ความยาว ความยาวของ algorithms
คำจำกัดความที่บรรทัด 133 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_block_modes) (const struct keymaster1_device * dev, อัลกอริธึ ม keymaster_algorithm_t , วัตถุประสงค์ ของ keymaster_Purpose_t , keymaster_block_mode_t ** โหมด, size_t *modes_length) |
รับโหมดบล็อกที่รองรับอัลกอริธึมที่ระบุ
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] อัลกอริทึม อัลกอริธึมที่จะส่งคืนโหมดที่รองรับ [ออก] โหมด รองรับอาร์เรย์ของโหมด ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] โหมด_ความยาว ความยาวของ modes
คำจำกัดความที่บรรทัด 149 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_digests) (const struct keymaster1_device *dev, อัลกอริธึม keymaster_algorithm_t , วัตถุประสงค์ ของ keymaster_Purpose_t , keymaster_digest_t ** การย่อย, size_t * digests_length) |
รับไดเจสต์ที่สนับสนุนสำหรับอัลกอริธึมที่ระบุ ผู้เรียกถือว่าความเป็นเจ้าของอาร์เรย์ที่จัดสรร
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] อัลกอริทึม อัลกอริทึมที่ไดเจสต์ที่รองรับจะถูกส่งกลับ [ออก] ย่อย รองรับอาร์เรย์ของไดเจสต์ ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] ย่อย_ความยาว ความยาวของ digests
คำจำกัดความที่บรรทัด 187 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_export_formats) (const struct keymaster1_device *dev, อัลกอริทึม keymaster_algorithm_t , keymaster_key_format_t ** รูปแบบ, size_t * format_length) |
รับรูปแบบการส่งออกคีย์ที่รองรับสำหรับคีย์ของอัลกอริทึมที่ระบุ ผู้เรียกถือว่าความเป็นเจ้าของอาร์เรย์ที่จัดสรร
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] อัลกอริทึม อัลกอริทึมที่จะส่งคืนรูปแบบที่รองรับ [ออก] รูปแบบ อาร์เรย์ของรูปแบบที่รองรับ ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] รูปแบบ_ความยาว ความยาวของ formats
คำจำกัดความที่บรรทัด 224 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_import_formats) (const struct keymaster1_device *dev, อัลกอริทึม keymaster_algorithm_t , keymaster_key_format_t ** รูปแบบ, size_t * formats_length) |
รับรูปแบบการนำเข้าคีย์ที่รองรับสำหรับคีย์ของอัลกอริทึมที่ระบุ ผู้เรียกถือว่าความเป็นเจ้าของอาร์เรย์ที่จัดสรร
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] อัลกอริทึม อัลกอริทึมที่จะส่งคืนรูปแบบที่รองรับ [ออก] รูปแบบ อาร์เรย์ของรูปแบบที่รองรับ ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] รูปแบบ_ความยาว ความยาวของ formats
คำจำกัดความที่บรรทัด 206 ของไฟล์ keymaster1.h
keymaster_error_t (* get_supported_padding_modes) (const struct keymaster1_device *dev, อัลกอริธึม keymaster_algorithm_t , วัตถุประสงค์ของ keymaster_Purpose_t , keymaster_padding_t ** โหมด, size_t *modes_length) |
รับโหมดการขยายที่รองรับสำหรับอัลกอริทึมที่ระบุ ผู้เรียกถือว่าความเป็นเจ้าของอาร์เรย์ที่จัดสรร
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] อัลกอริทึม อัลกอริทึมที่โหมดการเติมที่รองรับจะถูกส่งกลับ [ออก] โหมด รองรับอาร์เรย์ของโหมดการเติม ผู้เรียกเข้าเป็นเจ้าของอาร์เรย์และต้อง free() มัน [ออก] โหมด_ความยาว ความยาวของ modes
คำจำกัดความที่บรรทัด 168 ของไฟล์ 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 **ลักษณะเฉพาะ) |
นำเข้าคีย์หรือคู่คีย์ ส่งคืนคีย์หยดและ/หรือคำอธิบายของคีย์
พารามิเตอร์การนำเข้าคีย์ส่วนใหญ่ถูกกำหนดให้เป็นคู่แท็ก/ค่าของคีย์มาสเตอร์ ซึ่งระบุไว้ใน "params" ดู keymaster_tag_t สำหรับรายการทั้งหมด ค่าที่จำเป็นสำหรับการนำเข้าคีย์ที่มีประโยชน์เสมอคือ:
- KM_TAG_ALGORITHM;
- KM_TAG_วัตถุประสงค์; และ
- (KM_TAG_USER_SECURE_ID และ KM_TAG_USER_AUTH_TYPE) หรือ KM_TAG_NO_AUTH_REQUIRED
โดยทั่วไปควรระบุ KM_TAG_AUTH_TIMEOUT หากไม่ระบุ ผู้ใช้จะต้องตรวจสอบสิทธิ์การใช้งานทุกครั้ง
แท็กต่อไปนี้จะใช้ค่าเริ่มต้นหากไม่ได้ระบุ:
- KM_TAG_KEY_SIZE จะมีค่าเริ่มต้นเป็นขนาดของคีย์ที่ให้ไว้
- KM_TAG_RSA_PUBLIC_EXPONENT จะมีค่าเริ่มต้นเป็นค่าในคีย์ที่ให้ไว้ (สำหรับคีย์ RSA)
แท็กต่อไปนี้ไม่สามารถระบุได้ คุณค่าของพวกเขาจะได้รับจากการดำเนินการ
- KM_TAG_ORIGIN
- KM_TAG_ROLLBACK_RESISTANT,
- KM_TAG_CREATION_DATETIME
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] พารามิเตอร์ พารามิเตอร์ที่กำหนดคีย์ที่นำเข้า [ใน] พารามิเตอร์_count จำนวนรายการใน params
[ใน] คีย์_ฟอร์แมต ระบุรูปแบบของข้อมูลคีย์ใน key_data [ออก] key_blob ใช้เพื่อส่งคืนหยดคีย์ทึบแสง จะต้องไม่เป็นโมฆะ ผู้เรียกถือว่าความเป็นเจ้าของ key_material ที่มีอยู่ [ออก] ลักษณะเฉพาะ ใช้เพื่อคืนคุณสมบัติของคีย์ที่นำเข้า อาจเป็น NULL ซึ่งในกรณีนี้จะไม่มีการส่งคืนคุณสมบัติใดๆ หากไม่ใช่ NULL ผู้เรียกจะถือว่าเป็นเจ้าของและต้องจัดสรรคืนด้วย keymaster_free_Characteristics() โปรดทราบว่า KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID และ KM_TAG_APPLICATION_DATA จะไม่ถูกส่งคืน
คำจำกัดความที่บรรทัด 357 ของไฟล์ keymaster1.h
int(* import_keypair)(const struct keymaster1_device *dev, const uint8_t *คีย์, const size_t key_length, uint8_t **key_blob, size_t *key_blob_length) |
- เลิกใช้แล้ว:
- นำเข้าคู่คีย์สาธารณะและส่วนตัว คีย์ที่นำเข้าจะอยู่ในรูปแบบ PKCS#8 พร้อมการเข้ารหัส DER (มาตรฐาน Java) คีย์-บล็อบที่ส่งคืนนั้นทึบแสง และจะมีการจัดเตรียมสำหรับการลงนามและการตรวจสอบในภายหลัง
ส่งกลับ: 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 66 ของไฟล์ 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 *ข้อมูล, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length) |
- เลิกใช้แล้ว:
- ลงนามข้อมูลโดยใช้คีย์หยดที่สร้างขึ้นก่อนหน้านี้ ซึ่งสามารถใช้คีย์แบบอสมมาตรหรือคีย์ลับก็ได้
ส่งกลับ: 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 108 ของไฟล์ keymaster1.h
keymaster_error_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) |
ให้ข้อมูลและอาจได้รับเอาต์พุตจากการดำเนินการเข้ารหัสลับที่กำลังดำเนินอยู่ซึ่งเริ่มต้นด้วย beginning()
หาก operation_handle ไม่ถูกต้อง update() จะส่งกลับ KM_ERROR_INVALID_OPERATION_HANDLE
update() อาจไม่ใช้ข้อมูลทั้งหมดที่ให้ไว้ในบัฟเฟอร์ข้อมูล update() จะส่งคืนจำนวนเงินที่ใช้ใน *data_consumed ผู้โทรควรให้ข้อมูลที่ไม่ได้ใช้ในการโทรครั้งต่อไป
- พารามิเตอร์
[ใน] ผู้พัฒนา โครงสร้างอุปกรณ์คีย์มาสเตอร์ [ใน] การดำเนินงาน_การจัดการ หมายเลขอ้างอิงการดำเนินการที่ส่งคืนโดย start() [ใน] in_params พารามิเตอร์เพิ่มเติมสำหรับการดำเนินการ สำหรับโหมด AEAD จะใช้เพื่อระบุ KM_TAG_ADDITIONAL_DATA โปรดทราบว่าอาจมีการให้ข้อมูลเพิ่มเติมในการเรียกหลายครั้งเพื่อ update() แต่จนกว่าจะมีการให้ข้อมูลอินพุตเท่านั้น [ใน] ป้อนข้อมูล ข้อมูลที่จะประมวลผลตามพารามิเตอร์ที่สร้างขึ้นในการเรียก to beginning() โปรดทราบว่า update() อาจใช้หรือไม่ใช้ข้อมูลทั้งหมดที่ให้ไว้ ดูที่ input_consumed
[ออก] input_consumed จำนวนข้อมูลที่ใช้โดย update() หากน้อยกว่าจำนวนเงินที่ให้ไว้ ผู้โทรควรจัดเตรียมส่วนที่เหลือในการเรียก update() ครั้งต่อไป [ออก] out_params พารามิเตอร์เอาท์พุต ใช้เพื่อส่งคืนข้อมูลเพิ่มเติมจากการดำเนินการ ผู้เรียกจะเป็นเจ้าของอาร์เรย์พารามิเตอร์เอาต์พุต และต้องปล่อยว่างด้วย keymaster_free_param_set() out_params อาจถูกตั้งค่าเป็น NULL หากไม่ต้องการพารามิเตอร์เอาต์พุต หาก out_params เป็น NULL และสร้างพารามิเตอร์เอาต์พุต start() จะส่งกลับ KM_ERROR_OUTPUT_PARAMETER_NULL [ออก] เอาท์พุท ข้อมูลเอาท์พุต ถ้ามี ผู้เรียกถือว่าความเป็นเจ้าของบัฟเฟอร์ที่จัดสรร เอาต์พุตจะต้องไม่เป็น NULL
โปรดทราบว่า update() อาจไม่มีเอาต์พุตใดๆ ในกรณีนี้ output->data_length จะเป็นศูนย์ และ output->data อาจเป็น NULL หรือความยาวเป็นศูนย์ (ดังนั้นผู้เรียกควร free() เสมอ)
คำจำกัดความที่บรรทัด 495 ของไฟล์ 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 *ลายเซ็น, const size_t ลายเซ็น_ความยาว) |
- เลิกใช้แล้ว:
- ตรวจสอบข้อมูลที่ลงนามด้วยคีย์หยด ซึ่งสามารถใช้คีย์แบบอสมมาตรหรือคีย์ลับก็ได้
ส่งคืน: 0 เมื่อยืนยันสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0
คำจำกัดความที่บรรทัด 118 ของไฟล์ keymaster1.h
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้:
- ฮาร์ดแวร์ / libhardware / รวม / ฮาร์ดแวร์ / keymaster1.h