nl:: Weave:: Platform:: Security
這個命名空間包含 Weave 中 Weave Security Monitor 記憶體管理工具的所有介面。
摘要
根據特定環境的需求/限制,使用 Weave 的平台應實作此命名空間中的函式。
Typedefs |
|
---|---|
BlockMark_t
|
typedefuint8_t
這個類型是用於標示目前已分配/未分配的區塊。 |
BlockSetParams_t
|
typedefuint8_t
這種類型是用來編碼區塊集資訊。 |
Variables |
|
---|---|
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]
|
const BlockSetParams_t
編碼區塊會設定參數。
|
sBufferAllocationMask = {
kNetworkBuffer0BlockAllocationMask,
kNetworkBuffer1BlockAllocationMask,
}[kNumberOfNetworkBuffers]
|
const BlockMark_t
一組緩衝區區塊遮罩。
|
sMemBlocksAllocated = 0
|
指出已分配/未分配的區塊。
|
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
|
void *
初始化為 NULL 的記憶體緩衝區指標。
|
sNetworkBuffersUsed = true
|
bool
布林值,指出 Simple Allocator 使用網路緩衝區時是不是 (true)。
|
函式 |
|
---|---|
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
如果有即將啟動的加密編譯作業即將開始,呼叫此函式以通知應用程式。
|
列舉
BlockSetParamFields
BlockSetParamFields
封鎖一組參數欄位的位置 (採用 8 位元編碼格式)。
屬性 | |
---|---|
kBlockSetBufferIndexMask
|
緩衝區索引欄位遮罩。 |
kBlockSetBufferIndexShift
|
緩衝區索引欄位轉換。 |
kBlockSetCountMask
|
計數欄位遮罩。 |
kBlockSetCountShift
|
計數欄位位移。 |
kBlockSetIsLongTermMask
|
類型欄位遮罩。 |
kBlockSetIsLongTermShift
|
輸入欄位位移。 |
kBlockSetSizeMask
|
大小欄位遮罩。 |
kBlockSetSizeShift
|
大小欄位偏移。 |
kBlockSetSizeValueShift
|
大小欄位解碼位移 (乘以 128)。 |
BlockSetParams
BlockSetParams
定義區塊集參數。
屬性 | |
---|---|
kBlockSet1BufferIndex
|
將 #1 緩衝區索引設為 0。 |
kBlockSet1Count
|
將區塊計數設為 1。 |
kBlockSet1Size
|
將 #1 大小設定為 128 個位元組。 |
kBlockSet1isLongTerm
|
設定 #1 類型為長期類型。 |
kBlockSet2BufferIndex
|
將 #2 緩衝區索引設為 0。 |
kBlockSet2Count
|
將區塊計數設為 1。 |
kBlockSet2Size
|
設定 #2 的大小為 512 個位元組。 |
kBlockSet2isLongTerm
|
設定 #2 類型為長期類型。 |
kBlockSet3BufferIndex
|
將 #3 緩衝區索引設為 0。 |
kBlockSet3Count
|
將 #3 的區塊計數設為 1。 |
kBlockSet3Size
|
設定 #3 的大小為 512 個位元組。 |
kBlockSet3isLongTerm
|
設定 #3 類型為短期。 |
kBlockSet4BufferIndex
|
將 #4 緩衝區索引設為 1。 |
kBlockSet4Count
|
將區塊計數設為 2。 |
kBlockSet4Size
|
設定 #4 的大小為 640 個位元組。 |
kBlockSet4isLongTerm
|
設定 #4 類型為短期。 |
kMaxBlockSize
|
簡易分配器支援的區塊大小上限。 |
kMinBufferSize
|
支援 Simple Allocator 用途所需的網路緩衝區空間下限。 這個參數衍生自網路緩衝區 #1 中分配的兩個記憶體區塊 (640 + 600)。 |
kNetworkBuffer0BlockAllocationMask
|
這個遮罩會識別從網路緩衝區 #0 分配的所有記憶體區塊。 |
kNetworkBuffer1BlockAllocationMask
|
這個遮罩會識別從網路緩衝區 #1 分配的所有記憶體區塊。 |
kNumberOfBlockSets
|
簡易分配器使用的區塊集數量。 |
kNumberOfNetworkBuffers
|
Simple Allocator 使用的網路緩衝區數量。 |
kTotalMemorySize
|
簡易配置器使用的記憶體總量。 |
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] | 解碼中 |
000 號 | 0 個位元組 |
001 | 128 個位元組 |
010 | 256 個位元組 |
... | - |
111 號 | 896 個位元組 |
[4:3] | 解碼中 |
00 號 | 4 個積木 |
01 | 1 個模塊 |
10 | 2 塊積木 |
11 | 3 塊積木 |
[6:5] | 解碼中 |
00 號 | 網路緩衝區 #0 |
... | - |
11 | 網路緩衝區 #3 |
[7]。 | 解碼中 |
0 號 | 短期記憶體區塊 |
1 | 長期記憶體區塊 |
Variables
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, }
一組緩衝區區塊遮罩。
識別緩衝區中的所有區塊是否未分配,然後才能恢復緩衝區。
sMemBufs
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
初始化為 NULL 的記憶體緩衝區指標。
使用網路緩衝區時,使用 sMemBufs[] 指向 PacketBuffer 物件。使用專用緩衝區時,sMemBufs[0] 會指向該緩衝區,並忽略其他 sMemBufs[] 指標。
sNetworkBuffersUsed
bool sNetworkBuffersUsed = true
布林值,指出 Simple Allocator 使用網路緩衝區時是不是 (true)。
設為 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 層會呼叫此函式以產生隨機資料。
詳細說明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
InitSecureRandomDataSource
WEAVE_ERROR InitSecureRandomDataSource( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen )
Weave 層會呼叫此函式,初始化隨機資料來源。
這個函式僅適用於特定平台,因此在不需要隨機資料來源初始化時,該函式可能會空白。
詳細說明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
MemoryAlloc
void * MemoryAlloc( size_t size )
Weave 層會呼叫此函式,分配記憶體區塊「size」位元組。
這個函式相當於 MemoryAlloc(size, false)。
詳細說明 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
Weave 層會呼叫此函式,分配記憶體區塊「size」位元組。
詳細說明 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
MemoryFree
void MemoryFree( void *p )
Weave 層會呼叫此函式,以釋放 MemeoryAlloc() 函式分配的記憶體區塊。
詳細說明 | |||
---|---|---|---|
參數 |
|
MemoryInit
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
Weave 層會呼叫這個函式,以初始化 Weave 安全管理工具記憶體配置器的適當功能所需的記憶體和資源。
這項功能僅適用於特定平台,在某些情況下可能會留空。舉例來說,使用 C 標準程式庫 Malloc() 和 free() 函式時,這個函式不會執行任何操作。
詳細說明 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
MemoryShutdown
void MemoryShutdown( void )
Weave 層會呼叫此函式,以釋出 MemoryInit() 函式分配的所有資源。
如果不需要釋出資源,這個函式可以是空白呼叫。舉例來說,使用 C 標準程式庫 malloc() 和 free() 函式進行記憶體配置時,就會發生這種情況。
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
耗時的加密作業剛好完成時,會呼叫此函式來通知應用程式。
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
如果有即將啟動的加密編譯作業即將開始,呼叫此函式以通知應用程式。