keymaster1_device Struct Reference

keymaster1_device Struct Reference

#include < keymaster1.h >

שדות נתונים

struct hw_device_t מְשׁוּתָף
uint32_t client_version
uint32_t דגלים
בטל* הֶקשֵׁר
int(* gener_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)_
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 uint8_t *_signature)
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 (* gener_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 **characteristic
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, * keymasterout_blob )_
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

הגדרה בשורה 28 של הקובץ keymaster1.h .

תיעוד שטח

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

מבטל פעולת הצפנה שהחלה ב- begin() , משחרר את כל המשאבים הפנימיים ומבטל operation_handle .

הגדרה בשורה 531 של הקובץ keymaster1.h .

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

מוסיף אנטרופיה ל-RNG המשמש את keymaster. מובטחת כי אנטרופיה שנוספה באמצעות שיטה זו אינה מקור האנטרופיה היחיד בו נעשה שימוש, ופונקציית הערבוב נדרשת להיות מאובטחת, במובן זה שאם ה-RNG זורע (ממקור כלשהו) עם נתונים כלשהם, התוקף לא יכול לחזות (או control), אז לא ניתן להבחין בין פלט RNG לאקראי. לפיכך, אם האנטרופיה ממקור כלשהו היא טובה, הפלט יהיה טוב.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] נתונים נתונים אקראיים לשילוב.
[ב] data_length אורך data .

הגדרה בשורה 242 של הקובץ keymaster1.h .

מתחיל פעולת הצפנה באמצעות המפתח שצוין. אם הכל בסדר, begin() יחזיר את KM_ERROR_OK ויצור נקודת אחיזה פעולה שאותה יש להעביר לקריאות עוקבות ל- update() , finish() או abort() .

זה קריטי שכל קריאה להתחלה() תוצמד לקריאה עוקבת לסיים() או לבטל() , כדי לאפשר למימוש keymaster לנקות כל מצב פעולה פנימי. אי ביצוע פעולה זו עלולה לדלוף שטח מצב פנימי או משאבים פנימיים אחרים ועלול לגרום בסופו של דבר ל-start() להחזיר KM_ERROR_TOO_MANY_OPERATIONS כשיגמר לו המקום לפעולות. כל תוצאה מלבד KM_ERROR_OK מ- begin() , update() או finish() מבטלת באופן מרומז את הפעולה, ובמקרה זה אין צורך לקרוא abort() (ותחזיר את KM_ERROR_INVALID_OPERATION_HANDLE אם נקרא).

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] מַטָרָה מטרת הפעולה, אחת מ-KM_PURPOSE_ENCRYPT, KM_PURPOSE_DECRYPT, KM_PURPOSE_SIGN או KM_PURPOSE_VERIFY. שים לב שבמצבי AEAD, הצפנה ופענוח מרמזים על חתימה ואימות, בהתאמה, אך יש לציין אותם כ-KM_PURPOSE_ENCRYPT ו-KM_PURPOSE_DECRYPT.
[ב] מַפְתֵחַ המפתח שישמש עבור הפעולה. key חייב להיות מטרה התואמת purpose וכל דרישות השימוש בו חייבות להתקיים, או ש-start() יחזיר קוד שגיאה מתאים.
[ב] in_params פרמטרים נוספים לפעולה. זה משמש בדרך כלל כדי לספק נתוני אימות, עם KM_TAG_AUTH_TOKEN. אם KM_TAG_APPLICATION_ID או KM_TAG_APPLICATION_DATA סופקו במהלך היצירה, יש לספק אותם כאן, אחרת הפעולה תיכשל עם KM_ERROR_INVALID_KEY_BLOB. עבור פעולות הדורשות nonce או IV, במפתחות שנוצרו עם KM_TAG_CALLER_NONCE, in_params עשוי להכיל תג KM_TAG_NONCE. עבור פעולות AEAD מצוין כאן KM_TAG_CHUNK_SIZE.
[הַחוּצָה] out_params פרמטרי פלט. משמש להחזרת נתונים נוספים מאתחול הפעולה, בעיקר להחזרת IV או nonce מפעולות שיוצרות IV או nonce. המתקשר לוקח בעלות על מערך פרמטרי הפלט ועליו לשחרר אותו באמצעות keymaster_free_param_set() . out_params עשוי להיות מוגדר ל-NULL אם לא צפויים פרמטרי פלט. אם out_params הוא NULL, ופרמטרי פלט נוצרים, begin() יחזיר KM_ERROR_OUTPUT_PARAMETER_NULL.
[הַחוּצָה] handling_operation ידית הפעולה החדשה שנוצרה שיש להעביר ל- update() , finish() או abort() . אם operation_handle הוא NULL, begin() יחזיר KM_ERROR_OUTPUT_PARAMETER_NULL.

