keymaster2_device स्ट्रक्चर का रेफ़रंस

keymaster2_device स्ट्रक्चर का रेफ़रंस

#include < keymaster2.h >

डेटा फ़ील्ड

struct hw_device_t   सामान्य
 
void *  context
 
uint32_t  फ़्लैग
 
keymaster_error_t (*  configure )(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 *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 *characteristics)
 
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 *characteristics)
 
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 (*  upgrade_key )(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 *upgraded_key)
 
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 (*  begin )(const struct keymaster2_device *dev, keymaster_purpose_t purpose, 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 (*  update )(const struct keymaster2_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 (*  finish )(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle, 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 *output)
 
keymaster_error_t (*  abort )(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle)
 

पूरी जानकारी

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

परिभाषा, keymaster2.h की फ़ाइल के 28 पंक्ति पर दी गई है.

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

begin() के साथ शुरू किए गए क्रिप्टोग्राफ़ी ऑपरेशन को बंद करता है. इससे सभी इंटरनल संसाधन खाली हो जाते हैं और operation_handle अमान्य हो जाता है.

परिभाषा, keymaster2.h फ़ाइल की लाइन 415 पर दी गई है.

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

यह keymaster के इस्तेमाल किए गए आरएनजी में एन्ट्रोपी जोड़ता है. इस तरीके से जोड़ा गया एन्ट्रोपी, एन्ट्रोपी का इस्तेमाल करने का एकमात्र सोर्स नहीं है. साथ ही, मिक्सिंग फ़ंक्शन को सुरक्षित होना चाहिए. इसका मतलब है कि अगर आरएनजी को किसी भी सोर्स से किसी ऐसे डेटा से सीड किया जाता है जिसका अनुमान हमलावर नहीं लगा सकता (या कंट्रोल नहीं कर सकता), तो आरएनजी का आउटपुट, रैंडम से अलग नहीं होता. इसलिए, अगर किसी सोर्स का एन्ट्रापी अच्छा है, तो आउटपुट भी अच्छा होगा.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] डेटा रैंडम डेटा, जिसे मिक्स करना है.
[in] 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_chain_t *cert_chain)

यह साइन किया गया X.509 सर्टिफ़िकेट चेन जनरेट करता है, जो यह पुष्टि करता है कि key_to_attest keymaster में मौजूद है (TODO(swillden): सर्टिफ़िकेट के कॉन्टेंट के बारे में ज़्यादा जानकारी दें). सर्टिफ़िकेट में OID 1.3.6.1.4.1.11129.2.1.17 वाला एक्सटेंशन और <TODO:swillden – insert link here> में बताई गई वैल्यू होगी. इसमें कुंजी की जानकारी होगी.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] key_to_attest वह पासकोड जिसकी पुष्टि करने के लिए सर्टिफ़िकेट जनरेट किया जाएगा.
[in] attest_params पुष्टि करने का तरीका बताने वाले पैरामीटर. फ़िलहाल, सिर्फ़ KM_TAG_ALGORITHM पैरामीटर है. इसकी वैल्यू, KM_ALGORITHM_EC या KM_ALGORITHM_RSA होनी चाहिए. इससे यह चुना जाता है कि सर्टिफ़िकेट पर हस्ताक्षर करने के लिए, पुष्टि करने वाली कौनसी कुंजी का इस्तेमाल किया जाएगा.
[out] cert_chain DER-कोड में बदले गए X.509 सर्टिफ़िकेट का कलेक्शन. पहला सर्टिफ़िकेट, key_to_attest के लिए होगा . बाकी एंट्री, रूट पर वापस चैनल हो जाएंगी. कॉलर, मालिकाना हक लेता है और उसे keymaster_free_cert_chain की मदद से डिलीकेट करना होगा.

