Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

#include < keymaster1.h >

เขตข้อมูล

struct hw_device_t ร่วมกัน
uint32_t client_version
uint32_t ธง
โมฆะ * บริบท
int (* generate_keypair ) (const struct keymaster1_device * dev, const keymaster_keypair_t key_type, โมฆะ const * 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 * registration_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * data, const size_t data_length, uint8_t
int (* Verify_data ) (const struct keymaster1_device * dev, const void * registration_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * Sign_data, const size_t Sign_data_length, const size_t Signature_data_length
keymaster_error_t (* get_supported_algorithms ) (const struct keymaster1_device * dev, keymaster_algorithm_t ** อัลกอริทึม, size_t * algorithmms_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 * format_length)
keymaster_error_t (* get_supported_export_formats ) (const struct keymaster1_device * dev, keymaster_algorithm_t อัลกอริทึม, keymaster_key_format_t ** รูปแบบ, 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 (* 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 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 * app_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 * การดำเนินการ)
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 * อินพุต, size_t * input_consumed, keymaster_key_param_set_t * out_params, keymaster_keyam
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 * เอาต์พุต
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)

ยุติการดำเนินการเข้ารหัสลับเริ่มต้นด้วย การเริ่มต้น () พ้นทรัพยากรภายในและไม่ถูกต้อง operation_handle

นิยามที่บรรทัด 531 ของไฟล์ keymaster1.h

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

เพิ่มเอนโทรปีใน RNG ที่ใช้โดยผู้ดูแลคีย์ เอนโทรปีที่เพิ่มเข้ามาด้วยวิธีนี้รับประกันว่าจะไม่เป็นแหล่งเดียวของเอนโทรปีที่ใช้และฟังก์ชั่นการผสมจะต้องมีความปลอดภัยในแง่ที่ว่าถ้า RNG ถูก seeded (จากแหล่งใด ๆ ) กับข้อมูลใด ๆ ควบคุม) จากนั้นเอาต์พุต RNG จะแยกไม่ออกจากการสุ่ม ดังนั้นหากเอนโทรปีจากแหล่งใดดีผลผลิตจะดี

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ข้อมูล ข้อมูลสุ่มที่จะนำมาผสมกัน
[ใน] data_length ความยาวของ data

นิยามที่บรรทัด 242 ของไฟล์ keymaster1.h

keymaster_error_t (* เริ่มต้น) (const struct keymaster1_device * dev, keymaster_purpose_t วัตถุประสงค์ const keymaster_key_blob_t * ที่สำคัญ const keymaster_key_param_set_t * in_params, keymaster_key_param_set_t * out_params, keymaster_operation_handle_t * operation_handle)

เริ่มต้นการดำเนินการเข้ารหัสลับโดยใช้คีย์ที่ระบุ หากทุกอย่างดีให้ เริ่มต้น () จะส่งคืน KM_ERROR_OK และสร้างตัวจัดการการดำเนินการซึ่งจะต้องส่งผ่านไปยังการโทรที่ตามมาเพื่อ อัปเดต () , เสร็จสิ้น () หรือ ยกเลิก ()

จำเป็นอย่างยิ่งที่การเรียกแต่ละครั้งเพื่อ เริ่มต้น () จะถูกจับคู่กับการเรียกครั้งต่อไปเพื่อ เสร็จสิ้น () หรือ ยกเลิก () เพื่ออนุญาตให้การใช้งานมาสเตอร์คีย์เพื่อล้างสถานะการทำงานภายในใด ๆ ความล้มเหลวในการทำเช่นนี้อาจทำให้พื้นที่ภายในของรัฐหรือทรัพยากรภายในอื่น ๆ รั่วไหลและในที่สุดอาจทำให้ start () ส่งคืน KM_ERROR_TOO_MANY_OPERATIONS เมื่อพื้นที่ใช้งานหมด ผลลัพธ์อื่นใดนอกเหนือจาก KM_ERROR_OK ตั้งแต่ เริ่มต้น () อัปเดต () หรือ เสร็จสิ้น () ยกเลิกการดำเนินการโดยปริยายซึ่งในกรณีนี้การ ยกเลิก () ไม่จำเป็นต้องถูกเรียก (และจะส่งกลับ KM_ERROR_INVALID_OPERATION_HANDLE หากเรียก)

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] วัตถุประสงค์ วัตถุประสงค์ของการดำเนินการหนึ่งใน KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN หรือ KM_PURPOSE_VERIFY โปรดทราบว่าสำหรับโหมด AEAD การเข้ารหัสและถอดรหัสหมายถึงการเซ็นชื่อและการตรวจสอบตามลำดับ แต่ควรระบุเป็น KM_PURPOSE_ENCRYPT และ KM_PURPOSE_DECRYPT
[ใน] สำคัญ กุญแจที่จะใช้สำหรับการดำเนินการ key จะต้องมีวัตถุประสงค์ที่เข้ากันได้กับ purpose และข้อกำหนดการใช้งานทั้งหมดจะต้องเป็นไปตามความต้องการหรือ เริ่มต้น () จะส่งคืนรหัสข้อผิดพลาดที่เหมาะสม
[ใน] 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 และสร้างพารามิเตอร์เอาต์พุต เริ่มต้น () จะส่งคืน KM_ERROR_OUTPUT_PARAMETER_NULL
[ออก] operation_handle หมายเลขอ้างอิงการดำเนินการที่สร้างขึ้นใหม่ซึ่งต้องส่งผ่านไปยัง update () , finish () หรือ abort () หาก operation_handle เป็น NULL ให้ เริ่มต้น () จะส่งคืน KM_ERROR_OUTPUT_PARAMETER_NULL

