En Google, luchamos por la equidad racial de la comunidad negra. Más información

nl::Weave::Plataforma::Seguridad

Este espacio de nombres incluye todas las interfaces de Weave para el administrador de memoria Weave Monitor.

Resumen

Las funciones de este espacio de nombres se deben implementar en plataformas que usan Weave, según las necesidades o restricciones del entorno específico.

Enumeraciones

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Bloquear la ubicación de los campos de parámetro en un formato de 8 bits codificado.
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 usado para marcar qué bloque está asignado o no asignado actualmente.
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 se asignó o no está asignado.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Se apuntan los punteros a los búferes de memoria a NULL.
sNetworkBuffersUsed = true
bool
Un valor booleano que indica si (true) o no (false) los búferes de red se usan en el asignador simple.

Functions

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 la 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 bytes.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
La capa de Weave llama a esta función para asignar un bloque de memoria de 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 a fin de inicializar la memoria y los recursos necesarios para un 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 la función MemoryInit() asignó.
OnTimeConsumingCryptoDone(void)
void
Se llama a esta función para notificar a la aplicación cuando una operación criptográfica que consume mucho tiempo acaba de finalizar.
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á a punto de comenzar.

Clases

nl::Weave::Plataforma:Seguridad::AES128BlockCipher
nl::Weave::Plataforma:Seguridad::AES128BlockCipherDec
nl::Weave::Plataforma:Seguridad::AES128BlockCipherEnc
nl::Weave::Plataforma:Seguridad:AES256BlockCipher
nl::Weave::Plataforma:Seguridad::AES256BlockCipherDec
nl::Weave::Plataforma:Seguridad:AES256BlockCipherEnc
nl::Weave::Plataforma:Seguridad::SHA1
nl::Weave::Plataforma:Seguridad::SHA256

Enumeraciones

BlockSetParamFields

 BlockSetParamFields

Bloquear la ubicación de los campos de parámetro en un formato de 8 bits codificado.

Properties
kBlockSetBufferIndexMask

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

kBlockSetBufferIndexShift

Cambio en el campo de índice del búfer.

kBlockSetCountMask

Máscara de campo de recuento.

kBlockSetCountShift

Contar el cambio de campo.

kBlockSetIsLongTermMask

Máscara de campo de tipo.

kBlockSetIsLongTermShift

Cambiar tipo de campo.

kBlockSetSizeMask

Es la máscara del campo de tamaño.

kBlockSetSizeShift

Cambio en el campo de tamaño.

kBlockSetSizeValueShift

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

BlockSetParams

 BlockSetParams

Define los parámetros del conjunto de bloques.

Properties
kBlockSet1BufferIndex

Se estableció el índice de búfer n.o 1 en 0.

kBlockSet1Count

El recuento de bloques n.o 1 es 1.

kBlockSet1Size

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

kBlockSet1isLongTerm

El tipo n.° 1 establecido es a largo plazo.

kBlockSet2BufferIndex

Se estableció el índice de búfer n.o 2 en 0.

kBlockSet2Count

El recuento de bloques n.o 2 es 1.

kBlockSet2Size

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

kBlockSet2isLongTerm

El conjunto n.° 2 es a largo plazo.

kBlockSet3BufferIndex

Se estableció el índice de búfer n.o 3 en 0.

kBlockSet3Count

El conjunto de bloques n.o 3 es 1.

kBlockSet3Size

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

kBlockSet3isLongTerm

El tipo n.o 3 es la opción a corto plazo.

kBlockSet4BufferIndex

Se estableció el índice de búfer n.o 4 en 1.

kBlockSet4Count

El recuento de bloques n.o 4 es 2.

kBlockSet4Size

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

kBlockSet4isLongTerm

El tipo n.° 4 se configura a corto plazo.

kMaxBlockSize

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

kMinBufferSize

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

Este parámetro se deriva de dos tamaños de bloque 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 utilizados por simple asignador.

kNumberOfNetworkBuffers

Cantidad de búferes de red que usa el asignador simple.

kTotalMemorySize

Memoria total usada por el asignador simple.

Typedefs

BloquearMark_t

uint8_t BlockMark_t

El tipo usado para marcar qué bloque está asignado o no asignado actualmente.

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

BloqueSetParams_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 fragmentos de memoria que tienen las mismas propiedades (tamaño, tipo y pertenecen al mismo búfer). En el siguiente diagrama, se presenta la forma de bloquear la información del conjunto de bloques en un formato de 8 bits:

Es a largo plazo Índice de bloqueo Cantidad de bloques Tamaño de bloque
[7] [6:5] [4:3] [2:0]
[2:0]: Tamaño del bloque de memoria en 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 en el que residen los bloques de la 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 núm. 0
-
11 Búfer de red núm. 3
[7]: Especifica si los bloqueos son para almacenamiento a corto o largo 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.

Máscara de asignación

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 desasignados y, luego, se puede volver a liberar el búfer.

sMemBlocksAsignado

BlockMark_t sMemBlocksAllocated = 0

Indica qué bloque se asignó o no está asignado.

Inicializado en 0: Significa que todos los bloques de memoria no se asignaron.

mMBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Se apuntan los punteros a los búferes de memoria a NULL.

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

SNetworkBuffersus

bool sNetworkBuffersUsed = true

Un valor booleano que indica si (true) o no (false) los búferes de red se usan en el asignador simple.

Cuando es falso, se usa el búfer dedicado que se proporciona con la función 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
)

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, en el que se deben almacenar los datos aleatorios solicitados.
[in] len
Especifica el tamaño aleatorio en datos solicitado en bytes.
Valores que se muestran
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Si la fuente de entropía no genera la entropía solicitada por el generador de datos aleatorio.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Si la fuente de datos aleatoria no puede generar datos al azar
WEAVE_ERROR_INCORRECT_STATE
Si la fuente de datos aleatoria se encuentra en un estado incorrecto
WEAVE_NO_ERROR
Si la operación se realiza correctamente

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 la fuente de datos aleatoria.

Esta función es específica de la plataforma y podría estar vacía cuando no se requiera 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 aleatorio. Cuando el algoritmo no requiere una entrada de entropía, esta entrada puede ser NULL, como 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 la utiliza.
[in] personalizationData
Es el puntero a un búfer de memoria que almacena una 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 se realiza correctamente

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

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

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

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

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.

Detalles
Parámetros
[in] size
Especifica el tamaño de la memoria solicitado en bytes.
[in] isLongTermAlloc
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 seguro. Algunos ejemplos de una asignación a largo plazo incluyen los bloques asignados a 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 de inmediato. 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 funciones. Por ejemplo, este parámetro se ignora cuando se usa el malloc() de la biblioteca estándar de C.
Valores que se muestran
Pointer
a un bloque de memoria en caso de éxito.
NULL-pointer
si la asignación de memoria falla.

Sin memoria

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 a fin de inicializar la memoria y los recursos necesarios para un funcionamiento correcto del asignador de memoria del administrador de seguridad de Weave.

Esta función es específica de la plataforma y es posible que esté vacía en algunos casos. Por ejemplo, esta función no realiza ninguna acción cuando las funciones de malloc() y free() de la biblioteca C estándar se usan para la asignación de memoria.

Detalles
Parámetros
[in] buf
Un puntero para un búfer de memoria dedicado, que se debe usar como un grupo de memoria para la asignación de memoria del administrador de seguridad de Weave. Esta entrada es opcional (la configuración predeterminada es NULL) y no se debe usar si no se usa 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 usa el búfer de memoria dedicado. Cuando se usa un búfer de memoria dedicado, la función comprueba el estado 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 que se muestran
WEAVE_ERROR_BUFFER_TOO_SMALL
Si el tamaño del búfer de entrada exclusivo no es suficiente para admitir casos de uso de Weave Security Manager.
WEAVE_NO_ERROR
Si la operación se realiza correctamente
other
Un error generado por la función de inicialización de memoria específica de la plataforma

Bloqueo de memoria

void MemoryShutdown(
  void
)

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

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

OnTimeConsumingCryptoDone,

void OnTimeConsumingCryptoDone(
  void
)

Se llama a esta función para notificar a la aplicación cuando una operación criptográfica que consume mucho tiempo acaba de finalizar.

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á a punto de comenzar.