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

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

#include < keymaster1.h >

डेटा फ़ील्ड

संरचना hw_device_t सामान्य
uint32_t client_version
uint32_t झंडे
खालीपन * प्रसंग
पूर्णांक(* 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)
पूर्णांक(* आयात_कीजोड़ी )(स्थिरांक संरचना keymaster1_device *dev, स्थिरांक uint8_t *कुंजी, स्थिरांक आकार_t key_length, uint8_t **key_blob, आकार_t *key_blob_length)
पूर्णांक(* 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)
पूर्णांक(* delete_keypair )(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
पूर्णांक(* delete_all )(const struct keymaster1_device *dev)
पूर्णांक(* साइन_डेटा )(स्थिरांक संरचना keymaster1_device *dev, स्थिरांक शून्य *signing_params, स्थिरांक uint8_t *key_blob, स्थिरांक आकार_t key_blob_length, स्थिरांक uint8_t *डेटा, स्थिरांक आकार_t डेटा_लंबाई, uint8_t **signed_data, आकार_t *signed_data_length)
पूर्णांक(* सत्यापित_डेटा )(स्थिरांक संरचना keymaster1_device *dev, स्थिरांक शून्य *signing_params, स्थिरांक uint8_t *key_blob, स्थिरांक आकार_t key_blob_length, स्थिरांक uint8_t *signed_data, स्थिरांक आकार_t हस्ताक्षरित_डेटा_लंबाई, स्थिरांक uint8_t *हस्ताक्षर, स्थिरांक आकार_t हस्ताक्षर_लंबाई)
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 एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_block_mode_t **मोड, size_t *modes_length)
keymaster_error_t (* get_supported_padding_modes )(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_padding_t **मोड, size_t *modes_length)
keymaster_error_t (* get_supported_digests )(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_digest_t **digests, size_t *digests_length)
keymaster_error_t (* get_supported_import_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_key_format_t **प्रारूप, size_t *formats_length)
keymaster_error_t (* get_supported_export_formats )(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_key_format_t **प्रारूप, 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 **विशेषताएं)
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 **विशेषताएं)
keymaster_error_t (* आयात_कुंजी )(स्थिरांक संरचना keymaster1_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 (* एक्सपोर्ट_की )(कॉन्स्ट स्ट्रक्चर कीमास्टर1_डिवाइस *डेव, कीमास्टर_की_फॉर्मेट_टी एक्सपोर्ट_फॉर्मेट, कॉन्स्ट कीमास्टर_की_ब्लॉब_टी *की_टू_एक्सपोर्ट, कॉन्स्ट कीमास्टर_ब्लॉब_टी *क्लाइंट_आईडी, कॉन्स्ट कीमास्टर_ब्लॉब_टी *एप_डेटा, कीमास्टर_ब्लॉब_टी *एक्सपोर्ट_डेटा)
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 (* प्रारंभ )(कॉन्स्ट स्ट्रक्चर कीमास्टर1_डिवाइस *देव, कीमास्टर_प्रयोजन_टी उद्देश्य, कास्ट कीमास्टर_की_ब्लॉब_टी *की, कास्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कीमास्टर_की_परम_सेट_टी *आउट_पैराम्स, कीमास्टर_ऑपरेशन_हैंडल_टी *ऑपरेशन_हैंडल)
keymaster_error_t (* अपडेट )(कॉन्स्ट स्ट्रक्चर कीमास्टर1_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल, कॉन्स्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *इनपुट, साइज_टी *इनपुट_कंस्यूम्ड, कीमास्टर_की_परम_सेट_टी *आउट_पैरम्स, कीमास्टर_ब्लॉब_टी *आउटपुट)
keymaster_error_t (* ख़त्म )(कॉन्स्ट स्ट्रक्चर कीमास्टर1_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल, कॉन्स्ट कीमास्टर_की_परम_सेट_टी *इन_पैराम्स, कॉन्स्ट कीमास्टर_ब्लॉब_टी *सिग्नेचर, कीमास्टर_की_परम_सेट_टी *आउट_पैरम्स, कीमास्टर_ब्लॉब_टी *आउटपुट)
keymaster_error_t (* निरस्त करें )(कॉन्स्ट स्ट्रक्चर कीमास्टर1_डिवाइस *डेव, कीमास्टर_ऑपरेशन_हैंडल_टी ऑपरेशन_हैंडल)

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

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

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

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

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

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

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

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

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

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

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

keymaster_error_t (* प्रारंभ)(const struct keymaster1_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 हो सकता है। AEAD संचालन के लिए KM_TAG_CHUNK_SIZE यहां निर्दिष्ट है।
[बाहर] out_params आउटपुट पैरामीटर. ऑपरेशन आरंभीकरण से अतिरिक्त डेटा वापस करने के लिए उपयोग किया जाता है, विशेष रूप से IV या नॉन उत्पन्न करने वाले ऑपरेशन से IV या नॉन वापस करने के लिए। कॉल करने वाला आउटपुट पैरामीटर सरणी का स्वामित्व लेता है और इसे keymaster_free_param_set() से मुक्त करना होगा। यदि कोई आउटपुट पैरामीटर अपेक्षित नहीं है तो out_params को NULL पर सेट किया जा सकता है। यदि out_params शून्य है, और आउटपुट पैरामीटर उत्पन्न होते हैं, तो प्रारंभ() KM_ERROR_OUTPUT_PARAMETER_NULL लौटाएगा।
[बाहर] ऑपरेशन_हैंडल नव-निर्मित ऑपरेशन हैंडल जिसे अपडेट() , फिनिश() या एबॉर्ट() में पास किया जाना चाहिए। यदि ऑपरेशन_हैंडल शून्य है, तो प्रारंभ() 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 सामान्य

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

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

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

फ़ाइल 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 पर सेट किया जाना चाहिए।

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

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

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

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

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

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

फ़ाइल 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)

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

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] निर्यात_प्रारूप कुंजी निर्यात करने के लिए उपयोग किया जाने वाला प्रारूप.
[में] key_to_export निर्यात करने की कुंजी.
[बाहर] निर्यात जानकारी निर्यात की गई प्रमुख सामग्री। कॉल करने वाला स्वामित्व ग्रहण करता है.
[बाहर] निर्यात_डेटा_लंबाई export_data की लंबाई।

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

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

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

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

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

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

