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 implementarán las funciones de este espacio de nombres, según las necesidades o restricciones del entorno 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 del parámetro del conjunto de bloques 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
Es el tipo que se usa para marcar qué bloque está asignado o no asignado en este momento.
BlockSetParams_t typedef
uint8_t
Este tipo se usa para codificar la 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]
Parámetros de conjuntos de bloques codificados
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 asignado.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Punteros a búferes de memoria inicializados en NULL.
sNetworkBuffersUsed = true
bool
Es un valor booleano que indica si (verdadero) o no (falso) los búferes de red se usan en el Asignador simple.

remotas

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 aleatorios.
MemoryAlloc(size_t size)
void *
La capa de Weave llama a esta función para asignar un bloque de memoria de bytes de “tamaño”.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
La capa de Weave llama a esta función para asignar un bloque de memoria de bytes de “tamaño”.
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 correcto funcionamiento 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 asignó la función MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Esta función se llama para notificar a la aplicación cuando finaliza una operación criptográfica que requiere mucho tiempo.
OnTimeConsumingCryptoStart(void)
void
Se llama a esta función para notificar a la aplicación cuando una operación criptográfica que consume mucho tiempo 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 del parámetro del conjunto de bloques con codificación de 8 bits.

Propiedades
kBlockSetBufferIndexMask

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

kBlockSetBufferIndexShift

Cambio del campo de índice del búfer.

kBlockSetCountMask

Máscara de campo Count.

kBlockSetCountShift

Recuento de cambios de campo

kBlockSetIsLongTermMask

Máscara de campo Type.

kBlockSetIsLongTermShift

Cambio en el campo de tipo.

kBlockSetSizeMask

Máscara de campo de tamaño.

kBlockSetSizeShift

Cambio en el campo de tamaño.

kBlockSetSizeValueShift

Cambio en la decodificación del campo de tamaño (multiplicar por 128)

BlockSetParams

 BlockSetParams

Define los parámetros del conjunto de bloques.

Propiedades
kBlockSet1BufferIndex

El índice del búfer del conjunto n.o 1 es 0.

kBlockSet1Count

La cantidad de bloques 1 es 1.

kBlockSet1Size

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

kBlockSet1isLongTerm

El tipo del conjunto 1 es a largo plazo.

kBlockSet2BufferIndex

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

kBlockSet2Count

El número de bloques 2 es 1.

kBlockSet2Size

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

kBlockSet2isLongTerm

El tipo del conjunto 2 es a largo plazo.

kBlockSet3BufferIndex

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

kBlockSet3Count

El número de bloques 3 es 1.

kBlockSet3Size

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

kBlockSet3isLongTerm

El tipo del conjunto 3 es de corto plazo.

kBlockSet4BufferIndex

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

kBlockSet4Count

El número de bloques 4 es 2.

kBlockSet4Size

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

kBlockSet4isLongTerm

El tipo del conjunto 4 es de corto plazo.

kMaxBlockSize

Tamaño de bloque máximo admitido por el asignador simple.

kMinBufferSize

El tamaño mínimo del búfer de red se requiere para admitir los casos de uso del Asignador simple.

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

kNetworkBuffer0BlockAllocationMask

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

kNetworkBuffer1BlockAllocationMask

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

kNumberOfBlockSets

Cantidad de conjuntos de bloques que utiliza el asignador simple.

kNumberOfNetworkBuffers

Cantidad de búferes de red que utiliza el Asignador simple.

kTotalMemorySize

Memoria total utilizada por el asignador simple.

Typedefs

BlockMark_t

uint8_t BlockMark_t

Es el tipo que se usa para marcar qué bloque está asignado o no asignado en este momento.

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 la 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 pertenencia al mismo búfer). En el siguiente diagrama, se presenta cómo se codifica la información del conjunto de bloques en un formato de 8 bits:

Es a largo plazo Índice de bloque 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 está codificado 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] - Cantidad 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 Bloques 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),







}

Parámetros de conjuntos de bloques codificados

sBufferAllocationMask

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




                                                                                       }

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

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

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Indica qué bloque está asignado o no asignado.

Inicializado en 0 significa que todos los bloques de memoria y sin asignar

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Punteros a búferes de memoria inicializados en NULL.

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

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Es un valor booleano que indica si (verdadero) o no (falso) los búferes de red se usan en el Asignador simple.

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

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
)

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

Detalles
Parámetros
[in] buf
Es un puntero a un búfer de memoria, donde se deben almacenar los datos aleatorios solicitados.
[in] len
Especifica el tamaño de datos aleatorios solicitados en bytes.
Valores que se muestran
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Si la fuente de entropía no puede generar la 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 la fuente de datos aleatorios se encuentra en un estado incorrecto.
WEAVE_NO_ERROR
Si la operación es exitosa.

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 aleatorios.

Esta función es específica de la plataforma y puede estar vacía cuando 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 al generador de datos aleatorios. Cuando el algoritmo no requiere una entrada de entropía, esta puede ser NULL, que es el caso cuando se usa la versión de OpenSSL del generador de datos aleatorio.
[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 que se muestran
WEAVE_ERROR_INVALID_ARGUMENT
Si se pasó un argumento no válido a esta función.
WEAVE_NO_ERROR
Si la operación es exitosa.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

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

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

Detalles
Parámetros
[in] size
Especifica el tamaño de memoria solicitado en bytes.
Valores que se muestran
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 bytes de “tamaño”.

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. Los ejemplos de una asignación a largo plazo incluyen 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 ella. Esta entrada ayuda a optimizar el uso de memoria en un sistema con memoria limitada. El uso de este parámetro es arbitrario y depende del implementador de funciones. Por ejemplo, este parámetro se ignora cuando se usa la biblioteca C Standard malloc().
Valores que se muestran
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 se debe liberar.

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 correcto funcionamiento del asignador de memoria del administrador de seguridad de Weave.

Esta función es específica de la plataforma y puede 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 estándar 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 usar 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 se debe usar si no se utiliza 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 para admitir casos de uso del administrador de seguridad de Weave.
Valores que se muestran
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 la operación es exitosa.
other
Un error que genera la función de inicialización de 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 asignó la función MemoryInit().

Esta función puede ser una llamada vacía si no es necesario 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
)

Esta función se llama para notificar a la aplicación cuando finaliza una operación criptográfica que requiere mucho tiempo.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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