keymaster2_device संरचना संदर्भ

keymaster2_device संरचना संदर्भ

#include < keymaster2.h >

डेटा फ़ील्ड

संरचना hw_device_t सामान्य
खालीपन * प्रसंग
uint32_t झंडे
keymaster_error_t (* कॉन्फिगर )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)
keymaster_error_t (* add_rng_entropy )(const struct keymaster2_device *dev, const uint8_t *data, size_t data_length)
keymaster_error_t (* generate_key )(const struct keymaster2_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 keymaster2_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 (* आयात_कुंजी )(स्थिरांक संरचना keymaster2_device *dev, स्थिरांक keymaster_key_param_set_t *params, keymaster_key_format_t key_format, स्थिरांक keymaster_blob_t *key_data, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *विशेषताएँ)
keymaster_error_t (* निर्यात_कुंजी )(स्थिरांक स्ट्रक्चर keymaster2_device *dev, keymaster_key_format_t निर्यात_प्रारूप, स्थिरांक keymaster_key_blob_t *key_to_export, स्थिरांक keymaster_blob_t *client_id, स्थिरांक keymaster_blob_t *app_data, keymaster_blob_t *export_data)
keymaster_error_t (* attest_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_चेन_t *cert_चेन)
keymaster_error_t (* अपग्रेड_की )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *डेव, कास्ट कीमास्टर_की_ब्लॉब_टी *की_टू_अपग्रेड, कास्ट कीमास्टर_की_परम_सेट_टी *अपग्रेड_पैराम्स, कीमास्टर_की_ब्लॉब_टी *अपग्रेडेड_की)
keymaster_error_t (* delete_key )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key)
keymaster_error_t (* delete_all_keys )(const struct keymaster2_device *dev)
keymaster_error_t (* प्रारंभ )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *देव, कीमास्टर_प्रयोजन_टी उद्देश्य, कास्ट कीमास्टर_की_ब्लॉब_टी *की, कास्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कीमास्टर_की_परम_सेट_टी *आउट_पैराम्स, कीमास्टर_ऑपरेशन_हैंडल_टी *ऑपरेशन_हैंडल)
keymaster_error_t (* अपडेट )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल, कास्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *इनपुट, साइज_टी *इनपुट_कंस्यूम्ड, कीमास्टर_की_परम_सेट_टी *आउट_पैरम्स, कीमास्टर_ब्लॉब_टी *आउटपुट)
keymaster_error_t (* ख़त्म करें )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल, कॉन्स्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *इनपुट, कॉन्स्ट कीमास्टर_ब्लॉब_टी *सिग्नेचर, कीमास्टर_की_परम_सेट_टी *आउट_पैरम्स, कीमास्टर_ब्लॉब_टी *आउटपुट)
keymaster_error_t (* निरस्त करें )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल)

विस्तृत विवरण

Keymaster2 डिवाइस परिभाषा

फ़ाइल keymaster2.h की पंक्ति 28 पर परिभाषा।

फ़ील्ड दस्तावेज़ीकरण

keymaster_error_t (* निरस्त)(const struct keymaster2_device *dev, keymaster_operation_handle_t आपरेशन_हैंडल)

प्रारंभ() से शुरू किए गए क्रिप्टोग्राफ़िक ऑपरेशन को निरस्त कर देता है, सभी आंतरिक संसाधनों को मुक्त कर देता है और operation_handle अमान्य कर देता है।

फ़ाइल keymaster2.h की पंक्ति 415 पर परिभाषा।

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

कीमास्टर द्वारा प्रयुक्त आरएनजी में एन्ट्रापी जोड़ता है। इस विधि के माध्यम से जोड़ी गई एन्ट्रॉपी की गारंटी है कि यह एन्ट्रॉपी का एकमात्र स्रोत नहीं है, और मिश्रण फ़ंक्शन को सुरक्षित होना आवश्यक है, इस अर्थ में कि यदि आरएनजी को किसी भी डेटा के साथ (किसी भी स्रोत से) सीड किया जाता है तो हमलावर भविष्यवाणी नहीं कर सकता (या) नियंत्रण), तो आरएनजी आउटपुट यादृच्छिक से अप्रभेद्य है। इस प्रकार, यदि किसी स्रोत से एन्ट्रापी अच्छी है, तो आउटपुट अच्छा होगा।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] डेटा यादृच्छिक डेटा को मिश्रित किया जाना है।
[में] डेटा_लंबाई data की लंबाई.

