nl::Weave::Platform::Security

Dieser Namespace enthält alle Weave-Schnittstellen für den Arbeitsspeicher-Manager des Weave Security Monitors.

Zusammenfassung

Funktionen in diesem Namespace müssen von Plattformen, die Weave verwenden, entsprechend den Anforderungen/Einschränkungen der jeweiligen Umgebung implementiert werden.

Aufzählungen

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Sperrsatz-Parameterfelder in einer 8-Bit-codierten Form.
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
Definiert Blocksatzparameter.

Typedefs

BlockMark_t typedef
uint8_t
Der Typ, der verwendet wird, um zu kennzeichnen, welcher Block derzeit zugewiesen/nicht zugewiesen ist.
BlockSetParams_t typedef
uint8_t
Dieser Typ wird zum Codieren von Blocksatzinformationen verwendet.

Variablen

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]
Codierte Blocksatzparameter.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Satz von Pufferblockmasken.
sMemBlocksAllocated = 0
Gibt an, welcher Block zugewiesen/nicht zugewiesen ist.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Zeiger auf Arbeitsspeicherpuffer, die auf NULL initialisiert wurden.
sNetworkBuffersUsed = true
bool
Ein boolescher Wert, der angibt, ob (true) oder nicht (false) die Netzwerkzwischenspeicher vom Simple Allocator verwendet werden.

Funktionen

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Diese Funktion wird von der Weave-Ebene aufgerufen, um zufällige Daten zu generieren.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Diese Funktion wird von der Weave-Ebene aufgerufen, um eine zufällige Datenquelle zu initialisieren.
MemoryAlloc(size_t size)
void *
Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock mit „size“-Byte zuzuweisen.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock mit „size“-Byte zuzuweisen.
MemoryFree(void *p)
void
Diese Funktion wird von der Weave-Ebene aufgerufen, um einen von der Funktion MemeoryAlloc() zugewiesenen Speicherblock freizugeben.
MemoryInit(void *buf, size_t bufSize)
Diese Funktion wird von der Weave-Ebene aufgerufen, um den Arbeitsspeicher und die Ressourcen zu initialisieren, die für die ordnungsgemäße Funktion des Weave Security Manager-Arbeitsspeicherzuweisung erforderlich sind.
MemoryShutdown(void)
void
Diese Funktion wird von der Weave-Ebene aufgerufen, um alle Ressourcen freizugeben, die von der MemoryInit()-Funktion zugewiesen wurden.
OnTimeConsumingCryptoDone(void)
void
Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, wenn ein zeitaufwendiger kryptografischer Vorgang gerade abgeschlossen wurde.
OnTimeConsumingCryptoStart(void)
void
Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, wenn ein zeitaufwendiger kryptografischer Vorgang beginnt.

Kurse

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

Aufzählungen

BlockSetParamFields

 BlockSetParamFields

Sperrsatz-Parameterfelder in einer 8-Bit-codierten Form.

Attribute
kBlockSetBufferIndexMask

Feldmaske für Pufferindex.

kBlockSetBufferIndexShift

Verschiebung des Felds im Pufferindex.

kBlockSetCountMask

Maske für das Feld „Anzahl“.

kBlockSetCountShift

Zählerfeldverschiebung.

kBlockSetIsLongTermMask

Feldmaske eingeben.

kBlockSetIsLongTermShift

Geben Sie Feldverschiebung ein.

kBlockSetSizeMask

Größenfeldmaske.

kBlockSetSizeShift

Verschiebung des Größenfelds.

kBlockSetSizeValueShift

Verschiebung der Decodierung des Größenfelds (multipliziert mit 128).

BlockSetParams

 BlockSetParams

Definiert Blocksatzparameter.

Attribute
kBlockSet1BufferIndex

Pufferindex Nr. 1 ist 0.

kBlockSet1Count

Satz Nr. 1 für die Blockanzahl ist 1.

kBlockSet1Size

Set 1 hat eine Größe von 128 Byte.

