nl::Weave::Platform::Security

Este espacio de nombres incluye todas las interfaces dentro de Weave para el administrador de memoria del supervisor de seguridad de Weave.

Resumen

Las plataformas que usan Weave deben implementar las funciones de este espacio de nombres según las necesidades o limitaciones del entorno en particular.

Enumeraciones

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Ubicación de los campos de parámetros del conjunto de bloques en un formato con codificación 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
}
enum
Define los parámetros del conjunto de bloques.

Typedefs

BlockMark_t typedef
uint8_t
El tipo que se usa para marcar qué bloque está asignado o no asignado.
BlockSetParams_t typedef
uint8_t
Este tipo se usa para codificar información del conjunto de bloques.

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]
Los bloques codificados establecen parámetros.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Conjunto de máscaras de bloque de búfer.
sMemBlocksAllocated = 0
Indica qué bloque está asignado o no.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Los punteros a búferes de memoria inicializados en NULL.
sNetworkBuffersUsed = true
bool
Un valor booleano que indica si (verdadero) o no (falso) los búferes de red son utilizados por el asignador simple.

Funciones

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
La capa de Weave llama a esta función para generar datos aleatorios.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
La capa de Weave llama a esta función para inicializar una fuente de datos aleatoria.
MemoryAlloc(size_t size)
void *
La capa de Weave llama a esta función para asignar un bloque de memoria de "tamaño". bytes.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
La capa de Weave llama a esta función para asignar un bloque de memoria de "tamaño". bytes.
MemoryFree(void *p)
void
La capa de Weave llama a esta función para liberar un bloque de memoria asignado por la función MemeoryAlloc().
MemoryInit(void *buf, size_t bufSize)
La capa de Weave llama a esta función para inicializar la memoria y los recursos necesarios para el funcionamiento correcto del asignador de memoria del administrador de seguridad de Weave.
MemoryShutdown(void)
void
La capa de Weave llama a esta función para liberar todos los recursos que se asignaron mediante la función MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Se llama a esta función para notificar a la aplicación cuando se acaba de finalizar una operación criptográfica lenta.
OnTimeConsumingCryptoStart(void)
void
Se llama a esta función para notificar a la aplicación cuando una operación criptográfica lenta está por comenzar.

Clases

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

Enumeraciones

BlockSetParamFields

 BlockSetParamFields

Ubicación de los campos de parámetros del conjunto de bloques en un formato con codificación de 8 bits.

Propiedades
kBlockSetBufferIndexMask

Máscara de campo del índice del búfer.

kBlockSetBufferIndexShift

Cambio en el campo del índice del búfer

kBlockSetCountMask

Máscara de campo de recuento.

kBlockSetCountShift

Recuento de cambios en el campo.

kBlockSetIsLongTermMask

Máscara de campo de tipo.

kBlockSetIsLongTermShift

Tipo de cambio de campo.

kBlockSetSizeMask

Máscara de campo de tamaño.

kBlockSetSizeShift

Cambio del campo de tamaño.

kBlockSetSizeValueShift

Cambio en la decodificación de campo de tamaño (multiplica por 128).

BlockSetParams

 BlockSetParams

Define los parámetros del conjunto de bloques.

Propiedades
kBlockSet1BufferIndex

El índice de búfer establecido 1 es 0.

kBlockSet1Count

Configurar el recuento de bloques 1 es 1.

kBlockSet1Size

El tamaño del conjunto 1 es de 128 bytes.

kBlockSet1isLongTerm

El tipo de conjunto 1 es a largo plazo.

kBlockSet2BufferIndex

El índice de búfer del conjunto 2 es 0.

kBlockSet2Count

Configurar el recuento de bloques 2 es 1.

kBlockSet2Size

El tamaño del conjunto 2 es de 512 bytes.

kBlockSet2isLongTerm

El tipo del conjunto 2 es a largo plazo.

kBlockSet3BufferIndex

El índice de búfer del conjunto 3 es 0.

kBlockSet3Count

Establecer el recuento de bloques núm. 3 es 1.

kBlockSet3Size

El tamaño del conjunto 3 es de 512 bytes.

kBlockSet3isLongTerm

El tipo de conjunto 3 es a corto plazo.

kBlockSet4BufferIndex

El índice de búfer del conjunto 4 es 1.

kBlockSet4Count

Configurar el recuento de bloques 4 es 2.

kBlockSet4Size

El tamaño del conjunto 4 es de 640 bytes.

kBlockSet4isLongTerm

El tipo del conjunto 4 es a corto plazo.

kMaxBlockSize

Tamaño de bloque máximo que admite el asignador simple

kMinBufferSize

