keymaster1_device مرجع هيكل

keymaster1_device مرجع هيكل

#include < keymaster1.h >

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

هيكل hw_device_t مشترك
uint32_t client_version
uint32_t الأعلام
فارغ * سياق الكلام
int (* create_keypair ) (const Struct keymaster1_device * dev، const keymaster_keypair_t key_type، const void * key_params، uint8_t ** key_blob، size_t * key_blob_length)
int (* import_keypair ) (const Struct keymaster1_device * dev، const uint8_t * key، const size_t key_length، uint8_t ** key_blob، size_t * key_blob_length)
int (* get_keypair_public ) (const Struct keymaster1_device * dev ، const uint8_t * key_blob ، const size_t key_blob_length ، uint8_t ** x509_data ، size_t * x509_data_length)
int (* delete_keypair ) (const Struct keymaster1_device * dev ، const uint8_t * key_blob ، const size_t key_blob_length)
int (* delete_all ) (const Struct keymaster1_device * dev)
int (* sign_data ) (const Struct keymaster1_device * dev ، const void * signature_params ، const uint8_t * key_blob ، const size_t key_blob_length ، const uint8_t * data ، const size_t data_length ، uint8_t ** signature_data ، size_t * signature_data_length)
int (* التحقق من البيانات ) (const Struct keymaster1_device * dev ، const void * signature_params ، const uint8_t * key_blob ، const size_t key_blob_length ، const uint8_t * signature_data ، const size_t signature_data_length ، const uint8_t * signature ، const size_t signature_length)
keymaster_error_t (* get_supported_algorithms ) ( مدير مفتاح هيكلي 1_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 algorithm، keymaster_purpose_t target ، keymaster_block_mode_t ** mode، size_t * mode_length)
keymaster_error_t (* get_supported_padding_modes ) (const Struct keymaster1_device * dev، keymaster_algorithm_t algorithm، keymaster_purpose_t target ، keymaster_padding_t ** mode، size_t * mode_length)
keymaster_error_t (* get_supported_digests ) (const هيكلة keymaster1_device * dev ، keymaster_algorithm_t algorithm ، keymaster_purpose_t target ، keymaster_digest_t ** Digest ، size_t * digests_length)
keymaster_error_t (* get_supported_import_formats ) (const Struct keymaster1_device * dev، keymaster_algorithm_t algorithm، keymaster_key_format_t ** format، size_t * format_length)
keymaster_error_t (* get_supported_export_formats ) (const Struct keymaster1_device * dev، keymaster_algorithm_t algorithm، keymaster_key_format_t ** format، size_t * format_length)
keymaster_error_t (* add_rng_entropy ) (const Struct keymaster1_device * dev، const uint8_t * data، size_t data_length)
keymaster_error_t (* create_key ) (const Struct keymaster1_device * dev، const keymaster_key_param_set_t * params ، keymaster_key_blob_t * key_blob ، keymaster_key_characteristics_t ** features)
keymaster_error_t (* get_key_characteristics ) (const مبنى 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 ** features)
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 ** features)
keymaster_error_t (* export_key ) (const Struct keymaster1_device * dev، keymaster_key_format_t export_format، const keymaster_key_blob_t * key_to_export، const keymaster_blob_t * client_id، const keymaster_blob_t * app_data، keymaster_blob_t * export_data)
keymaster_error_t (* delete_key ) (const Struct keymaster1_device * dev ، const keymaster_key_blob_t * key)
keymaster_error_t (* delete_all_keys ) (const Struct keymaster1_device * dev)
keymaster_error_t (* start) (const construct 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 .

التوثيق الميداني

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

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

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

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

من الأهمية بمكان أن يتم إقران كل مكالمة لبدء () باستدعاء لاحق لإنهاء () أو إحباط () ، للسماح لتطبيق keymaster بتنظيف أي حالة تشغيل داخلية. قد يؤدي الفشل في القيام بذلك إلى تسرب مساحة الحالة الداخلية أو الموارد الداخلية الأخرى وقد يتسبب في النهاية في إرجاع start () KM_ERROR_TOO_MANY_OPERATIONS عند نفاد مساحة العمليات. أي نتيجة بخلاف KM_ERROR_OK من البدء () أو التحديث () أو النهاية () تؤدي ضمنيًا إلى إحباط العملية ، وفي هذه الحالة لا يلزم استدعاء الإحباط () (وسيعيد 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 ويجب تلبية جميع متطلبات الاستخدام الخاصة به ، أو أن تبدأ () بإرجاع رمز خطأ مناسب.
[في] 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.
[خارج] عملية_مقبض مقبض العملية الذي تم إنشاؤه حديثًا والذي يجب تمريره للتحديث () أو الإنهاء () أو الإحباط () . إذا كانت process_handle هي NULL ، فستُرجع الدالة start () KM_ERROR_OUTPUT_PARAMETER_NULL.

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

uint32_t client_version

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

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

الطرق الشائعة لجهاز 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) (const مبنى keymaster1_device * dev)

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

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

المعلمات
[في] ديف هيكل جهاز keymaster.

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

keymaster_error_t (* delete_key) (const مبنى keymaster1_device * dev ، const keymaster_key_blob_t * key)

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

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

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

تعريف في السطر 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 (* export_key) (const مبنى 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_blob_t * export_data ، keymaster_blob_t * export_data

يصدر مفتاحًا عامًا ، ويعيد مصفوفة بايت بالتنسيق المحدد.

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

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

المعلمات
[في] ديف هيكل جهاز keymaster.
[في] عملية_مقبض تم إرجاع مؤشر العملية بواسطة start () . سيتم إبطال هذا المقبض.
[في] بارامز معلمات إضافية للعملية. بالنسبة لأوضاع AEAD ، يتم استخدام هذا لتحديد KM_TAG_ADDITIONAL_DATA ، ولكن فقط في حالة عدم تقديم بيانات إدخال للتحديث () .
[في] التوقيع التوقيع المراد التحقق منه إذا كان الغرض المحدد في استدعاء start () هو KM_PURPOSE_VERIFY.
[خارج] انتاج بيانات الإخراج إن وجدت. يفترض المتصل ملكية المخزن المؤقت المخصص.

إذا كانت العملية التي يتم الانتهاء منها هي التحقق من صحة التوقيع أو فشل التحقق من وضع AEAD ثم إنهاء () سيعيد KM_ERROR_VERIFICATION_FAILED.

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

uint32_t الأعلام

راجع العلامات المحددة لـ keymaster0_devices :: flags في keymaster_common.h

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

keymaster_error_t (* create_key) (const Struct keymaster1_device * dev ، const keymaster_key_param_set_t * params ، keymaster_key_blob_t * key_blob ، keymaster_key_characteristics_t ** features)

يولد مفتاحًا ، أو زوجًا من المفاتيح ، ويعيد 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
المعلمات
[في] ديف هيكل جهاز keymaster.
[في] بارامز صفيف من معلمات توليد المفاتيح.
[في] بارامس_كونت طول 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 (* create_keypair) (const Struct keymaster1_device * dev ، const keymaster_keypair_t key_type ، const void * key_params ، uint8_t ** key_blob ، size_t * key_blob_length)
إهمال:
يولد مفتاح عام وخاص. النقطة الرئيسية التي تم إرجاعها غير شفافة ويجب توفيرها لاحقًا للتوقيع والتحقق.

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

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

تُرجع خصائص المفتاح المحدد ، أو 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 إذا لم تكن مرتبطة.
[في] معرف التطبيق بيانات التطبيق ، أو 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 algorithm ، keymaster_purpose_t target ، keymaster_block_mode_t ** أوضاع ، size_t * mode_length)

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

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

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

keymaster_error_t (* get_supported_digests) (const مبنى keymaster1_device * dev ، keymaster_algorithm_t algorithm ، keymaster_purpose_t target ، 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 algorithm ، keymaster_key_format_t ** تنسيقات ، size_t * format_length)

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

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

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

keymaster_error_t (* get_supported_import_formats) (const Struct keymaster1_device * dev ، keymaster_algorithm_t algorithm ، keymaster_key_format_t ** format ، size_t * format_length)

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

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

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

keymaster_error_t (* get_supported_padding_modes) (const Struct keymaster1_device * dev ، keymaster_algorithm_t algorithm ، keymaster_purpose_t target ، keymaster_padding_t ** أوضاع ، size_t * mode_length)

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

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

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

keymaster_error_t (* import_key) (const بناء 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 )

يستورد مفتاحًا ، أو زوجًا من المفاتيح ، ويعيد blob مفتاحًا و / أو وصفًا للمفتاح.

يتم تعريف معظم معلمات الاستيراد الرئيسية على أنها أزواج قيمة / علامة مدير المفاتيح ، ويتم توفيرها في "المعلمات". انظر 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 .
[في] 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 (معيار جافا). النقطة الرئيسية التي تم إرجاعها غير شفافة وسيتم توفيرها لاحقًا للتوقيع والتحقق.

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

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

int (* sign_data) (const Struct keymaster1_device * dev ، const void * signature_params ، const uint8_t * key_blob ، const size_t key_blob_length ، const uint8_t * data ، const size_t data_length ، uint8_t ** signature_data ، size_t * signature_data_length)
إهمال:
يوقع البيانات باستخدام key-blob تم إنشاؤه من قبل. يمكن أن يستخدم هذا إما مفتاحًا غير متماثل أو مفتاحًا سريًا.

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

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

keymaster_error_t (* update) (const مبنى keymaster1_device * dev ، keymaster_operation_handle_t operation_handle ، const keymaster_key_param_set_t * in_params ، const keymaster_blob_t * input ، size_t * input_consumed ، keymaster_key_param_set_t * out_params ، keymaster_key_param_set_t * out_params ،

يوفر البيانات لعملية تشفير جارية ، وربما يستقبلها ، والتي تبدأ بـ start () .

إذا كانت process_handle غير صالحة ، فسيعرض التحديث () KM_ERROR_INVALID_OPERATION_HANDLE.

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

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

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

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

int (* check_data) (const Struct keymaster1_device * dev ، const void * signature_params ، const uint8_t * key_blob ، const size_t key_blob_length ، const uint8_t * signature_data ، const size_t signature_data_length ، const uint8_t * signature ، const size_t signature_length)
إهمال:
يتحقق من البيانات الموقعة باستخدام blob مفتاح. يمكن أن يستخدم هذا إما مفتاحًا غير متماثل أو مفتاحًا سريًا.

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

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


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