تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

nl:: Weave::النظام الأساسي::الأمان

تحتوي مساحة الاسم هذه على جميع الواجهات ضمن 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 typedef
uint8_t
النوع المستخدم لوضع علامة على المجموعة المخصصة أو المخصّصة حاليًا.
BlockSetParams_t typedef
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 Alcator.

الدوال

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 لتخصيص كتلة من الذاكرة "size" بايت.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
تُسمى هذه الوظيفة طبقة Weave لتخصيص كتلة من الذاكرة "size" بايت.
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::النظام الأساسي::الأمان::AES128BlockCipher
nl::Weave::النظام الأساسي::الأمان::AES128BlockCipherDec
nl::Weave::النظام الأساسي::الأمان::AES128BlockCipherEnc
nl::Weave::النظام الأساسي::الأمان::AES256BlockCipher
nl::Weave::النظام الأساسي::الأمان::AES256BlockCipherDec
nl::Weave::النظام الأساسي::الأمان::AES256BlockCipherEnc
nl::Weave::النظام الأساسي::الأمان::SHA1
nl::Weave::النظام الأساسي::الأمان::SHA256

تعداد

حظر حقول PPramram

 BlockSetParamFields

حظر موقع حقول المعلمات في نموذج مشفر بـ 8 بت.

أماكن إقامة
kBlockSetBufferIndexMask

قناع حقل المخزن المؤقت

kBlockSetBufferIndexShift

تغيُّر حقل المؤشر المخزن المؤقت

kBlockSetCountMask

قناع الحقل.

kBlockSetCountShift

تغيُّر عدد الحقول

kBlockSetIsLongTermMask

اكتب قناع الحقل.

kBlockSetIsLongTermShift

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

kBlockSetSizeMask

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

kBlockSetSizeShift

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

kBlockSetSizeValueShift

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

رموز منع البناء

 BlockSetParams

تحديد معلمات مجموعة الكتل.

أماكن إقامة
kBlockSet1BufferIndex

ضبط فهرس المخزن المؤقت 1 على 0.

kBlockSet1Count

عدد الكتلة #1 هو 1.

kBlockSet1Size

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

kBlockSet1isLongTerm

المجموعة الأولى من نوع 1 طويلة الأمد.

kBlockSet2BufferIndex

ضبط فهرس المخزن المؤقت 2 على 0.

kBlockSet2Count

عدد الكتلة #2 هو 1.

kBlockSet2Size

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

kBlockSet2isLongTerm

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

kBlockSet3BufferIndex

ضبط فهرس المخزن المؤقت 3 على 0.

kBlockSet3Count

عدد الكتلة رقم 3 هو 1.

kBlockSet3Size

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

kBlockSet3isLongTerm

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

kBlockSet4BufferIndex

ضبط فهرس المخزن المؤقت 4 على 1.

kBlockSet4Count

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

kBlockSet4Size

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

kBlockSet4isLongTerm

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

kMaxBlockSize

يمكن استخدام الحد الأقصى لحجم الكتلة باستخدام Simple Alcator.

kMinBufferSize

الحد الأدنى لحجم ذاكرة التخزين المؤقت للشبكة المطلوب لإتاحة حالات استخدام تطبيق Simple Alatoror.

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

kNetworkBuffer0BlockAllocationMask

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

kNetworkBuffer1BlockAllocationMask

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

kNumberOfBlockSets

عدد مجموعات الكتل التي يستخدمها Simple Alcator.

kNumberOfNetworkBuffers

عدد ذاكرات التخزين المؤقت على الشبكة التي يستخدمها Simple Alcator.

kTotalMemorySize

إجمالي الذاكرة المستخدمة من قِبل تطبيق Simple Alcator.

رفوف النوع

حظر_علامة_

uint8_t BlockMark_t

النوع المستخدم لوضع علامة على المجموعة المخصصة أو المخصّصة حاليًا.

uint8_t - يدعم ما يصل إلى 8 وحدات ذاكرة إجمالية uint16_t - يدعم ما يصل إلى 16 كتلة ذاكرة إجمالية uint32_t - يدعم ما يصل إلى 32 كتلة ذاكرة

حظر SetParams_t

uint8_t BlockSetParams_t

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

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

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







}

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

SufferAllocationMask

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




                                                                                       }

مجموعة من أقنعة حظر التخزين المؤقت

تحدّد ما إذا كانت جميع الكتلة في المخزن المؤقت وغير المخصّصة ويمكن تخصيصها بعد ذلك.

تم تخصيص SMemBlocksA

BlockMark_t sMemBlocksAllocated = 0

يشير هذا العمود إلى المجموعة التي تم تخصيصها/تخصيصها.

تم الضبط على القيمة 0 - تعني أن جميع أجزاء الذاكرة قد تم تخصيصها ولم يتم تخصيصها.

قناة SMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

تم إعداد مؤشرات المخزن المؤقت للذاكرة إلى NULL.

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

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

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

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

الدوال

ترميز DeSetBlockSetParams

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

الحصول على بيانات آمنة آمنة

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
النجاح.

مصدر بيانات InitSecure عشوائية

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

تُسمى هذه الوظيفة طبقة Weave لإعداد مصدر بيانات عشوائي.

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

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

تذكرة MemoryAlloc

void * MemoryAlloc(
  size_t size
)

تُسمى هذه الوظيفة طبقة Weave لتخصيص كتلة من الذاكرة "size" بايت.

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

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

تذكرة MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

تُسمى هذه الوظيفة طبقة Weave لتخصيص كتلة من الذاكرة "size" بايت.

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

بدون ذاكرة

void MemoryFree(
  void *p
)

تُسمى هذه الوظيفة طبقة Weave لإيقاف كتلة الذاكرة التي خصّصتها دالة MemeoryAlloc().

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

تذكرة MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

تُسمى هذه الوظيفة طبقة Weave لإعداد الذاكرة والموارد المطلوبة لوظيفة "مدير أمان Weave "مدير" المناسبة.

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

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

إيقاف الذاكرة

void MemoryShutdown(
  void
)

تُسمى هذه الوظيفة طبقة Weave لتحرير جميع الموارد التي تم تخصيصها من خلال دالة MemoryInit().

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

OnTimeConsumingCryptoتمّ

void OnTimeConsumingCryptoDone(
  void
)

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

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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