nl:: Weave:: Profiles:: Security:: CASE:: WeaveCASEAuthDelegate
זהו שיעור מופשט.
#include <src/lib/profiles/security/WeaveCASE.h>
ממשק מופשט שאליו מוקצות פעולות אימות במהלך יצירת סשן CASE.
סיכום
ירושה
מחלקות משנה מוכרות ישירות: nl::Weave::DeviceManager::WeaveDeviceManager
פונקציות ציבוריות |
|
---|---|
BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
|
virtual WEAVE_ERROR
בוצעה קריאה בתחילת אימות האישור.
|
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
|
virtual WEAVE_ERROR
מקודדים את פרטי האישור מסוג CASE עבור הצומת המקומי.
|
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
|
virtual WEAVE_ERROR
קידוד מטען ייעודי (payload) ספציפי לאפליקציה שייכלל בהודעת ה-CASE לאפליקציה השכנה.
|
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
|
virtual void
בוצעה קריאה בסיום אימות האישור.
|
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
|
virtual WEAVE_ERROR
יצירת חתימה באמצעות המפתח הפרטי של הצומת המקומי.
|
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
|
virtual WEAVE_ERROR
בוצעה קריאה כתוצאה של אימות האישור.
|
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
|
virtual WEAVE_ERROR
בוצעה שיחה אחרי שהאישורים של האפליקציה להשוואה נטענו.
|
פונקציות ציבוריות
BeginValidation
virtual WEAVE_ERROR BeginValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
בוצעה קריאה בתחילת אימות האישור.
ההטמעות צריכות לאתחל את אובייקט WeaveCertificateSet שסופק עם מספיק משאבים לטיפול באימות האישור הקרוב. בשלב הזה, 'אפליקציות' עשויות לטעון אישורים מהימנים של הרמה הבסיסית (root) או רשות האישורים (CA) בקבוצת האישורים, או להמתין עד לקריאה ל-OnPeerCertsLoaded().
כל אישור שנטען לקבוצת האישורים יוקצה לפונקציית הטעינה סוג אישור שמוגדר כברירת מחדל. בהטמעות, צריך לשנות את הסוגים האלה לפי הצורך כדי להבטיח שהאישור יטופל בצורה נכונה במהלך האימות, והקצאה נכונה של WeaveAuthMode לאינטראקציות עם CASE.
הקשר האימות שסופק יופעל עם קבוצה של קריטריונים לאימות ברירת מחדל, שההטמעה עשויה לשנות לפי הצורך. היישום צריך להגדיר את השדה EffectiveTime או להגדיר את סימוני האימות המתאימים כדי למנוע את האימות של כל משך החיים של האישור.
אם רוצים לקבל תוצאות אימות מפורטות, ההטמעה עשויה לאתחל את השדות CertificatetValidation Results ו-CertValidationLen.
ההטמעות נדרשות כדי לתחזק את המשאבים שהוקצו במהלך BeginValidation() עד שמתבצעת קריאה ל-EndValidation() התואם. בהטמעות מובטחת קריאה של EndValidation() בדיוק פעם אחת בכל קריאה מוצלחת ל-BeginValidation().
EncodeNodeCertInfo
virtual WEAVE_ERROR EncodeNodeCertInfo( const BeginSessionContext & msgCtx, TLVWriter & writer )=0
מקודדים את פרטי האישור מסוג CASE עבור הצומת המקומי.
הטמעות יכולות להשתמש בקריאה הזו כדי לשנות את קידוד ברירת המחדל של מבנה פרטי האישור CASE עבור הצומת המקומי. לאחר הקריאה, ההטמעה צריכה לכתוב מבנה CertificateInformation, שמכיל לפחות את אישור הישות של הצומת המקומי. ההטמעה יכולה לכלול קבוצה של אישורים קשורים או ישויות עוגן אמינות.
EncodeNodePayload
virtual WEAVE_ERROR EncodeNodePayload( const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen )
קידוד מטען ייעודי (payload) ספציפי לאפליקציה שייכלל בהודעת ה-CASE לאפליקציה השכנה.
ההטמעה של השיטה הזו היא אופציונלית. הטמעת ברירת המחדל מחזירה מטען ייעודי (payload) באורך אפס.
EndValidation
virtual void EndValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
בוצעה קריאה בסיום אימות האישור.
הטמעות עשויות להשתמש בקריאה הזו לביצוע ניקוי אחרי שאימות האישור יסתיים. בהטמעות מובטחת קריאה של EndValidation() בדיוק פעם אחת בכל קריאה מוצלחת ל-BeginValidation().
GenerateNodeSignature
virtual WEAVE_ERROR GenerateNodeSignature( const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag )=0
יצירת חתימה באמצעות המפתח הפרטי של הצומת המקומי.
כשמפעילים הטמעות, צריך לחשב את החתימה בערך הגיבוב הנתון באמצעות המפתח הפרטי של הצומת. לאחר מכן, צריך לכתוב את החתימה שנוצרה בפורמט CASE ECDSASignature לכתיבה שסופקה עם TLV באמצעות התג שצוין.
במקרים שבהם המפתח הפרטי של הצומת שמור במאגר נתונים זמני, פונקציית השירות GenerateAndEncodeWeaveECDSASignature() יכולה להיות שימושית להטמעת השיטה הזו.
HandleValidationResult
virtual WEAVE_ERROR HandleValidationResult( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes )=0
בוצעה קריאה כתוצאה של אימות האישור.
הטמעות עשויות להשתמש בקריאה הזו כדי לבדוק את התוצאה של אימות האישור של אפליקציה להשוואה, ואולי גם לשנות אותה. אם האימות בוצע בהצלחה, הערך ValidRes יוגדר כ-WEAVE_NO_ERROR. במקרה כזה, הקשר האימות יכלול פרטים לגבי התוצאה. באופן ספציפי, השדה TrustSAML יוגדר לאישור של ישויות עוגן אמינות.
אם ההטמעה מאותחלת השדות CertificatetValidationResults ו-CertValidationLen במבנה ValidationContext שנקראים במסגרת BeginValidation(), בשדות אלה יופיעו תוצאות אימות מפורטות עבור כל אישור בקבוצת האישורים.
הטמעות עשויות לבטל את ההגדרה הזו על ידי הגדרת ערך שגיאה ב-TRUERes, וכתוצאה מכך האימות ייכשל.
אם האימות נכשל, validRes ישקף את הסיבה לכשל. הטמעות עשויות לשנות את התוצאה לערך שגיאה אחר, אבל אסור להגדיר אותה ל-WEAVE_NO_ERROR.
OnPeerCertsLoaded
virtual WEAVE_ERROR OnPeerCertsLoaded( const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet )
בוצעה שיחה אחרי שהאישורים של האפליקציה להשוואה נטענו.
הטמעות עשויות להשתמש בקריאה הזו כדי להשלים את אישורי הקלט והקריטריונים לאימות שישמשו לאימות האישור של השכנה. בזמן השיחה, האישורים שסופקו על ידי האפליקציה השכנה ייטענו לקבוצת האישורים (כולל האישור שלו, אם יש כזה). בנוסף, הארגומנטים subjectDN ו-subjectKeyId יאופסו לערכים שישמשו לפתרון האישור של האפליקציה השכנה מקבוצת האישור. אם העמית סיפק אישור משלו (במקום הפניה לאישור), השדה EntityCert בארגומנט ValidCtx יכיל מצביע אל האישור הזה.
במהלך הקריאה הזו, הטמעות עשויות לשנות את התוכן של קבוצת האישורים, כולל הוספה של אישורים חדשים. הם יכולים גם לשנות את הארגומנטים subjectDN, subjectKeyId או validCtx לפי הצורך. הדבר החשוב ביותר הוא שהטמעות צריכות להתאים את השדות של סוגי האישורים עם אישור שהוגדר לפני החזרה, כדי להבטיח טיפול נכון באישורים במהלך האימות ובדיקות הבאות של בקרת הגישה.
הערה: במקרה שהעמית יספק לעצמו מסמך עזר לאישור, ולא אישור מלא, השדה EntityCert בהקשר של האימות יכיל NULL. אם אפליקציה רוצה לתמוך בהפניות לאישורים, לפני ההחזרה צריך להוסיף אישור שתואם ל-DN הנושא ומזהה המפתח של האפליקציה להשוואה.
ההטמעה של השיטה הזו היא אופציונלית. הטמעת ברירת המחדל לא עושה דבר.