nl::Weave::Platform::Security

Questo spazio dei nomi include tutte le interfacce di Weave per il gestore della memoria di Weave Security Monitor.

Riepilogo

Le funzioni in questo spazio dei nomi devono essere implementate dalle piattaforme che utilizzano Weave, in base alle esigenze/vincoli dell'ambiente specifico.

Enumerazioni

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Posizione dei campi dei parametri del set di blocchi in un formato con codifica a 8 bit.
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
Definisce i parametri del set di blocchi.

Typedef

BlockMark_t typedef
uint8_t
Il tipo utilizzato per contrassegnare il blocco attualmente allocato/non allocato.
BlockSetParams_t typedef
uint8_t
Questo tipo viene utilizzato per codificare le informazioni sugli insiemi di blocchi.

Variabili

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]
Parametri dei set di blocchi codificati.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Set di maschere di blocco del buffer.
sMemBlocksAllocated = 0
Indica quale blocco è allocato/non allocato.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Puntatori ai buffer di memoria inizializzati su NULL.
sNetworkBuffersUsed = true
bool
Un valore booleano che indica se (true) o meno (false) i buffer di rete vengono utilizzati da Simple Allocator.

Funzioni

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Questa funzione viene chiamata dallo strato Weave per generare dati casuali.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Questa funzione viene chiamata dallo strato Weave per inizializzare l'origine di dati casuale.
MemoryAlloc(size_t size)
void *
Questa funzione viene chiamata dallo strato Weave per allocare un blocco di memoria di "size" byte.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Questa funzione viene chiamata dallo strato Weave per allocare un blocco di memoria di "size" byte.
MemoryFree(void *p)
void
Questa funzione viene chiamata dallo strato Weave per rilasciare un blocco di memoria allocato dalla funzione MemeoryAlloc().
MemoryInit(void *buf, size_t bufSize)
Questa funzione viene chiamata dal livello Weave per inizializzare la memoria e le risorse necessarie per il corretto funzionamento dell'allocatore di memoria di Weave Security Manager.
MemoryShutdown(void)
void
Questa funzione viene chiamata dallo strato Weave per rilasciare tutte le risorse allocate dalla funzione MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Questa funzione viene chiamata per inviare una notifica all'applicazione quando è appena terminata un'operazione crittografica che richiede molto tempo.
OnTimeConsumingCryptoStart(void)
void
Questa funzione viene chiamata per informare l'applicazione quando sta per iniziare un'operazione crittografica che richiede molto tempo.

Corsi

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

Enumerazioni

BlockSetParamFields

 BlockSetParamFields

Posizione dei campi dei parametri del set di blocchi in un formato con codifica a 8 bit.

Proprietà
kBlockSetBufferIndexMask

Maschera del campo dell'indice del buffer.

kBlockSetBufferIndexShift

Spostamento di campo dell'indice del buffer.

kBlockSetCountMask

Maschera campo di conteggio.

kBlockSetCountShift

Conteggio della variazione di campo.

kBlockSetIsLongTermMask

Maschera del campo del tipo.

kBlockSetIsLongTermShift

Digita una variazione di campo.

kBlockSetSizeMask

Maschera del campo delle dimensioni.

kBlockSetSizeShift

Variazione del campo delle dimensioni.

kBlockSetSizeValueShift

Variazione della decodifica del campo delle dimensioni (moltiplica per 128).

BlockSetParams

 BlockSetParams

Definisce i parametri del set di blocchi.

Proprietà
kBlockSet1BufferIndex

L'indice di buffer impostato n. 1 è 0.

kBlockSet1Count

Il numero di blocchi per il set 1 è 1.

kBlockSet1Size

La dimensione del set 1 è di 128 byte.

kBlockSet1isLongTerm

Il tipo di set 1 è a lungo termine.

kBlockSet2BufferIndex

L'indice di buffer del set 2 è 0.

kBlockSet2Count

Il numero di blocchi del set 2 è 1.

kBlockSet2Size

La dimensione del set 2 è di 512 byte.

kBlockSet2isLongTerm

Il tipo di set 2 è a lungo termine.

kBlockSet3BufferIndex

L'indice di buffer del set 3 è 0.

kBlockSet3Count

Il numero di blocchi nel set 3 è 1.

kBlockSet3Size

La dimensione del set 3 è di 512 byte.

kBlockSet3isLongTerm

Il tipo di set 3 è a breve termine.

kBlockSet4BufferIndex

L'indice di buffer del set 4 è 1.

kBlockSet4Count

Il numero di blocchi nel set 4 è 2.

kBlockSet4Size

La dimensione del set 4 è di 640 byte.

kBlockSet4isLongTerm

Il tipo di set 4 è a breve termine.

kMaxBlockSize