परिभाषा, keymaster2.h फ़ाइल की लाइन 239 पर दी गई है.

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

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] मकसद कार्रवाई का मकसद, KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN या KM_PURPOSE_VERIFY में से कोई एक. ध्यान दें कि AEAD मोड के लिए, एन्क्रिप्शन और डिक्रिप्शन का मतलब है, हस्ताक्षर करना और पुष्टि करना. हालांकि, इन्हें KM_PURPOSE_ENCRYPT और KM_PURPOSE_DECRYPT के तौर पर बताया जाना चाहिए.
[in] कुंजी ऑपरेशन के लिए इस्तेमाल की जाने वाली कुंजी. key का मकसद, purpose के साथ काम करना चाहिए और उसका इस्तेमाल करने से जुड़ी सभी ज़रूरी शर्तें पूरी होनी चाहिए. ऐसा न होने पर, begin() गड़बड़ी का सही कोड दिखाएगा.
[in] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर. आम तौर पर, इसका इस्तेमाल KM_TAG_AUTH_TOKEN के साथ पुष्टि करने वाला डेटा देने के लिए किया जाता है. अगर जनरेट करने के दौरान KM_TAG_APPLICATION_ID या KM_TAG_APPLICATION_DATA दिया गया था, तो उन्हें यहां भी देना होगा. ऐसा न करने पर, KM_ERROR_INVALID_KEY_BLOB की गड़बड़ी का मैसेज दिखेगा. जिन ऑपरेशन के लिए नॉन्स या आईवी की ज़रूरत होती है उनके लिए, KM_TAG_CALLER_NONCE से जनरेट की गई कुंजियों पर, in_params में KM_TAG_NONCE टैग हो सकता है.
[out] out_params आउटपुट पैरामीटर. इसका इस्तेमाल, ऑपरेशन शुरू करने से जुड़ा अतिरिक्त डेटा दिखाने के लिए किया जाता है. खास तौर पर, IV या नॉन्स जनरेट करने वाले ऑपरेशन से IV या नॉन्स दिखाने के लिए. कॉलर, आउटपुट पैरामीटर कलेक्शन का मालिकाना हक लेता है और उसे keymaster_free_param_set() के साथ रिलीज़ करना चाहिए . अगर कोई आउटपुट पैरामीटर नहीं है, तो out_params को NULL पर सेट किया जा सकता है. अगर out_params शून्य है और आउटपुट पैरामीटर जनरेट किए जाते हैं, तो begin() KM_ERROR_OUTPUT_PARAMETER_NULL दिखाएगा.
[out] operation_handle नया ऑपरेशन हैंडल, जिसे update() , finish() या abort() को पास करना होगा. अगर operation_handle शून्य है, तो begin() KM_ERROR_OUTPUT_PARAMETER_NULL दिखाएगा.

परिभाषा, keymaster2.h फ़ाइल की लाइन 332 पर दी गई है.

struct hw_device_t common

कीमास्टर डिवाइस के सामान्य तरीके. यह keymaster_device का पहला सदस्य होना चाहिए, क्योंकि इस स्ट्रक्चर के उपयोगकर्ता, ऐसे कॉन्टेक्स्ट में keymaster_device पॉइंटर पर hw_device_t कास्ट करेंगे जहां यह पता चलता है कि hw_device_t एक keymaster_device का रेफ़रंस देता है.

परिभाषा, keymaster2.h फ़ाइल की लाइन 35 पर दी गई है.

keymaster_error_t (* configure)(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)

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

अगर पासकोड मैनेजर को सुरक्षित हार्डवेयर में लागू किया गया है और दिए गए ओएस वर्शन और पैच लेवल की वैल्यू, बूटलोडर से सुरक्षित हार्डवेयर को दी गई वैल्यू से मेल नहीं खाती हैं या बूटलोडर ने वैल्यू नहीं दी हैं, तो यह तरीका KM_ERROR_INVALID_ARGUMENT दिखाएगा. साथ ही, अन्य सभी तरीके KM_ERROR_KEYMASTER_NOT_CONFIGURED दिखाते रहेंगे.

परिभाषा, keymaster2.h फ़ाइल की लाइन 58 पर दी गई है.

void* context

परिभाषा, keymaster2.h फ़ाइल की लाइन 37 पर दी गई है.

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

हार्डवेयर कीस्टोर में मौजूद सभी कुंजियों को मिटा देता है. इसका इस्तेमाल तब किया जाता है, जब पासकोड पूरी तरह से रीसेट हो जाता है. इस फ़ंक्शन को कॉल करने के बाद, किसी भी कार्रवाई के लिए पहले से जनरेट किए गए या इंपोर्ट किए गए किसी भी पासकोड ब्लॉब का इस्तेमाल नहीं किया जा सकेगा.

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.

परिभाषा, keymaster2.h फ़ाइल की लाइन 288 पर दी गई है.

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

पासकोड ब्लॉब से जुड़ी कुंजी या पासकोड का जोड़ा मिटाता है. इस फ़ंक्शन को कॉल करने के बाद, किसी अन्य ऑपरेशन के लिए पासकोड का इस्तेमाल नहीं किया जा सकेगा. इसे किसी दूसरे देश के भरोसेमंद सोर्स की कुंजियों पर लागू किया जा सकता है. ये कुंजियां, भरोसेमंद सोर्स के मौजूदा सोर्स के तहत इस्तेमाल नहीं की जा सकतीं.

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] कुंजी वह पासकोड जिसे मिटाना है.

