संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

#include < keymaster2.h >

डेटा फ़ील्ड

संरचना hw_device_t सामान्य
शून्य * संदर्भ
uint32_t झंडे
keymaster_error_t (* कॉन्फ़िगर करें ) (कॉन्स्ट स्ट्रक्चर कीमास्टर 2_डिवाइस * देव, कॉन्स्ट कीमास्टर_की_परम_सेट_टी * पैराम्स)
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 *characteristics)
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 (* import_key )(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_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)
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_chain_t *cert_chain)
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 (* start )(const struct keymaster2_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 (* अपडेट )(कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *देव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल , कॉन्स्ट कीमास्टर_की_परम_सेट_टी *इन_परम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *इनपुट, साइज_टी *इनपुट_कंस्यूम्ड, कीमास्टर_की_परम_सेट_टी *आउट_परम्स, * आउटपुट_ब्लॉब_टी )
keymaster_error_t (* फिनिश ) (कॉन्स्ट स्ट्रक्चर कीमास्टर2_डिवाइस *देव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल , कॉन्स्ट कीमास्टर_की_परम_सेट_टी *इन_परम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *इनपुट, कॉन्स्ट कीमास्टर_ब्लॉब_टी *हस्ताक्षर, कीमास्टर_की_परम_सेट_टी * आउट_परम , *आउटपुट)
keymaster_error_t (* abort )(const struct keymaster2_device *dev, keymaster_operation_handle_t Operation_handle )

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

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

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

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

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

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

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

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

मापदंडों
[में] देव कीमास्टर डिवाइस संरचना।
[में] जानकारी यादृच्छिक डेटा में मिलाया जाना है।
[में] डेटा_लंबाई 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_chain_t *cert_chain)

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

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

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

keymaster_error_t (* start)(const struct keymaster2_device *dev, keymaster_purpose_t उद्देश्य, const keymaster_key_blob_t *key, const keymaster_key_param_set_t *in_params, keymaster_key_param_set_t *out_params, keymaster_operation_handle_t *operation_handle)

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

यह महत्वपूर्ण है कि कीमास्टर कार्यान्वयन को किसी भी आंतरिक संचालन स्थिति को साफ करने की अनुमति देने के लिए प्रत्येक कॉल को start () या abort() पर बाद की कॉल के साथ जोड़ा जाए। ऐसा करने में विफलता आंतरिक स्थिति स्थान या अन्य आंतरिक संसाधनों को लीक कर सकती है और अंततः प्रारंभ() को KM_ERROR_TOO_MANY_OPERATIONS वापस करने का कारण बन सकती है जब यह संचालन के लिए स्थान से बाहर हो जाती है। KM_ERROR_OK के अलावा start () , update() या finish() से कोई भी परिणाम परोक्ष रूप से ऑपरेशन को रोक देता है, इस स्थिति में abort() को कॉल करने की आवश्यकता नहीं है (और KM_ERROR_INVALID_OPERATION_HANDLE को कॉल करने पर वापस कर देगा)।

मापदंडों
[में] देव कीमास्टर डिवाइस संरचना।
[में] उद्देश्य संचालन का उद्देश्य, KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN या KM_PURPOSE_VERIFY में से एक। ध्यान दें कि AEAD मोड के लिए, एन्क्रिप्शन और डिक्रिप्शन का अर्थ क्रमशः हस्ताक्षर और सत्यापन है, लेकिन इसे KM_PURPOSE_ENCRYPT और KM_PURPOSE_DECRYPT के रूप में निर्दिष्ट किया जाना चाहिए।
[में] चाभी ऑपरेशन के लिए उपयोग की जाने वाली कुंजी। key का उद्देश्य purpose के अनुकूल होना चाहिए और इसकी सभी उपयोग आवश्यकताओं को पूरा किया जाना चाहिए, या start() एक उपयुक्त त्रुटि कोड लौटाएगा।
[में] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर। यह आमतौर पर KM_TAG_AUTH_TOKEN के साथ प्रमाणीकरण डेटा प्रदान करने के लिए उपयोग किया जाता है। यदि KM_TAG_APPLICATION_ID या KM_TAG_APPLICATION_DATA पीढ़ी के दौरान प्रदान किए गए थे, तो उन्हें यहां प्रदान किया जाना चाहिए, अन्यथा KM_ERROR_INVALID_KEY_BLOB के साथ संचालन विफल हो जाएगा। KM_TAG_CALLER_NONCE से जेनरेट की गई कुंजियों पर गैर या IV की आवश्यकता वाले संचालन के लिए, in_params में एक टैग KM_TAG_NONCE हो सकता है।
[बाहर] out_params आउटपुट पैरामीटर। ऑपरेशन इनिशियलाइज़ेशन से अतिरिक्त डेटा वापस करने के लिए उपयोग किया जाता है, विशेष रूप से IV या नॉन को ऑपरेशंस से वापस करने के लिए जो IV या नॉन उत्पन्न करता है। कॉलर आउटपुट पैरामीटर सरणी का स्वामित्व लेता है और इसे keymaster_free_param_set() से मुक्त करना होगा। यदि कोई आउटपुट पैरामीटर अपेक्षित नहीं है, तो out_params को NULL पर सेट किया जा सकता है। यदि out_params NULL है, और आउटपुट पैरामीटर उत्पन्न होते हैं, तो start () KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।
[बाहर] ऑपरेशन_हैंडल नव निर्मित ऑपरेशन हैंडल जिसे अपडेट() , फिनिश() या abort() पर पास किया जाना चाहिए। यदि ऑपरेशन_हैंडल शून्य है, तो प्रारंभ () KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।

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