Tamaño mínimo del búfer de red necesario para admitir casos de uso de Simple Allocator.

Este parámetro se deriva de los tamaños de dos bloques de memoria (640 + 600) asignados en el búfer de red #1.

kNetworkBuffer0BlockAllocationMask

Esta máscara identifica todos los bloques de memoria asignados desde el búfer de red #0.

kNetworkBuffer1BlockAllocationMask

Esta máscara identifica todos los bloques de memoria asignados desde el búfer de red #1.

kNumberOfBlockSets

Cantidad de conjuntos de bloques que usa el asignador simple.

kNumberOfNetworkBuffers

Cantidad de búferes de red que utiliza Simple Allocator.

kTotalMemorySize

Memoria total usada por el asignador simple.

Typedefs

BlockMark_t

uint8_t BlockMark_t

El tipo que se usa para marcar qué bloque está asignado o no asignado.

uint8_t: Admite hasta 8 bloques de memoria en total; uint16_t; admite hasta 16 bloques de memoria en total; uint32_t; admite hasta 32 bloques de memoria en total

BlockSetParams_t

uint8_t BlockSetParams_t

Este tipo se usa para codificar información del conjunto de bloques.

Un conjunto de bloques es un grupo de bloques de memoria que tienen las mismas propiedades (tamaño, tipo y pertenecen al mismo búfer). En el siguiente diagrama, se muestra cómo establecer la información de los bloques codificada en un formato de 8 bits:

Es a largo plazo Índice de bloques Cantidad de bloques Tamaño del bloque
[7] [6:5] [4:3] [2:0]
[2:0]: Tamaño del bloque de memoria de un conjunto. El valor de tamaño se codifica con un nivel de detalle de 128 bytes.
[2:0] Decodificación
000 0 bytes
001 128 bytes
010 256 bytes
-
111 896 bytes
[4:3] - Número de bloques en un conjunto.
[4:3] Decodificación
00 4 bloques
01 1 bloque
10 2 bloques
11 3 bloques
[6:5]: Índice del búfer de red donde residen los bloques de memoria. Ten en cuenta que, cuando se usa el búfer dedicado, todos los bloques de memoria se asignan desde el búfer dedicado y se ignora este parámetro de índice.
[6:5] Decodificación
00 Búfer de red no 0
-
11 Búfer de red no 3
[7]: Especifica si los bloques son para almacenamiento a largo o corto plazo.
[7] Decodificación
0 Bloqueos de memoria a corto plazo
1 Bloques de memoria a largo plazo

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),







}

Los bloques codificados establecen parámetros.

sBufferAllocationMask

const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = {
                                                   kNetworkBuffer0BlockAllocationMask,
                                                   kNetworkBuffer1BlockAllocationMask,




                                                                                       }

Conjunto de máscaras de bloque de búfer.

Identifica si todos los bloques en el búfer están sin asignar y, luego, el búfer se puede redistribuir.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Indica qué bloque está asignado o no.

Inicializada en 0, significa que se bloqueó y no se asignaron todos los recursos de memoria.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Los punteros a búferes de memoria inicializados en NULL.

Cuando se usan búferes de red, los sMemBufs[] apuntan a los objetos PacketBuffer. Cuando se usa un búfer dedicado, los sMemBufs[0] apuntan a ese búfer y se ignoran otros punteros sMemBufs[].

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Un valor booleano que indica si (verdadero) o no (falso) los búferes de red son utilizados por el asignador simple.

Cuando es falso, se usa el búfer dedicado proporcionado con la función MemoryInit().

Funciones

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
)

La capa de Weave llama a esta función para generar datos aleatorios.

Detalles
Parámetros
[in] buf
Es el puntero a un búfer de memoria, donde se deben almacenar los datos aleatorios solicitados.
[in] len
Especifica el tamaño de los datos aleatorios solicitados en bytes.
Valores de retorno
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Si la fuente de entropía no genera entropía solicitada por el generador de datos aleatorios.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Si la fuente de datos aleatorios no genera datos aleatorios.
WEAVE_ERROR_INCORRECT_STATE
Si se encuentra una fuente de datos aleatoria en un estado incorrecto.
WEAVE_NO_ERROR
Si tiene éxito.

InitSecureRandomDataSource

WEAVE_ERROR InitSecureRandomDataSource(
  nl::Weave::Crypto::EntropyFunct entropyFunct,
  uint16_t entropyLen,
  const uint8_t *personalizationData,
  uint16_t perDataLen
)

La capa de Weave llama a esta función para inicializar una fuente de datos aleatoria.

Esta función es específica de la plataforma y puede estar vacía si no se requiere la inicialización de una fuente de datos aleatoria.