परिभाषा, 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 के साथ बनाया गया हो. साथ ही, पासकोड के इस्तेमाल से जुड़ी सभी ज़रूरी शर्तें (जैसे, पुष्टि) पूरी की गई हों.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] export_format पासकोड एक्सपोर्ट करने के लिए इस्तेमाल किया जाने वाला फ़ॉर्मैट.
[in] key_to_export एक्सपोर्ट करने के लिए पासकोड.
[in] client_id क्लाइंट आईडी ब्लॉब, जो पासकोड जनरेट करने के दौरान KM_TAG_APPLICATION_ID में दिए गए ब्लॉब से मेल खाना चाहिए (अगर कोई हो).
[in] app_data ऐप्लिकेशन डेटा ब्लॉब, जो पासकोड जनरेट करने के दौरान KM_TAG_APPLICATION_DATA में दिए गए ब्लॉब से मेल खाना चाहिए (अगर कोई हो).
[out] export_data एक्सपोर्ट किया गया पासकोड. कॉल करने वाले व्यक्ति को मालिकाना हक मिल जाता है.

परिभाषा, फ़ाइल keymaster2.h की लाइन 213 पर दी गई है.

begin() से शुरू की गई क्रिप्टोग्राफ़िक प्रोसेस को पूरा करता है और operation_handle को अमान्य कर देता है .

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] operation_handle begin() से मिला ऑपरेशन हैंडल. इस हैंडल को अमान्य कर दिया जाएगा.
[in] in_params ऑपरेशन के लिए अतिरिक्त पैरामीटर. AEAD मोड के लिए, इसका इस्तेमाल KM_TAG_ADDITIONAL_DATA की जानकारी देने के लिए किया जाता है. हालांकि, ऐसा सिर्फ़ तब किया जाता है, जब update() के लिए कोई इनपुट डेटा न दिया गया हो .
[in] इनपुट begin() के कॉल में तय किए गए पैरामीटर के मुताबिक, प्रोसेस किया जाने वाला डेटा . finish() को दिए गए सभी डेटा का इस्तेमाल करना चाहिए या KM_ERROR_INVALID_INPUT_LENGTH दिखाना चाहिए.
[in] हस्ताक्षर अगर begin() कॉल में KM_PURPOSE_VERIFY के तौर पर मकसद बताया गया है, तो इस हस्ताक्षर की पुष्टि की जाएगी.
[out] output आउटपुट डेटा, अगर कोई है. कॉल करने वाले के पास, असाइन किए गए बफ़र का मालिकाना हक होता है.

अगर पूरा किया जा रहा ऑपरेशन, हस्ताक्षर की पुष्टि या AEAD-मोड में डिक्रिप्ट करने का है और पुष्टि नहीं हो पाती है, तो finish() KM_ERROR_VERIFICATION_FAILED दिखाएगा.

परिभाषा, keymaster2.h फ़ाइल की लाइन 405 पर दी गई है .

uint32_t फ़्लैग

keymaster_common.h में, keymaster0_devices::flags के लिए तय किए गए फ़्लैग देखें. इसका इस्तेमाल सिर्फ़ पुराने सिस्टम के साथ काम करने की सुविधा के लिए किया जाता है. keymaster2 हार्डवेयर डिवाइसों को इसे शून्य पर सेट करना होगा.

परिभाषा, keymaster2.h फ़ाइल की लाइन 43 पर दी गई है.

यह कुंजी या कुंजी पेयर जनरेट करता है. साथ ही, कुंजी का ब्लॉब और/या कुंजी की जानकारी दिखाता है.

पासकोड जनरेट करने वाले पैरामीटर को कीमास्टर टैग/वैल्यू पेयर के तौर पर तय किया जाता है. ये पैरामीटर, 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
पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] पैरामीटर पासकोड जनरेट करने के पैरामीटर का कलेक्शन
[out] key_blob जनरेट की गई कुंजी दिखाता है. key_blob की वैल्यू NULL नहीं होनी चाहिए. कॉलर, key_blob->key_material का मालिकाना हक लेता है और उसे free() करना होगा.
[out] खास बातें अगर वैल्यू NULL नहीं है, तो जनरेट की गई कुंजी की विशेषताओं को दिखाता है. अगर यह वैल्यू शून्य नहीं है, तो कॉलर के पास मालिकाना हक होता है और उसे 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 *characteristics)