फ़ाइल keymaster2.h की पंक्ति 74 पर परिभाषा।

keymaster_error_t (* attest_key)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_attest, const keymaster_key_param_set_t *attest_params, keymaster_cert_चेन_t *cert_चेन)

कीमास्टर में key_to_attest की उपस्थिति को प्रमाणित करने वाली एक हस्ताक्षरित X.509 प्रमाणपत्र श्रृंखला उत्पन्न करता है (TODO(swillden): प्रमाणपत्र सामग्री का अधिक विस्तार से वर्णन करें)। प्रमाणपत्र में OID 1.3.6.1.4.1.11129.2.1.17 के साथ एक एक्सटेंशन होगा और <TODO:swillden – Insert link Here> में परिभाषित मान होगा जिसमें मुख्य विवरण शामिल होगा।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] key_to_attest कीमास्टर कुंजी जिसके लिए सत्यापन प्रमाणपत्र तैयार किया जाएगा।
[में] attest_params सत्यापन कैसे करना है यह परिभाषित करने वाले पैरामीटर। वर्तमान में एकमात्र पैरामीटर KM_TAG_ALGORITHM है, जो या तो KM_ALGORITHM_EC या KM_ALGORITHM_RSA होना चाहिए। यह चयन करता है कि प्रमाणपत्र पर हस्ताक्षर करने के लिए प्रावधानित सत्यापन कुंजियों में से किसका उपयोग किया जाएगा।
[बाहर] cert_चेन DER-एन्कोडेड X.509 प्रमाणपत्रों की एक श्रृंखला। पहला key_to_attest के लिए प्रमाणपत्र होगा। शेष प्रविष्टियाँ वापस मूल तक शृंखलाबद्ध हो जाएँगी। कॉल करने वाला स्वामित्व लेता है और उसे keymaster_free_cert_चेन से आवंटन रद्द करना होगा।

फ़ाइल keymaster2.h की पंक्ति 239 पर परिभाषा।

keymaster_error_t (* प्रारंभ)(const struct keymaster2_device *dev, keymaster_purpos_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 *ऑपरेशन_हैंडल)

निर्दिष्ट कुंजी का उपयोग करके एक क्रिप्टोग्राफ़िक ऑपरेशन शुरू करता है। यदि सब कुछ ठीक है, तो begin() KM_ERROR_OK लौटाएगा और एक ऑपरेशन हैंडल बनाएगा जिसे बाद की कॉलों में update() , ख़त्म() या abort() में पास किया जाना चाहिए।

यह महत्वपूर्ण है कि प्रारंभ() की प्रत्येक कॉल को फिनिश() या एबॉर्ट() की अगली कॉल के साथ जोड़ा जाए, ताकि कीमास्टर कार्यान्वयन किसी भी आंतरिक ऑपरेशन स्थिति को साफ़ कर सके। ऐसा करने में विफलता आंतरिक स्थिति स्थान या अन्य आंतरिक संसाधनों को लीक कर सकती है और अंततः ऑपरेशन के लिए स्थान से बाहर होने पर KM_ERROR_TOO_MANY_OPERATIONS को वापस करने के लिए प्रारंभ() का कारण बन सकती है। प्रारंभ() , अपडेट() या फिनिश() से KM_ERROR_OK के अलावा कोई भी परिणाम स्पष्ट रूप से ऑपरेशन को निरस्त कर देता है, ऐसी स्थिति में 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 के अनुरूप होना चाहिए और इसकी सभी उपयोग आवश्यकताओं को पूरा किया जाना चाहिए, या प्रारंभ () एक उचित त्रुटि कोड लौटाएगा।
[में] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर. इसका उपयोग आमतौर पर KM_TAG_AUTH_TOKEN के साथ प्रमाणीकरण डेटा प्रदान करने के लिए किया जाता है। यदि KM_TAG_APPLICATION_ID या KM_TAG_APPLICATION_DATA पीढ़ी के दौरान प्रदान किए गए थे, तो उन्हें यहां प्रदान किया जाना चाहिए, अन्यथा KM_ERROR_INVALID_KEY_BLOB के साथ ऑपरेशन विफल हो जाएगा। उन परिचालनों के लिए जिनके लिए नॉन या IV की आवश्यकता होती है, KM_TAG_CALLER_NONCE के साथ जेनरेट की गई कुंजियों पर, in_params में एक टैग KM_TAG_NONCE हो सकता है।
[बाहर] out_params आउटपुट पैरामीटर. ऑपरेशन आरंभीकरण से अतिरिक्त डेटा वापस करने के लिए उपयोग किया जाता है, विशेष रूप से IV या नॉन उत्पन्न करने वाले ऑपरेशन से IV या नॉन वापस करने के लिए। कॉल करने वाला आउटपुट पैरामीटर सरणी का स्वामित्व लेता है और इसे keymaster_free_param_set() से मुक्त करना होगा। यदि कोई आउटपुट पैरामीटर अपेक्षित नहीं है तो out_params को NULL पर सेट किया जा सकता है। यदि out_params शून्य है, और आउटपुट पैरामीटर उत्पन्न होते हैं, तो प्रारंभ() KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।
[बाहर] ऑपरेशन_हैंडल नव-निर्मित ऑपरेशन हैंडल जिसे अपडेट() , फिनिश() या एबॉर्ट() में पास किया जाना चाहिए। यदि ऑपरेशन_हैंडल शून्य है, तो प्रारंभ() KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।