kBlockSet1isLongTerm

1. Typ ist langfristig.

kBlockSet2BufferIndex

Pufferindex Nr. 2 ist 0.

kBlockSet2Count

Satz Nr. 2 für die Blockanzahl ist 1.

kBlockSet2Size

Set 2 hat eine Größe von 512 Byte.

kBlockSet2isLongTerm

Satz Nr. 2 ist der langfristige Typ.

kBlockSet3BufferIndex

Pufferindex Nr. 3 auf 0 festlegen.

kBlockSet3Count

Satz Nr. 3 für die Blockanzahl ist 1.

kBlockSet3Size

Set 3 hat eine Größe von 512 Byte.

kBlockSet3isLongTerm

Der Typ von Satz 3 ist kurzfristig.

kBlockSet4BufferIndex

Pufferindex Nr. 4 ist 1.

kBlockSet4Count

4. Blockanzahl ist 2.

kBlockSet4Size

Set 4 hat eine Größe von 640 Byte.

kBlockSet4isLongTerm

Der Typ von Satz 4 ist kurzfristig.

kMaxBlockSize

Maximale Blockgröße, die vom einfachen Allocator unterstützt wird.

kMinBufferSize

Erforderliche Netzwerkpuffergröße zur Unterstützung von Anwendungsfällen für Simple Allocator.

Dieser Parameter wird aus den Größen von zwei Speicherblöcken (640 + 600) abgeleitet, die im Netzwerkpuffer #1 zugewiesen sind.

kNetworkBuffer0BlockAllocationMask

Diese Maske identifiziert alle Speicherblöcke, die dem Netzwerkpuffer #0 zugewiesen sind.

kNetworkBuffer1BlockAllocationMask

Diese Maske identifiziert alle Speicherblöcke, die von Netzwerkpuffer 1 zugewiesen wurden.

kNumberOfBlockSets

Anzahl der Blocksätze, die vom einfachen Allocator verwendet werden.

kNumberOfNetworkBuffers

Anzahl der vom einfachen Allocator verwendeten Netzwerkpuffer.

kTotalMemorySize

Insgesamt von Simple Allocator verwendeter Arbeitsspeicher.

Typedefs

BlockMark_t

uint8_t BlockMark_t

Der Typ, der verwendet wird, um zu kennzeichnen, welcher Block derzeit zugewiesen/nicht zugewiesen ist.

uint8_t – unterstützt insgesamt bis zu 8 Arbeitsspeicherblöcke uint16_t – unterstützt insgesamt bis zu 16 Speicherblöcke uint32_t – unterstützt insgesamt bis zu 32 Speicherblöcke

BlockSetParams_t

uint8_t BlockSetParams_t

Dieser Typ wird zum Codieren von Blocksatzinformationen verwendet.

Ein Blocksatz ist eine Gruppe von Speicherblöcken mit denselben Eigenschaften (Größe, Typ und zum selben Zwischenspeicher gehören). Das folgende Diagramm zeigt, wie Blocksatzinformationen im 8-Bit-Format codiert sind:

Langfristig Index blockieren Anzahl der Blöcke Blockgröße
[7] [6:5] [4:3] [2:0]
[2:0] – Größe des Speicherblocks in einem Satz. Der Größenwert ist mit einer Genauigkeit von 128 Byte codiert.
[2:0] Decodierung
000 0 Byte
001 128 Byte
010 256 Byte
... -
111 896 Byte
[4:3] – Anzahl der Blöcke in einem Satz.
[4:3] Decodierung
00 4 Blöcke
01 1 Block
10 2 Blöcke
11 3 Blöcke
[6:5] – Netzwerk-Pufferindex, in dem sich Speicherblöcke befinden. Beachten Sie, dass bei Verwendung eines dedizierten Puffers alle Speicherblöcke vom dedizierten Puffer zugewiesen werden. Dieser Indexparameter wird ignoriert.
[6:5] Decodierung
00 Netzwerkpuffer Nr. 0
... -
11 Netzwerkpuffer Nr. 3
[7] – Gibt an, ob Blöcke für die Langzeitspeicherung vorgesehen sind.
[7] Decodierung
0 Kurzzeitspeicherblöcke
1 Blöcke für Langzeitspeicher