संरचना hw_device_t आम

कीमास्टर डिवाइस के सामान्य तरीके। यह keymaster_device का पहला सदस्य होना चाहिए क्योंकि इस संरचना के उपयोगकर्ता एक hw_device_t को keymaster_device पॉइंटर पर ऐसे संदर्भों में कास्ट करेंगे जहां यह ज्ञात है कि 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_blob_t)

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

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

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

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

एक क्रिप्टोग्राफिक ऑपरेशन को अंतिम रूप देता है जो start () से शुरू होता है और ऑपरेशन_हैंडल को अमान्य operation_handle

मापदंडों
[में] देव कीमास्टर डिवाइस संरचना।
[में] ऑपरेशन_हैंडल ऑपरेशन हैंडल start () द्वारा लौटाया गया। यह हैंडल अमान्य हो जाएगा।
[में] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर। AEAD मोड के लिए, इसका उपयोग KM_TAG_ADDITIONAL_DATA को निर्दिष्ट करने के लिए किया जाता है, लेकिन केवल तभी जब अपडेट() को कोई इनपुट डेटा प्रदान नहीं किया गया हो।
[में] इनपुट डेटा को संसाधित किया जाना है, कॉल में स्थापित मापदंडों के अनुसार start()खत्म () को प्रदान किए गए सभी डेटा का उपभोग करना चाहिए या 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_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 निर्दिष्ट किए जाने चाहिए, जिनकी उन्हें आवश्यकता होती है।

निम्नलिखित टैग निर्दिष्ट नहीं हो सकते हैं; उनके मूल्य कार्यान्वयन द्वारा प्रदान किए जाएंगे।

  • केएम_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
मापदंडों
[में] देव कीमास्टर डिवाइस संरचना।
[में] पैरामीटर कुंजी पीढ़ी परम की सरणी
[बाहर] key_blob उत्पन्न कुंजी लौटाता है। key_blob NULL नहीं होना चाहिए। कॉलर स्वामित्व key_blob->key_material मानता है और इसे मुक्त() करना चाहिए।
[बाहर] विशेषताएँ गैर-शून्य होने पर उत्पन्न की गई कुंजी की विशेषताओं को लौटाता है। यदि गैर-नल, कॉलर स्वामित्व ग्रहण करता है और 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 की विशेषताओं को लौटाता है (कार्यान्वयन को कुंजी की अखंडता को पूरी तरह से सत्यापित करना चाहिए)। client_id और app_data कुंजी उत्पन्न या आयात होने पर प्रदान किया गया आईडी और डेटा होना चाहिए, या खाली होना चाहिए यदि KM_TAG_APPLICATION_ID और/या KM_TAG_APPLICATION_DATA पीढ़ी के दौरान प्रदान नहीं किए गए थे। वे मान लौटाई गई विशेषताओं में शामिल नहीं हैं। कॉलर आवंटित विशेषता ऑब्जेक्ट का स्वामित्व ग्रहण करता है, जिसे keymaster_free_characteristics() के साथ निपटाया जाना चाहिए।

ध्यान दें कि KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA कभी वापस नहीं किए जाते हैं।

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

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

keymaster_error_t (* import_key)(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_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 कुंजियों के लिए) में मान के लिए डिफ़ॉल्ट होगा

निम्नलिखित टैग निर्दिष्ट नहीं हो सकते हैं; उनके मूल्य कार्यान्वयन द्वारा प्रदान किए जाएंगे।

  • केएम_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
मापदंडों
[में] देव कीमास्टर डिवाइस संरचना।
[में] पैरामीटर आयातित कुंजी को परिभाषित करने वाले पैरामीटर।
[में] पैराम्स_काउंट params में प्रविष्टियों की संख्या।
[में] key_format key_data में मुख्य डेटा के प्रारूप को निर्दिष्ट करता है।
[बाहर] key_blob अपारदर्शी कुंजी बूँद को वापस करने के लिए उपयोग किया जाता है। गैर-शून्य होना चाहिए। कॉलर निहित key_material का स्वामित्व ग्रहण करता है।
[बाहर] विशेषताएँ आयातित कुंजी की विशेषताओं को वापस करने के लिए उपयोग किया जाता है। NULL हो सकता है, जिस स्थिति में कोई विशेषताएँ वापस नहीं की जाएंगी। यदि गैर-नल, कॉलर सामग्री का स्वामित्व ग्रहण करता है और उसे 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 Operation_handle , const keymaster_key_param_set_t *in_params, const keymaster_blob_t *इनपुट, size_t *input_consumed, keymaster_key_param_set_t *__ blob_t *output)

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

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

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

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

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

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

keymaster_error_t (* upgrade_key)(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_to_upgrad, const keymaster_key_param_set_t *upgrad_params, keymaster_key_blob_t *upgraded_key)

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

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

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


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