הגדרה בשורה 451 של הקובץ keymaster1.h .

uint32_t client_version

זה מבוטל. השתמש בשדות החדשים "module_api_version" ו-"hal_api_version" באתחול keymaster_module במקום זאת.

הגדרה בשורה 41 של הקובץ keymaster1.h .

struct hw_device_t נפוץ

שיטות נפוצות של התקן keymaster. זה חייב להיות החבר הראשון ב-keymaster_device מכיוון שמשתמשים במבנה זה ישליכו מצביע hw_device_t למצביע keymaster_device בהקשרים שבהם ידוע שה- hw_device_t מפנה ל-keymaster_device.

הגדרה בשורה 35 של הקובץ keymaster1.h .

ריק* הקשר

הגדרה בשורה 48 של הקובץ keymaster1.h .

int(* delete_all)(const struct keymaster1_device *dev)
הוצא משימוש:
מוחק את כל המפתחות במאגר המפתחות של החומרה. משמש כאשר מאגר המקשים מאופס לחלוטין.

פונקציה זו היא אופציונלית ויש להגדיר אותה ל-NULL אם היא לא מיושמת.

מחזירה 0 על הצלחה או קוד שגיאה קטן מ-0.

הגדרה בשורה 100 של הקובץ keymaster1.h .

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

מוחק את כל המפתחות במאגר המפתחות של החומרה. משמש כאשר מאגר המקשים מאופס לחלוטין. לאחר קריאת פונקציה זו, לא יהיה ניתן להשתמש באף כתמי מפתח שנוצרו או מיובאים בעבר עבור פעולות כלשהן.

פונקציה זו היא אופציונלית ויש להגדיר אותה ל-NULL אם היא לא מיושמת.

פרמטרים
[ב] dev מבנה מכשיר keymaster.

הגדרה בשורה 407 של הקובץ keymaster1.h .

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

מוחק את המפתח, או צמד המפתחות, המשויכים לגוש המפתחות. לאחר קריאת פונקציה זו לא יהיה ניתן להשתמש במקש עבור כל פעולה אחרת. ניתן להחיל על מפתחות משורשי אמון זרים (מפתחות שאינם ניתנים לשימוש תחת שורש האמון הנוכחי).

פונקציה זו היא אופציונלית ויש להגדיר אותה ל-NULL אם היא לא מיושמת.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] מַפְתֵחַ המפתח שיימחק.

הגדרה בשורה 395 של הקובץ keymaster1.h .

int(* delete_keypair)(const struct keymaster1_device *dev, const uint8_t *key_blob, const size_t key_blob_length)
הוצא משימוש:
מוחק את צמד המפתחות המשויך לבלוק המפתחות.

פונקציה זו היא אופציונלית ויש להגדיר אותה ל-NULL אם היא לא מיושמת.

מחזירה 0 על הצלחה או קוד שגיאה קטן מ-0.

הגדרה בשורה 88 של הקובץ keymaster1.h .

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 )

מייצא מפתח ציבורי, מחזיר מערך בתים בפורמט שצוין.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] export_format הפורמט שישמש לייצוא המפתח.
[ב] key_to_export המפתח לייצוא.
[הַחוּצָה] export_data חומר המפתח המיוצא. המתקשר מקבל בעלות.
[הַחוּצָה] export_data_length האורך של export_data .

הגדרה בשורה 377 של הקובץ keymaster1.h .

keymaster_error_t (* סיום)(const struct keymaster1_device *dev, keymaster_operation_handle_t operation_handle, const keymaster_key_param_set_t *in_params, const keymaster_blob_t *חתימה, keymaster_key_param_set_t *out_params, *keymaster_blob_t )

מסיים פעולת הצפנה שהחלה ב- begin() ומבטל את operation_handle .

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] handling_operation ידית הפעולה שהוחזרה על ידי begin() . ידית זו תבוטל.
[ב] params פרמטרים נוספים לפעולה. עבור מצבי AEAD, זה משמש לציון KM_TAG_ADDITIONAL_DATA, אך רק אם לא סופקו נתוני קלט לעדכון() .
[ב] חֲתִימָה החתימה שיש לאמת אם המטרה שצוינה בקריאת begin() הייתה KM_PURPOSE_VERIFY.
[הַחוּצָה] תְפוּקָה נתוני הפלט, אם יש. המתקשר מקבל בעלות על המאגר המוקצה.

אם הפעולה שמסתיימת היא אימות חתימה או פענוח במצב AEAD והאימות נכשל אז finish() יחזיר את KM_ERROR_VERIFICATION_FAILED.

הגדרה בשורה 521 של הקובץ keymaster1.h .

דגלים של uint32_t