फ़ाइल keymaster2.h की पंक्ति 332 पर परिभाषा।

struct hw_device_t सामान्य

कीमास्टर डिवाइस की सामान्य विधियाँ। यह keymaster_device का पहला सदस्य होना चाहिए क्योंकि इस संरचना के उपयोगकर्ता उन संदर्भों में keymaster_device पॉइंटर पर hw_device_t डालेंगे जहां यह ज्ञात है कि hw_device_t keymaster_device को संदर्भित करता है।

फ़ाइल keymaster2.h की पंक्ति 35 पर परिभाषा।

keymaster_error_t (* कॉन्फिगर)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)

कीमास्टर को कॉन्फ़िगर करता है. डिवाइस को खोलने के बाद और इसका उपयोग करने से पहले इस विधि को एक बार कॉल किया जाना चाहिए। इसका उपयोग कीमास्टर को KM_TAG_OS_VERSION और KM_TAG_OS_PATCHLEVEL प्रदान करने के लिए किया जाता है। जब तक इस विधि को कॉल नहीं किया जाता, तब तक अन्य सभी विधियाँ KM_ERROR_KEYMASTER_NOT_CONFIGURED लौटाएंगी। इस विधि द्वारा प्रदान किए गए मान कीमास्टर द्वारा प्रति बूट केवल एक बार स्वीकार किए जाते हैं। बाद की कॉलें KM_ERROR_OK लौटाएंगी, लेकिन कुछ नहीं करेंगी।

यदि कीमास्टर कार्यान्वयन सुरक्षित हार्डवेयर में है और प्रदान किए गए OS संस्करण और पैच स्तर मान बूटलोडर द्वारा सुरक्षित हार्डवेयर को प्रदान किए गए मानों से मेल नहीं खाते हैं (या यदि बूटलोडर ने मान प्रदान नहीं किया है), तो यह विधि KM_ERROR_INVALID_ARGUMENT, और सभी लौटा देगी अन्य विधियाँ KM_ERROR_KEYMASTER_NOT_CONFIGURED लौटाती रहेंगी।

फ़ाइल keymaster2.h की पंक्ति 58 पर परिभाषा।

शून्य* प्रसंग

फ़ाइल keymaster2.h की पंक्ति 37 पर परिभाषा।

keymaster_error_t (* delete_all_keys)(const struct keymaster2_device *dev)

हार्डवेयर कीस्टोर की सभी कुंजियाँ हटा देता है। इसका उपयोग तब किया जाता है जब कीस्टोर पूरी तरह से रीसेट हो जाता है। इस फ़ंक्शन को कॉल करने के बाद किसी भी ऑपरेशन के लिए पहले से जेनरेट किए गए या आयातित कुंजी ब्लॉब्स का उपयोग करना असंभव होगा।

यह फ़ंक्शन वैकल्पिक है और यदि इसे लागू नहीं किया जाता है तो इसे NULL पर सेट किया जाना चाहिए।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.

फ़ाइल keymaster2.h की पंक्ति 288 पर परिभाषा।

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

कुंजी ब्लॉब से संबद्ध कुंजी, या कुंजी युग्म को हटा देता है। इस फ़ंक्शन को कॉल करने के बाद किसी अन्य ऑपरेशन के लिए कुंजी का उपयोग करना असंभव होगा। ट्रस्ट की विदेशी जड़ों की चाबियों पर लागू किया जा सकता है (कुंजियाँ ट्रस्ट की वर्तमान जड़ के तहत उपयोग करने योग्य नहीं हैं)।