นิยามที่บรรทัด 451 ของไฟล์ keymaster1.h

uint32_t client_version

นี่คือการยกเลิก ใช้ฟิลด์ "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 หากไม่ได้ใช้งาน

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก

นิยามที่บรรทัด 407 ของไฟล์ keymaster1.h

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

ลบคีย์หรือคู่ของคีย์ที่เชื่อมโยงกับคีย์ blob หลังจากเรียกใช้ฟังก์ชันนี้แล้วจะไม่สามารถใช้คีย์สำหรับการดำเนินการอื่น ๆ ได้ อาจนำไปใช้กับคีย์จากรากที่เชื่อถือได้ต่างประเทศ (คีย์ที่ไม่สามารถใช้งานได้ภายใต้รูทของความน่าเชื่อถือปัจจุบัน)

ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] สำคัญ กุญแจที่จะถูกลบ

นิยามที่บรรทัด 395 ของไฟล์ keymaster1.h

int (* delete_keypair) (const struct keymaster1_device * dev, const uint8_t * key_blob, const size_t key_blob_length)
เลิกใช้:
ลบคู่คีย์ที่เชื่อมโยงกับคีย์ blob

ฟังก์ชันนี้เป็นทางเลือกและควรตั้งค่าเป็น NULL หากไม่ได้ใช้งาน

ส่งคืน 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0

นิยามที่บรรทัดที่ 88 ของไฟล์ 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_data)

ส่งออกกุญแจสาธารณะส่งกลับอาร์เรย์ไบต์ในรูปแบบที่ระบุ

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] export_format รูปแบบที่จะใช้สำหรับการส่งออกคีย์
[ใน] key_to_export กุญแจสำคัญในการส่งออก
[ออก] export_data วัสดุสำคัญที่ส่งออก ผู้เรียกจะถือว่าเป็นเจ้าของ
[ออก] export_data_length ความยาวของ 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

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] operation_handle หมายเลขอ้างอิงการดำเนินการส่งคืนโดย เริ่มต้น () หมายเลขอ้างอิงนี้จะไม่ถูกต้อง
[ใน] params พารามิเตอร์เพิ่มเติมสำหรับการดำเนินการ สำหรับโหมด AEAD จะใช้เพื่อระบุ KM_TAG_ADDITIONAL_DATA แต่จะต่อเมื่อไม่มีการป้อนข้อมูลเพื่อ อัปเดต ()
[ใน] ลายเซ็น ลายเซ็นที่จะตรวจสอบหากวัตถุประสงค์ที่ระบุไว้ในการโทร เริ่มต้น () คือ KM_PURPOSE_VERIFY
[ออก] เอาท์พุต ข้อมูลที่ส่งออกถ้ามี ผู้เรียกจะอ้างสิทธิ์ความเป็นเจ้าของของบัฟเฟอร์ที่จัดสรร

หากการดำเนินการเสร็จสิ้นเป็นการตรวจสอบลายเซ็นต์หรือการถอดรหัสโหมด AEAD และการตรวจสอบล้มเหลวแล้ว เสร็จ () จะส่งคืน KM_ERROR_VERIFICATION_FAILED

นิยามที่บรรทัด 521 ของไฟล์ keymaster1.h

ธง uint32_t

ดูการตั้งค่าสถานะสำหรับ keymaster0_devices :: ค่าสถานะใน 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 ** ลักษณะ)

สร้างคีย์หรือคู่ของคีย์ส่งคืนคีย์ blob และ / หรือคำอธิบายของคีย์

พารามิเตอร์การสร้างคีย์ถูกกำหนดเป็นคู่คีย์แท็ก / ค่าที่มีให้ใน params ดู keymaster_tag_t สำหรับรายการทั้งหมด ค่าบางอย่างที่จำเป็นสำหรับการสร้างคีย์ที่มีประโยชน์คือ:

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE; และ
  • (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
พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] params อาร์เรย์ของพารามิเตอร์การสร้างคีย์
[ใน] params_count ความยาวของ params
[ออก] key_blob ส่งคืนคีย์ที่สร้างขึ้น key_blob ต้องไม่เป็น NULL ผู้เรียกจะเป็นเจ้าของ key_blob-> key_material และต้องเป็นอิสระ ()
[ออก] ลักษณะเฉพาะ ส่งคืนคุณสมบัติของคีย์ที่ถูกสร้างขึ้นหากไม่ใช่ 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 * key_params, uint8_t ** key_blob, size_t * key_blob_length)
เลิกใช้:
สร้างคีย์สาธารณะและส่วนตัว key-blob ที่ส่งคืนนั้นทึบแสงและต้องจัดเตรียมไว้สำหรับการลงชื่อและการตรวจสอบในภายหลัง

คืนค่า: 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 จะไม่ถูกส่งคืน

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] key_blob กุญแจสำคัญในการฟื้นฟูลักษณะจาก
[ใน] client_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 * algorithmms_length)

รับอัลกอริทึมที่รองรับ

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ออก] อัลกอริทึม รองรับอาเรย์ของอัลกอริทึม ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] algorithms_length ความยาวของ 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)

รับโหมดบล็อกที่รองรับสำหรับอัลกอริทึมที่ระบุ

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ขั้นตอนวิธี อัลกอริทึมสำหรับโหมดที่รองรับจะถูกส่งคืน
[ออก] โหมด รองรับโหมดต่างๆ ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] modes_length ความยาวของ 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)

รับส่วนย่อยที่สนับสนุนสำหรับอัลกอริทึมที่ระบุ ผู้เรียกสมมติความเป็นเจ้าของอาร์เรย์ที่จัดสรร

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ขั้นตอนวิธี อัลกอริทึมที่สนับสนุนไดเจสต์ที่สนับสนุนจะถูกส่งคืน
[ออก] ย่อยสลาย รองรับอาเรย์ย่อย ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] digests_length ความยาวของการ 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)

รับรูปแบบการเอ็กซ์พอร์ตคีย์ที่รองรับคีย์ของอัลกอริทึมที่ระบุ ผู้เรียกสมมติความเป็นเจ้าของอาร์เรย์ที่จัดสรร

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ขั้นตอนวิธี อัลกอริทึมที่รูปแบบที่รองรับจะถูกส่งคืน
[ออก] รูปแบบ รองรับรูปแบบต่างๆ ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] formats_length ความยาวของ 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 * Format_length)

รับรูปแบบการนำเข้าคีย์ที่สนับสนุนสำหรับคีย์ของอัลกอริทึมที่ระบุ ผู้เรียกสมมติความเป็นเจ้าของอาร์เรย์ที่จัดสรร

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ขั้นตอนวิธี อัลกอริทึมที่รูปแบบที่รองรับจะถูกส่งคืน
[ออก] รูปแบบ รองรับรูปแบบต่างๆ ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] formats_length ความยาวของ 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)

รับโหมดการแพ็ดดิ้งที่รองรับสำหรับอัลกอริทึมที่ระบุ ผู้เรียกสมมติความเป็นเจ้าของอาร์เรย์ที่จัดสรร

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] ขั้นตอนวิธี อัลกอริทึมที่สนับสนุนโหมดการแพ็ดดิ้งจะถูกส่งคืน
[ออก] โหมด รองรับโหมด padding ผู้เรียกใช้เป็นเจ้าของอาร์เรย์และต้องเป็นอิสระ ()
[ออก] modes_length ความยาวของ 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 ** ลักษณะ)

อิมพอร์ตคีย์หรือคู่คีย์ส่งคืนคีย์ blob และ / หรือคำอธิบายของคีย์

พารามิเตอร์การนำเข้าคีย์ส่วนใหญ่ถูกกำหนดเป็นคู่คีย์ / คู่ค่าของคีย์มาสเตอร์ซึ่งมีอยู่ใน "params" ดู keymaster_tag_t สำหรับรายการทั้งหมด ค่าที่จำเป็นสำหรับการนำเข้าคีย์ที่มีประโยชน์คือ:

  • KM_TAG_ALGORITHM;
  • KM_TAG_PURPOSE; และ
  • (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
พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] params พารามิเตอร์ที่กำหนดคีย์ที่อิมพอร์ต
[ใน] params_count จำนวนรายการใน params
[ใน] key_format ระบุรูปแบบของข้อมูลสำคัญใน key_data
[ออก] key_blob ใช้เพื่อส่งคืนคีย์ blob ทึบแสง ต้องไม่ใช่ค่า NULL ผู้เรียกจะถือว่าความเป็นเจ้าของของ 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 * key, const size_t key_length, uint8_t ** key_blob, size_t * key_blob_length)
เลิกใช้:
อิมพอร์ตคู่คีย์พับลิกและไพรเวต คีย์ที่นำเข้าจะอยู่ในรูปแบบ PKCS # 8 พร้อมการเข้ารหัส DER (มาตรฐาน Java) key-blob ที่ส่งคืนนั้นทึบแสงและจะถูกจัดเตรียมไว้สำหรับการลงชื่อและการตรวจสอบในภายหลัง

คืนค่า: 0 เมื่อสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0

นิยามที่บรรทัด 66 ของไฟล์ keymaster1.h

int (* sign_data) (const struct keymaster1_device * dev, const void * registration_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * ข้อมูล const size_t data_length, uint8_t ** Sign_data, size_t * Sign_data)
เลิกใช้:
ลงนามข้อมูลโดยใช้คีย์ - บล็อกที่สร้างขึ้นก่อนหน้านี้ สิ่งนี้สามารถใช้คีย์ไม่สมมาตรหรือคีย์ลับ

คืนค่า: 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 * ป้อนข้อมูล size_t * input_consumed, keymaster_key_param_set_t * out_params, keymaster_blob_t * เอาท์พุท)

ให้ข้อมูลและอาจรับเอาท์พุทจากการดำเนินการเข้ารหัสลับอย่างต่อเนื่องเริ่มต้นด้วย เริ่มต้น ()