Dimensione massima del blocco supportata da Simple Allocator.

kMinBufferSize

Dimensione minima del buffer di rete richiesta per supportare i casi d'uso di Simple Allocator.

Questo parametro deriva dalle dimensioni di due blocchi di memoria (640 + 600) allocati nel buffer di rete n. 1.

kNetworkBuffer0BlockAllocationMask

Questa maschera identifica tutti i blocchi di memoria allocati dal buffer di rete n. 0.

kNetworkBuffer1BlockAllocationMask

Questa maschera identifica tutti i blocchi di memoria allocati dal buffer di rete 1.

kNumberOfBlockSets

Numero di insiemi di blocchi utilizzati da Simple Allocator.

kNumberOfNetworkBuffers

Numero di buffer di rete utilizzati da Simple Allocator.

kTotalMemorySize

Memoria totale utilizzata da Allocator semplice.

Typedef

BlockMark_t

uint8_t BlockMark_t

Il tipo utilizzato per contrassegnare il blocco attualmente allocato/non allocato.

uint8_t - supporta fino a 8 blocchi di memoria in totale uint16_t - supporta fino a 16 blocchi di memoria in totale uint32_t - supporta fino a 32 blocchi di memoria in totale

BlockSetParams_t

uint8_t BlockSetParams_t

Questo tipo viene utilizzato per codificare le informazioni sugli insiemi di blocchi.

Un insieme di blocchi è un gruppo di blocchi di memoria che hanno le stesse proprietà (dimensione, tipo e appartenenti allo stesso buffer). Il seguente diagramma illustra come le informazioni sui set di blocchi codificate in un formato a 8 bit:

È a lungo termine Blocca indice Numero di blocchi Dimensione blocco
[7] [06:5] [04:3] [02:0]
[2:0] - Dimensione del blocco di memoria in un set. Il valore della dimensione è codificato con una granularità a 128 byte.
[02:0] Decodifica
000 0 byte
001 128 byte
010 256 byte
-
111 896 byte
[4:3] - Numero di blocchi in un set.
[04:3] Decodifica
00 4 blocchi
01 1 blocco
10 2 blocchi
11 3 blocchi
[6:5] - Indice del buffer di rete in cui si trovano i blocchi di memoria. Tieni presente che, quando viene utilizzato un buffer dedicato, tutti i blocchi di memoria vengono allocati dal buffer dedicato e questo parametro di indice viene ignorato.
[06:5] Decodifica
00 Buffer di rete n. 0
-
11 Buffer di rete 3
[7] - Specifica se i blocchi sono destinati all'archiviazione a lungo/breve termine.
[7] Decodifica
0 Blocchi di memoria a breve termine
1 Blocchi di memoria a lungo termine

Variabili

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







}

Parametri dei set di blocchi codificati.

sBufferAllocationMask

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




                                                                                       }

Set di maschere di blocco del buffer.

Identifica se tutti i blocchi nel buffer non sono allocati e se è possibile alleviare il buffer.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Indica quale blocco è allocato/non allocato.

Inizializzato su 0: indica che tutti i blocchi di memoria e non allocati.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Puntatori ai buffer di memoria inizializzati su NULL.

Quando vengono utilizzati i buffer di rete, sMemBufs[] punta agli oggetti PacketBuffer. Quando si utilizza un buffer dedicato, sMemBufs[0] punta a quel buffer e gli altri puntatori sMemBuf[] vengono ignorati.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Un valore booleano che indica se (true) o meno (false) i buffer di rete vengono utilizzati da Simple Allocator.

Se il valore è false, viene utilizzato il buffer dedicato fornito con la funzione MemoryInit().

Funzioni

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
)

Questa funzione viene chiamata dallo strato Weave per generare dati casuali.

Dettagli
Parametri
[in] buf
Puntare a un buffer di memoria in cui devono essere archiviati i dati casuali richiesti.
[in] len
Specifica la dimensione dei dati casuali richiesta in byte.
Valori restituiti
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Se l'origine entropia non riesce a generare l'entropia richiesta dal generatore di dati casuali.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Se l'origine dati casuale non riesce a generare dati casuali.
WEAVE_ERROR_INCORRECT_STATE
Se l'origine dati casuale viene rilevata in uno stato errato.
WEAVE_NO_ERROR
Un successo.

InitSecureRandomDataSource

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

Questa funzione viene chiamata dallo strato Weave per inizializzare l'origine di dati casuale.

Questa funzione è specifica della piattaforma e potrebbe essere vuota quando non è richiesta l'inizializzazione di un'origine dati casuale.