यह फ़ंक्शन वैकल्पिक है और यदि इसे लागू नहीं किया जाता है तो इसे NULL पर सेट किया जाना चाहिए।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] चाबी हटाई जाने वाली कुंजी.

फ़ाइल keymaster2.h की पंक्ति 276 पर परिभाषा।

keymaster_error_t (*export_key)(const struct keymaster2_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)

निर्दिष्ट प्रारूप में बाइट सरणी लौटाते हुए, एक सार्वजनिक या सममित कुंजी निर्यात करता है।

ध्यान दें कि सममित कुंजी निर्यात की अनुमति केवल तभी दी जाती है जब कुंजी KM_TAG_EXPORTABLE के साथ बनाई गई हो, और केवल तभी जब कुंजी उपयोग (जैसे प्रमाणीकरण) के लिए सभी आवश्यकताएं पूरी की गई हों।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] निर्यात_प्रारूप कुंजी निर्यात करने के लिए उपयोग किया जाने वाला प्रारूप.
[में] key_to_export निर्यात करने की कुंजी.
[में] ग्राहक ID क्लाइंट आईडी ब्लॉब, जो कुंजी निर्माण (यदि कोई हो) के दौरान KM_TAG_APPLICATION_ID में प्रदान किए गए ब्लॉब से मेल खाना चाहिए।
[में] एप्लिकेशन आंकड़ा अनुप्रयोग डेटा ब्लॉब, जो कुंजी निर्माण (यदि कोई हो) के दौरान KM_TAG_APPLICATION_DATA में प्रदान किए गए ब्लॉब से मेल खाना चाहिए।
[बाहर] निर्यात जानकारी निर्यात की गई प्रमुख सामग्री। कॉल करने वाला स्वामित्व ग्रहण करता है.

फ़ाइल keymaster2.h की पंक्ति 213 पर परिभाषा।

keymaster_error_t (* ख़त्म)(const struct keymaster2_device *dev, keymaster_operation_handle_t ऑपरेशन_हैंडल, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *input, const keymaster_blob_t *signature, keymaster_key_param_set_t *out_params, keymaster_blob_t *आउटपुट)

प्रारंभ() से शुरू किए गए क्रिप्टोग्राफ़िक ऑपरेशन को अंतिम रूप देता है और operation_handle अमान्य कर देता है।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] ऑपरेशन_हैंडल ऑपरेशन हैंडल प्रारंभ() द्वारा लौटाया गया। यह हैंडल अमान्य कर दिया जाएगा.
[में] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर. AEAD मोड के लिए, इसका उपयोग KM_TAG_ADDITIONAL_DATA निर्दिष्ट करने के लिए किया जाता है, लेकिन केवल तभी जब update() को कोई इनपुट डेटा प्रदान नहीं किया गया हो।
[में] इनपुट प्रारंभ() पर कॉल में स्थापित मापदंडों के अनुसार डेटा संसाधित किया जाना है। फिनिश() को सभी प्रदान किए गए डेटा का उपभोग करना होगा या KM_ERROR_INVALID_INPUT_LENGTH लौटाना होगा।
[में] हस्ताक्षर यदि प्रारंभ() कॉल में निर्दिष्ट उद्देश्य KM_PURPOSE_VERIFY था तो सत्यापित किया जाने वाला हस्ताक्षर।
[बाहर] आउटपुट आउटपुट डेटा, यदि कोई हो. कॉल करने वाला आवंटित बफ़र का स्वामित्व मानता है।

यदि समाप्त होने वाला ऑपरेशन एक हस्ताक्षर सत्यापन या एईएडी-मोड डिक्रिप्शन है और सत्यापन विफल हो जाता है तो फिनिश() KM_ERROR_VERIFICATION_FAILED लौटाएगा।

फ़ाइल keymaster2.h की पंक्ति 405 पर परिभाषा।

uint32_t झंडे

keymaster0_devices::flags के लिए keymaster_common.h में परिभाषित झंडे देखें। केवल पश्चगामी संगतता के लिए उपयोग किया जाता है; keymaster2 हार्डवेयर उपकरणों को इसे शून्य पर सेट करना होगा।

फ़ाइल keymaster2.h की पंक्ति 43 पर परिभाषा।

