nl::Weave::Platform::Security

Esse namespace inclui todas as interfaces no Weave para o gerenciador de memória Weave 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.

Enumerações

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
tipo enumerado
Bloquear a localização dos campos de parâmetros definidos em um formato codificado de 8 bits.
BlockSetParams{
  kNumberOfNetworkBuffers = 2,
  kNumberOfBlockSets = 4,
  kNetworkBuffer0BlockAllocationMask = 0x07,
  kNetworkBuffer1BlockAllocationMask = 0x18,
  kBlockSet1Size = 1,
  kBlockSet1Count = 1,
  kBlockSet1BufferIndex = 0,
  kBlockSet1isLongTerm = 1,
  kBlockSet2Size = 4,
  kBlockSet2Count = 1,
  kBlockSet2BufferIndex = 0,
  kBlockSet2isLongTerm = 1,
  kBlockSet3Size = 4,
  kBlockSet3Count = 1,
  kBlockSet3BufferIndex = 0,
  kBlockSet3isLongTerm = 0,
  kBlockSet4Size = 5,
  kBlockSet4Count = 2,
  kBlockSet4BufferIndex = 1,
  kBlockSet4isLongTerm = 0,
  kTotalMemorySize = (kBlockSet1Size * kBlockSet1Count + kBlockSet2Size * kBlockSet2Count + kBlockSet3Size * kBlockSet3Count + kBlockSet4Size * kBlockSet4Count) << kBlockSetSizeValueShift,
  kMaxBlockSize = 600,
  kMinBufferSize = 1240
}
tipo enumerado
Define os parâmetros do conjunto de blocos.

Typedefs

BlockMark_t typedef
uint8_t
É o tipo usado para marcar qual bloco está alocado/não alocado no momento.
BlockSetParams_t typedef
uint8_t
Esse tipo é usado para codificar informações do conjunto de blocos.

Variables

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]
O bloco codificado define 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 indicando se (verdadeiro) ou não (falso) os buffers de rede são usados pelo Allocator simples.

Functions

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 *
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes "size".
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes "size".
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 Gerenciador de segurança.
MemoryShutdown(void)
void
Essa função é chamada pela camada Weave para liberar todos os recursos que foram 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 ser concluída.
OnTimeConsumingCryptoStart(void)
void
Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada estiver prestes a ser iniciada.

Classes

nl::Weave::Platform::Security::AES128BlockCipher
nl::Weave::Platform::Security::AES128BlockCipherDec
nl::Weave::Platform::Security::AES128BlockCipherEnc
nl::Weave::Platform::Security::AES256BlockCipher
nl::Weave::Platform::Security::AES256BlockCipherDec
nl::Weave::Platform::Security::AES256BlockCipherEnc
nl::Weave::Platform::Security::SHA1
nl::Weave::Platform::Security::SHA256

Enumerações

BlockSetParamFields

 BlockSetParamFields

Bloquear a localização dos campos de parâmetros definidos em um formato codificado de 8 bits.

Propriedades
kBlockSetBufferIndexMask

Máscara de campo do índice do buffer.

kBlockSetBufferIndexShift

Mudança no campo de índice do buffer.

kBlockSetCountMask

Máscara de campo de contagem.

kBlockSetCountShift

Contagem de mudanças de campo.

kBlockSetIsLongTermMask

Digite a máscara do campo.

kBlockSetIsLongTermShift

Mudança de campo de tipo.

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 os parâmetros do conjunto de blocos.

Propriedades
kBlockSet1BufferIndex

O índice do buffer no 1 é 0.

kBlockSet1Count

A contagem de blocos no 1 é 1.

kBlockSet1Size

O tamanho do conjunto 1 é 128 bytes.

kBlockSet1isLongTerm

O tipo #1 do conjunto é de longo prazo.

kBlockSet2BufferIndex

O índice do buffer no 2 é 0.

kBlockSet2Count

A contagem de blocos no 2 é 1.

kBlockSet2Size

O tamanho do conjunto 2 é de 512 bytes.

kBlockSet2isLongTerm

O tipo definido no 2 é longo.

kBlockSet3BufferIndex

O índice do buffer definido no 3 é 0.

kBlockSet3Count

A contagem de blocos no 3 é 1.

kBlockSet3Size

O tamanho do conjunto 3 é de 512 bytes.

kBlockSet3isLongTerm

O tipo definido no 3 é de curto prazo.

kBlockSet4BufferIndex

O índice do buffer 4 é definido como 1.

kBlockSet4Count

A contagem de bloqueio do conjunto no 4 é 2.

kBlockSet4Size

O tamanho do conjunto 4 é de 640 bytes.

kBlockSet4isLongTerm

O tipo definido no 4 é de curto prazo.

kMaxBlockSize

Tamanho máximo do bloco compatível com o Simplecatcator.

kMinBufferSize

Tamanho mínimo do buffer de rede necessário para dar 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 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 Allocator simples.

kNumberOfNetworkBuffers

Número de buffers de rede usados pelo Simple Allocator.

kTotalMemorySize

Memória total usada pelo Simplecatcator.

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 total uint16_t - suporta até 16 blocos de memória total uint32_t - suporta até 32 blocos de memória totais

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 são codificadas em um formato de 8 bits:

