nl:: Weave:: Platform:: Security
Esse namespace inclui todas as interfaces do Weave para o gerenciador de memória do Security Monitor do Weave.
Resumo
As funções nesse namespace devem ser implementadas por plataformas que usam o Weave, de acordo com as necessidades/restrições do ambiente específico.
Typedefs |
|
---|---|
BlockMark_t
|
typedefuint8_t
O tipo usado para marcar qual bloco está alocado/não alocado no momento. |
BlockSetParams_t
|
typedefuint8_t
Esse tipo é usado para codificar informações de conjuntos de blocos. |
Variáveis |
|
---|---|
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
O bloco codificado define os parâmetros.
|
sBufferAllocationMask = {
kNetworkBuffer0BlockAllocationMask,
kNetworkBuffer1BlockAllocationMask,
}[kNumberOfNetworkBuffers]
|
const BlockMark_t
Conjunto de máscaras de bloco de buffer.
|
sMemBlocksAllocated = 0
|
Indica qual bloco está alocado/não alocado.
|
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
|
void *
Ponteiros para buffers de memória inicializados como NULL.
|
sNetworkBuffersUsed = true
|
bool
Um booleano que indica se (verdadeiro) ou não (falso) os buffers de rede são usados pelo Alocador simples.
|
Funções |
|
---|---|
DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
|
void
|
GetSecureRandomData(uint8_t *buf, uint16_t len)
|
Essa função é chamada pela camada Weave para gerar dados aleatórios.
|
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
|
Essa função é chamada pela camada Weave para inicializar a fonte de dados aleatória.
|
MemoryAlloc(size_t size)
|
void *
Esta função é chamada pela camada Weave para alocar um bloco de memória de "tamanho" bytes.
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
Esta função é chamada pela camada Weave para alocar um bloco de memória de "tamanho" bytes.
|
MemoryFree(void *p)
|
void
Essa função é chamada pela camada Weave para liberar um bloco de memória alocado pela função MemeoryAlloc().
|
MemoryInit(void *buf, size_t bufSize)
|
Essa função é chamada pela camada do Weave para inicializar a memória e os recursos necessários para a funcionalidade adequada do alocador de memória do Security Manager do Weave.
|
MemoryShutdown(void)
|
void
Essa função é chamada pela camada Weave para liberar todos os recursos alocados pela função MemoryInit().
|
OnTimeConsumingCryptoDone(void)
|
void
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada acaba de terminar.
|
OnTimeConsumingCryptoStart(void)
|
void
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada está prestes a ser iniciada.
|
Enumerações
BlockSetParamFields
BlockSetParamFields
Bloquear a localização dos campos de parâmetro do conjunto em um formato codificado de 8 bits.
Propriedades | |
---|---|
kBlockSetBufferIndexMask
|
Máscara de campo de índice do buffer. |
kBlockSetBufferIndexShift
|
Mudança do campo de índice do buffer. |
kBlockSetCountMask
|
Máscara de campo de contagem. |
kBlockSetCountShift
|
Troca de campo de contagem. |
kBlockSetIsLongTermMask
|
Digite a máscara de campo. |
kBlockSetIsLongTermShift
|
Digite a mudança de campo. |
kBlockSetSizeMask
|
Máscara de campo de tamanho. |
kBlockSetSizeShift
|
Mudança no campo de tamanho. |
kBlockSetSizeValueShift
|
Mudança de decodificação do campo de tamanho (multiplicar por 128). |
BlockSetParams
BlockSetParams
Define os parâmetros do conjunto de blocos.
Propriedades | |
---|---|
kBlockSet1BufferIndex
|
O índice de buffer do conjunto 1 é 0. |
kBlockSet1Count
|
A contagem de bloqueio do conjunto 1 é 1. |
kBlockSet1Size
|
O tamanho do conjunto no 1 é de 128 bytes. |
kBlockSet1isLongTerm
|
O tipo do conjunto 1 é de longo prazo. |
kBlockSet2BufferIndex
|
O índice de buffer do conjunto 2 é 0. |
kBlockSet2Count
|
A contagem de bloqueios do conjunto 2 é 1. |
kBlockSet2Size
|
O tamanho do conjunto no 2 é de 512 bytes. |
kBlockSet2isLongTerm
|
O tipo do conjunto 2 é de longo prazo. |
kBlockSet3BufferIndex
|
O índice de buffer do conjunto 3 é 0. |
kBlockSet3Count
|
A contagem de bloqueios do conjunto 3 é 1. |
kBlockSet3Size
|
O tamanho do conjunto no 3 é de 512 bytes. |
kBlockSet3isLongTerm
|
O tipo do conjunto 3 é de curto prazo. |
kBlockSet4BufferIndex
|
O índice de buffer do conjunto 4 é 1. |
kBlockSet4Count
|
A contagem de bloqueios do conjunto 4 é 2. |
kBlockSet4Size
|
O tamanho do conjunto no 4 é de 640 bytes. |
kBlockSet4isLongTerm
|
O tipo do conjunto 4 é de curto prazo. |
kMaxBlockSize
|
O tamanho máximo do bloco é compatível com o Alocador simples. |
kMinBufferSize
|
Tamanho mínimo do buffer de rede necessário para aceitar os casos de uso do Alocador simples. Esse parâmetro é derivado dos tamanhos de dois blocos de memória (640 + 600) alocados no buffer de rede no 1. |
kNetworkBuffer0BlockAllocationMask
|
Essa máscara identifica todos os blocos de memória alocados do buffer de rede no 0. |
kNetworkBuffer1BlockAllocationMask
|
Essa máscara identifica todos os blocos de memória alocados do buffer de rede no 1. |
kNumberOfBlockSets
|
Número de conjuntos de blocos usados pelo Alocador simples. |
kNumberOfNetworkBuffers
|
Número de buffers de rede usados pelo Alocador simples. |
kTotalMemorySize
|
Memória total usada pelo Alocador simples. |
Typedefs
BlockMark_t
uint8_t BlockMark_t
O tipo usado para marcar qual bloco está alocado/não alocado no momento.
uint8_t - suporta até 8 blocos de memória no total uint16_t - suporta até 16 blocos de memória no total uint32_t - suporta até 32 blocos de memória no total
BlockSetParams_t
uint8_t BlockSetParams_t
Esse tipo é usado para codificar informações de conjuntos de blocos.
Um conjunto de blocos é um grupo de blocos de memória que têm as mesmas propriedades (tamanho, tipo e pertencem ao mesmo buffer). O diagrama abaixo mostra como informações do conjunto de blocos codificadas em um formato de 8 bits:
É de longo prazo | Bloquear índice | Número de blocos | Tamanho do bloco |
[7] | [6:5] | [4:3] | [2:0] |
[2:0] | Decodificação |
000 | 0 byte |
001 | 128 bytes |
010 | 256 bytes |
… | - |
111 | 896 bytes |
[4:3] | Decodificação |
00 | 4 blocos |
01 | 1 bloco |
10 | 2 blocos |
11 | 3 blocos |
[6:5] | Decodificação |
00 | Buffer de rede no 0 |
… | - |
11 | Buffer de rede 3 |
[7] | Decodificação |
0 | Blocos de memória de curto prazo |
1 | Blocos de memória de longo prazo |
Variáveis
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), }
O bloco codificado define os parâmetros.
sBufferAllocationMask
const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }
Conjunto de máscaras de bloco de buffer.
Identifica se todos os blocos no buffer e não alocados e, em seguida, o buffer pode ser atenuado.
sMemBlocksAllocated
BlockMark_t sMemBlocksAllocated = 0
Indica qual bloco está alocado/não alocado.
Inicializado como 0 significa que todos os blocos de memória e não alocados.
sMemBufs
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
Ponteiros para buffers de memória inicializados como NULL.
Quando buffers de rede são usados, o sMemBufs[] aponta para os objetos PackageBuffer. Quando o buffer dedicado é usado, o sMemBufs[0] aponta para esse buffer e outros ponteiros sMemBufs[] são ignorados.
sNetworkBuffersUsed
bool sNetworkBuffersUsed = true
Um booleano que indica se (verdadeiro) ou não (falso) os buffers de rede são usados pelo Alocador simples.
Quando falso: o buffer dedicado fornecido com a função MemoryInit() é usado.
Funções
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 )
Essa função é chamada pela camada Weave para gerar dados aleatórios.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
InitSecureRandomDataSource
WEAVE_ERROR InitSecureRandomDataSource( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen )
Essa função é chamada pela camada Weave para inicializar a fonte de dados aleatória.
Essa função é específica da plataforma e pode ficar vazia quando nenhuma inicialização de fonte de dados aleatória é necessária.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
MemoryAlloc
void * MemoryAlloc( size_t size )
Esta função é chamada pela camada Weave para alocar um bloco de memória de "tamanho" bytes.
Esta função é equivalente a MemoryAlloc(size, false).
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
Esta função é chamada pela camada Weave para alocar um bloco de memória de "tamanho" bytes.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
MemoryFree
void MemoryFree( void *p )
Essa função é chamada pela camada Weave para liberar um bloco de memória alocado pela função MemeoryAlloc().
Detalhes | |||
---|---|---|---|
Parâmetros |
|
MemoryInit
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
Essa função é chamada pela camada do Weave para inicializar a memória e os recursos necessários para a funcionalidade adequada do alocador de memória do Security Manager do Weave.
Essa função é específica da plataforma e pode estar vazia em alguns casos. Por exemplo, essa função não faz nada quando as funções Malloc() e free() da Biblioteca padrão são usadas para alocação de memória.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Valores de retorno |
|
MemoryShutdown
void MemoryShutdown( void )
Essa função é chamada pela camada Weave para liberar todos os recursos alocados pela função MemoryInit().
Essa função pode ser uma chamada vazia se não for necessário liberar recursos. Por exemplo, este é o caso quando as funções Malloc() e free() da Biblioteca padrão são usadas para alocação de memória.
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada acaba de terminar.
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada está prestes a ser iniciada.