Variablen

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







}

Codierte Blocksatzparameter.

sBufferAllocationMask

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




                                                                                       }

Satz von Pufferblockmasken.

Gibt an, ob alle Blöcke im Zwischenspeicher und nicht zugewiesen sind, bevor der Puffer freigegeben werden kann.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Gibt an, welcher Block zugewiesen/nicht zugewiesen ist.

Auf 0 initialisiert – bedeutet, dass alle Speicherblöcke und nicht zugewiesen sind.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Zeiger auf Arbeitsspeicherpuffer, die auf NULL initialisiert wurden.

Bei Verwendung von Netzwerkpuffern verweisen sMemBufs[] auf die PacketBuffer-Objekte. Bei Verwendung eines dedizierten Zwischenspeichers werden sMemBufs[0]-Punkte auf diesen Puffer verwendet und andere sMemBufs[]-Zeiger werden ignoriert.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Ein boolescher Wert, der angibt, ob (true) oder nicht (false) die Netzwerkzwischenspeicher vom Simple Allocator verwendet werden.

Bei „false“: Der mit der Funktion MemoryInit() bereitgestellte Zwischenspeicher wird verwendet.

Funktionen

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
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um zufällige Daten zu generieren.

Details
Parameter
[in] buf
Zeiger auf einen Arbeitsspeicherpuffer, in dem die angeforderten Zufallsdaten gespeichert werden sollen.
[in] len
Gibt die angeforderte zufällige Datengröße in Byte an.
Rückgabewerte
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Wenn die Entropiequelle keine vom Zufallsdatengenerator angeforderte Entropie generieren kann.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Wenn die Datenquelle keine Zufallsdaten generieren kann.
WEAVE_ERROR_INCORRECT_STATE
Wenn eine zufällige Datenquelle in einem falschen Status gefunden wird.
WEAVE_NO_ERROR
Bei Erfolg.

InitSecureRandomDataSource

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

Diese Funktion wird von der Weave-Ebene aufgerufen, um eine zufällige Datenquelle zu initialisieren.

Diese Funktion ist plattformspezifisch und kann leer sein, wenn keine Initialisierung der zufälligen Datenquelle erforderlich ist.

Details
Parameter
[in] entropyFunct
Zeiger auf eine Funktion, die Entropie für den Zufallsdatengenerator generiert. Wenn die Entropieeingabe vom Algorith nicht erforderlich ist, kann diese Eingabe NULL sein, was der Fall ist, wenn die OpenSSL-Version des Zufallsdatengenerators verwendet wird.
[in] entropyLen
Gibt die Entropiegröße in Byte an, die von der Entropiefunktion bei Verwendung generiert werden soll.
[in] personalizationData
Zeiger auf einen Arbeitsspeicherpuffer, in dem die Eingabe der Personalisierungsdaten gespeichert ist. Diese Dateneingabe sollte gerätespezifisch sein und hilft, die statistischen Eigenschaften der Zufallsdaten zu verbessern.
[in] perDataLen
Gibt die Größe der Personalisierungsdaten in Byte an.
Rückgabewerte
WEAVE_ERROR_INVALID_ARGUMENT
Wenn ein ungültiges Argument an diese Funktion übergeben wurde.
WEAVE_NO_ERROR
Bei Erfolg.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock mit „size“-Byte zuzuweisen.

Diese Funktion entspricht MemoryAlloc(size, false).

Details
Parameter
[in] size
Gibt die angeforderte Arbeitsspeichergröße in Byte an.
Rückgabewerte
Pointer
im Erfolgsfall in einen Speicherblock.
NULL-pointer
wenn die Arbeitsspeicherzuweisung fehlschlägt.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock mit „size“-Byte zuzuweisen.

