nl::Weave::Platform::Security

تشمل مساحة الاسم هذه جميع الواجهات ضمن Weave لمدير الذاكرة في مراقبة Weave.

ملخّص

يجب تنفيذ الدوال في مساحة الاسم هذه بواسطة الأنظمة الأساسية التي تستخدم Weave، وفقًا لاحتياجات/قيود بيئة معينة.

عمليات التعداد

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
تعداد
حظر موقع حقول المَعلمات المحددة في نموذج بترميز 8 بت
BlockSetParams{
  kNumberOfNetworkBuffers = 2,
  kNumberOfBlockSets = 4,
  kNetworkBuffer0BlockAllocationMask = 0x07,
  kNetworkBuffer1BlockAllocationMask = 0x18,
  kBlockSet1Size = 1,
  kBlockSet1Count = 1,
  kBlockSet1BufferIndex = 0,
  kBlockSet1isLongTerm = 1,
  kBlockSet2Size = 4,
  kBlockSet2Count = 1,
  kBlockSet2BufferIndex = 0,
  kBlockSet2isLongTerm = 1,
  kBlockSet3Size = 4,
  kBlockSet3Count = 1,
  kBlockSet3BufferIndex = 0,
  kBlockSet3isLongTerm = 0,
  kBlockSet4Size = 5,
  kBlockSet4Count = 2,
  kBlockSet4BufferIndex = 1,
  kBlockSet4isLongTerm = 0,
  kTotalMemorySize = (kBlockSet1Size * kBlockSet1Count + kBlockSet2Size * kBlockSet2Count + kBlockSet3Size * kBlockSet3Count + kBlockSet4Size * kBlockSet4Count) << kBlockSetSizeValueShift,
  kMaxBlockSize = 600,
  kMinBufferSize = 1240
}
تعداد
تحدِّد مَعلمات مجموعة الكتل.

تعريف الأنواع

BlockMark_t تعريف الكتابة
uint8_t
النوع المستخدم لوضع علامة على القطعة المخصّصة حاليًا أو غير المخصّصة لها حاليًا.
BlockSetParams_t تعريف الكتابة
uint8_t
يُستخدم هذا النوع لترميز معلومات مجموعة الكتل.

المتغيرات