É de longo prazo Bloquear índice Número de blocos Tamanho do bloco
[7] (18h55) [4:3] [2h0]
[2:0]: tamanho do bloco de memória em um conjunto. O valor de tamanho é codificado com granularidade de 128 bytes.
[2h0] Decodificação
000 0 byte
001 128 bytes
010 256 bytes
-
111 896 bytes
[4:3] - Número de blocos em um conjunto.
[4:3] Decodificação
00 4 blocos
01 1 bloco
10 2 blocos
11 3 blocos
[6:5] - Índice de buffer de rede em que os blocos de memória residem. Quando o buffer dedicado é usado, todos os blocos de memória são alocados desse buffer, e esse parâmetro de índice é ignorado.
(18h55) Decodificação
00 Buffer de rede 0
-
11 Buffer de rede 3
[7] - Especifica se os blocos são para armazenamento de longo prazo.
[7] Decodificação
0 Blocos de memória de curto prazo
1 Blocos de memória de longo prazo

Variables

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 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 então o buffer pode ser reduzido.

sMemBlocks allocation

BlockMark_t sMemBlocksAllocated = 0

Indica qual bloco está alocado/não alocado.

Inicializado para 0 - significa que todos os blocos de memória e os alocados estão não alocados.

SMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Ponteiros para buffers de memória inicializados como NULL.

Quando buffers de rede são usados, sMemBufs[] aponta para os objetos PackageBuffer. Quando um buffer dedicado é usado, os pontos sMemBufs[0] são armazenados nesse buffer e outros ponteiros sMemBufs[] são ignorados.

sNetworkBuffersUsado

bool sNetworkBuffersUsed = true

Um booleano indicando se (verdadeiro) ou não (falso) os buffers de rede são usados pelo Allocator simples.

Quando falso, é usado um buffer dedicado fornecido com a função MemoryInit().

Functions

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
[in] buf
Ponteiro para um buffer de memória, onde dados aleatórios solicitados precisam ser armazenados.
[in] len
Especifica o tamanho de dados aleatórios solicitado em bytes.
Valores de retorno
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Se a origem de entropia não consegue gerar a entropia solicitada pelo gerador de dados aleatório.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Se a fonte de dados aleatória não gerar dados aleatórios.
WEAVE_ERROR_INCORRECT_STATE
Se uma fonte de dados aleatória for encontrada em um estado errado.
WEAVE_NO_ERROR
Em caso de sucesso.

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 estar vazia quando nenhuma inicialização de fonte de dados aleatória for necessária.

Detalhes
Parâmetros
[in] entropyFunct
Ponteiro para uma função que gera entropia ao gerador de dados aleatório. Quando a entrada de entropia não é exigida pelo algorith, essa entrada pode ser NULL, que é o caso quando a versão do OpenSSL do gerador de dados aleatório é usada.
[in] entropyLen
Especifica o tamanho da entropia em bytes que deve ser gerado pela função de entropia quando é usada.
[in] personalizationData
Ponteiro para um buffer de memória que armazena entrada de dados de personalização. Essa entrada de dados deve ser específica do dispositivo e ajuda a melhorar as propriedades estatísticas dos dados aleatórios.
[in] perDataLen
Especifica o tamanho dos dados de personalização em bytes.
Valores de retorno
WEAVE_ERROR_INVALID_ARGUMENT
Se um argumento inválido foi transmitido para essa função.
WEAVE_NO_ERROR
Em caso de sucesso.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes "size".

Essa função é equivalente a MemoryAlloc(size, false).

Detalhes
Parâmetros
[in] size
Especifica o tamanho da memória solicitado em bytes.
Valores de retorno
Pointer
a um bloco de memória em caso de sucesso.
NULL-pointer
se a alocação de memória falhar.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Essa função é chamada pela camada Weave para alocar um bloco de memória de bytes "size".

Detalhes
Parâmetros
[in] size
Especifica o tamanho da memória solicitado em bytes.
[in] isLongTermAlloc
Um booleano indicando se (true) ou não (false) o bloco de memória solicitado é para uso de longo prazo. Uma alocação de longo prazo é a memória que precisa permanecer alocada até que a sessão/handshake seja concluída. Exemplos de uma alocação de longo prazo incluem blocos alocados para objetos CASE/PASE e os respectivos dados de contexto. Uma alocação de curto prazo é uma memória necessária para realizar uma operação específica e pode ser liberada imediatamente depois disso. Essa entrada ajuda a otimizar a utilização da memória em um sistema com restrição de memória. O uso desse parâmetro é arbitrário e depende do implementador de funções. Por exemplo, o parâmetro é ignorado quando a biblioteca C Standard malloc() é usada.
Valores de retorno
Pointer
a um bloco de memória em caso de sucesso.
NULL-pointer
se a alocação de memória falhar.

Sem memória

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
[in] p
Apontador para um bloco de memória que precisa ser liberado.

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 Gerenciador de segurança.

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 C padrão são usadas para alocação de memória.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um buffer de memória dedicado, que deve ser usado como um pool de memória para alocação de memória do Weave Security. Essa entrada é opcional (o padrão é NULL) e não deve ser usada se um buffer de memória dedicado não for usado.
[in] bufSize
Tamanho de um buffer de memória dedicado. Essa entrada é opcional (o padrão é 0) e não deve ser usada se um buffer de memória dedicado não for usado. Quando um buffer de memória dedicado é usado, a função verifica e gera um erro se o tamanho do buffer não for grande o suficiente para dar suporte aos casos de uso do Weave Security Manager.
Valores de retorno
WEAVE_ERROR_BUFFER_TOO_SMALL
Se o tamanho do buffer de entrada dedicado não for compatível com os casos de uso do Gerenciador de segurança do Weave.
WEAVE_NO_ERROR
Em caso de sucesso.
other
Um erro gerado pela função de inicialização da memória específica da plataforma.

Desligamento de memória

void MemoryShutdown(
  void
)

Essa função é chamada pela camada Weave para liberar todos os recursos que foram alocados pela função MemoryInit().

Essa função poderá 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 acaba de ser concluída.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Essa função é chamada para notificar o aplicativo quando uma operação criptográfica demorada estiver prestes a ser iniciada.