nl::Weave::Platform::Security

Dieser Namespace umfasst alle Schnittstellen in Weave für den Arbeitsspeichermanager des Weave Security Monitor.

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
Position der Parameterfelder für den Blocksatz in 8-Bit-codierter 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, mit dem markiert wird, 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 wurde.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Zeiger auf Zwischenspeicher, die als NULL initialisiert sind.
sNetworkBuffersUsed = true
bool
Ein boolescher Wert, der angibt, ob die Netzwerkzwischenspeicher (true) oder nicht (false) von der einfachen Zuordnung 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 der Größe „size“ zuzuordnen. Bytes.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock der Größe „size“ zuzuordnen. Bytes.
MemoryFree(void *p)
void
Diese Funktion wird von der Weave-Ebene aufgerufen, um einen Speicherblock freizugeben, der von der Funktion MemeoryAlloc() zugewiesen wurde.
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 der Arbeitsspeicherzuordnung des Weave Security Managers erforderlich sind.
MemoryShutdown(void)
void
Diese Funktion wird von der Weave-Ebene aufgerufen, um alle Ressourcen freizugeben, die von der Funktion MemoryInit() zugewiesen wurden.
OnTimeConsumingCryptoDone(void)
void
Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, sobald 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.

Klassen

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

Position der Blocksatz-Parameterfelder in 8-Bit-codierter Form.

Attribute
kBlockSetBufferIndexMask

Maske für Pufferindexfeld.

kBlockSetBufferIndexShift

Verschiebung des Zwischenspeicherindexfelds.

kBlockSetCountMask

Anzahl der Feldmasken.

kBlockSetCountShift

Verschiebung des Anzahlfelds.

kBlockSetIsLongTermMask

Geben Sie eine Feldmaske ein.

kBlockSetIsLongTermShift

Typfeldverschiebung.

kBlockSetSizeMask

Feldmaske für Größe.

kBlockSetSizeShift

Verschiebung des Größenfelds.

kBlockSetSizeValueShift

Verschiebung der Felddecodierung in der Größe (multiplizieren mit 128).

BlockSetParams

 BlockSetParams

Definiert Blocksatzparameter.

Attribute
kBlockSet1BufferIndex

Setzte den Pufferindex Nr. 1 auf 0.

kBlockSet1Count

Blockanzahl 1 ist 1.

kBlockSet1Size

Die Größe von Set Nr. 1 beträgt 128 Byte.

kBlockSet1isLongTerm

Set Nr. 1 ist langfristig.

kBlockSet2BufferIndex

Zwischenspeicherindex von Set 2 ist 0.

kBlockSet2Count

Die Blockanzahl von Set 2 ist 1.

kBlockSet2Size

Die Größe von Set Nr. 2 beträgt 512 Byte.

kBlockSet2isLongTerm

Bei Satz 2 ist der Typ „Langfristig“.

kBlockSet3BufferIndex

Der Pufferindex Nr. 3 ist 0.

kBlockSet3Count

Blockanzahl 3 ist 1.

kBlockSet3Size

Die Größe von Set Nr. 3 beträgt 512 Byte.

kBlockSet3isLongTerm

Bei Satz Nr. 3 ist der Typ kurzfristig.

kBlockSet4BufferIndex

Pufferindex von Set Nr. 4 ist 1.

kBlockSet4Count

Blockanzahl 4 ist 2.

kBlockSet4Size

Die Größe von Set Nr. 4 beträgt 640 Byte.

kBlockSet4isLongTerm

Bei Satz Nr. 4 ist der Typ kurzfristig.

kMaxBlockSize

Die maximale Blockgröße, die von der einfachen Zuordnung unterstützt wird.

kMinBufferSize

Erforderliche Mindestgröße des Netzwerkpuffers zur Unterstützung von Anwendungsfällen vom Typ „Einfache Zuordnung“.

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

kNetworkBuffer0BlockAllocationMask

Diese Maske identifiziert alle aus dem Netzwerkpuffer Nr. 0 zugewiesenen Speicherblöcke.

kNetworkBuffer1BlockAllocationMask

Diese Maske identifiziert alle aus dem Netzwerkpuffer 1 zugewiesenen Speicherblöcke.

kNumberOfBlockSets

Anzahl der von der einfachen Zuordnung verwendeten Blocksätze.

kNumberOfNetworkBuffers

Anzahl der Netzwerkzwischenspeicher, die von der einfachen Zuordnung verwendet werden.

kTotalMemorySize

Gesamter Arbeitsspeicher, der von der einfachen Zuordnung verwendet wird.

Typedefs

BlockMark_t

uint8_t BlockMark_t

Der Typ, mit dem markiert wird, 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 Arbeitsspeicherblöcke

BlockSetParams_t

uint8_t BlockSetParams_t

