keymaster1_device مرجع الهيكل

keymaster1_device مرجع الهيكل

#include < keymaster1.h >

حقول البيانات

البنية hw_device_t شائع
uint32_t client_version
uint32_t أعلام
فارغ * سياق
كثافة العمليات (* generator_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 *key, 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)
كثافة العمليات (* حذف_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 *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length)
كثافة العمليات (* Vere_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 *signature, const size_t التوقيع_طول)
keymaster_error_t (* get_supported_algorithms )(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length)
keymaster_error_t (* get_supported_block_modes ) (const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، غرض keymaster_pose_t ، keymaster_block_mode_t **modes، 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 **modes، size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، غرض keymaster_ Purpose_t، keymaster_digest_t **digests، size_t *digests_length)
keymaster_error_t (* get_supported_import_formats ) (const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، keymaster_key_format_t **formats، size_t *formats_length)
keymaster_error_t (* get_supported_export_formats ) (const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، keymaster_key_format_t **formats، 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 (* generator_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 *export_data)
keymaster_error_t (* حذف_مفتاح )(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 (* ابدأ )(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 *signature, 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 (* abort)(const struct keymaster1_device *dev, keymaster_operation_handle_t Operation_handle)

يلغي عملية التشفير التي بدأت بـ begin() ، مما يؤدي إلى تحرير كافة الموارد الداخلية وإبطال 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 الذي يستخدمه keymaster. الإنتروبيا المضافة من خلال هذه الطريقة مضمونة ألا تكون المصدر الوحيد للإنتروبيا المستخدمة، ويجب أن تكون وظيفة الخلط آمنة، بمعنى أنه إذا تم زرع RNG (من أي مصدر) مع أي بيانات لا يمكن للمهاجم التنبؤ بها (أو التحكم)، فإن خرج RNG لا يمكن تمييزه عن العشوائي. وبالتالي، إذا كانت الإنتروبيا من أي مصدر جيدة، فسيكون الناتج جيدًا.

حدود
[في] ديف هيكل جهاز keymaster.
[في] بيانات بيانات عشوائية ليتم خلطها.
[في] طول البيانات طول data .

التعريف في السطر 242 من الملف keymaster1.h .

keymaster_error_t (* begin)(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)

تبدأ عملية التشفير باستخدام المفتاح المحدد. إذا كان كل شيء على ما يرام، فسيُرجع التابع begin() KM_ERROR_OK وينشئ مقبض العملية الذي يجب تمريره إلى الاستدعاءات اللاحقة للتحديث() أو Finish() أو abort() .

من المهم جدًا أن يتم إقران كل استدعاء للبدء() مع استدعاء لاحق للإنهاء() أو إحباط() ، للسماح لتطبيق مدير المفاتيح بتنظيف أي حالة تشغيل داخلية. قد يؤدي الفشل في القيام بذلك إلى تسرب مساحة الحالة الداخلية أو الموارد الداخلية الأخرى وقد يؤدي في النهاية إلى إرجاع KM_ERROR_TOO_MANY_OPERATIONS عند نفاد المساحة للعمليات. أي نتيجة بخلاف KM_ERROR_OK من begin() أو update() أو Finish() تؤدي إلى إحباط العملية ضمنيًا، وفي هذه الحالة لا يلزم استدعاء abort() (وسيرجع KM_ERROR_INVALID_OPERATION_HANDLE إذا تم استدعاؤه).

حدود
[في] ديف هيكل جهاز keymaster.
[في] غاية الغرض من العملية، أحد KM_PURPOSE_ENCRYPT أو KM_PURPOSE_DECRYPT أو KM_PURPOSE_SIGN أو KM_PURPOSE_VERIFY. لاحظ أنه بالنسبة لأوضاع AEAD، فإن التشفير وفك التشفير يعني التوقيع والتحقق، على التوالي، ولكن يجب تحديدهما كـ KM_PURPOSE_ENCRYPT وKM_PURPOSE_DECRYPT.
[في] مفتاح المفتاح الذي سيتم استخدامه للعملية. يجب أن يكون key غرض متوافق مع purpose ويجب استيفاء جميع متطلبات الاستخدام الخاصة به، أو ستعيد begin() رمز الخطأ المناسب.
[في] 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، وتم إنشاء معلمات الإخراج، فستُرجع begin() KM_ERROR_OUTPUT_PARAMETER_NULL.
[خارج] Operation_handle مقبض العملية الذي تم إنشاؤه حديثًا والذي يجب تمريره إلى update() أو Finish() أو abort() . إذا كانت قيمة Operation_handle NULL، فستُرجع الدالة begin() KM_ERROR_OUTPUT_PARAMETER_NULL.

التعريف في السطر 451 من الملف keymaster1.h .

uint32_t client_version

تم إهمال هذا. استخدم الحقول الجديدة "module_api_version" و"hal_api_version" في تهيئة keymaster_module بدلاً من ذلك.

التعريف في السطر 41 من الملف keymaster1.h .

بناء hw_device_t مشترك

الطرق الشائعة لجهاز keymaster. يجب أن يكون هذا هو العضو الأول في 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)(بنية أساسية keymaster1_device *dev)

يحذف جميع المفاتيح الموجودة في مخزن مفاتيح الأجهزة. يُستخدم عند إعادة ضبط ملف تخزين المفاتيح بالكامل. بعد استدعاء هذه الوظيفة، سيكون من المستحيل استخدام أي نقاط مفاتيح تم إنشاؤها أو استيرادها مسبقًا لأية عمليات.

هذه الوظيفة اختيارية ويجب ضبطها على NULL إذا لم يتم تنفيذها.

حدود
[في] ديف هيكل جهاز keymaster.

التعريف في السطر 407 من الملف keymaster1.h .

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

يحذف المفتاح، أو زوج المفاتيح، المرتبط بنقطة المفتاح. بعد استدعاء هذه الوظيفة، سيكون من المستحيل استخدام المفتاح لأي عمليات أخرى. يمكن تطبيقه على المفاتيح من جذور الثقة الأجنبية (المفاتيح غير قابلة للاستخدام ضمن جذر الثقة الحالي).

هذه الوظيفة اختيارية ويجب ضبطها على NULL إذا لم يتم تنفيذها.

حدود
[في] ديف هيكل جهاز keymaster.
[في] مفتاح المفتاح المراد حذفه.

التعريف في السطر 395 من الملف keymaster1.h .

int(*حذف_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 (*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.
[في] Export_format التنسيق الذي سيتم استخدامه لتصدير المفتاح.
[في] key_to_export مفتاح التصدير.
[خارج] Export_data المادة الرئيسية المصدرة. المتصل يفترض الملكية.
[خارج] Export_data_length طول ملف export_data .

التعريف في السطر 377 من الملف keymaster1.h .

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)

ينهي عملية التشفير التي بدأت بـ begin() ويبطل operation_handle .

حدود
[في] ديف هيكل جهاز keymaster.
[في] Operation_handle تم إرجاع مقبض العملية بواسطة begin() . سيتم إبطال هذا المقبض.
[في] المعلمات معلمات إضافية للعملية. بالنسبة لأوضاع AEAD، يُستخدم هذا لتحديد KM_TAG_ADDITIONAL_DATA، ولكن فقط في حالة عدم توفير بيانات إدخال للتحديث() .
[في] إمضاء التوقيع المطلوب التحقق منه إذا كان الغرض المحدد في استدعاء begin() هو 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 (* generator_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_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
حدود
[في] ديف هيكل جهاز keymaster.
[في] المعلمات مجموعة من معلمات الجيل الرئيسية.
[في] params_count طول params .
[خارج] key_blob إرجاع المفتاح الذي تم إنشاؤه. يجب ألا يكون key_blob فارغًا. يفترض المتصل ملكية 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(* generator_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 هو المعرف والبيانات المقدمة عند إنشاء المفتاح أو استيراده، أو يجب أن يكون فارغًا إذا لم يتم توفير KM_TAG_APPLICATION_ID و/أو KM_TAG_APPLICATION_DATA أثناء الإنشاء. لا يتم تضمين هذه القيم في الخصائص التي تم إرجاعها. يفترض المتصل ملكية كائن الخصائص المخصصة، والذي يجب إلغاء تخصيصه باستخدام keymaster_free_characteristics() .

لاحظ أنه لا يتم إرجاع KM_TAG_ROOT_OF_TRUST وKM_TAG_APPLICATION_ID وKM_TAG_APPLICATION_DATA مطلقًا.

حدود
[في] ديف هيكل جهاز keymaster.
[في] key_blob مفتاح استرجاع الخصائص من.
[في] معرف العميل بيانات معرف العميل، أو 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 **algorithms, size_t *algorithms_length)

يحصل على دعم الخوارزميات.

حدود
[في] ديف هيكل جهاز keymaster.
[خارج] خوارزميات مجموعة من الخوارزميات المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] خوارزميات_طول طول 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)

يحصل على أوضاع الكتلة المدعومة للخوارزمية المحددة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] خوارزمية الخوارزمية التي سيتم إرجاع الأوضاع المدعومة لها.
[خارج] أساليب مجموعة من الأوضاع المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] mode_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 **digests، size_t *digests_length)

