nl:: Weave:: Platform:: Security
這個命名空間包含 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
布林值,表示簡易分配器使用網路緩衝區 (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 層會呼叫此函式,分配「size」記憶體區塊一個位元組
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
Weave 層會呼叫此函式,分配「size」記憶體區塊一個位元組
|
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
BlockSetParamFields
以 8 位元編碼格式封鎖組合參數欄位的位置。
屬性 | |
---|---|
kBlockSetBufferIndexMask
|
緩衝區索引欄位遮罩。 |
kBlockSetBufferIndexShift
|
緩衝區索引欄位偏移。 |
kBlockSetCountMask
|
數量欄位遮罩: |
kBlockSetCountShift
|
數量欄位偏移。 |
kBlockSetIsLongTermMask
|
類型欄位遮罩。 |
kBlockSetIsLongTermShift
|
輸入欄位 Shift。 |
kBlockSetSizeMask
|
大小欄位遮罩。 |
kBlockSetSizeShift
|
。 |
kBlockSetSizeValueShift
|
大小欄位解碼偏移 (乘以 128)。 |
BlockSetParams
BlockSetParams
定義區塊集參數。
屬性 | |
---|---|
kBlockSet1BufferIndex
|
將 #1 緩衝區索引設為 0。 |
kBlockSet1Count
|
設定的區塊數量為 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
|
簡易分配器支援的區塊大小上限。 |
kMinBufferSize
|
支援簡易分配器用途所需的網路緩衝區空間下限。 此參數衍生自網路緩衝區 #1 中分配的兩個記憶體區塊 (640 + 600) 大小。 |
kNetworkBuffer0BlockAllocationMask
|
這個遮罩可識別從網路緩衝區 #0 分配的所有記憶體區塊。 |
kNetworkBuffer1BlockAllocationMask
|
這個遮罩可識別從網路緩衝區 #1 分配的所有記憶體區塊。 |
kNumberOfBlockSets
|
簡易分配器使用的區塊集數量。 |
kNumberOfNetworkBuffers
|
簡易分配器使用的網路緩衝區數量。 |
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 | 長期記憶體區塊 |
變數
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
布林值,表示簡易分配器使用網路緩衝區 (true),以及不是 (false)。
設為 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 Security Manager 記憶體配置器功能所需的記憶體和資源。
此函式僅適用於平台,在某些情況下可能空白。舉例來說,如果 C 標準程式庫 malloc() 和 free() 函式用於記憶體配置,此函式不會執行任何動作。
詳細資料 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
MemoryShutdown
void MemoryShutdown( void )
Weave 層會呼叫此函式,釋出 MemoryInit() 函式分配的所有資源。
如果不需要釋出資源,這個函式可以設為空白的呼叫。舉例來說,C 標準程式庫 Malloc() 和 Free() 函式會用於分配記憶體。
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
當系統完成耗時的加密編譯作業時,系統會呼叫此函式來通知應用程式。
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
系統會呼叫此函式,通知應用程式即將開始經過耗時的加密編譯作業。