Dettagli
Parametri
[in] entropyFunct
Puntatore a una funzione che genera entropia nel generatore di dati casuali. Quando l'algoritmo non richiede l'input di entropia, questo input può essere NULL, nel caso in cui si utilizzi la versione OpenSSL del generatore di dati casuali.
[in] entropyLen
Specifica la dimensione dell'entropia in byte che dovrebbe essere generata dalla funzione di entropia quando viene utilizzata.
[in] personalizationData
Punta a un buffer di memoria in cui sono memorizzati i dati di personalizzazione. Questo input di dati deve essere specifico per dispositivo e contribuisce a migliorare le proprietà statistiche dei dati casuali.
[in] perDataLen
Specifica la dimensione in byte dei dati di personalizzazione.
Valori restituiti
WEAVE_ERROR_INVALID_ARGUMENT
Se a questa funzione è stato passato un argomento non valido.
WEAVE_NO_ERROR
Un successo.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Questa funzione viene chiamata dallo strato Weave per allocare un blocco di memoria di "size" byte.

Questa funzione è equivalente a MemoryAlloc(size, false).

Dettagli
Parametri
[in] size
Specifica la dimensione della memoria richiesta in byte.
Valori restituiti
Pointer
in un blocco di memoria, in caso di successo.
NULL-pointer
in caso di errore di allocazione della memoria.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Questa funzione viene chiamata dallo strato Weave per allocare un blocco di memoria di "size" byte.

Dettagli
Parametri
[in] size
Specifica la dimensione della memoria richiesta in byte.
[in] isLongTermAlloc
Un valore booleano che indica se (true) o meno (false) il blocco di memoria richiesto è utilizzabile a lungo termine. Un'allocazione a lungo termine è la memoria che deve rimanere allocata fino al completamento della sessione/handshake sicura. Gli esempi di allocazione a lungo termine includono i blocchi allocati per gli oggetti CASE/PASE e i relativi dati di contesto. Un'allocazione a breve termine è una memoria necessaria per eseguire un'operazione specifica e può essere rilasciata subito dopo. Questo input consente di ottimizzare l'utilizzo della memoria in un sistema con memoria vincolata. L'utilizzo di questo parametro è arbitrario e dipende dall'implementatore della funzione. Ad esempio, questo parametro viene ignorato quando viene utilizzata la libreria standard C Malloc().
Valori restituiti
Pointer
in un blocco di memoria, in caso di successo.
NULL-pointer
in caso di errore di allocazione della memoria.

MemoryFree

void MemoryFree(
  void *p
)

Questa funzione viene chiamata dallo strato Weave per rilasciare un blocco di memoria allocato dalla funzione MemeoryAlloc().

Dettagli
Parametri
[in] p
Punta a un blocco di memoria che dovrebbe essere rilasciato.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Questa funzione viene chiamata dal livello Weave per inizializzare la memoria e le risorse necessarie per il corretto funzionamento dell'allocatore di memoria di Weave Security Manager.

Questa funzione è specifica della piattaforma e in alcuni casi potrebbe essere vuota. Ad esempio, questa funzione non ha alcun effetto quando per l'allocazione della memoria vengono utilizzate le funzioni Malloc() e free() della libreria C Standard.

Dettagli
Parametri
[in] buf
Un puntatore a un buffer di memoria dedicato, che dovrebbe essere utilizzato come pool di memoria per l'allocazione della memoria di Weave Security Manager. Questo input è facoltativo (il valore predefinito è NULL) e non deve essere utilizzato se non viene utilizzato un buffer di memoria dedicato.
[in] bufSize
Dimensione di un buffer di memoria dedicato. Questo input è facoltativo (il valore predefinito è 0) e non deve essere utilizzato se non viene utilizzato un buffer di memoria dedicato. Quando si utilizza un buffer di memoria dedicato, la funzione controlla e genera un errore se le dimensioni del buffer non sono abbastanza grandi da supportare i casi d'uso di Weave Security Manager.
Valori restituiti
WEAVE_ERROR_BUFFER_TOO_SMALL
Se la dimensione del buffer di input dedicato non è sufficiente per supportare i casi d'uso di Weave Security Manager.
WEAVE_NO_ERROR
Un successo.
other
Un errore generato dalla funzione di inizializzazione della memoria specifica della piattaforma.

MemoryShutdown

void MemoryShutdown(
  void
)

Questa funzione viene chiamata dallo strato Weave per rilasciare tutte le risorse allocate dalla funzione MemoryInit().

Questa funzione può essere una chiamata vuota se non è necessario rilasciare risorse. Questo è il caso, ad esempio, delle funzioni Malloc() e free() della libreria C Standard utilizzate per l'allocazione della memoria.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Questa funzione viene chiamata per inviare una notifica all'applicazione quando è appena terminata un'operazione crittografica che richiede molto tempo.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Questa funzione viene chiamata per informare l'applicazione quando sta per iniziare un'operazione crittografica che richiede molto tempo.