ראה דגלים שהוגדרו עבור keymaster0_devices::flags ב- keymaster_common.h

הגדרה בשורה 46 של הקובץ keymaster1.h .

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, מסופקים 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
פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] params מערך של פרמטרים ליצירת מפתח.
[ב] params_count אורך params .
[הַחוּצָה] key_blob מחזיר את המפתח שנוצר. key_blob לא חייב להיות NULL. המתקשר מקבל בעלות key_blob->key_material ועליו לשחרר() אותו.
[הַחוּצָה] מאפיינים מחזירה את המאפיינים של המפתח שנוצר, אם אינו NULL. אם אינו NULL, המתקשר מקבל בעלות וחייב להקצות עם keymaster_free_characteristics() . שים לב ש-KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID ו-KM_TAG_APPLICATION_DATA לעולם לא יוחזרו.

הגדרה בשורה 282 של הקובץ keymaster1.h .

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.

הגדרה בשורה 56 של הקובץ keymaster1.h .

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_t)

מחזירה את המאפיינים של המפתח שצוין, או KM_ERROR_INVALID_KEY_BLOB אם ה-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 לעולם לא יוחזרו.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] key_blob המפתח לאחזור מאפיינים מ.
[ב] מזהה_לקוח נתוני מזהה הלקוח, או NULL אם לא משויכים.
[ב] app_id נתוני האפליקציה, או NULL אם לא משויכים.
[הַחוּצָה] מאפיינים מאפייני המפתח.

הגדרה בשורה 309 של הקובץ keymaster1.h .

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.

הגדרה בשורה 76 של הקובץ keymaster1.h .

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

מקבל תמיכה באלגוריתמים.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[הַחוּצָה] אלגוריתמים מערך אלגוריתמים נתמך. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] algorithms_length אורך algorithms .

הגדרה בשורה 133 של הקובץ keymaster1.h .

keymaster_error_t (* get_supported_block_modes)(const struct keymaster1_device *dev, keymaster_algorithm_t אלגוריתם, keymaster_purpose_t purpose, keymaster_block_mode_t **modes, size_t *modes_length)

מקבל את מצבי החסימה הנתמכים עבור האלגוריתם שצוין.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] אַלגוֹרִיתְם האלגוריתם שעבורו יוחזרו המצבים הנתמכים.
[הַחוּצָה] מצבים מערך מצבים נתמך. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] modes_length אורך modes .

הגדרה בשורה 149 של הקובץ keymaster1.h .

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)

מקבל את התמציתים הנתמכים עבור האלגוריתם שצוין. המתקשר מקבל בעלות על המערך המוקצה.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] אַלגוֹרִיתְם האלגוריתם שעבורו יוחזרו תקצירים נתמכים.
[הַחוּצָה] מעכלים מערך עיכובים נתמך. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] digests_length אורך digests .

הגדרה בשורה 187 של הקובץ keymaster1.h .

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)

מקבל את פורמטי הייצוא המפתחים הנתמכים עבור מפתחות של האלגוריתם שצוין. המתקשר מקבל בעלות על המערך המוקצה.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] אַלגוֹרִיתְם האלגוריתם שעבורו יוחזרו הפורמטים הנתמכים.
[הַחוּצָה] פורמטים מערך פורמטים נתמך. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] formats_length אורך formats .

הגדרה בשורה 224 של הקובץ keymaster1.h .

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)

מקבל את פורמטי ייבוא ​​המפתחות הנתמכים עבור מפתחות של האלגוריתם שצוין. המתקשר מקבל בעלות על המערך המוקצה.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] אַלגוֹרִיתְם האלגוריתם שעבורו יוחזרו הפורמטים הנתמכים.
[הַחוּצָה] פורמטים מערך פורמטים נתמך. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] formats_length אורך formats .

הגדרה בשורה 206 של הקובץ keymaster1.h .

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)

מקבל את מצבי הריפוד הנתמכים עבור האלגוריתם שצוין. המתקשר מקבל בעלות על המערך המוקצה.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] אַלגוֹרִיתְם האלגוריתם שעבורו יוחזרו מצבי ריפוד נתמכים.
[הַחוּצָה] מצבים מערך מצבי ריפוד נתמכים. המתקשר לוקח בעלות על המערך ועליו לשחרר() אותו.
[הַחוּצָה] modes_length אורך modes .

הגדרה בשורה 168 של הקובץ keymaster1.h .

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_keycharacteristics **characteristic

מייבא מפתח, או זוג מפתחות, מחזיר כתם מפתח ו/או תיאור של המפתח.

