keymaster2_device স্ট্রাকট রেফারেন্স

keymaster2_device স্ট্রাকট রেফারেন্স

#include < keymaster2.h >

ডেটা ক্ষেত্র

struct hw_device_t সাধারণ
অকার্যকর * প্রসঙ্গ
uint32_t পতাকা
keymaster_error_t (* কনফিগার করুন )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params)
keymaster_error_t (* add_rng_entropy )(const struct keymaster2_device *dev, const uint8_t *ডেটা, size_t ডেটা_দৈর্ঘ্য)
keymaster_error_t (* generate_key )(const struct keymaster2_device *dev, const keymaster_key_param_set_t *params, keymaster_key_blob_t *key_blob, keymaster_key_characteristics_t *বৈশিষ্ট্য)
keymaster_error_t (* get_key_characteristics )(const struct keymaster2_device *dev, const keymaster_key_blob_t *key_blob, const keymaster_blob_t *client_id, const keymaster_blob_t *app_data, keymaster_key_characteristics_t * বৈশিষ্ট্য)
keymaster_error_t (* 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_ *
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 *
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 *কী)
keymaster_error_t (* delete_all_keys )(const struct keymaster2_device *dev)
keymaster_error_t (* শুরু )(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 (* আপডেট )(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 *out_blobt কী * out_blob_t ,
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 *ইনপুট, const keymaster_blob_t *স্বাক্ষর, keymaster_key_param_blob_t *স্বাক্ষর, keymaster_key_param_blob_t *_আউট কী_আউট
keymaster_error_t (* abort )(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle)

বিস্তারিত বিবরণ

Keymaster2 ডিভাইসের সংজ্ঞা

ফাইল keymaster2.h এর 28 লাইনে সংজ্ঞা।

ফিল্ড ডকুমেন্টেশন

keymaster_error_t (* abort)(const struct keymaster2_device *dev, keymaster_operation_handle_t operation_handle)

একটি ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপ বাতিল করে যা begin() দিয়ে শুরু হয়, সমস্ত অভ্যন্তরীণ সংস্থান মুক্ত করে এবং operation_handle অবৈধ করে।

ফাইল keymaster2.h এর 415 লাইনে সংজ্ঞা।

keymaster_error_t (* add_rng_entropy)(const struct keymaster2_device *dev, const uint8_t *ডেটা, size_t ডেটা_দৈর্ঘ্য)

কীমাস্টার দ্বারা ব্যবহৃত 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)

একটি স্বাক্ষরিত X.509 শংসাপত্রের চেইন তৈরি করে যা কীমাস্টারে key_to_attest এর উপস্থিতি প্রমাণ করে (TODO(swillden): আরও বিস্তারিতভাবে শংসাপত্রের বিষয়বস্তু বর্ণনা করুন)। শংসাপত্রে OID 1.3.6.1.4.1.11129.2.1.17 সহ একটি এক্সটেনশন থাকবে এবং <TODO:swillden – insert link here> এর মধ্যে সংজ্ঞায়িত মান থাকবে যার মূল বিবরণ রয়েছে।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] কী_প্রত্যয়িত কীমাস্টার কী যার জন্য প্রত্যয়ন শংসাপত্র তৈরি করা হবে।
[ভিতরে] attest_params কিভাবে প্রত্যয়ন করতে হবে তা নির্ধারণকারী পরামিতি। বর্তমানে একমাত্র প্যারামিটারটি হল KM_TAG_ALGORITHM, যা অবশ্যই KM_ALGORITHM_EC বা KM_ALGORITHM_RSA হতে হবে৷ এটি শংসাপত্রে স্বাক্ষর করার জন্য প্রবিধানকৃত প্রত্যয়ন কীগুলির মধ্যে কোনটি ব্যবহার করা হবে তা নির্বাচন করে৷
[আউট] cert_chain DER-এনকোড করা X.509 শংসাপত্রের একটি অ্যারে৷ প্রথমটি হবে key_to_attest এর সার্টিফিকেট। অবশিষ্ট এন্ট্রি রুট ফিরে চেইন হবে. কলার মালিকানা নেয় এবং অবশ্যই keymaster_free_cert_chain এর সাথে ডিলকেট করতে হবে।

ফাইল keymaster2.h এর 239 লাইনে সংজ্ঞা।

নির্দিষ্ট কী ব্যবহার করে একটি ক্রিপ্টোগ্রাফিক অপারেশন শুরু করে। সবকিছু ঠিক থাকলে, begin() KM_ERROR_OK ফেরত দেবে এবং একটি অপারেশন হ্যান্ডেল তৈরি করবে যা আপডেট() , finish() বা abort() করার জন্য পরবর্তী কলগুলিতে পাস করতে হবে।

এটা গুরুত্বপূর্ণ যে প্রতিটি কল to begin() পরবর্তী কল to finish() অথবা abort() এর সাথে যুক্ত করা হবে, যাতে কী-মাস্টার বাস্তবায়ন কোন অভ্যন্তরীণ অপারেশন অবস্থা পরিষ্কার করতে পারে। এটি করতে ব্যর্থ হলে অভ্যন্তরীণ স্টেট স্পেস বা অন্যান্য অভ্যন্তরীণ সংস্থান লিক হতে পারে এবং শেষ পর্যন্ত start() কে KM_ERROR_TOO_MANY_OPERATIONS ফেরত দিতে পারে যখন এটি অপারেশনের জন্য স্থান ফুরিয়ে যায়। KM_ERROR_OK থেকে শুরু () , 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 সাথে সামঞ্জস্যপূর্ণ একটি উদ্দেশ্য থাকতে হবে এবং এর ব্যবহারের সমস্ত প্রয়োজনীয়তা অবশ্যই সন্তুষ্ট হতে হবে, অথবা begin() একটি উপযুক্ত ত্রুটি কোড ফিরিয়ে দেবে।
[ভিতরে] 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 হয়, এবং আউটপুট প্যারামেটার তৈরি করা হয়, begin() KM_ERROR_OUTPUT_PARAMETER_NULL প্রদান করবে।
[আউট] অপারেশন_হ্যান্ডেল নতুন-তৈরি অপারেশন হ্যান্ডেল যা আপডেট() , finish() বা abort() এ পাস করতে হবে। অপারেশন_হ্যান্ডেল শূন্য হলে, start() KM_ERROR_OUTPUT_PARAMETER_NULL ফেরত দেবে।

ফাইল keymaster2.h এর 332 লাইনে সংজ্ঞা।

struct hw_device_t common

কীমাস্টার ডিভাইসের সাধারণ পদ্ধতি। এটি অবশ্যই keymaster_device-এর প্রথম সদস্য হতে হবে কারণ এই কাঠামোর ব্যবহারকারীরা একটি hw_device_t কে keymaster_device পয়েন্টারে কাস্ট করবে যেখানে এটি hw_device_t একটি keymaster_device উল্লেখ করে।

ফাইল keymaster2.h এর 35 লাইনে সংজ্ঞা।

keymaster_error_t (* configure)(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 *কী)

কী ব্লবের সাথে যুক্ত কী, বা কী জোড়া মুছে দেয়। এই ফাংশনটি কল করার পরে অন্য কোন ক্রিয়াকলাপের জন্য কী ব্যবহার করা অসম্ভব হবে। বিশ্বাসের বিদেশী মূল থেকে কীগুলিতে প্রয়োগ করা যেতে পারে (বিশ্বাসের বর্তমান মূলের অধীনে কীগুলি ব্যবহারযোগ্য নয়)।

এই ফাংশনটি ঐচ্ছিক এবং এটি বাস্তবায়িত না হলে 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_data, keymaster_blob_t *

একটি পাবলিক বা সিমেট্রিক কী রপ্তানি করে, নির্দিষ্ট বিন্যাসে একটি বাইট অ্যারে ফেরত দেয়।