uint32_t झंडे

keymaster0_devices::flags के लिए keymaster_common.h में परिभाषित झंडे देखें

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

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 **विशेषताएँ)

एक कुंजी, या कुंजी युग्म उत्पन्न करता है, एक कुंजी ब्लॉब और/या कुंजी का विवरण लौटाता है।

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

फ़ाइल 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 **विशेषताएं)

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

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

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

फ़ाइल 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 प्रारूप (जावा मानक) एन्कोडेड बाइट सरणी में होनी चाहिए।

रिटर्न: सफलता पर 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)

एल्गोरिदम समर्थित हो जाता है.

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[बाहर] एल्गोरिदम एल्गोरिदम की श्रृंखला समर्थित. कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] एल्गोरिदम_लंबाई algorithms की लंबाई.

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

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_block_mode_t **मोड, size_t * modes_length)

निर्दिष्ट एल्गोरिदम के लिए समर्थित ब्लॉक मोड प्राप्त करता है।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] कलन विधि वह एल्गोरिदम जिसके लिए समर्थित मोड लौटाए जाएंगे.
[बाहर] मोड समर्थित मोड की श्रृंखला. कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] modes_length modes की लंबाई.

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

keymaster_error_t (* get_supported_digests)(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_digest_t **digests, size_t *digests_length)

निर्दिष्ट एल्गोरिदम के लिए समर्थित डाइजेस्ट प्राप्त करता है। कॉल करने वाला आवंटित सरणी का स्वामित्व ग्रहण करता है।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] कलन विधि वह एल्गोरिदम जिसके लिए समर्थित डाइजेस्ट वापस किया जाएगा।
[बाहर] डाइजेस्ट डाइजेस्ट की श्रृंखला समर्थित. कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] डाइजेस्ट_लेंथ digests की लंबाई.

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

keymaster_error_t (* get_supported_export_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_key_format_t **प्रारूप, size_t *formats_length)

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

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] कलन विधि वह एल्गोरिदम जिसके लिए समर्थित प्रारूप लौटाए जाएंगे.
[बाहर] प्रारूप समर्थित प्रारूपों की श्रृंखला. कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] प्रारूप_लंबाई formats की लंबाई.

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

keymaster_error_t (* get_supported_import_formats)(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_key_format_t **प्रारूप, size_t *formats_length)

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

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] कलन विधि वह एल्गोरिदम जिसके लिए समर्थित प्रारूप लौटाए जाएंगे.
[बाहर] प्रारूप समर्थित प्रारूपों की श्रृंखला. कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] प्रारूप_लंबाई formats की लंबाई.

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

keymaster_error_t (* get_supported_padding_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t एल्गोरिदम, keymaster_purpose_t उद्देश्य, keymaster_padding_t **मोड, size_t * modes_length)

निर्दिष्ट एल्गोरिदम के लिए समर्थित पैडिंग मोड प्राप्त करता है। कॉल करने वाला आवंटित सरणी का स्वामित्व ग्रहण करता है।

पैरामीटर
[में] देव कीमास्टर डिवाइस संरचना.
[में] कलन विधि वह एल्गोरिदम जिसके लिए समर्थित पैडिंग मोड लौटाए जाएंगे।
[बाहर] मोड पैडिंग मोड की श्रृंखला समर्थित। कॉल करने वाला सरणी का स्वामित्व लेता है और उसे इसे free() करना होगा।
[बाहर] modes_length modes की लंबाई.

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

keymaster_error_t (* आयात_कुंजी)(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 **विशेषताएँ)

एक कुंजी, या कुंजी जोड़ी आयात करता है, एक कुंजी ब्लॉब और/या कुंजी का विवरण लौटाता है।

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

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

int(* आयात_कीजोड़ी)(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 प्रारूप में होंगी। लौटाया गया की-ब्लॉब अपारदर्शी है और बाद में हस्ताक्षर और सत्यापन के लिए प्रदान किया जाएगा।

रिटर्न: सफलता पर 0 या त्रुटि कोड 0 से कम।

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

int(* साइन_डेटा)(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 (* अपडेट)(const struct keymaster1_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 या शून्य-लेंथ हो सकता है (इसलिए कॉल करने वाले को इसे हमेशा फ्री() करना चाहिए)।

फ़ाइल 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_tsigned_data_length, const uint8_t *signature, const size_tsignature_length)
बहिष्कृत:
की-ब्लॉब से हस्ताक्षरित डेटा को सत्यापित करता है। इसमें या तो असममित कुंजी या गुप्त कुंजी का उपयोग किया जा सकता है।

रिटर्न: सफल सत्यापन पर 0 या त्रुटि कोड 0 से कम।

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


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