Detalles
Parámetros
[in] entropyFunct
Es el puntero a una función que genera entropía para el generador de datos aleatorios. Cuando el algoritmo no requiere una entrada de entropía, esta puede ser NULL, como sucede cuando se usa la versión de OpenSSL del generador de datos aleatorios.
[in] entropyLen
Especifica el tamaño de la entropía en bytes que debe generar la función de entropía cuando se usa.
[in] personalizationData
Es el puntero a un búfer de memoria que almacena la entrada de datos de personalización. Esta entrada de datos debe ser específica del dispositivo y ayuda a mejorar las propiedades estadísticas de los datos aleatorios.
[in] perDataLen
Especifica el tamaño de los datos de personalización en bytes.
Valores de retorno
WEAVE_ERROR_INVALID_ARGUMENT
Si se pasa un argumento no válido a esta función.
WEAVE_NO_ERROR
Si tiene éxito.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

La capa de Weave llama a esta función para asignar un bloque de memoria de "tamaño". bytes.

Esta función es equivalente a MemoryAlloc(size, false).

Detalles
Parámetros
[in] size
Especifica el tamaño de memoria solicitado en bytes.
Valores de retorno
Pointer
a un bloque de memoria en caso de éxito.
NULL-pointer
si falla la asignación de memoria.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

La capa de Weave llama a esta función para asignar un bloque de memoria de "tamaño". bytes.

Detalles
Parámetros
[in] size
Especifica el tamaño de memoria solicitado en bytes.
[in] isLongTermAlloc
Es un valor booleano que indica si (verdadero) o no (falso) el bloque de memoria solicitado es para uso a largo plazo. Una asignación a largo plazo es la memoria que debe permanecer asignada hasta que se complete la sesión o el protocolo de enlace seguros. Algunos ejemplos de asignaciones a largo plazo incluyen los bloques asignados para objetos CASE/PASE y sus datos de contexto. Una asignación a corto plazo es una memoria necesaria para realizar una operación específica y se puede liberar inmediatamente después de eso. Esta entrada ayuda a optimizar el uso de memoria en un sistema con restricción de memoria. El uso de este parámetro es arbitrario y depende del implementador de la función. Por ejemplo, este parámetro se ignora cuando se utiliza la biblioteca C estándar malloc().
Valores de retorno
Pointer
a un bloque de memoria en caso de éxito.
NULL-pointer
si falla la asignación de memoria.

MemoryFree

void MemoryFree(
  void *p
)

La capa de Weave llama a esta función para liberar un bloque de memoria asignado por la función MemeoryAlloc().

Detalles
Parámetros
[in] p
Es el puntero a un bloque de memoria que debería liberarse.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

La capa de Weave llama a esta función para inicializar la memoria y los recursos necesarios para el funcionamiento correcto del asignador de memoria del administrador de seguridad de Weave.

Esta función es específica de una plataforma y podría estar vacía en ciertos casos. Por ejemplo, esta función no realiza ninguna acción cuando se usan las funciones malloc() y free() de la biblioteca C Standard para la asignación de memoria.

Detalles
Parámetros
[in] buf
Un puntero a un búfer de memoria dedicado, que debe usarse como un grupo de memoria para la asignación de memoria del administrador de seguridad de Weave. Esta entrada es opcional (el valor predeterminado es NULL) y no se debe utilizar si no se utiliza un búfer de memoria dedicado.
[in] bufSize
Tamaño de un búfer de memoria dedicado. Esta entrada es opcional (el valor predeterminado es 0) y no debe usarse si no se usa el búfer de memoria dedicado. Cuando se usa un búfer de memoria dedicado, la función verifica y genera un error si el tamaño del búfer no es lo suficientemente grande como para admitir casos de uso de Weave Security Manager.
Valores de retorno
WEAVE_ERROR_BUFFER_TOO_SMALL
Si el tamaño del búfer de entrada dedicado no es suficiente para admitir casos de uso de Security Manager de Weave.
WEAVE_NO_ERROR
Si tiene éxito.
other
Un error que genera la función de inicialización de la memoria específica de la plataforma.

MemoryShutdown

void MemoryShutdown(
  void
)

La capa de Weave llama a esta función para liberar todos los recursos que se asignaron mediante la función MemoryInit().

Esta función puede ser una llamada vacía si no hay necesidad de liberar recursos. Por ejemplo, este es el caso cuando se usan las funciones malloc() y free() de la biblioteca C estándar para la asignación de memoria.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Se llama a esta función para notificar a la aplicación cuando se acaba de finalizar una operación criptográfica lenta.

.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Se llama a esta función para notificar a la aplicación cuando una operación criptográfica lenta está por comenzar.

.