Dieser Typ wird zum Codieren von Blocksatzinformationen verwendet.

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

Langfristig Index blockieren Anzahl der Blöcke Blockgröße
[7] [6:5] [4:3] [2:0]
[2:0]: Größe eines Speicherblocks in einem Satz. Der Größenwert wird 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 Häuserblocks
11 3 Blöcke
[6:5] – Netzwerkpufferindex, in dem sich die Speicherblöcke befinden. Beachten Sie, dass bei Verwendung eines dedizierten Zwischenspeichers alle Speicherblöcke aus dem dedizierten Zwischenspeicher zugeordnet werden. Dieser Indexparameter wird ignoriert.
[6:5] Decodierung
00 Netzwerkpuffer Nr. 0
-
11 Netzwerkpuffer 3
[7] – Gibt an, ob Blöcke für die langfristige/kurze Speicherung bestimmt sind.
[7] Decodierung
0 Kurzfristige Speicherblockierungen
1 Langfristige Speicherblöcke

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.

Ermittelt, ob alle Blöcke im Zwischenspeicher und nicht zugeordnet sind, und dann kann der Puffer wieder entlastet werden.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Gibt an, welcher Block zugewiesen/nicht zugewiesen wurde.

Initialisiert mit 0 – bedeutet, dass alle Arbeitsspeicherblöcke und nicht zugewiesen sind.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Zeiger auf Zwischenspeicher, die als NULL initialisiert sind.

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

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Ein boolescher Wert, der angibt, ob die Netzwerkzwischenspeicher (true) oder nicht (false) von der einfachen Zuordnung verwendet werden.

Wenn „false“, wird ein dedizierter Zwischenspeicher verwendet, der mit der Funktion MemoryInit() bereitgestellt wird.

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 Zwischenspeicher, in dem angeforderte, zufällige Daten 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 die vom Zufallsdatengenerator angeforderte Entropie nicht erzeugt.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Wenn die zufällige Datenquelle keine zufälligen Daten generiert.
WEAVE_ERROR_INCORRECT_STATE
Wenn eine zufällige Datenquelle mit 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 einer zufälligen Datenquelle erforderlich ist.

Details
Parameter
[in] entropyFunct
Zeiger auf eine Funktion, die Entropie für den Zufallsdatengenerator erzeugt. Wenn für den Algorit keine Entropieeingabe erforderlich ist, kann diese Eingabe NULL sein. Dies ist der Fall, wenn die OpenSSL-Version des Zufallsdatengenerators verwendet wird.
[in] entropyLen
Gibt die Entropiegröße in Byte an, die von der Entropiefunktion generiert werden soll, wenn sie verwendet wird.
[in] personalizationData
Zeiger auf einen Zwischenspeicher für Personalisierungsdaten, in dem eingegebene Daten gespeichert werden. 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 der Größe „size“ zuzuordnen. Bytes.

Diese Funktion entspricht MemoryAlloc(size, false).

Details
Parameter
[in] size
Gibt die angeforderte Arbeitsspeichergröße in Byte an.
Rückgabewerte
Pointer
im Erfolgsfall zu einem 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 der Größe „size“ zuzuordnen. Bytes.

Details
Parameter
[in] size
Gibt die angeforderte Arbeitsspeichergröße in Byte an.
[in] isLongTermAlloc
Ein boolescher Wert, der angibt, ob der angeforderte Speicherblock zur langfristigen Nutzung (true) oder nicht (false) ist. Eine langfristige Zuordnung ist ein Speicher, der zugewiesen bleiben sollte, bis die sichere Sitzung bzw. der sichere Handshake abgeschlossen ist. Beispiele für eine langfristige Zuordnung sind Blöcke, die CASE-/PASE-Objekten zugewiesen wurden, und deren Kontextdaten. Eine kurzfristige Zuordnung ist ein Speicher, der für die Ausführung eines bestimmten Vorgangs benötigt wird und sofort freigegeben werden kann. Diese Eingabe hilft, die Arbeitsspeicherauslastung in einem System mit beschränktem Arbeitsspeicher zu optimieren. Die Verwendung dieses Parameters ist beliebig und hängt vom Funktionsimplementierung ab. Dieser Parameter wird beispielsweise ignoriert, wenn die C-Standardbibliothek "maloc()" verwendet wird.
Rückgabewerte
Pointer
im Erfolgsfall zu einem Speicherblock.
NULL-pointer
wenn die Arbeitsspeicherzuweisung fehlschlägt.

MemoryFree

void MemoryFree(
  void *p
)

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

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 der Arbeitsspeicherzuordnung des Weave Security Managers erforderlich sind.

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

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

MemoryShutdown

void MemoryShutdown(
  void
)

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

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

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Diese Funktion wird aufgerufen, um die Anwendung zu benachrichtigen, sobald 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.