רוב פרמטרי הייבוא ​​העיקריים מוגדרים כצמדי תג/ערך keymaster, מסופקים ב"פראמים". ראה 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
פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] params פרמטרים המגדירים את המפתח המיובא.
[ב] params_count מספר הכניסות params .
[ב] מפתח_פורמט מציין את הפורמט של נתוני המפתח ב-key_data.
[הַחוּצָה] key_blob משמש להחזרת כתם המפתח האטום. חייב להיות ללא NULL. המתקשר מקבל בעלות על המפתח_חומר הכלול.
[הַחוּצָה] מאפיינים משמש להחזרת המאפיינים של המפתח המיובא. יכול להיות NULL, ובמקרה זה לא יוחזרו מאפיינים. אם אינו NULL, המתקשר מקבל בעלות וחייב להקצות עם keymaster_free_characteristics() . שים לב ש-KM_TAG_ROOT_OF_TRUST, KM_TAG_APPLICATION_ID ו-KM_TAG_APPLICATION_DATA לעולם לא יוחזרו.

הגדרה בשורה 357 של הקובץ keymaster1.h .

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)
הוצא משימוש:
מייבא זוג מפתחות ציבורי ופרטי. המפתחות המיובאים יהיו בפורמט PKCS#8 עם קידוד DER (תקן Java). כתם המפתח שהוחזר הוא אטום ויסופק לאחר מכן לחתימה ואימות.

מחזירה: 0 על הצלחה או קוד שגיאה קטן מ-0.

הגדרה בשורה 66 של הקובץ keymaster1.h .

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_signed_data, size_t *th
הוצא משימוש:
חותם נתונים באמצעות כתם מפתח שנוצר קודם לכן. זה יכול להשתמש במפתח אסימטרי או במפתח סודי.

מחזירה: 0 על הצלחה או קוד שגיאה קטן מ-0.

הגדרה בשורה 108 של הקובץ keymaster1.h .

keymaster_error_t (* עדכון)(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_put)

מספק נתונים, ואולי מקבל פלט מפעולת הצפנה מתמשכת שהחלה ב- begin() .

אם operation_handle לא חוקי, update() יחזיר את KM_ERROR_INVALID_OPERATION_HANDLE.

update() עשוי שלא לצרוך את כל הנתונים שסופקו במאגר הנתונים. update() יחזיר את הכמות שנצרכה ב-*data_consumed. המתקשר צריך לספק את הנתונים שלא נצרכו בשיחה הבאה.

פרמטרים
[ב] dev מבנה מכשיר keymaster.
[ב] handling_operation ידית הפעולה שהוחזרה על ידי begin() .
[ב] in_params פרמטרים נוספים לפעולה. עבור מצבי AEAD, זה משמש לציון KM_TAG_ADDITIONAL_DATA. שים לב שניתן לספק נתונים נוספים בקריאות מרובות לעדכון() , אך רק עד שיסופקו נתוני קלט.
[ב] קֶלֶט נתונים לעיבוד, לפי הפרמטרים שנקבעו ב-call to begin() . שים לב ש- update() עשוי לצרוך או לא לצרוך את כל הנתונים שסופקו. ראה input_consumed .
[הַחוּצָה] input_consumed כמות הנתונים שנצרכה על ידי update() . אם זה נמוך מהסכום שסופק, המתקשר צריך לספק את היתרה בקריאה נוספת לעדכון() .
[הַחוּצָה] out_params פרמטרי פלט. משמש להחזרת נתונים נוספים מהפעולה המתקשר לוקח בעלות על מערך פרמטרי הפלט וחייב לשחרר אותו באמצעות keymaster_free_param_set() . out_params עשוי להיות מוגדר ל-NULL אם לא צפויים פרמטרי פלט. אם out_params הוא NULL, ופרמטרי פלט נוצרים, begin() יחזיר KM_ERROR_OUTPUT_PARAMETER_NULL.
[הַחוּצָה] תְפוּקָה נתוני הפלט, אם יש. המתקשר מקבל בעלות על המאגר המוקצה. הפלט לא חייב להיות NULL.

שים לב ש- update() עשוי שלא לספק פלט כלשהו, ​​ובמקרה זה פלט->data_length יהיה אפס, ו-output->data עשוי להיות NULL או באורך אפס (כך שהמתקשר תמיד צריך לשחרר אותו).

הגדרה בשורה 495 של הקובץ keymaster1.h .

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 uintature8_length_signature, const uintature8_length_sign)
הוצא משימוש:
מאמת נתונים חתומים באמצעות גוש מפתח. זה יכול להשתמש במפתח אסימטרי או במפתח סודי.

מחזירה: 0 באימות מוצלח או קוד שגיאה קטן מ-0.

הגדרה בשורה 118 של הקובץ keymaster1.h .


התיעוד עבור מבנה זה נוצר מהקובץ הבא: