nl:: بافت:: پلتفرم:: امنیت

این فضای نام شامل تمام رابط های موجود در Weave برای مدیریت حافظه Weave Security Monitor است.

خلاصه

توابع در این فضای نام باید توسط پلتفرم هایی که از Weave استفاده می کنند، با توجه به نیازها/محدودیت های محیط خاص پیاده سازی شوند.

شمارش ها

BlockSetParamFields {
kBlockSetSizeMask = 0x07,
kBlockSetSizeShift = 0,
kBlockSetSizeValueShift = 7,
kBlockSetCountMask = 0x18,
kBlockSetCountShift = 3,
kBlockSetBufferIndexMask = 0x60,
kBlockSetBufferIndexShift = 5,
kBlockSetIsLongTermMask = 0x80,
kBlockSetIsLongTermShift = 7
}
enum
مکان فیلدهای پارامتر مجموعه را در فرم کدگذاری شده 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
}
enum
پارامترهای مجموعه بلوک را تعریف می کند.

Typedefs

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]
مجموعه ای از ماسک های بلوک بافر.
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 Security Manager فراخوانی می شود.
MemoryShutdown (void)
void
این تابع توسط لایه Weave فراخوانی می شود تا تمام منابعی که توسط تابع MemoryInit() تخصیص داده شده اند را آزاد کند.
OnTimeConsumingCryptoDone (void)
void
این تابع برای اطلاع دادن به برنامه زمانی که یک عملیات رمزنگاری وقت گیر به تازگی به پایان رسیده است فراخوانی می شود.
OnTimeConsumingCryptoStart (void)
void
این تابع برای اطلاع دادن به برنامه زمانی که یک عملیات رمزنگاری وقت گیر در شرف شروع است، فراخوانی می شود.

کلاس ها

nl:: بافت:: پلتفرم:: امنیت:: AES128BlockCipher
nl:: بافت:: پلتفرم:: امنیت:: AES128BlockCipherDec
nl:: بافت:: پلتفرم:: امنیت:: AES128BlockCipherEnc
nl:: بافت:: پلتفرم:: امنیت:: AES256BlockCipher
nl:: بافت:: پلتفرم:: امنیت:: AES256BlockCipherDec
nl:: بافت:: پلتفرم:: امنیت:: AES256BlockCipherEnc
nl:: بافت:: بستر:: امنیت:: SHA1
nl:: بافت:: بستر:: امنیت:: SHA256

شمارش ها

BlockSetParamFields

 BlockSetParamFields

مکان فیلدهای پارامتر مجموعه را در فرم کدگذاری شده 8 بیتی مسدود کنید.

خواص
kBlockSetBufferIndexMask

ماسک فیلد شاخص بافر.

kBlockSetBufferIndexShift

تغییر فیلد شاخص بافر.

kBlockSetCountMask

شمارش ماسک میدان.

kBlockSetCountShift

شمارش تغییر میدان

kBlockSetIsLongTermMask

ماسک فیلد را تایپ کنید.

kBlockSetIsLongTermShift

فیلد shift را تایپ کنید.

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

تعداد مجموعه بلوک های استفاده شده توسط Simple Allocator.

kNumberOfNetworkBuffers

تعداد بافرهای شبکه استفاده شده توسط Simple Allocator.

kTotalMemorySize

کل حافظه استفاده شده توسط Simple Allocator.

Typedefs

BlockMark_t

uint8_t BlockMark_t

نوع مورد استفاده برای علامت گذاری که کدام بلوک در حال حاضر تخصیص داده شده/تخصیص نشده است.

uint8_t - پشتیبانی از حداکثر 8 بلوک حافظه در مجموع uint16_t - پشتیبانی از حداکثر 16 بلوک حافظه در مجموع uint32_t - پشتیبانی از حداکثر 32 بلوک حافظه در کل

BlockSetParams_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 1 بلوک
10 2 بلوک
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),







}

بلوک کدگذاری شده پارامترها را تنظیم می کند.

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 استفاده می شوند.

هنگامی که بافر اختصاصی false ارائه شده با تابع 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 (اندازه، نادرست) است.

جزئیات
پارامترها
[in] size
اندازه حافظه درخواستی را بر حسب بایت مشخص می کند.
ارزش های بازگشتی
Pointer
در صورت موفقیت به یک بلوک حافظه.
NULL-pointer
اگر تخصیص حافظه ناموفق باشد.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

