nl:: Weave:: Platform:: Security
此命名空间包含 Weave for Weave Security Monitor 内存管理器中的所有接口。
摘要
此命名空间中的函数将由使用 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
指示简单分配器是否使用 (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 管理器内存分配器正常运行所需的内存和资源。
|
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
|
Simple Allocator 使用的块集数。 |
kNumberOfNetworkBuffers
|
简易分配器使用的网络缓冲区数。 |
kTotalMemorySize
|
Simple Allocator 使用的总内存。 |
类型定义符
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 个字节 |
土耳其里拉 | 128 个字节 |
土耳其里拉 | 256 个字节 |
… | - |
111 | 896 个字节 |
[4:3] | 解码 |
土耳其里拉 | 4 个方块 |
1 日 | 1 个块 |
10 | 2 个方块 |
11 日 | 3 个方块 |
[6:5] | 解码 |
土耳其里拉 | 网络缓冲区 #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 层调用,以分配“大小”字节的内存块。
此函数相当于 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 管理器内存分配器正常运行所需的内存和资源。
此函数特定于平台,在某些情况下可能为空。例如,当使用 C 标准库 malloc() 和 free() 函数分配内存时,此函数不会执行任何操作。
具体说明 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
MemoryShutdown
void MemoryShutdown( void )
Weave 层会调用此函数,以释放 MemoryInit() 函数分配的所有资源。
如果不需要释放资源,此函数可以为空调用。例如,使用 C 标准库 malloc() 和 free() 函数分配内存时就会出现这种情况。
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
当一个耗时的加密操作刚刚完成时,系统会调用此函数来通知应用。
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
当一项耗时的加密操作即将开始时,系统会调用此函数来通知应用。