nl::Weave::Platform::Security

這個命名空間包含 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
布林值,表示簡易分配器使用網路緩衝區 (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
系統會呼叫此函式,通知應用程式即將開始經過耗時的加密編譯作業。

類別

nl::Weave::Platform::Security::AES128BlockCipher
nl::Weave::Platform::Security::AES128BlockCipherDec
nl::Weave::Platform::Security::AES128BlockCipherEnc
nl::Weave::Platform::Security::AES256BlockCipher
nl::Weave::Platform::Security::AES256BlockCipherDec
nl::Weave::Platform::Security::AES256BlockCipherEnc
nl::Weave::Platform::Security::SHA1
nl::Weave::Platform::Security::SHA256

列舉

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] - 集合中的記憶體區塊大小。大小值以 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

布林值,表示簡易分配器使用網路緩衝區 (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 層會呼叫此函式來產生隨機資料。

詳細資料
參數
[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 層會呼叫此函式,分配「size」記憶體區塊一個位元組

這個函式等同於 MemoryAlloc(size, false)。

詳細資料
參數
[in] size
指定要求的記憶體大小 (以位元組為單位)。
傳回值
Pointer
若是成功的話
NULL-pointer
如果記憶體配置失敗

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Weave 層會呼叫此函式,分配「size」記憶體區塊一個位元組

詳細資料
參數
[in] size
指定要求的記憶體大小 (以位元組為單位)。
[in] isLongTermAlloc
布林值,指出要求的記憶體區塊是否可長期使用 (true)。長期分配是指在安全工作階段/握手完成之前保持分配的記憶體。長期分配的例子包括為 CASE/PASE 物件配置的區塊及其結構定義資料。短期分配是指執行特定作業所需的記憶體,之後可立即釋出。這項輸入內容有助於最佳化記憶體受限系統的記憶體使用率。您可以任意使用這項參數,實際情況取決於函式實作器。舉例來說,使用 C 標準程式庫 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 標準程式庫 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
平台專屬記憶體初始化函式產生的錯誤。

MemoryShutdown

void MemoryShutdown(
  void
)

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

如果不需要釋出資源,這個函式可以設為空白的呼叫。舉例來說,C 標準程式庫 Malloc() 和 Free() 函式會用於分配記憶體。

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

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

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

系統會呼叫此函式,通知應用程式即將開始經過耗時的加密編譯作業。