nl::Weave::平台::安全性

這個命名空間包含 Weave 中所有 Weave Security Monitor 記憶體管理工具的介面。

總結

此命名空間中的函式將由採用 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
}
列舉
定義區塊集參數。

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]
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
系統會呼叫這項函式來通知應用程式需花費時間的加密編譯作業即將開始。

類別

nl::Weave::Platform::安全性::AES128BlockCipher
nl::Weave::Platform::安全性::AES128BlockCipherDec
nl::Weave::Platform::安全性::AES128BlockCipherEnc
nl::Weave::Platform::安全性::AES256BlockCipher
nl::Weave::Platform::安全性::AES256BlockCipherDec
nl::Weave::Platform::安全性::AES256BlockCipherEnc
nl::Weave::Platform::安全性::SHA1
nl::Weave::Platform::安全性::SHA256

列舉

封鎖設定欄位

 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] - 集中的記憶體區塊大小。大小值的精細程度為 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,




                                                                                       }

緩衝區遮罩遮罩組合。

指出緩衝區中的所有區塊是否已取消分配,然後可撤銷緩衝區。

SMemBlocksAl 定位

BlockMark_t sMemBlocksAllocated = 0

指出分配/取消分配的區塊。

初始化為 0 - 表示所有記憶體區塊和未分配。

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 層會呼叫此函式來產生隨機資料。

詳細資料
參數
[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
指向為隨機資料產生器產生熵的函式。如果 Ariorith 不需要熵輸入,則輸入值可以是 NULL,也就是使用 OpenSSL 版本的隨機資料產生器所產生的結果。
[in] entropyLen
指定熵配置的熵大小 (以位元組為單位)。
[in] personalizationData
指向儲存緩衝資料輸入資料的記憶體緩衝區。這類資料應以特定裝置為主,而且有助於提升隨機資料的統計特性。
[in] perDataLen
指定個人化資料大小 (以位元組為單位)。
傳回值
WEAVE_ERROR_INVALID_ARGUMENT
如果 函式已傳遞無效的引數。
WEAVE_NO_ERROR
成功。

記憶體

void * MemoryAlloc(
  size_t size
)

此函式是由 Weave 層呼叫,以分配「記憶體」位元組的記憶體區塊。

這個函式相當於 MemoryAlloc(size, false)。

詳細資料
參數
[in] size
指定要求的記憶體大小 (以位元組為單位)。
傳回值
Pointer
就能成功建立記憶體區塊
NULL-pointer

記憶體

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

此函式是由 Weave 層呼叫,以分配「記憶體」位元組的記憶體區塊。

詳細資料
參數
[in] size
指定要求的記憶體大小 (以位元組為單位)。
[in] isLongTermAlloc
布林值,表示要求的記憶體區塊 (True) 與否 (false) 是否適用於長期使用。長期分配是指在安全工作階段/握手完成之前,所分配的記憶體。長期分配的範例包括分配給 CASE/PASE 物件的區塊及其內容資料。短期分配是指執行特定作業所需的記憶體,可立即釋出。此輸入設定有助於最佳化記憶體受限系統中的記憶體使用率。此參數為任意參數,且取決於函式實作工具。例如,在使用 C Standard Library malloc() 時,系統會忽略這個參數。
傳回值
Pointer
就能成功建立記憶體區塊
NULL-pointer

記憶體可用

void MemoryFree(
  void *p
)

Weave 層會呼叫此函式,以釋出 MemeoryAlloc() 函式分配的記憶體區塊。

詳細資料
參數
[in] p
指向應釋出的記憶體區塊。

記憶體

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Weave 層會呼叫此函式,以便初始化 Weave Security Manager 記憶體分配器適當的功能所需的記憶體和資源。

此函式僅適用於特定平台,且在某些情況下可能為空白。例如,使用 C Standard Library Malloc() 和 free() 函式進行記憶體分配時,此函式不會執行任何動作。

詳細資料
參數
[in] buf
指向專屬記憶體緩衝區的指標,這個記憶體應用來當做 Weave 安全性管理員記憶體配置的記憶體集區。此輸入為選用,預設為 NULL,若不使用專用記憶體緩衝區,則不應使用。
[in] bufSize
專用記憶體緩衝區的大小。此輸入是選擇性的 (預設值為 0),但若不使用專用記憶體緩衝區,則不應使用。使用專用記憶體緩衝區時,如果緩衝區空間過大而無法支援 Weave 安全性管理員用途,函式就會檢查並產生錯誤。
傳回值
WEAVE_ERROR_BUFFER_TOO_SMALL
如果專用輸入緩衝區空間不足以支援 Weave 安全性管理員用途,
WEAVE_NO_ERROR
成功。
other
平台專屬記憶體初始化函式產生的錯誤。

記憶體關閉

void MemoryShutdown(
  void
)

Weave 層會呼叫此函式,以釋出由 MemoryInit() 函式分配的所有資源。

如果不需要釋出資源,這個函式可以是空白的呼叫。例如,使用 C Standard Library malloc() 和 free() 函式進行記憶體分配時。

OnTimeConsumingCrypto 完成

void OnTimeConsumingCryptoDone(
  void
)

呼叫此函式時,系統會在耗時加密編譯作業完成時通知應用程式。

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

系統會呼叫這項函式來通知應用程式需花費時間的加密編譯作業即將開始。