মনে রাখবেন যে KM_TAG_EXPORTABLE দিয়ে কী তৈরি করা হলেই সিমেট্রিক কী রপ্তানির অনুমতি দেওয়া হয়, এবং শুধুমাত্র যদি কী ব্যবহারের জন্য সমস্ত প্রয়োজনীয়তা (যেমন প্রমাণীকরণ) পূরণ করা হয়।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] এক্সপোর্ট_ফরম্যাট কী রপ্তানি করার জন্য যে বিন্যাসটি ব্যবহার করা হবে।
[ভিতরে] কী_রপ্তানি রপ্তানির চাবিকাঠি।
[ভিতরে] ক্লায়েন্ট_আইডি ক্লায়েন্ট আইডি ব্লব, যা অবশ্যই কি জেনারেশনের সময় (যদি থাকে) KM_TAG_APPLICATION_ID এ প্রদত্ত ব্লবের সাথে মেলে।
[ভিতরে] অ্যাপ্লিকেশন তথ্য অ্যাপ্লিকেশন ডেটা ব্লব, যা অবশ্যই KM_TAG_APPLICATION_DATA-তে প্রদত্ত ব্লবের সাথে মিলিত হতে হবে কী জেনারেশনের সময় (যদি থাকে)৷
[আউট] রপ্তানি তথ্য রপ্তানি মূল উপাদান. কলকারী মালিকানা গ্রহণ করে।

ফাইল keymaster2.h এর 213 লাইনে সংজ্ঞা।

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 *ইনপুট, const keymaster_blob_t *স্বাক্ষর, keymaster_blob_t *স্বাক্ষর, keymaster_blob_t *সিগনেচার, keymaster_blob_t * স্বাক্ষর

begin() দিয়ে শুরু হওয়া একটি ক্রিপ্টোগ্রাফিক অপারেশনকে চূড়ান্ত করে এবং operation_handle বাতিল করে।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] অপারেশন_হ্যান্ডেল অপারেশন হ্যান্ডেল begin() দ্বারা ফিরে আসে। এই হ্যান্ডেল অবৈধ করা হবে.
[ভিতরে] in_params অপারেশন জন্য অতিরিক্ত পরামিতি. AEAD মোডের জন্য, এটি KM_TAG_ADDITIONAL_DATA নির্দিষ্ট করতে ব্যবহৃত হয়, কিন্তু শুধুমাত্র যদি আপডেট() করার জন্য কোনো ইনপুট ডেটা প্রদান করা না হয়।
[ভিতরে] ইনপুট শুরু করার জন্য কলে প্রতিষ্ঠিত পরামিতি অনুসারে ডেটা প্রক্রিয়া করা হবে। finish() অবশ্যই প্রদত্ত সমস্ত ডেটা ব্যবহার করতে হবে অথবা KM_ERROR_INVALID_INPUT_LENGTH ফেরত দিতে হবে।
[ভিতরে] স্বাক্ষর বিগিন() কলে উল্লেখ করা উদ্দেশ্যটি KM_PURPOSE_VERIFY হলে স্বাক্ষরটি যাচাই করতে হবে।
[আউট] আউটপুট আউটপুট ডেটা, যদি থাকে। কলকারী বরাদ্দকৃত বাফারের মালিকানা গ্রহণ করে।

যদি অপারেশনটি সমাপ্ত হয় তা একটি স্বাক্ষর যাচাই বা একটি AEAD-মোড ডিক্রিপশন এবং যাচাইকরণ ব্যর্থ হয় তাহলে finish() KM_ERROR_VERIFICATION_FAILED ফেরত দেবে৷

ফাইল keymaster2.h এর 405 লাইনে সংজ্ঞা।

uint32_t পতাকা

keymaster_common.h- এ keymaster0_devices::flags এর জন্য সংজ্ঞায়িত পতাকা দেখুন। শুধুমাত্র পশ্চাদমুখী সামঞ্জস্যের জন্য ব্যবহৃত হয়; 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 অবশ্যই অ্যালগরিদমগুলির জন্য নির্দিষ্ট করতে হবে যেগুলির প্রয়োজন৷

নিম্নলিখিত ট্যাগ নির্দিষ্ট নাও হতে পারে; তাদের মান বাস্তবায়ন দ্বারা প্রদান করা হবে.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] params কী প্রজন্মের প্যারামের অ্যারে
[আউট] কী_ব্লব উৎপন্ন কী ফেরত দেয়। key_blob অবশ্যই NULL হবে না। কলার মালিকানা key_blob->key_material ধরে নেয় এবং এটিকে অবশ্যই মুক্ত() করতে হবে।
[আউট] বৈশিষ্ট্য নন-নাল হলে কী-এর বৈশিষ্ট্যগুলি তৈরি করা হয়েছে। যদি 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 *)