sBlockSetParams = { ((kBlockSet1Size << kBlockSetSizeShift) & kBlockSetSizeMask) | ((kBlockSet1Count << kBlockSetCountShift) & kBlockSetCountMask) | ((kBlockSet1BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | ((kBlockSet1isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask), ((kBlockSet2Size << kBlockSetSizeShift) & kBlockSetSizeMask) | ((kBlockSet2Count << kBlockSetCountShift) & kBlockSetCountMask) | ((kBlockSet2BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | ((kBlockSet2isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask), ((kBlockSet3Size << kBlockSetSizeShift) & kBlockSetSizeMask) | ((kBlockSet3Count << kBlockSetCountShift) & kBlockSetCountMask) | ((kBlockSet3BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | ((kBlockSet3isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask), ((kBlockSet4Size << kBlockSetSizeShift) & kBlockSetSizeMask) | ((kBlockSet4Count << kBlockSetCountShift) & kBlockSetCountMask) | ((kBlockSet4BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | ((kBlockSet4isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask), }[kNumberOfBlockSets]
مَعلمات مجموعات الكتل المشفَّرة
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
مجموعة من أقنعة كتلة المخزن المؤقت
sMemBlocksAllocated = 0
يشير إلى القطعة المخصّصة/غير المخصّصة.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
مؤشرات إلى المخزن المؤقت للذاكرة التي تم إعدادها على "NULL" (فارغ)
sNetworkBuffersUsed = true
bool
قيمة منطقية تشير إلى ما إذا كان (صحيح) (صحيح) أم لا (خطأ) يستخدم المخازن المؤقتة للشبكة من قِبل Simple Allocator.

الدوال

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
تستدعي طبقة Weave هذه الدالة لتوليد بيانات عشوائية.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
يتم استدعاء هذه الدالة بواسطة طبقة Weave لتهيئة مصدر بيانات عشوائي.
MemoryAlloc(size_t size)
void *
يتم استدعاء هذه الدالة بواسطة طبقة Weave لتخصيص كتلة من ذاكرة "الحجم" بايت.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
يتم استدعاء هذه الدالة بواسطة طبقة Weave لتخصيص كتلة من ذاكرة "الحجم" بايت.
MemoryFree(void *p)
void
يتم استدعاء هذه الدالة بواسطة طبقة Weave لإطلاق كتلة ذاكرة تخصصها دالة MemeoryAlloc() .
MemoryInit(void *buf, size_t bufSize)
يتم استدعاء هذه الدالة بواسطة طبقة Weave لتهيئة الذاكرة والموارد اللازمة للوظائف المناسبة لتخصيص ذاكرة مدير Weave.
MemoryShutdown(void)
void
يتم استدعاء هذه الدالة بواسطة طبقة Weave لإصدار جميع الموارد التي تم تخصيصها بواسطة الدالة MemoryInit().
OnTimeConsumingCryptoDone(void)
void
ويتم استدعاء هذه الدالة لإبلاغ التطبيق عند انتهاء عملية التشفير التي تستهلك الكثير من الوقت للتو.
OnTimeConsumingCryptoStart(void)
void
ويتم استدعاء هذه الدالة لإبلاغ التطبيق عند اقتراب بدء عملية تشفير تستغرق وقتًا طويلاً.

صفوف

nl::Weave::Platform::Security::AES128BlockCipher
nl::Weave::Platform::Security::AES128BlockCipherDec
nl::Weave::Platform::Security::AES128BlockCipherEnc
nl::Weave::Platform::Security::AES256BlockCipher
nl::Weave::Platform::Security::AES256BlockCipherDec
nl::Weave::Platform::Security::AES256BlockCipherEnc
nl::Weave::Platform::Security::SHA1
nl::Weave::Platform::Security::SHA256

عمليات التعداد

BlockSetParamFields

 BlockSetParamFields

حظر موقع حقول المَعلمات المحددة في نموذج بترميز 8 بت

أماكن إقامة
kBlockSetBufferIndexMask

قناع حقل فهرس المخزن المؤقت.

kBlockSetBufferIndexShift

تحول حقل فهرس المخزن المؤقت.

kBlockSetCountMask

قناع حقل العدد.

kBlockSetCountShift

حساب متغيّرات الحقول.

kBlockSetIsLongTermMask

النوع قناع الحقل.

kBlockSetIsLongTermShift

اكتب متغيّر الحقل.

kBlockSetSizeMask

قناع حقل الحجم.

kBlockSetSizeShift

تغيير حقل الحجم

kBlockSetSizeValueShift

تغيير فك ترميز حقل الحجم (اضرب في 128).

BlockSetParams

 BlockSetParams

تحدِّد مَعلمات مجموعة الكتل.

أماكن إقامة
kBlockSet1BufferIndex

تعيين مؤشر المخزن المؤقت رقم 1 هو 0.

kBlockSet1Count

المجموعة رقم 1 هي 1.

kBlockSet1Size

حجم المجموعة رقم 1 هو 128 بايت.

kBlockSet1isLongTerm

المجموعة رقم 1 هي النوع طويل المدى.

kBlockSet2BufferIndex

تعيين مؤشر المخزن المؤقت رقم 2 على 0.

kBlockSet2Count

المجموعة رقم 2 هي 1.

kBlockSet2Size

حجم المجموعة رقم 2 هو 512 بايت.

kBlockSet2isLongTerm

نوع المجموعة رقم 2 طويل المدى.

kBlockSet3BufferIndex

تعيين مؤشر المخزن المؤقت رقم 3 هو 0.

kBlockSet3Count

المجموعة رقم 3 هي 1.

kBlockSet3Size

حجم المجموعة رقم 3 هو 512 بايت.

kBlockSet3isLongTerm

نوع المجموعة رقم 3 قصير المدى.

kBlockSet4BufferIndex

قم بتعيين مؤشر المخزن المؤقت رقم 4 على 1.

kBlockSet4Count

المجموعة رقم 4 هي 2.

kBlockSet4Size

حجم المجموعة رقم 4 هو 640 بايت.

kBlockSet4isLongTerm

نوع المجموعة رقم 4 قصير المدى.

kMaxBlockSize

الحد الأقصى لحجم الكتلة المتوافق مع تطبيق Simple Allocator

kMinBufferSize

الحد الأدنى لحجم المخزن المؤقت للشبكة المطلوب لدعم حالات استخدام Simple Allocator

هذه المعلمة مشتقة من أحجام كتلتي ذاكرة (640 + 600) المخصصة في المخزن المؤقت للشبكة رقم 1.

kNetworkBuffer0BlockAllocationMask

يحدد هذا القناع جميع وحدات الذاكرة المخصصة من المخزن المؤقت للشبكة رقم 0.

kNetworkBuffer1BlockAllocationMask

يحدد هذا القناع جميع وحدات الذاكرة المخصصة من المخزن المؤقت للشبكة رقم 1.

kNumberOfBlockSets

عدد مجموعات القوالب التي يستخدمها مُخصص البسيط.

kNumberOfNetworkBuffers

عدد المخازن المؤقتة للشبكة المستخدمة بواسطة تطبيق Simple Allocator.

kTotalMemorySize

إجمالي سعة الذاكرة المستخدمة بواسطة أداة التخصيص البسيط.

تعريف الأنواع

BlockMark_t

uint8_t BlockMark_t

النوع المستخدم لوضع علامة على القطعة المخصّصة حاليًا أو غير المخصّصة لها حاليًا.

uint8_t: يتوافق مع ما يصل إلى 8 كتل ذاكرة إجمالاً uint16_t، ويتوافق مع إجمالي 16 كتلة ذاكرة uint32_t، ويتوافق مع إجمالي 32 كتلة ذاكرة.

BlockSetParams_t

uint8_t BlockSetParams_t

يُستخدم هذا النوع لترميز معلومات مجموعة الكتل.

مجموعة الكتل هي مجموعة من أجزاء الذاكرة التي لها نفس الخصائص (الحجم والنوع وتنتمي إلى نفس المخزن المؤقت). يوضّح الرسم البياني التالي كيفية تشفير معلومات مجموعة الكتل بتنسيق 8 بت:

طويلة الأمد حظر الفهرس عدد القوالب حجم الكتلة
[7] [5:6] [3:4] [2:0]
[2:0] - حجم كتلة الذاكرة في مجموعة تم ترميز قيمة الحجم بدقة 128 بايت.
[2:0] فك الترميز
000 ‫0 بايت
001 128 بايت
010 256 بايت
... -
111 896 بايت
[4:3] - عدد القطع في مجموعة.
[3:4] فك الترميز
00 4 مربّعات
01 قطعة واحدة
10 مربّعان
11 3 مربّعات
[6:5] - مؤشر المخزن المؤقت للشبكة الذي توجد فيه كتل الذاكرة لاحظ أنه عند استخدام مخزن مؤقت مخصص، يتم تخصيص جميع كتل الذاكرة من المخزن المؤقت المخصص ويتم تجاهل معلمة الفهرس هذه.
[5:6] فك الترميز
00 المخزن المؤقت للشبكة 0
... -
11 المخزن المؤقت للشبكة رقم 3
[7] - تحدِّد هذه السياسة ما إذا كانت عمليات الحظر مخصّصة للتخزين على المدى الطويل أو القصير.
[7] فك الترميز
0 وحدات الذاكرة القصيرة المدى
1 وحدات ذاكرة طويلة المدى

المتغيرات

sBlockSetParams

const BlockSetParams_t sBlockSetParams[kNumberOfBlockSets] = {
    
    ((kBlockSet1Size << kBlockSetSizeShift) & kBlockSetSizeMask) | 
    ((kBlockSet1Count << kBlockSetCountShift) & kBlockSetCountMask) | 
    ((kBlockSet1BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | 
    ((kBlockSet1isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask),
    
    ((kBlockSet2Size << kBlockSetSizeShift) & kBlockSetSizeMask) | 
    ((kBlockSet2Count << kBlockSetCountShift) & kBlockSetCountMask) | 
    ((kBlockSet2BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | 
    ((kBlockSet2isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask),
    
    ((kBlockSet3Size << kBlockSetSizeShift) & kBlockSetSizeMask) | 
    ((kBlockSet3Count << kBlockSetCountShift) & kBlockSetCountMask) | 
    ((kBlockSet3BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | 
    ((kBlockSet3isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask),
    
    ((kBlockSet4Size << kBlockSetSizeShift) & kBlockSetSizeMask) | 
    ((kBlockSet4Count << kBlockSetCountShift) & kBlockSetCountMask) | 
    ((kBlockSet4BufferIndex << kBlockSetBufferIndexShift) & kBlockSetBufferIndexMask) | 
    ((kBlockSet4isLongTerm << kBlockSetIsLongTermShift) & kBlockSetIsLongTermMask),







}

مَعلمات مجموعات الكتل المشفَّرة

sBufferAllocationMask

const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = {
                                                   kNetworkBuffer0BlockAllocationMask,
                                                   kNetworkBuffer1BlockAllocationMask,




                                                                                       }

مجموعة من أقنعة كتلة المخزن المؤقت

تحدِّد ما إذا كانت جميع عمليات الحظر في المخزن المؤقت وغير المخصصة، ثم يمكن إعادة إلغاء المخزن المؤقت.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

يشير إلى القطعة المخصّصة/غير المخصّصة.

تعني "تم الإعداد على 0" أنّ جميع وحدات الذاكرة وغير المخصّصة.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

مؤشرات إلى المخزن المؤقت للذاكرة التي تم إعدادها على "NULL" (فارغ)

عند استخدام المخزن المؤقت للشبكة، يشير sMemBufs[] إلى كائنات PacketBuffer. عند استخدام المخزن المؤقت المخصص، يتم تجاهل نقاط sMemBufs[0] إلى هذا المخزن المؤقت ويتم تجاهل مؤشرات sMemBufs[] الأخرى.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

قيمة منطقية تشير إلى ما إذا كان (صحيح) (صحيح) أم لا (خطأ) يستخدم المخازن المؤقتة للشبكة من قِبل Simple Allocator.

عند ضبط السياسة على "خطأ"، يتم استخدام المخزن المؤقت المخصّص المتوفر مع الدالة MemoryInit().

الدوال

DecodeBlockSetParams

void DecodeBlockSetParams(
  BlockSetParams_t blockSetParams,
  uint16_t & blockSize,
  uint8_t & blockCount,
  uint8_t & blockBufferIndex,
  bool & blockIsLongTerm
)

GetSecureRandomData

WEAVE_ERROR GetSecureRandomData(
  uint8_t *buf,
  uint16_t len
)

تستدعي طبقة Weave هذه الدالة لتوليد بيانات عشوائية.

التفاصيل
المعلمات
[in] buf
يشير هذا المصطلح إلى مخزن مؤقت للذاكرة حيث يجب تخزين البيانات العشوائية المطلوبة.
[in] len
تحدّد هذه السياسة حجم البيانات العشوائي المطلوب بالبايت.
قيم الإرجاع
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
في حال فشل مصدر القصور في إيجاد قصور طلبه منشئ البيانات العشوائي.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
في حال تعذّر إنشاء مصدر البيانات العشوائي في إنشاء بيانات عشوائية.
WEAVE_ERROR_INCORRECT_STATE
في حال العثور على مصدر بيانات عشوائي في حالة غير صحيحة.
WEAVE_NO_ERROR
عند النجاح.

InitSecureRandomDataSource

WEAVE_ERROR InitSecureRandomDataSource(
  nl::Weave::Crypto::EntropyFunct entropyFunct,
  uint16_t entropyLen,
  const uint8_t *personalizationData,
  uint16_t perDataLen
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لتهيئة مصدر بيانات عشوائي.

هذه الدالة خاصة بالنظام الأساسي وقد تكون فارغة عندما لا يكون إعداد مصدر البيانات العشوائي مطلوبًا.

التفاصيل
المعلمات
[in] entropyFunct
يشير ذلك المصطلح إلى دالة تُنشئ قصورًا في منشئ البيانات العشوائي. عندما لا تكون الخوارزمية مطلوبة لإدخال القصور، يمكن أن يكون هذا الإدخال "NULL"، وهو ما يحدث عند استخدام إصدار OpenSSL لمنشئ البيانات العشوائية.
[in] entropyLen
لتحديد حجم القصور بالبايت الذي يجب أن يتم إنشاؤه بواسطة دالة القصور عند استخدامها.
[in] personalizationData
يشير هذا المصطلح إلى مخزن مؤقت للذاكرة يخزِّن إدخال بيانات التخصيص. يجب أن يكون إدخال البيانات هذا خاصًا بالجهاز، وأن يساعد على تحسين الخصائص الإحصائية للبيانات العشوائية.
[in] perDataLen
تحدِّد هذه السياسة حجم بيانات التخصيص بالبايت.
قيم الإرجاع
WEAVE_ERROR_INVALID_ARGUMENT
في حال تمرير وسيطة غير صالحة إلى هذه الدالة.
WEAVE_NO_ERROR
عند النجاح.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لتخصيص كتلة من ذاكرة "الحجم" بايت.

تعادل هذه الدالة MemoryAlloc(size, false).

التفاصيل
المعلمات
[in] size
تحدِّد هذه السياسة حجم الذاكرة المطلوب بالبايت.
قيم الإرجاع
Pointer
إلى كتلة ذاكرة في حال نجاح ذلك.
NULL-pointer
في حال تعذُّر تخصيص الذاكرة.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لتخصيص كتلة من ذاكرة "الحجم" بايت.

التفاصيل
المعلمات
[in] size
تحدِّد هذه السياسة حجم الذاكرة المطلوب بالبايت.
[in] isLongTermAlloc
قيمة منطقية تشير إلى ما إذا كانت كتلة الذاكرة المطلوبة (صحيح) أم لا (خطأ) هي للاستخدام على المدى الطويل. والتخصيص على المدى الطويل هو الذاكرة التي يجب تخصيصها حتى تكتمل الجلسة/عملية تأكيد الاتصال الآمنة. تشمل أمثلة التخصيص على المدى الطويل عمليات الحظر المخصّصة لكائنات CASE/PASE وبيانات السياق الخاصة بها. التخصيص القصير المدى هو ذاكرة مطلوبة لتنفيذ عملية معيّنة ويمكن إصدارها فورًا بعد ذلك. ويساعد هذا الإدخال في تحسين استخدام الذاكرة في نظام مقيّد بالذاكرة. إنّ استخدام هذه المَعلمة عشوائي ويعتمد على أداة تنفيذ الدالة. على سبيل المثال، يتم تجاهل هذه المعلمة عند استخدام C Standard Library()) .
قيم الإرجاع
Pointer
إلى كتلة ذاكرة في حال نجاح ذلك.
NULL-pointer
في حال تعذُّر تخصيص الذاكرة.

MemoryFree

void MemoryFree(
  void *p
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لإطلاق كتلة ذاكرة تخصصها دالة MemeoryAlloc() .

التفاصيل
المعلمات
[in] p
أشِر إلى كتلة ذاكرة يجب إصدارها.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لتهيئة الذاكرة والموارد اللازمة للوظائف المناسبة لتخصيص ذاكرة مدير Weave.

هذه الدالة خاصة بالنظام الأساسي وقد تكون فارغة في حالات معينة. على سبيل المثال، لا تفعل هذه الدالة أي شيء عند استخدام الدالتين C Standard Library() وfree() لتخصيص الذاكرة.

التفاصيل
المعلمات
[in] buf
يشير هذا المصطلح إلى مؤشر للمخزن المؤقت المخصّص للذاكرة والذي يجب استخدامه كمجمّع ذاكرة لتخصيص ذاكرة مدير الأمان في Weave. هذا الإدخال اختياري (يتم ضبط القيمة التلقائية على "NULL") ويجب عدم استخدامه في حال عدم استخدام مخزن مؤقت مخصّص للذاكرة.
[in] bufSize
حجم المخزن المؤقت المخصص للذاكرة. هذا الإدخال اختياري (يتم ضبطه على القيمة 0 تلقائيًا) ويجب عدم استخدامه في حال عدم استخدام المخزن المؤقت المخصّص للذاكرة. عند استخدام مخزن مؤقت مخصص للذاكرة، تتحقق الدالة وتنشئ خطأ إذا لم يكن حجم المخزن المؤقت كبيرًا بما يكفي لدعم حالات استخدام مدير الأمان في Weave.
قيم الإرجاع
WEAVE_ERROR_BUFFER_TOO_SMALL
إذا لم يكن حجم المخزن المؤقت المخصص للإدخال كافيًا لدعم حالات استخدام مدير الأمان في Weave.
WEAVE_NO_ERROR
عند النجاح.
other
حدث خطأ ناتج عن وظيفة إعداد الذاكرة الخاصة بالنظام الأساسي.

MemoryShutdown

void MemoryShutdown(
  void
)

يتم استدعاء هذه الدالة بواسطة طبقة Weave لإصدار جميع الموارد التي تم تخصيصها بواسطة الدالة MemoryInit().

يمكن أن تكون هذه الدالة طلبًا فارغًا إذا لم تكن هناك حاجة إلى تحرير الموارد. على سبيل المثال، هذه هي الحالة التي يتم فيها استخدام الدالتين C Standard Library ()C Standard Library () وfree() (free()) لتخصيص الذاكرة.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

ويتم استدعاء هذه الدالة لإبلاغ التطبيق عند انتهاء عملية التشفير التي تستهلك الكثير من الوقت للتو.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

ويتم استدعاء هذه الدالة لإبلاغ التطبيق عند اقتراب بدء عملية تشفير تستغرق وقتًا طويلاً.