nl:: Weave:: 平台:: 安全性
此命名空间包含 Weave 中适用于 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 层会调用此函数以分配大小为“qu”的字节。
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
Weave 层会调用此函数以分配大小为“qu”的字节。
|
MemoryFree(void *p)
|
void
Weave 层会调用此函数来释放 MemeoryAlloc() 函数分配的内存块。
|
MemoryInit(void *buf, size_t bufSize)
|
Weave 层会调用此函数,以初始化 Weave 安全管理器内存分配器正常运行所需的内存和资源。
|
MemoryShutdown(void)
|
void
Weave 层会调用此函数,以释放 MemoryInit() 函数分配的所有资源。
|
OnTimeConsumingCryptoDone(void)
|
void
调用此函数可在加密操作完成时通知应用。
|
OnTimeConsumingCryptoStart(void)
|
void
调用此函数可在即将开始一项耗时的加密操作时通知应用。
|
枚举
BlockSetParamFields
BlockSetParamFields
以 8 位编码形式块设置参数集位置。
属性 | |
---|---|
kBlockSetBufferIndexMask
|
缓冲区索引字段掩码。 |
kBlockSetBufferIndexShift
|
缓冲区索引字段偏移。 |
kBlockSetCountMask
|
计算字段掩码。 |
kBlockSetCountShift
|
计数字段偏移。 |
kBlockSetIsLongTermMask
|
输入字段掩码。 |
kBlockSetIsLongTermShift
|
类型字段偏移。 |
kBlockSetSizeMask
|
尺寸字段掩码。 |
kBlockSetSizeShift
|
大小字段偏移。 |
kBlockSetSizeValueShift
|
大小字段解码偏移(乘以 128)。 |
BlockSet 参数
BlockSetParams
定义块集参数。
属性 | |
---|---|
kBlockSet1BufferIndex
|
将 #1 缓冲区索引设置为 0。 |
kBlockSet1Count
|
第 1 个块的计数为 1。 |
kBlockSet1Size
|
第 1 个字节的大小为 128 个字节。 |
kBlockSet1isLongTerm
|
第一种类型是长期的。 |
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
|
简单分配器使用的总内存。 |
类型定义符
块标记_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 个字节 |
100 | 256 个字节 |
… | - |
111 位 | 896 字节 |
[4:3] | 解码 |
1 日 | 4 个文本块 |
1 日 | 1 个文本块 |
10 | 2 个文本块 |
11 个 | 3 个文本块 |
[6:5] | 解码 |
1 日 | 网络缓冲区 #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[] 指针将被忽略。
已使用的 sNetworkBuffers
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 层会调用此函数来初始化随机数据源。
此函数因平台而异,在不需要对随机数据源进行初始化时可能为空。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
|
内存分配
void * MemoryAlloc( size_t size )
Weave 层会调用此函数以分配大小为“qu”的字节。
此函数相当于 MemoryAlloc(size, false)。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
内存分配
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
Weave 层会调用此函数以分配大小为“qu”的字节。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
|
无内存
void MemoryFree( void *p )
Weave 层会调用此函数来释放 MemeoryAlloc() 函数分配的内存块。
详细信息 | |||
---|---|---|---|
参数 |
|
内存输入
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
Weave 层会调用此函数,以初始化 Weave 安全管理器内存分配器正常运行所需的内存和资源。
此函数因平台而异,在某些情况下可能为空。例如,如果使用 C 标准库 malloc() 和 free() 函数进行内存分配,则此函数不会执行任何操作。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
||||||
返回值 |
|
内存关闭
void MemoryShutdown( void )
Weave 层会调用此函数,以释放 MemoryInit() 函数分配的所有资源。
如果不需要释放资源,此函数可以为空调用。例如,使用 C 标准库 malloc() 和 free() 函数进行内存分配时就是这种情况。
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
调用此函数可在加密操作完成时通知应用。
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
调用此函数可在即将开始一项耗时的加密操作时通知应用。