কী_ব্লব অবৈধ হলে নির্দিষ্ট কী-এর বৈশিষ্ট্য বা KM_ERROR_INVALID_KEY_BLOB প্রদান করে (বাস্তবায়নগুলি অবশ্যই কীটির অখণ্ডতাকে সম্পূর্ণরূপে যাচাই করতে হবে)। ক্লায়েন্ট_আইডি এবং অ্যাপ_ডেটা অবশ্যই আইডি এবং ডেটা হতে হবে যখন কী তৈরি করা হয়েছিল বা আমদানি করা হয়েছিল, বা খালি যদি KM_TAG_APPLICATION_ID এবং/অথবা KM_TAG_APPLICATION_DATA জেনারেশনের সময় দেওয়া না হয়। সেই মানগুলি প্রত্যাবর্তিত বৈশিষ্ট্যগুলিতে অন্তর্ভুক্ত নয়৷ কলকারী বরাদ্দকৃত বৈশিষ্ট্যের বস্তুর মালিকানা গ্রহণ করে, যা অবশ্যই keymaster_free_characteristics() এর সাথে ডিলকেড করা উচিত।

মনে রাখবেন KM_TAG_APPLICATION_ID এবং KM_TAG_APPLICATION_DATA কখনই ফেরত দেওয়া হয় না।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] কী_ব্লব থেকে বৈশিষ্ট্য পুনরুদ্ধার চাবিকাঠি.
[ভিতরে] ক্লায়েন্ট_আইডি ক্লায়েন্ট আইডি ডেটা, অথবা যুক্ত না থাকলে NULL।
[ভিতরে] app_id অ্যাপ্লিকেশান ডেটা, বা শূন্য যুক্ত না থাকলে৷
[আউট] বৈশিষ্ট্য মূল বৈশিষ্ট্য। নাল হবে না. কলার বিষয়বস্তুর মালিকানা গ্রহণ করে এবং তাকে অবশ্যই 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, key_blob, keymaster_charistic *

একটি কী, বা কী জোড়া আমদানি করে, একটি কী ব্লব এবং/অথবা কীটির বিবরণ ফেরত দেয়।

বেশিরভাগ মূল আমদানি পরামিতিগুলিকে কীমাস্টার ট্যাগ/মান জোড়া হিসাবে সংজ্ঞায়িত করা হয়, "প্যারামে" প্রদান করা হয়। সম্পূর্ণ তালিকার জন্য 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 কীগুলির জন্য)

নিম্নলিখিত ট্যাগ নির্দিষ্ট নাও হতে পারে; তাদের মান বাস্তবায়ন দ্বারা প্রদান করা হবে.

  • KM_TAG_ORIGIN,
  • KM_TAG_ROLLBACK_RESISTANT,
  • KM_TAG_CREATION_DATETIME
পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] params আমদানি করা কী সংজ্ঞায়িত পরামিতি।
[ভিতরে] params_count params এন্ট্রির সংখ্যা।
[ভিতরে] key_format key_data এ কী ডেটার বিন্যাস নির্দিষ্ট করে।
[আউট] কী_ব্লব অস্বচ্ছ কী ব্লব ফেরত দিতে ব্যবহৃত হয়। নন-নাল হতে হবে। কলকারী অন্তর্ভুক্ত key_material এর মালিকানা গ্রহণ করে৷
[আউট] বৈশিষ্ট্য আমদানি করা কী-এর বৈশিষ্ট্য ফেরত দিতে ব্যবহৃত হয়। NULL হতে পারে, এই ক্ষেত্রে কোনো বৈশিষ্ট্য ফেরত দেওয়া হবে না। যদি 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 *ইনপুট_consumed, keymaster_key_paramout * _b_blobout keymaster_key_paramout ),

begin() দিয়ে শুরু হওয়া একটি চলমান ক্রিপ্টোগ্রাফিক অপারেশনকে ডেটা প্রদান করে এবং সম্ভবত এর থেকে আউটপুট গ্রহণ করে।

