การอ้างอิงโครงสร้าง keymaster1_device

การอ้างอิงโครงสร้าง 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