หาก operation_handle ไม่ถูกต้อง update () จะส่งคืน KM_ERROR_INVALID_OPERATION_HANDLE

update () อาจไม่ใช้ข้อมูลทั้งหมดที่มีให้ใน data buffer update () จะคืนจำนวนเงินที่ใช้ใน * data_consumed ผูโทรควรจัดเตรียมขอมูลที่ไมมีผูอื่นในการโทรครั้งถัดไป

พารามิเตอร์
[ใน] dev โครงสร้างของอุปกรณ์หลัก
[ใน] operation_handle หมายเลขอ้างอิงการดำเนินการส่งคืนโดย เริ่มต้น ()
[ใน] in_params พารามิเตอร์เพิ่มเติมสำหรับการดำเนินการ สำหรับโหมด AEAD จะใช้เพื่อระบุ KM_TAG_ADDITIONAL_DATA โปรดทราบว่าอาจมีการให้ข้อมูลเพิ่มเติมในการโทรหลายครั้งเพื่อ อัปเดต () แต่จะให้ข้อมูลที่ป้อนเข้าเท่านั้น
[ใน] อินพุต ข้อมูลที่ต้องดำเนินการตามพารามิเตอร์ที่กำหนดในการโทรเพื่อ เริ่มต้น () โปรดทราบว่าการ อัปเดต () อาจใช้หรือไม่ใช้ข้อมูลทั้งหมดที่มีให้ ดู input_consumed
[ออก] input_consumed จำนวนข้อมูลที่ถูกใช้โดย update () หากนี่น้อยกว่าจำนวนที่ระบุผู้เรียกควรจัดเตรียมส่วนที่เหลือในการโทรครั้งต่อไปเพื่อ อัปเดต ()
[ออก] out_params พารามิเตอร์เอาต์พุต ใช้เพื่อส่งคืนข้อมูลเพิ่มเติมจากการดำเนินการผู้เรียกใช้เป็นเจ้าของอาร์เรย์พารามิเตอร์เอาต์พุตและต้องทำให้เป็นอิสระด้วย keymaster_free_param_set () out_params อาจถูกตั้งค่าเป็น NULL หากไม่คาดว่าจะมีพารามิเตอร์ขาออก หาก out_params เป็น NULL และสร้างพารามิเตอร์เอาต์พุต เริ่มต้น () จะส่งคืน KM_ERROR_OUTPUT_PARAMETER_NULL
[ออก] เอาท์พุต ข้อมูลที่ส่งออกถ้ามี ผู้เรียกจะอ้างสิทธิ์ความเป็นเจ้าของของบัฟเฟอร์ที่จัดสรร เอาต์พุตต้องไม่เป็น NULL

โปรดทราบว่าการ อัปเดต () อาจไม่มีเอาต์พุตใด ๆ ซึ่งในกรณีนี้ output-> data_length จะเป็นศูนย์และข้อมูล output-> อาจเป็น NULL หรือ zero-length (ดังนั้นผู้เรียกควรเป็นอิสระ () เสมอ)

นิยามที่บรรทัด 495 ของไฟล์ keymaster1.h

int (* Verify_data) (const struct keymaster1_device * dev, โมฆะ const * Sign_params, const uint8_t * key_blob, const size_t key_blob_length, const uint8_t * Sign_data, const size_t ได้ลงนามแล้วataขนาด _t
เลิกใช้:
ตรวจสอบข้อมูลที่ลงชื่อด้วย key-blob สิ่งนี้สามารถใช้คีย์ไม่สมมาตรหรือคีย์ลับ

คืนค่า: 0 เมื่อการยืนยันสำเร็จหรือรหัสข้อผิดพลาดน้อยกว่า 0

นิยามที่บรรทัดที่ 118 ของไฟล์ keymaster1.h


เอกสารสำหรับ struct นี้ถูกสร้างขึ้นจากไฟล์ต่อไปนี้:
  • hardware / libhardware / include / hardware / keymaster1.h