অপারেশন_হ্যান্ডেল অবৈধ হলে, আপডেট() KM_ERROR_INVALID_OPERATION_HANDLE ফেরত দেবে।

update() ডেটা বাফারে প্রদত্ত সমস্ত ডেটা গ্রাস করতে পারে না। update() *data_consumed-এ ব্যবহৃত পরিমাণ ফেরত দেবে। কলকারীকে পরবর্তী কলে অব্যবহৃত ডেটা সরবরাহ করতে হবে।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] অপারেশন_হ্যান্ডেল অপারেশন হ্যান্ডেল begin() দ্বারা ফিরে আসে।
[ভিতরে] in_params অপারেশন জন্য অতিরিক্ত পরামিতি. AEAD মোডের জন্য, এটি KM_TAG_ADDITIONAL_DATA নির্দিষ্ট করতে ব্যবহৃত হয়। মনে রাখবেন যে আপডেট() করার জন্য একাধিক কলে অতিরিক্ত ডেটা প্রদান করা হতে পারে, কিন্তু শুধুমাত্র ইনপুট ডেটা প্রদান না করা পর্যন্ত।
[ভিতরে] ইনপুট শুরু করার জন্য কলে প্রতিষ্ঠিত পরামিতি অনুসারে ডেটা প্রক্রিয়া করা হবে। মনে রাখবেন যে আপডেট() প্রদত্ত সমস্ত ডেটা ব্যবহার করতে পারে বা নাও পারে। input_consumed দেখুন।
[আউট] input_consumed আপডেট() দ্বারা ব্যবহৃত ডেটার পরিমাণ। যদি এটি প্রদত্ত পরিমাণের চেয়ে কম হয়, তাহলে কলকারীকে আপডেট() করার জন্য পরবর্তী কলে অবশিষ্টটি প্রদান করতে হবে।
[আউট] out_params আউটপুট পরামিতি। অপারেশন থেকে অতিরিক্ত ডেটা ফেরত দিতে ব্যবহৃত হয় কলার আউটপুট প্যারামিটার অ্যারের মালিকানা নেয় এবং এটিকে keymaster_free_param_set() দিয়ে মুক্ত করতে হবে। কোনো আউটপুট পরামিতি প্রত্যাশিত না হলে out_params NULL এ সেট করা হতে পারে। যদি out_params NULL হয়, এবং আউটপুট প্যারামেটার তৈরি করা হয়, begin() 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_upgrade, const keymaster_key_param_set_t *upgrade_params, keymaster_key_blob_t *upgraded_key)

একটি পুরানো কী আপগ্রেড করে। কী দুটি উপায়ে "পুরাতন" হয়ে উঠতে পারে: কীমাস্টারকে একটি নতুন সংস্করণে আপগ্রেড করা যেতে পারে, অথবা OS সংস্করণ এবং/অথবা প্যাচ স্তরকে অবৈধ করতে সিস্টেম আপডেট করা যেতে পারে৷ উভয় ক্ষেত্রেই, একটি পুরানো কী ব্যবহার করার প্রচেষ্টার ফলে কীমাস্টার KM_ERROR_KEY_REQUIRES_UPGRADE ফিরে আসবে৷ এই পদ্ধতিটি তখন কী আপগ্রেড করার জন্য কল করা উচিত।

পরামিতি
[ভিতরে] দেব কীমাস্টার ডিভাইসের গঠন।
[ভিতরে] আপগ্রেড করার জন্য কী_ আপগ্রেড করার জন্য কীমাস্টার কী।
[ভিতরে] upgrade_params আপগ্রেড সম্পূর্ণ করার জন্য প্রয়োজনীয় পরামিতি। বিশেষ করে, KM_TAG_APPLICATION_ID এবং KM_TAG_APPLICATION_DATA প্রয়োজন হবে যদি সেগুলি কী-এর জন্য সংজ্ঞায়িত করা হয়।
[আউট] upgraded_key আপগ্রেড করা কী ব্লব।

ফাইল keymaster2.h এর 260 লাইনে সংজ্ঞা।


এই কাঠামোর জন্য ডকুমেন্টেশন নিম্নলিখিত ফাইল থেকে তৈরি করা হয়েছিল: