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

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

#include < keymaster1.h >

डेटा फ़ील्ड

struct hw_device_t   सामान्य
 
uint32_t  client_version
 
uint32_t  फ़्लैग
 
void *  context
 
int(*  generate_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 *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)
 
int(*  verify_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 signature_length)
 
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 algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length)
 
keymaster_error_t (*  get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length)
 
keymaster_error_t (*  get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length)
 
keymaster_error_t (*  get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)
 
keymaster_error_t (*  get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, 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 (*  generate_key )(const struct keymaster1_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 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 **characteristics)
 
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 **characteristics)
 
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 (*  begin )(const struct keymaster1_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 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 (*  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)
 
keymaster_error_t (*  abort )(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle)
 

पूरी जानकारी

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

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

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

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

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

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

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] डेटा रैंडम डेटा, जिसे मिक्स करना है.
[in] data_length data की लंबाई .

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

तय की गई कुंजी का इस्तेमाल करके, क्रिप्टोग्राफ़िक ऑपरेशन शुरू करता है. अगर सब कुछ ठीक है, तो 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 टैग हो सकता है. AEAD ऑपरेशन के लिए, KM_TAG_CHUNK_SIZE यहां दिया गया है.
[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 दिखाएगा.

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

uint32_t client_version

यह सुविधा अब काम नहीं करती. इसके बजाय, keymaster_module के शुरू होने के दौरान, नए "module_api_version" और "hal_api_version" फ़ील्ड का इस्तेमाल करें.

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

struct hw_device_t common

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

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

void* context

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

int(* delete_all)(const struct keymaster1_device *dev)
अब काम नहीं करता:
हार्डवेयर कीस्टोर में मौजूद सभी कुंजियों को मिटाता है. इसका इस्तेमाल तब किया जाता है, जब पासकोड पूरी तरह से रीसेट हो जाता है.

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

सही होने पर 0 दिखाता है या गड़बड़ी का कोड 0 से कम दिखाता है.

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

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

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

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

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

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

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

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

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

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

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

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
अब काम नहीं करता:
की ब्लॉब से जुड़े पासकोड का जोड़ा मिटाता है.

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

सही होने पर 0 दिखाता है या गड़बड़ी का कोड 0 से कम दिखाता है.

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

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)

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] export_format पासकोड एक्सपोर्ट करने के लिए इस्तेमाल किया जाने वाला फ़ॉर्मैट.
[in] key_to_export एक्सपोर्ट करने के लिए पासकोड.
[out] export_data एक्सपोर्ट किया गया पासकोड. कॉल करने वाले व्यक्ति को मालिकाना हक मिल जाता है.
[out] export_data_length export_data की लंबाई .

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

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

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

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

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

uint32_t फ़्लैग

keymaster_common.h में, keymaster0_devices::flags के लिए तय किए गए फ़्लैग देखें

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

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

पासकोड जनरेट करने वाले पैरामीटर को कीमास्टर टैग/वैल्यू पेयर के तौर पर तय किया जाता है. ये पैरामीटर, 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] पैरामीटर कुंजी जनरेट करने के पैरामीटर का कलेक्शन.
[in] params_count params की लंबाई .
[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 कभी नहीं दिखाए जाते.

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

int(* generate_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 से कम का गड़बड़ी कोड दिखाता है.

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

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 **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_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID, और KM_TAG_APPLICATION_DATA कभी नहीं दिखाए जाते.

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

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

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 को एलोकेट नहीं किया जाना चाहिए.

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

keymaster_error_t (* get_supported_algorithms)(const struct keymaster1_device *dev, keymaster_algorithm_t **algorithms, size_t *algorithms_length)

काम करने वाले एल्गोरिदम की जानकारी मिलती है.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[out] एल्गोरिदम इस्तेमाल किए जा सकने वाले एल्गोरिदम की सूची. कॉल करने वाले के पास ऐरे का मालिकाना हक होता है और उसे इसे free() करना होता है.
[out] algorithms_length algorithms की लंबाई .

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

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length)

बताए गए एल्गोरिदम के लिए, ब्लॉक मोड की जानकारी पाता है.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] एल्‍गोरि‍दम वह एल्गोरिदम जिसके लिए काम करने वाले मोड दिखाए जाएंगे.
[out] मोड काम करने वाले मोड की सूची. कॉलर के पास ऐरे का मालिकाना हक होता है और उसे free() करना होता है.
[out] modes_length modes की लंबाई .

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

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_digest_t **digests, size_t *digests_length)

