nl:: Weave:: Platform:: Security
Esse namespace inclui todas as interfaces do Weave para o gerenciador de memória do Weave Security Monitor.
Resumo
As funções neste 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 ou não alocado no momento. |
BlockSetParams_t
|
typedefuint8_t
Esse tipo é usado para codificar informações do conjunto 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
Parâmetros de conjuntos de blocos codificados.
|
sBufferAllocationMask = {
kNetworkBuffer0BlockAllocationMask,
kNetworkBuffer1BlockAllocationMask,
}[kNumberOfNetworkBuffers]
|
const BlockMark_t
Conjunto de máscaras de bloco de buffer.
|
sMemBlocksAllocated = 0
|
Indica qual bloco está alocado ou não.
|
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 Allocator simples.
|
remotas |
|
---|---|
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 uma fonte de dados aleatória.
|
MemoryAlloc(size_t size)
|
void *
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes de "tamanho".
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes de "tamanho".
|
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 Weave para inicializar a memória e os recursos necessários para a funcionalidade adequada do alocador de memória do Weave Security Manager.
|
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 é concluída.
|
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
Local dos campos de parâmetro dos conjuntos de blocos em um formato codificado de 8 bits.
Propriedades | |
---|---|
kBlockSetBufferIndexMask
|
Máscara de campo de índice de buffer. |
kBlockSetBufferIndexShift
|
Shift do campo de índice de buffer. |
kBlockSetCountMask
|
Máscara de campo de contagem. |
kBlockSetCountShift
|
Deslocamento do campo de contagem. |
kBlockSetIsLongTermMask
|
Tipo de máscara de campo. |
kBlockSetIsLongTermShift
|
Digite Shift do campo. |
kBlockSetSizeMask
|
Máscara de campo de tamanho. |
kBlockSetSizeShift
|
Mudança no campo de tamanho. |
kBlockSetSizeValueShift
|
Mudança na decodificação do campo de tamanho (multiplique por 128). |
BlockSetParams
BlockSetParams
Define parâmetros do conjunto de blocos.
Propriedades | |
---|---|
kBlockSet1BufferIndex
|
O índice de buffer 1 definido é 0. |
kBlockSet1Count
|
O número 1 da contagem de blocos definido é 1. |
kBlockSet1Size
|
O tamanho do conjunto 1 é 128 bytes. |
kBlockSet1isLongTerm
|
O tipo definido 1 é de longo prazo. |
kBlockSet2BufferIndex
|
O índice de buffer definido no 2 é 0. |
kBlockSet2Count
|
O número 2 para contagem de blocos é 1. |
kBlockSet2Size
|
O tamanho do conjunto 2 é 512 bytes. |
kBlockSet2isLongTerm
|
O tipo de conjunto no 2 é de longo prazo. |
kBlockSet3BufferIndex
|
O índice de buffer definido no 3 é 0. |
kBlockSet3Count
|
O número 3 para a contagem de blocos é 1. |
kBlockSet3Size
|
O tamanho do conjunto 3 é 512 bytes. |
kBlockSet3isLongTerm
|
O tipo definido 3 é de curto prazo. |
kBlockSet4BufferIndex
|
O índice de buffer 4 definido é 1. |
kBlockSet4Count
|
O número 4 para a contagem de blocos é 2. |
kBlockSet4Size
|
O tamanho do conjunto 4 é 640 bytes. |
kBlockSet4isLongTerm
|
O tipo definido 4 é de curto prazo. |
kMaxBlockSize
|
Tamanho máximo de bloco com suporte no Simple Allocator. |
kMinBufferSize
|
Tamanho mínimo do buffer de rede necessário para oferecer suporte aos casos de uso do Simple Allocator. 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 0. |
kNetworkBuffer1BlockAllocationMask
|
Essa máscara identifica todos os blocos de memória alocados do buffer de rede 1. |
kNumberOfBlockSets
|
Número de conjuntos de blocos usados pelo Simple Allocator. |
kNumberOfNetworkBuffers
|
Número de buffers de rede usados pelo Simple Allocator. |
kTotalMemorySize
|
Memória total usada pelo Alocador Simples. |
Typedefs
BlockMark_t
uint8_t BlockMark_t
O tipo usado para marcar qual bloco está alocado ou não alocado no momento.
uint8_t: compatível com até 8 blocos de memória no total uint16_t; compatível com até 16 blocos de memória no total uint32_t; compatível com até 32 blocos de memória no total
BlockSetParams_t
uint8_t BlockSetParams_t
Esse tipo é usado para codificar informações do conjunto 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 apresenta como as informações do conjunto de blocos codificadas em um formato de 8 bits:
É de longo prazo | Índice de blocos | 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 0 |
... | - |
11 | Buffer de rede 3 |
[7] | Decodificação |
0 | Blocos de memória de curto prazo |
1 | Bloqueios 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), }
Parâmetros de conjuntos de blocos codificados.
sBufferAllocationMask
const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }
Conjunto de máscaras de bloco de buffer.
Identifica se todos os blocos estão no buffer e não estão alocados e, em seguida, é possível aliviar o buffer.
sMemBlocksAllocated
BlockMark_t sMemBlocksAllocated = 0
Indica qual bloco está alocado ou não.
Inicializado como 0, significa que toda a memória é bloqueada e não está alocada.
sMemBufs
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
Ponteiros para buffers de memória inicializados como NULL.
Quando buffers de rede são usados ponto sMemBufs[] para os objetos PackageBuffer. Quando um buffer dedicado é usado, 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 Allocator simples.
Quando falso, o buffer dedicado fornecido com a função MemoryInit() é usado.
remotas
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 uma fonte de dados aleatória.
Essa função é específica da plataforma e pode ficar vazia quando a inicialização de uma fonte de dados aleatória não é necessária.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
MemoryAlloc
void * MemoryAlloc( size_t size )
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes de "tamanho".
Essa função é equivalente a MemoryAlloc(size, false).
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes de "tamanho".
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 Weave para inicializar a memória e os recursos necessários para a funcionalidade adequada do alocador de memória do Weave Security Manager.
Essa função é específica da plataforma e pode ficar vazia em alguns casos. Por exemplo, essa função não faz nada quando as funções Malloc() e free() da Biblioteca C 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, esse é o caso quando as funções Malloc() e free() da Biblioteca C 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 é concluída.
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada está prestes a ser iniciada.