nl:: Weave:: 平台:: 安全性
這個命名空間包含 Weave 中所有 Weave Security Monitor 記憶體管理工具的介面。
總結
此命名空間中的函式將由採用 Weave 的平台根據特定環境的需求/限制來實作。
Typedefs |
|
---|---|
BlockMark_t
|
typedefuint8_t
用於標示目前分配/取消分配的區塊類型。 |
BlockSetParams_t
|
typedefuint8_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]
|
const BlockSetParams_t
經過編碼的區塊集會設定參數。
|
sBufferAllocationMask = {
kNetworkBuffer0BlockAllocationMask,
kNetworkBuffer1BlockAllocationMask,
}[kNumberOfNetworkBuffers]
|
const BlockMark_t
緩衝區遮罩遮罩組合。
|
sMemBlocksAllocated = 0
|
指出分配/取消分配的區塊。
|
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
|
void *
指向 NULL 的記憶體緩衝區指標。
|
sNetworkBuffersUsed = true
|
bool
布林值,表示 Simple Allocator 是否使用網路緩衝區 (true) 或否 (false)。
|
函式 |
|
---|---|
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
系統會呼叫這項函式來通知應用程式需花費時間的加密編譯作業即將開始。
|
列舉
封鎖設定欄位
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
|
Set #2 的大小為 512 個位元組。 |
kBlockSet2isLongTerm
|
第 #2 組是長期選項。 |
kBlockSet3BufferIndex
|
設定 #3 的緩衝區索引為 0。 |
kBlockSet3Count
|
第 3 組區塊的數量為 1。 |
kBlockSet3Size
|
第 3 組大小是 512 位元組。 |
kBlockSet3isLongTerm
|
#3 類型是短期類型。 |
kBlockSet4BufferIndex
|
Set #4 的緩衝索引是 1。 |
kBlockSet4Count
|
第 4 組區塊的數量為 2。 |
kBlockSet4Size
|
Set 4 的大小為 640 位元組。 |
kBlockSet4isLongTerm
|
第 #4 組是短期。 |
kMaxBlockSize
|
Simple Allocator 支援的區塊大小上限。 |
kMinBufferSize
|
支援簡易 Allocator 用途所需的網路緩衝區大小下限。 此數據來自在網絡緩衝器 #1 中分配的二個存儲盒 (640 + 600) 的大小。 |
kNetworkBuffer0BlockAllocationMask
|
這個遮罩可識別從網路緩衝區 #0 分配的所有記憶體區塊。 |
kNetworkBuffer1BlockAllocationMask
|
這個遮罩可識別從網路緩衝區 #1 分配的所有記憶體區塊。 |
kNumberOfBlockSets
|
Simple Allocator 使用的區塊集數量。 |
kNumberOfNetworkBuffers
|
Simple Allocator 所使用的網路緩衝區數量。 |
kTotalMemorySize
|
Simple Allocator 使用的記憶體總量。 |
Typedefs
封鎖標記_t
uint8_t BlockMark_t
用於標示目前分配/取消分配的區塊類型。
uint8_t - 最多支持 8 個存儲器總數 uint16_t - 支持最多 16 個存儲器總 uint32_t - 最多支持最多 32 個存儲線
區塊設定參數
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 | 長期記憶體區塊 |
變數
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, }
緩衝區遮罩遮罩組合。
指出緩衝區中的所有區塊是否已取消分配,然後可撤銷緩衝區。
SMemBuf
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
指向 NULL 的記憶體緩衝區指標。
使用網路緩衝區時,使用 sMemBufs[] 指向 PacketBuffer 物件。使用專用緩衝區時,使用 sMemBufs[0] 指向該緩衝區,並忽略其他 sMemBufs[] 指標。
使用 SNetwork 緩衝區
bool sNetworkBuffersUsed = true
布林值,表示 Simple Allocator 是否使用網路緩衝區 (true) 或否 (false)。
值為 false 時,系統會使用使用 MemoryInit() 函式提供的專用緩衝區。
函式
解碼區塊參數
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 層會呼叫此函式來產生隨機資料。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
InitSecureRandomDataSource
WEAVE_ERROR InitSecureRandomDataSource( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen )
Weave 層會呼叫此函式來初始化隨機資料來源。
這項功能僅適用於特定平台,不需要初始化隨機資料來源時,這項功能會留空。
詳細資料 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
記憶體
void * MemoryAlloc( size_t size )
此函式是由 Weave 層呼叫,以分配「記憶體」位元組的記憶體區塊。
這個函式相當於 MemoryAlloc(size, false)。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
記憶體
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
此函式是由 Weave 層呼叫,以分配「記憶體」位元組的記憶體區塊。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
傳回值 |
|
記憶體可用
void MemoryFree( void *p )
Weave 層會呼叫此函式,以釋出 MemeoryAlloc() 函式分配的記憶體區塊。
詳細資料 | |||
---|---|---|---|
參數 |
|
記憶體
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
Weave 層會呼叫此函式,以便初始化 Weave Security Manager 記憶體分配器適當的功能所需的記憶體和資源。
此函式僅適用於特定平台,且在某些情況下可能為空白。例如,使用 C Standard Library Malloc() 和 free() 函式進行記憶體分配時,此函式不會執行任何動作。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
記憶體關閉
void MemoryShutdown( void )
Weave 層會呼叫此函式,以釋出由 MemoryInit() 函式分配的所有資源。
如果不需要釋出資源,這個函式可以是空白的呼叫。例如,使用 C Standard Library malloc() 和 free() 函式進行記憶體分配時。
OnTimeConsumingCrypto 完成
void OnTimeConsumingCryptoDone( void )
呼叫此函式時,系統會在耗時加密編譯作業完成時通知應用程式。
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
系統會呼叫這項函式來通知應用程式需花費時間的加密編譯作業即將開始。