यह फ़ंक्शन, बताई गई कुंजी की विशेषताओं को दिखाता है. अगर 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 कभी नहीं दिखाए जाते.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] key_blob इसकी मदद से, प्रॉडक्ट की विशेषताओं को वापस पाया जा सकता है.
[in] client_id क्लाइंट आईडी का डेटा या अगर कोई नहीं है, तो NULL.
[in] app_id ऐप्लिकेशन का डेटा या अगर कोई डेटा नहीं है, तो NULL.
[out] खास बातें मुख्य विशेषताएं. यह वैल्यू NULL नहीं होनी चाहिए. कॉलर के पास कॉन्टेंट का मालिकाना हक होता है. साथ ही, उसे keymaster_free_characteristics() के साथ डिएलोकेट करना होगा .

परिभाषा, keymaster2.h फ़ाइल की लाइन 139 पर दी गई है.

यह कुंजी या कुंजी जोड़े को इंपोर्ट करता है. साथ ही, कुंजी का ब्लॉब और/या कुंजी की जानकारी दिखाता है.

ज़्यादातर अहम इंपोर्ट पैरामीटर, "पैरामीटर" में दिए गए कीमास्टर टैग/वैल्यू पेयर के तौर पर तय किए जाते हैं. पूरी सूची के लिए, 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, आरएसए कुंजियों के लिए दी गई कुंजी की वैल्यू पर डिफ़ॉल्ट रूप से सेट हो जाएगा

नीचे दिए गए टैग की वैल्यू नहीं दी जा सकतीं. इन्हें लागू करने पर, उनकी वैल्यू अपने-आप मिल जाएंगी.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] पैरामीटर इंपोर्ट की गई कुंजी की जानकारी देने वाले पैरामीटर.
[in] params_count params में मौजूद एंट्री की संख्या .
[in] key_format key_data में मौजूद मुख्य डेटा का फ़ॉर्मैट तय करता है.
[out] key_blob इसका इस्तेमाल, ओपेक पासकोड ब्लॉब को दिखाने के लिए किया जाता है. यह वैल्यू NULL नहीं होनी चाहिए. कॉल करने वाले व्यक्ति के पास, उसमें मौजूद key_material का मालिकाना हक होता है.
[out] खास बातें इंपोर्ट की गई कुंजी की विशेषताओं को दिखाने के लिए इस्तेमाल किया जाता है. यह शून्य हो सकता है. ऐसे में, कोई विशेषता नहीं दिखाई जाएगी. अगर यह वैल्यू शून्य नहीं है, तो कॉलर के पास कॉन्टेंट का मालिकाना हक होता है. साथ ही, उसे keymaster_free_characteristics() के साथ डिएलोकेट करना होगा . ध्यान दें कि KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA कभी नहीं दिखाए जाते.

परिभाषा, keymaster2.h फ़ाइल की लाइन 186 पर दी गई है.

keymaster_error_t (* update)(const struct keymaster2_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 अमान्य है, तो update() KM_ERROR_INVALID_OPERATION_HANDLE दिखाएगा.

ऐसा हो सकता है कि update() डेटा बफ़र में दिए गए सारे डेटा का इस्तेमाल न करे. update() *data_consumed में, खर्च किए गए डेटा की जानकारी दिखेगी. कॉल करने वाले को अगले कॉल में, इस्तेमाल नहीं किया गया डेटा देना चाहिए.

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

ध्यान दें कि update() कोई आउटपुट नहीं दे सकता. ऐसे में, output->data_length शून्य हो जाएगा और output->data शून्य या शून्य लंबाई का हो सकता है. इसलिए, कॉलर को हमेशा इसे free() करना चाहिए.

परिभाषा, फ़ाइल keymaster2.h की लाइन 376 पर दी गई है .

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

किसी पुरानी कुंजी को अपग्रेड करता है. पासकोड दो तरीकों से "पुराने" हो सकते हैं: Keymaster को नए वर्शन पर अपग्रेड किया जा सकता है या सिस्टम को अपडेट किया जा सकता है, ताकि ओएस वर्शन और/या पैच लेवल अमान्य हो जाए. दोनों ही मामलों में, किसी पुरानी कुंजी का इस्तेमाल करने पर, Keymaster KM_ERROR_KEY_REQUIRES_UPGRADE को दिखाएगा. इसके बाद, पासकोड को अपग्रेड करने के लिए इस तरीके को कॉल किया जाना चाहिए.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] key_to_upgrade अपग्रेड की जानी वाली Keymaster पासकोड.
[in] upgrade_params अपग्रेड पूरा करने के लिए ज़रूरी पैरामीटर. खास तौर पर, अगर कुंजी के लिए KM_TAG_APPLICATION_ID और KM_TAG_APPLICATION_DATA तय किए गए हैं, तो उन्हें शामिल करना ज़रूरी होगा.
[out] upgraded_key अपग्रेड किया गया पासकोड ब्लॉब.

परिभाषा, keymaster2.h फ़ाइल की लाइन 260 पर दी गई है.


इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था: