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.
Typedefs |
|
---|---|
BlockMark_t
|
typedefuint8_t
El tipo que se usa para marcar qué bloque está asignado o no asignado. |
BlockSetParams_t
|
typedefuint8_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]
|
const BlockSetParams_t
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.
|
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] | Decodificación |
000 | 0 bytes |
001 | 128 bytes |
010 | 256 bytes |
… | - |
111 | 896 bytes |
[4:3] | Decodificación |
00 | 4 bloques |
01 | 1 bloque |
10 | 2 bloques |
11 | 3 bloques |
[6:5] | Decodificación |
00 | Búfer de red no 0 |
… | - |
11 | Búfer de red no 3 |
[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 |
|
||||||||
Valores de retorno |
|
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 |
|
||||||||
Valores de retorno |
|
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 |
|
||||
Valores de retorno |
|
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 |
|
||||
Valores de retorno |
|
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 |
|
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 |
|
||||||
Valores de retorno |
|
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.
.