nl::Weave::Platform::Security

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

Riepilogo

Le funzioni in questo spazio dei nomi devono essere implementate da piattaforme che utilizzano Weave, in base alle esigenze/limitazioni 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 di parametri del set di blocchi in un formato codificato 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 sul set 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 degli insiemi di blocchi codificati.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Set di maschere del blocco del buffer.
sMemBlocksAllocated = 0
Indica quale blocco è allocato/non allocato.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Puntatori ai buffer di memoria inizializzati in NULL.
sNetworkBuffersUsed = true
bool
Un valore booleano che indica se (true) o meno (false) i buffer di rete sono utilizzati dall'allocatore semplice.

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 richiamata dal livello Weave per generare dati casuali.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Questa funzione viene richiamata dal livello Weave per inizializzare l'origine dati casuale.
MemoryAlloc(size_t size)
void *
Questa funzione viene richiamata dal livello Weave per allocare un blocco di memoria di "dimensioni" byte.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Questa funzione viene richiamata dal livello Weave per allocare un blocco di memoria di "dimensioni" byte.
MemoryFree(void *p)
void
Questa funzione viene chiamata dal livello 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 Weave Security Manager.
MemoryShutdown(void)
void
Questa funzione viene chiamata dal livello Weave per rilasciare tutte le risorse allocate dalla funzione MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Questa funzione viene chiamata per notificare l'applicazione quando si è appena conclusa un'operazione crittografica dispendiosa in termini di tempo.
OnTimeConsumingCryptoStart(void)
void
Questa funzione viene chiamata per notificare l'applicazione quando sta per iniziare un'operazione crittografica dispendiosa in termini di 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 di parametri del set di blocchi in un formato codificato a 8 bit.

Proprietà
kBlockSetBufferIndexMask

Maschera del campo dell'indice del buffer.

kBlockSetBufferIndexShift

Spostamento del campo dell'indice del buffer.

kBlockSetCountMask

Maschera per il campo del conteggio.

kBlockSetCountShift

Maiusc campo Conteggio.

kBlockSetIsLongTermMask

Maschera del campo del tipo.

kBlockSetIsLongTermShift

Digita lo spostamento di un 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 #1 è 0.

kBlockSet1Count

Il numero di blocchi del set 1 è 1.

kBlockSet1Size

Le dimensioni del set 1 sono di 128 byte.

kBlockSet1isLongTerm

Il tipo di set 1 è a lungo termine.

kBlockSet2BufferIndex

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

kBlockSet2Count

Il numero di blocchi del set 2 è 1.

kBlockSet2Size

Le dimensioni del set 2 sono di 512 byte.

kBlockSet2isLongTerm

Il tipo di set 2 è a lungo termine.

kBlockSet3BufferIndex

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

kBlockSet3Count

Il numero di blocchi del set 3 è 1.

kBlockSet3Size

Le dimensioni del set 3 sono di 512 byte.

kBlockSet3isLongTerm

Il tipo di set 3 è a breve termine.

kBlockSet4BufferIndex

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

kBlockSet4Count

Il numero di blocchi del set 4 è 2.

kBlockSet4Size

Le dimensioni del set 4 sono di 640 byte.

kBlockSet4isLongTerm

Il tipo di set 4 è a breve termine.

kMaxBlockSize

Dimensione massima del blocco supportata dall'allocatore semplice.

kMinBufferSize

Dimensioni minime del buffer di rete necessarie per supportare i casi d'uso di allocatore semplice.

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 n. 1.

kNumberOfBlockSets

Numero di insiemi di blocchi utilizzati dall'allocatore semplice.

kNumberOfNetworkBuffers

Numero di buffer di rete utilizzati dall'allocatore semplice.

kTotalMemorySize

Memoria totale utilizzata dall'allocatore 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 sul set di blocchi.

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

È a lungo termine Blocca indice Numero di blocchi Dimensione blocco
[7] [6:5] [4:3] [2:0]
[2:0] - La dimensione del blocco di memoria in un insieme. Il valore delle dimensioni è codificato con granularità a 128 byte.
[2:0] Decodifica
000 0 byte
001 128 byte
010 256 byte
... -
111 896 byte
[4:3] - Il numero di blocchi in un insieme.
[4:3] Decodifica
00 4 blocchi
01 1 blocco
10 2 blocchi
11 3 blocchi
[6:5] - Indice del buffer di rete in cui risiedono i blocchi di memoria. Tieni presente che, quando si utilizza un buffer dedicato, tutti i blocchi di memoria vengono allocati da un buffer dedicato e questo parametro indice viene ignorato.
[6:5] Decodifica
00 Buffer di rete n. 0
... -
11 Buffer di rete n. 3
[7] - Specifica se i blocchi sono per 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 degli insiemi di blocchi codificati.