Details
Parameter
[in] size
Gibt die angeforderte Arbeitsspeichergröße in Byte an.
[in] isLongTermAlloc
Boolescher Wert, der angibt, ob (true) oder nicht (false) der angeforderte Speicherblock für die langfristige Verwendung bestimmt ist. Eine langfristige Zuweisung ist Speicher, der zugewiesen bleiben sollte, bis die sichere Sitzung/der Handshake abgeschlossen ist. Beispiele für eine langfristige Zuweisung sind Blöcke, die CASE/PASE-Objekten zugewiesen sind, und deren Kontextdaten. Eine kurzfristige Zuweisung ist ein Speicher, der für einen bestimmten Vorgang benötigt wird und sofort danach freigegeben werden kann. Diese Eingabe hilft bei der Optimierung der Arbeitsspeicherauslastung in einem speicherbeschränkten System. Die Verwendung dieses Parameters ist beliebig und hängt vom Funktionsimplementierungsserver ab. Dieser Parameter wird beispielsweise ignoriert, wenn die C-Standardbibliothek „maloc()“ verwendet wird.
Rückgabewerte
Pointer
im Erfolgsfall in einen Speicherblock.
NULL-pointer
wenn die Arbeitsspeicherzuweisung fehlschlägt.

MemoryFree

void MemoryFree(
  void *p
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um einen von der Funktion MemeoryAlloc() zugewiesenen Speicherblock freizugeben.

Details
Parameter
[in] p
Zeiger auf einen Arbeitsspeicherblock, der freigegeben werden soll.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um den Arbeitsspeicher und die Ressourcen zu initialisieren, die für die ordnungsgemäße Funktion des Weave Security Manager-Arbeitsspeicherzuweisung erforderlich sind.

Diese Funktion ist plattformspezifisch und kann in bestimmten Fällen leer sein. Zum Beispiel bewirkt diese Funktion nichts, wenn die Funktionen der C-Standardbibliothek Malloc() und free() für die Speicherzuweisung verwendet werden.

Details
Parameter
[in] buf
Ein Zeiger auf einen dedizierten Arbeitsspeicherpuffer, der als Arbeitsspeicherpool für die Weave Security Manager-Arbeitsspeicherzuweisung verwendet werden sollte. Diese Eingabe ist optional (standardmäßig NULL) und sollte nicht verwendet werden, wenn kein dedizierter Speicherzwischenspeicher verwendet wird.
[in] bufSize
Größe eines dedizierten Arbeitsspeicherpuffers. Diese Eingabe ist optional (standardmäßig 0) und sollte nicht verwendet werden, wenn kein dedizierter Speicherzwischenspeicher verwendet wird. Wenn ein dedizierter Arbeitsspeicherzwischenspeicher verwendet wird, prüft die Funktion und generiert einen Fehler, wenn die Puffergröße nicht groß genug ist, um Anwendungsfälle für Weave Security Manager zu unterstützen.
Rückgabewerte
WEAVE_ERROR_BUFFER_TOO_SMALL
Wenn die Größe des dedizierten Eingabezwischenspeichers für Anwendungsfälle mit Weave Security Manager nicht ausreicht.
WEAVE_NO_ERROR
Bei Erfolg.
other
Ein Fehler, der von der plattformspezifischen Speicherinitialisierungsfunktion generiert wird.

MemoryShutdown

void MemoryShutdown(
  void
)

Diese Funktion wird von der Weave-Ebene aufgerufen, um alle Ressourcen freizugeben, die von der MemoryInit()-Funktion zugewiesen wurden.

Diese Funktion kann ein leerer Aufruf sein, wenn keine Ressourcen freigegeben werden müssen. Dies ist beispielsweise der Fall, wenn die Funktionen der C-Standardbibliothek Malloc() und free() für die Speicherzuweisung verwendet werden.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, wenn ein zeitaufwendiger kryptografischer Vorgang gerade abgeschlossen wurde.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, wenn ein zeitaufwendiger kryptografischer Vorgang beginnt.