बताए गए एल्गोरिदम के लिए काम करने वाले डाइजेस्ट पाता है. कॉलर, ऐलोकेट किए गए ऐरे का मालिकाना हक लेता है.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] एल्‍गोरि‍दम वह एल्गोरिदम जिसके लिए काम करने वाले डाइजेस्ट दिखाए जाएंगे.
[out] गतिविधि का ब्यौरा डाइजेस्ट का कलेक्शन इस्तेमाल किया जा सकता है. कॉल करने वाले के पास ऐरे का मालिकाना हक होता है और उसे इसे free() करना होता है.
[out] digests_length digests की लंबाई .

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

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)

यह फ़ंक्शन, एल्गोरिदम की कुंजियों के लिए काम करने वाले एक्सपोर्ट फ़ॉर्मैट दिखाता है. कॉलर, ऐलोकेट किए गए ऐरे का मालिकाना हक लेता है.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] एल्‍गोरि‍दम वह एल्गोरिदम जिसके लिए काम करने वाले फ़ॉर्मैट दिखाए जाएंगे.
[out] फ़ॉर्मैट इस्तेमाल किए जा सकने वाले फ़ॉर्मैट की सूची. कॉल करने वाले के पास ऐरे का मालिकाना हक होता है और उसे इसे free() करना होता है.
[out] formats_length formats की लंबाई .

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

keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_key_format_t **formats, size_t *formats_length)

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

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] एल्‍गोरि‍दम वह एल्गोरिदम जिसके लिए काम करने वाले फ़ॉर्मैट दिखाए जाएंगे.
[out] फ़ॉर्मैट इस्तेमाल किए जा सकने वाले फ़ॉर्मैट की सूची. कॉल करने वाले के पास ऐरे का मालिकाना हक होता है और उसे इसे free() करना होता है.
[out] formats_length formats की लंबाई .

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

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t algorithm, keymaster_purpose_t purpose, keymaster_padding_t **modes, size_t *modes_length)

बताए गए एल्गोरिदम के लिए, पैडिंग मोड की जानकारी देता है. कॉलर, ऐलोकेट किए गए ऐरे का मालिकाना हक लेता है.

पैरामीटर
[in] dev Keymaster डिवाइस का स्ट्रक्चर.
[in] एल्‍गोरि‍दम वह एल्गोरिदम जिसके लिए पैडिंग मोड काम करेंगे.
[out] मोड पैडिंग मोड का ऐरे काम करता है. कॉल करने वाले के पास ऐरे का मालिकाना हक होता है और उसे इसे free() करना होता है.
[out] modes_length modes की लंबाई .

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

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

ज़्यादातर अहम इंपोर्ट पैरामीटर, "पैरामीटर" में दिए गए कीमास्टर टैग/वैल्यू पेयर के तौर पर तय किए जाते हैं. पूरी सूची के लिए, 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_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID, और KM_TAG_APPLICATION_DATA कभी नहीं दिखाए जाते.

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

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)
अब काम नहीं करता:
सार्वजनिक और निजी पासकोड का जोड़ा इंपोर्ट करता है. इंपोर्ट की गई कुंजियां, DER एन्कोडिंग (Java स्टैंडर्ड) के साथ PKCS#8 फ़ॉर्मैट में होंगी. लौटाया गया पासकोड, ओपैक होता है. इसे बाद में, हस्ताक्षर करने और पुष्टि करने के लिए उपलब्ध कराया जाएगा.

यह फ़ंक्शन: सही होने पर 0 या 0 से कम का गड़बड़ी कोड दिखाता है.

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

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)
अब काम नहीं करता:
पहले जनरेट किए गए पासकोड का इस्तेमाल करके, डेटा पर हस्ताक्षर करता है. इसमें असिमेट्रिक कुंजी या सीक्रेट कुंजी का इस्तेमाल किया जा सकता है.

यह फ़ंक्शन: सही होने पर 0 या 0 से कम का गड़बड़ी कोड दिखाता है.

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

keymaster_error_t (* update)(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 अमान्य है, तो 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() करना चाहिए.

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

int(* verify_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 signature_length)
अब काम नहीं करता:
कुंजी-ब्लॉब से हस्ताक्षर किए गए डेटा की पुष्टि करता है. इसमें असिमेट्रिक कुंजी या सीक्रेट कुंजी का इस्तेमाल किया जा सकता है.

यह वैल्यू दिखाता है: पुष्टि होने पर 0 या 0 से कम गड़बड़ी कोड.

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


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