sBufferAllocationMask

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




                                                                                       }

Set di maschere del blocco del buffer.

Identifica se tutti i blocchi nel buffer non sono allocati e se il buffer può essere allentato.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Indica quale blocco è allocato/non allocato.

Inizializzato a 0 significa che tutti i blocchi di memoria e non allocati.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Puntatori ai buffer di memoria inizializzati in NULL.

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

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Un valore booleano che indica se (true) o meno (false) i buffer di rete sono utilizzati dall'allocatore semplice.

Se 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 richiamata dal livello Weave per generare dati casuali.

Dettagli
Parametri
[in] buf
Punta a un buffer di memoria in cui devono essere archiviati i dati casuali richiesti.
[in] len
Specifica la dimensione dei dati casuali richiesti 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 trovata in uno stato errato.
WEAVE_NO_ERROR
In caso di successo.

InitSecureRandomDataSource

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

Questa funzione viene richiamata dal livello Weave per inizializzare l'origine 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 al generatore di dati casuali. Quando l'input entropia non è richiesto dall'algoritmo, questo input può essere NULL, come accade quando viene utilizzata la versione OpenSSL del generatore di dati casuali.
[in] entropyLen
Specifica la dimensione entropia in byte che deve essere generata dalla funzione entropia quando viene utilizzata.
[in] personalizationData
Punta a un buffer di memoria che archivia l'input dei dati di personalizzazione. Questi dati devono essere specifici del dispositivo e aiutano a migliorare le proprietà statistiche dei dati casuali.
[in] perDataLen
Specifica la dimensione dei dati di personalizzazione in byte.
Valori restituiti
WEAVE_ERROR_INVALID_ARGUMENT
Se a questa funzione è stato trasmesso un argomento non valido.
WEAVE_NO_ERROR
In caso di successo.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Questa funzione viene richiamata dal livello Weave per allocare un blocco di memoria di "dimensioni" byte.

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

Dettagli
Parametri
[in] size
Specifica le dimensioni della memoria richieste in byte.
Valori restituiti
Pointer
in un blocco di memoria in caso di esito positivo.
NULL-pointer
in caso di allocazione della memoria non riuscita.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Questa funzione viene richiamata dal livello Weave per allocare un blocco di memoria di "dimensioni" byte.

Dettagli
Parametri
[in] size
Specifica le dimensioni della memoria richieste in byte.
[in] isLongTermAlloc
Un valore booleano che indica se (true) o meno (false) il blocco di memoria richiesto è destinato a un uso a lungo termine. Un'allocazione a lungo termine è la memoria che deve rimanere allocata fino al completamento di sessione/handshake sicura. 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 immediatamente dopo. Questo input consente di ottimizzare l'utilizzo della memoria in un sistema con memoria limitata. L'utilizzo di questo parametro è arbitrario e dipende dall'implementatore della funzione. Ad esempio, questo parametro viene ignorato quando si utilizza la funzione Malloc() della libreria standard C.
Valori restituiti
Pointer
in un blocco di memoria in caso di esito positivo.
NULL-pointer
in caso di allocazione della memoria non riuscita.

MemoryFree

void MemoryFree(
  void *p
)

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

Dettagli
Parametri
[in] p
Punta a un blocco di memoria da rilasciare.

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 Weave Security Manager.

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

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 da parte del Security Manager di Weave. Questo input è facoltativo (il valore predefinito è NULL) e non deve essere utilizzato se non viene usato 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 usato un buffer di memoria dedicato. Quando viene utilizzato un buffer di memoria dedicato, la funzione controlla e genera un errore se la dimensione del buffer non è abbastanza grande 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
In caso di successo.
other
Errore generato dalla funzione di inizializzazione della memoria specifica della piattaforma.

MemoryShutdown

void MemoryShutdown(
  void
)

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

Questa funzione può essere una chiamata vuota se non è necessario rilasciare risorse. Ad esempio, questo è il caso in cui per l'allocazione della memoria vengono utilizzate le funzioni Malloc() e free() della libreria standard C.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Questa funzione viene chiamata per notificare l'applicazione quando si è appena conclusa un'operazione crittografica dispendiosa in termini di tempo.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Questa funzione viene chiamata per notificare l'applicazione quando sta per iniziare un'operazione crittografica dispendiosa in termini di tempo.