يحصل على الملخصات المدعومة للخوارزمية المحددة. يفترض المتصل ملكية المصفوفة المخصصة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] خوارزمية الخوارزمية التي سيتم إرجاع الملخصات المدعومة لها.
[خارج] هضم مجموعة من الملخصات المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] هضم_طول طول digests .

التعريف في السطر 187 من الملف keymaster1.h .

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، keymaster_key_format_t **formats، size_t *formats_length)

يحصل على تنسيقات التصدير الرئيسية المدعومة لمفاتيح الخوارزمية المحددة. يفترض المتصل ملكية المصفوفة المخصصة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] خوارزمية الخوارزمية التي سيتم إرجاع التنسيقات المدعومة لها.
[خارج] التنسيقات مجموعة من التنسيقات المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] 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 **formats، size_t *formats_length)

يحصل على تنسيقات الاستيراد الرئيسية المدعومة لمفاتيح الخوارزمية المحددة. يفترض المتصل ملكية المصفوفة المخصصة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] خوارزمية الخوارزمية التي سيتم إرجاع التنسيقات المدعومة لها.
[خارج] التنسيقات مجموعة من التنسيقات المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] formats_length طول formats .

التعريف في السطر 206 من الملف keymaster1.h .

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev، خوارزمية keymaster_algorithm_t ، غرض keymaster_pose_t ، keymaster_padding_t **modes، size_t *modes_length)

