nl:: Weave:: Platform:: Security
此命名空间包含 Weave Security Monitor 内存管理器的所有 Weave 接口。
摘要
此命名空间中的函数将由使用 Weave 的平台根据特定环境的需求/限制实现。
类型定义符 |
|
---|---|
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
BlockSetParamFields
以 8 位编码形式的块集参数字段位置。
属性 | |
---|---|
kBlockSetBufferIndexMask
|
缓冲区索引字段掩码。 |
kBlockSetBufferIndexShift
|
缓冲区索引字段偏移。 |
kBlockSetCountMask
|
计数字段掩码。 |
kBlockSetCountShift
|
计数字段偏移。 |
kBlockSetIsLongTermMask
|
类型字段掩码。 |
kBlockSetIsLongTermShift
|
类型字段偏移。 |
kBlockSetSizeMask
|
尺寸字段掩码。 |
kBlockSetSizeShift
|
尺寸字段偏移。 |
kBlockSetSizeValueShift
|
大小字段解码偏移(乘以 128)。 |
BlockSetParams
BlockSetParams
定义块组参数。
属性 | |
---|---|
kBlockSet1BufferIndex
|
设置 1 的缓冲区索引为 0。 |
kBlockSet1Count
|
设置 1 的屏蔽计数为 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
|
支持 Simple Allocator 用例所需的最小网络缓冲区大小。 此参数来自在网络缓冲区 #1 中分配的两个内存块 (640 + 600) 的大小。 |
kNetworkBuffer0BlockAllocationMask
|
此掩码标识从网络缓冲区 #0 分配的所有内存块。 |
kNetworkBuffer1BlockAllocationMask
|
此掩码标识从网络缓冲区 1 分配的所有内存块。 |
kNumberOfBlockSets
|
简单分配器使用的块集的数量。 |
kNumberOfNetworkBuffers
|
简单分配器使用的网络缓冲区数。 |
kTotalMemorySize
|
简单分配器使用的总内存。 |
类型定义符
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
一个布尔值,用于指明 Simple Allocator 使用的网络缓冲区是 (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 层会调用此函数,以分配“大小”的内存块。字节。
此函数等同于 MemoryAlloc(size, false)。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
Weave 层会调用此函数,以分配“大小”的内存块。字节。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
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 )
可调用此函数,以在耗时的加密操作即将开始时通知应用。