keymaster_error_t (* generate_key)(const struct keymaster2_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_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_रोलबैक_प्रतिरोधी,
  • KM_TAG_CREATION_DATETIME
पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] पैरामीटर कुंजी पीढ़ी पैरामीटर की सारणी
[बाहर] key_blob उत्पन्न कुंजी लौटाता है। key_blob शून्य नहीं होना चाहिए। कॉल करने वाला key_blob->key_material का स्वामित्व मानता है और उसे इसे free() करना होगा।
[बाहर] विशेषताएँ गैर-शून्य होने पर, उत्पन्न की गई कुंजी की विशेषताएं लौटाता है। यदि गैर-शून्य है, तो कॉल करने वाला स्वामित्व मान लेता है और उसे keymaster_free_characteristics() से आवंटन रद्द करना होगा। ध्यान दें कि KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA कभी नहीं लौटाए जाते।

फ़ाइल keymaster2.h की पंक्ति 112 पर परिभाषा।

keymaster_error_t (* get_key_characteristics)(const struct keymaster2_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 *विशेषताएँ)

यदि key_blob अमान्य है तो निर्दिष्ट कुंजी या KM_ERROR_INVALID_KEY_BLOB की विशेषताएं लौटाता है (कार्यान्वयन को कुंजी की अखंडता को पूरी तरह से मान्य करना होगा)। क्लाइंट_आईडी और ऐप_डेटा कुंजी उत्पन्न या आयात करते समय प्रदान की गई आईडी और डेटा होना चाहिए, या यदि KM_TAG_APPLICATION_ID और/या KM_TAG_APPLICATION_DATA पीढ़ी के दौरान प्रदान नहीं किए गए थे तो खाली होना चाहिए। वे मान लौटाई गई विशेषताओं में शामिल नहीं हैं। कॉल करने वाला आवंटित विशेषता ऑब्जेक्ट का स्वामित्व मानता है, जिसे keymaster_free_characteristics() के साथ हटाया जाना चाहिए।

ध्यान दें कि KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA कभी नहीं लौटाए जाते।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] key_blob विशेषताओं को पुनः प्राप्त करने की कुंजी।
[में] ग्राहक ID क्लाइंट आईडी डेटा, या यदि कोई संबद्ध नहीं है तो NULL।
[में] ऐप_आईडी ऐप डेटा, या यदि कोई संबद्ध नहीं है तो NULL।
[बाहर] विशेषताएँ प्रमुख विशेषताएँ. शून्य नहीं होना चाहिए. कॉल करने वाला सामग्री का स्वामित्व मानता है और उसे keymaster_free_characteristics() से आवंटन रद्द करना होगा।

फ़ाइल keymaster2.h की पंक्ति 139 पर परिभाषा।