يحصل على أوضاع الحشو المدعومة للخوارزمية المحددة. يفترض المتصل ملكية المصفوفة المخصصة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] خوارزمية الخوارزمية التي سيتم إرجاع أوضاع الحشو المدعومة لها.
[خارج] أساليب مجموعة من أوضاع الحشو المدعومة. يأخذ المتصل ملكية المصفوفة ويجب عليه تحريرها.
[خارج] mode_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 **الخصائص)

يستورد مفتاحًا أو زوجًا من المفاتيح، مما يؤدي إلى إرجاع كائن كبير كبير و/أو وصف للمفتاح.

يتم تعريف معظم معلمات الاستيراد الرئيسية على أنها أزواج علامات/قيمة keymaster، المتوفرة في "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
حدود
[في] ديف هيكل جهاز keymaster.
[في] المعلمات المعلمات التي تحدد المفتاح المستورد.
[في] params_count عدد الإدخالات في params .
[في] key_format يحدد تنسيق البيانات الرئيسية في key_data.
[خارج] key_blob يستخدم لإرجاع النقطة الرئيسية المعتمة. يجب أن تكون غير فارغة. يفترض المتصل ملكية المادة الرئيسية المضمنة.
[خارج] صفات يستخدم لإرجاع خصائص المفتاح المستورد. قد يكون 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). إن النقطة الرئيسية التي تم إرجاعها غير شفافة وسيتم توفيرها لاحقًا للتوقيع والتحقق.