این تابع توسط لایه Weave برای تخصیص یک بلوک از حافظه بایت های "اندازه" فراخوانی می شود.

جزئیات
پارامترها
[in] size
اندازه حافظه درخواستی را بر حسب بایت مشخص می کند.
[in] isLongTermAlloc
یک بولی که نشان می دهد (درست) یا نه (نادرست) بلوک حافظه درخواستی برای استفاده طولانی مدت است. تخصیص بلندمدت حافظه ای است که باید تا پایان جلسه/دست دادن ایمن تخصیص داده شود. نمونه هایی از تخصیص طولانی مدت شامل بلوک های تخصیص داده شده برای اشیاء CASE/PASE و داده های زمینه آنها است. تخصیص کوتاه مدت حافظه مورد نیاز برای انجام عملیات خاص است و می تواند بلافاصله پس از آن آزاد شود. این ورودی به بهینه سازی استفاده از حافظه در یک سیستم با محدودیت حافظه کمک می کند. استفاده از این پارامتر دلخواه است و به پیاده کننده تابع بستگی دارد. برای مثال، زمانی که از C Standard Library malloc() استفاده می شود، این پارامتر نادیده گرفته می شود.
ارزش های بازگشتی
Pointer
در صورت موفقیت به یک بلوک حافظه.
NULL-pointer
اگر تخصیص حافظه ناموفق باشد.

MemoryFree

void MemoryFree(
  void *p
)

این تابع توسط لایه Weave فراخوانی می شود تا یک بلوک حافظه اختصاص داده شده توسط تابع MemeoryAlloc() را آزاد کند.

جزئیات
پارامترها
[in] p
اشاره گر به یک بلوک حافظه است که باید آزاد شود.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

این تابع توسط لایه Weave برای مقداردهی اولیه حافظه و منابع مورد نیاز برای عملکرد مناسب تخصیص دهنده حافظه Weave Security Manager فراخوانی می شود.

این تابع مختص پلتفرم است و ممکن است در موارد خاصی خالی باشد. برای مثال، زمانی که توابع C Standard Library malloc() و free() برای تخصیص حافظه استفاده می شوند، این تابع هیچ کاری انجام نمی دهد.

جزئیات
پارامترها
[in] buf
یک اشاره گر به یک بافر حافظه اختصاصی، که باید به عنوان یک مخزن حافظه برای تخصیص حافظه Weave Security Manager استفاده شود. این ورودی اختیاری است (به طور پیش فرض NULL است) و اگر از بافر حافظه اختصاصی استفاده نمی شود، نباید از آن استفاده شود.
[in] bufSize
اندازه یک بافر حافظه اختصاصی این ورودی اختیاری است (به طور پیش فرض 0) و اگر از بافر اختصاصی حافظه استفاده نمی شود، نباید از آن استفاده شود. هنگامی که از بافر اختصاصی حافظه استفاده می شود، اگر اندازه بافر به اندازه کافی بزرگ نباشد که از موارد استفاده Weave Security Manager پشتیبانی کند، عملکرد بررسی می کند و خطا ایجاد می کند.
ارزش های بازگشتی
WEAVE_ERROR_BUFFER_TOO_SMALL
اگر اندازه بافر ورودی اختصاصی برای پشتیبانی از موارد استفاده از Weave Security Manager کافی نباشد.
WEAVE_NO_ERROR
در مورد موفقیت
other
خطای ایجاد شده توسط تابع مقداردهی اولیه حافظه مخصوص پلتفرم.

Memory Shutdown

void MemoryShutdown(
  void
)

این تابع توسط لایه Weave فراخوانی می شود تا تمام منابعی که توسط تابع MemoryInit() تخصیص داده شده اند را آزاد کند.

اگر نیازی به انتشار منابع نباشد، این تابع می تواند یک تماس خالی باشد. به عنوان مثال، این مورد زمانی است که توابع C Standard Library malloc() و free() برای تخصیص حافظه استفاده می شوند.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

این تابع برای اطلاع دادن به برنامه زمانی که یک عملیات رمزنگاری وقت گیر به تازگی به پایان رسیده است فراخوانی می شود.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

این تابع برای اطلاع دادن به برنامه زمانی که یک عملیات رمزنگاری وقت گیر در شرف شروع است، فراخوانی می شود.