keymaster_error_t (* आयात_कुंजी)(const struct keymaster2_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_tag_t देखें। उपयोगी कुंजियों के आयात के लिए हमेशा आवश्यक मान हैं:

  • KM_TAG_ALGORITHM;
  • किमी_टैग_उद्देश्य; और
  • (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_रोलबैक_प्रतिरोधी,
  • KM_TAG_CREATION_DATETIME
पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] पैरामीटर आयातित कुंजी को परिभाषित करने वाले पैरामीटर।
[में] पैरामीटर_गिनती params में प्रविष्टियों की संख्या.
[में] key_format key_data में मुख्य डेटा का प्रारूप निर्दिष्ट करता है।
[बाहर] key_blob अपारदर्शी कुंजी ब्लॉब को वापस करने के लिए उपयोग किया जाता है। गैर-शून्य होना चाहिए. कॉल करने वाला निहित key_material का स्वामित्व मानता है।
[बाहर] विशेषताएँ आयातित कुंजी की विशेषताओं को वापस करने के लिए उपयोग किया जाता है। शून्य हो सकता है, ऐसी स्थिति में कोई विशेषताएँ वापस नहीं की जाएंगी। यदि गैर-शून्य है, तो कॉल करने वाला सामग्री का स्वामित्व मानता है और उसे keymaster_free_characteristics() से आवंटन रद्द करना होगा। ध्यान दें कि KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA कभी नहीं लौटाए जाते।

फ़ाइल keymaster2.h की पंक्ति 186 पर परिभाषा।

keymaster_error_t (* अपडेट)(const struct keymaster2_device *dev, keymaster_operation_handle_t ऑपरेशन_हैंडल, 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 *आउटपुट)

प्रारंभ() के साथ शुरू होने वाले चल रहे क्रिप्टोग्राफ़िक ऑपरेशन को डेटा प्रदान करता है, और संभवतः उससे आउटपुट प्राप्त करता है।

यदि ऑपरेशन_हैंडल अमान्य है, तो अपडेट() KM_ERROR_INVALID_OPERATION_HANDLE लौटाएगा।

अद्यतन() डेटा बफ़र में दिए गए सभी डेटा का उपभोग नहीं कर सकता है। अद्यतन() *data_consumed में खपत की गई राशि वापस कर देगा। कॉल करने वाले को बाद की कॉल में अप्रयुक्त डेटा प्रदान करना चाहिए।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] ऑपरेशन_हैंडल ऑपरेशन हैंडल प्रारंभ() द्वारा लौटाया गया।
[में] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर. AEAD मोड के लिए, इसका उपयोग KM_TAG_ADDITIONAL_DATA निर्दिष्ट करने के लिए किया जाता है। ध्यान दें कि update() पर एकाधिक कॉल में अतिरिक्त डेटा प्रदान किया जा सकता है, लेकिन केवल तब तक जब तक इनपुट डेटा प्रदान नहीं किया गया हो।
[में] इनपुट प्रारंभ() पर कॉल में स्थापित मापदंडों के अनुसार डेटा संसाधित किया जाना है। ध्यान दें कि अपडेट() उपलब्ध कराए गए सभी डेटा का उपभोग कर भी सकता है और नहीं भी। input_consumed देखें।
[बाहर] इनपुट_उपभोग अद्यतन() द्वारा उपभोग किए गए डेटा की मात्रा। यदि यह प्रदान की गई राशि से कम है, तो कॉल करने वाले को update() पर बाद की कॉल में शेष राशि प्रदान करनी चाहिए।
[बाहर] out_params आउटपुट पैरामीटर. ऑपरेशन से अतिरिक्त डेटा वापस करने के लिए उपयोग किया जाता है। कॉलर आउटपुट पैरामीटर सरणी का स्वामित्व लेता है और इसे keymaster_free_param_set() से मुक्त करना होगा। यदि कोई आउटपुट पैरामीटर अपेक्षित नहीं है तो out_params को NULL पर सेट किया जा सकता है। यदि out_params शून्य है, और आउटपुट पैरामीटर उत्पन्न होते हैं, तो प्रारंभ() KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।
[बाहर] आउटपुट आउटपुट डेटा, यदि कोई हो. कॉल करने वाला आवंटित बफ़र का स्वामित्व मानता है। आउटपुट शून्य नहीं होना चाहिए.

ध्यान दें कि अपडेट() कोई आउटपुट प्रदान नहीं कर सकता है, ऐसी स्थिति में आउटपुट->डेटा_लेंथ शून्य होगा, और आउटपुट->डेटा या तो NULL या शून्य-लेंथ हो सकता है (इसलिए कॉल करने वाले को इसे हमेशा फ्री() करना चाहिए)।

फ़ाइल keymaster2.h की पंक्ति 376 पर परिभाषा।

keymaster_error_t (* अपग्रेड_कुंजी)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgrade_key)

पुरानी कुंजी को अपग्रेड करता है. कुंजियाँ दो तरीकों से "पुरानी" हो सकती हैं: कीमास्टर को नए संस्करण में अपग्रेड किया जा सकता है, या ओएस संस्करण और/या पैच स्तर को अमान्य करने के लिए सिस्टम को अपडेट किया जा सकता है। किसी भी स्थिति में, पुरानी कुंजी का उपयोग करने के प्रयास के परिणामस्वरूप कीमास्टर KM_ERROR_KEY_REQUIRES_UPGRADE लौटाएगा। कुंजी को अपग्रेड करने के लिए इस विधि को बुलाया जाना चाहिए।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] key_to_upgrade अपग्रेड करने के लिए कीमास्टर कुंजी.
[में] अपग्रेड_पैराम्स अपग्रेड को पूरा करने के लिए आवश्यक पैरामीटर. विशेष रूप से, KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA की आवश्यकता होगी यदि उन्हें कुंजी के लिए परिभाषित किया गया हो।
[बाहर] उन्नत_कुंजी उन्नत कुंजी ब्लॉब.

फ़ाइल keymaster2.h की पंक्ति 260 पर परिभाषा।


इस संरचना के लिए दस्तावेज़ीकरण निम्नलिखित फ़ाइल से तैयार किया गया था:
  • हार्डवेयर/लिबहार्डवेयर/शामिल/हार्डवेयर/ keymaster2.h