العوائد: 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 *data, const size_t data_length, uint8_t **signed_data, size_t *signed_data_length)
إهمال:
يوقع البيانات باستخدام مفتاح blob الذي تم إنشاؤه من قبل. يمكن أن يستخدم هذا إما مفتاحًا غير متماثل أو مفتاحًا سريًا.

العوائد: 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)

يوفر بيانات وربما يتلقى مخرجات من عملية تشفير مستمرة تبدأ بـ begin() .

إذا كانت Operation_handle غير صالحة، فسوف يُرجع التحديث () KM_ERROR_INVALID_OPERATION_HANDLE.

قد لا يستهلك التحديث () كافة البيانات المتوفرة في المخزن المؤقت للبيانات. سوف يقوم التحديث () بإرجاع الكمية المستهلكة في *data_consumed. يجب على المتصل تقديم البيانات غير المستهلكة في مكالمة لاحقة.

حدود
[في] ديف هيكل جهاز keymaster.
[في] Operation_handle تم إرجاع مقبض العملية بواسطة begin() .
[في] in_params معلمات إضافية للعملية. بالنسبة لأوضاع AEAD، يُستخدم هذا لتحديد KM_TAG_ADDITIONAL_DATA. لاحظ أنه قد يتم توفير بيانات إضافية في عدة استدعاءات للتحديث() ، ولكن فقط حتى يتم توفير بيانات الإدخال.
[في] مدخل البيانات المراد معالجتها، وفقًا للمعلمات المحددة في استدعاء البدء () . لاحظ أن التحديث () قد يستهلك أو لا يستهلك كافة البيانات المقدمة. راجع input_consumed .
[خارج] input_consumed مقدار البيانات التي تم استهلاكها بواسطة التحديث () . إذا كان هذا أقل من المبلغ المقدم، فيجب على المتصل توفير الباقي في استدعاء لاحق لـ update() .
[خارج] out_params معلمات الإخراج. يُستخدم لإرجاع بيانات إضافية من العملية. يحصل المتصل على ملكية مصفوفة معلمات الإخراج ويجب عليه تحريرها باستخدام keymaster_free_param_set() . قد يتم تعيين out_params على NULL إذا لم تكن هناك معلمات إخراج متوقعة. إذا كانت قيمة out_params NULL، وتم إنشاء معلمات الإخراج، فستُرجع begin() KM_ERROR_OUTPUT_PARAMETER_NULL.
[خارج] انتاج بيانات الإخراج إن وجدت. يفترض المتصل ملكية المخزن المؤقت المخصص. يجب ألا يكون الإخراج فارغًا.

لاحظ أن التحديث () قد لا يوفر أي مخرجات، وفي هذه الحالة سيكون الناتج->طول البيانات صفرًا، وقد يكون طول الإخراج->البيانات إما NULL أو صفرًا (لذلك يجب على المتصل دائمًا تحريرها).

التعريف في السطر 495 من الملف keymaster1.h .

int(* Vere_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 *signature, const size_t التوقيع_طول)
إهمال:
التحقق من البيانات الموقعة باستخدام مفتاح blob. يمكن أن يستخدم هذا إما مفتاحًا غير متماثل أو مفتاحًا سريًا.

العوائد: 0 عند التحقق الناجح أو رمز خطأ أقل من 0.

التعريف في السطر 118 من الملف keymaster1.h .


تم إنشاء وثائق هذه البنية من الملف التالي:
  • الأجهزة/libhardware/تشمل/الأجهزة/ keymaster1.h