nl::Weave::Platform::Security

Ta przestrzeń nazw obejmuje wszystkie interfejsy Weave dla menedżera pamięci Weave Security Monitor.

Podsumowanie

Funkcje w tej przestrzeni nazw mają być wdrażane przez platformy korzystające z Weave w zależności od potrzeb lub ograniczeń danego środowiska.

Wyliczenia

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum | typ wyliczeniowy
Lokalizacja pól parametrów zestawu bloków w postaci zakodowanej 8-bitowej.
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 | typ wyliczeniowy
Definiuje parametry zestawu bloków.

Definiuje typ

BlockMark_t typedef
uint8_t
Typ używany do oznaczenia, który blok jest obecnie przydzielony/nieprzydzielony.
BlockSetParams_t typedef
uint8_t
Ten typ służy do kodowania informacji o zestawie bloków.

Zmienne

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]
Zakodowany blok ustawia parametry.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Zestaw masek bloków bufora.
sMemBlocksAllocated = 0
Wskazuje, który blok jest przydzielony, a który nieprzydzielony.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Wskaźniki buforów pamięci zainicjowanych jako NULL.
sNetworkBuffersUsed = true
bool
Wartość logiczna wskazująca, czy (prawda) czy nie (fałsz) bufory sieciowe są używane przez prosty alokator.

Funkcje

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Ta funkcja jest wywoływana przez warstwę Weave w celu generowania danych losowych.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Ta funkcja jest wywoływana przez warstwę Weave w celu zainicjowania losowego źródła danych.
MemoryAlloc(size_t size)
void *
Ta funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o „rozmiarze” B.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Ta funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o „rozmiarze” B.
MemoryFree(void *p)
void
Ta funkcja jest wywoływana przez warstwę Weave w celu uwolnienia bloku pamięci przydzielonego przez funkcję MemeoryAlloc().
MemoryInit(void *buf, size_t bufSize)
Ta funkcja jest wywoływana przez warstwę Weave w celu zainicjowania pamięci i zasobów wymaganych do prawidłowego działania przydziału pamięci menedżera zabezpieczeń Weave.
MemoryShutdown(void)
void
Ta funkcja jest wywoływana przez warstwę Weave w celu zwolnienia wszystkich zasobów, które zostały przydzielone przez funkcję MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Ta funkcja jest wywoływana w celu powiadomienia aplikacji o zakończeniu czasochłonnej operacji kryptograficznej.
OnTimeConsumingCryptoStart(void)
void
Ta funkcja jest wywoływana, aby powiadamiać aplikację o zbliżającym się rozpoczęciu czasochłonnej operacji kryptograficznej.

Zajęcia

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

Wyliczenia

BlockSetParamFields

 BlockSetParamFields

Lokalizacja pól parametrów zestawu bloków w postaci zakodowanej 8-bitowej.

Właściwości
kBlockSetBufferIndexMask

Maska pola indeksu bufora.

kBlockSetBufferIndexShift

Przesunięcie pola indeksu bufora.

kBlockSetCountMask

Maska pola liczby.

kBlockSetCountShift

Przesunięcie w polu zliczania.

kBlockSetIsLongTermMask

Maska pola typu.

kBlockSetIsLongTermShift

Wpisz przesunięcie w polu.

kBlockSetSizeMask

Maska pola rozmiaru.

kBlockSetSizeShift

Przesunięcie pola rozmiaru.

kBlockSetSizeValueShift

Przesunięcie dekodowania pola rozmiaru (pomnożenie przez 128).

BlockSetParams

 BlockSetParams

Definiuje parametry zestawu bloków.

Właściwości
kBlockSet1BufferIndex

Ustaw indeks bufora nr 1 na 0.

kBlockSet1Count

Ustawiona liczba blokad to 1.

kBlockSet1Size

Ustawiony rozmiar nr 1 to 128 bajtów.

kBlockSet1isLongTerm

Ustawiony typ 1 jest długoterminowy.

kBlockSet2BufferIndex

Ustaw indeks bufora nr 2 na 0.

kBlockSet2Count

Ustawiona liczba blokad to 1.

kBlockSet2Size

Rozmiar zestawu nr 2 to 512 bajtów.

kBlockSet2isLongTerm

Typ zestawu 2 jest długoterminowy.

kBlockSet3BufferIndex

Ustaw indeks bufora nr 3 na 0.

kBlockSet3Count

Ustawiona liczba blokad to 1.

kBlockSet3Size

Rozmiar zestawu nr 3 ma 512 bajtów.

kBlockSet3isLongTerm

Typ zestawu 3 jest krótkoterminowy.

kBlockSet4BufferIndex

Ustawiony indeks bufora nr 4 wynosi 1.

kBlockSet4Count

Ustawiona liczba blokad to 2.

kBlockSet4Size

Rozmiar zestawu 4 to 640 bajtów.

kBlockSet4isLongTerm

Zestaw 4 to typ krótkoterminowy.

kMaxBlockSize

Maksymalny rozmiar bloku obsługiwany przez prosty alokator.

kMinBufferSize

Minimalny rozmiar bufora sieciowego wymagany do obsługi przypadków użycia prostego alokacji.

Ten parametr pochodzi z rozmiarów 2 bloków pamięci (640 + 600) przydzielonych w buforze sieci 1.

kNetworkBuffer0BlockAllocationMask

Ta maska identyfikuje wszystkie bloki pamięci przydzielone z bufora sieci 0.

kNetworkBuffer1BlockAllocationMask

Ta maska identyfikuje wszystkie bloki pamięci przydzielone z bufora sieci 1.

kNumberOfBlockSets

Liczba zestawów bloków używanych przez prosty alokator.

kNumberOfNetworkBuffers

Liczba buforów sieci używanych przez prosty alokator.

kTotalMemorySize

Łączna ilość pamięci używana przez prosty alokator.

Definiuje typ

BlockMark_t

uint8_t BlockMark_t

Typ używany do oznaczenia, który blok jest obecnie przydzielony/nieprzydzielony.

uint8_t - obsługuje do 8 bloków pamięci uint16_t - obsługuje do 16 bloków pamięci uint32_t - obsługuje do 32 bloków pamięci łącznie

BlockSetParams_t

uint8_t BlockSetParams_t

Ten typ służy do kodowania informacji o zestawie bloków.

Zbiór bloków to grupa fragmentów pamięci, które mają te same właściwości (rozmiar, typ i należą do tego samego bufora). Poniższy schemat przedstawia, jak informacje o zestawie bloków zakodowane w formacie 8-bitowym:

Jest długoterminowy Zablokuj indeks Liczba bloków Rozmiar bloku
[7] [6:5] [4:3] [2:0]
[2:0] – rozmiar bloku pamięci w zestawie. Wartość rozmiaru jest kodowana z dokładnością do 128 bajtów.
[2:0] Dekodowanie
000 0 bajtów
001 128 bajtów
010 256 bajtów
-
111 896 bajtów
[4:3] – liczba bloków w zestawie.
[4:3] Dekodowanie
00 4 bloki
01 1 blok
10 2 bloki
11 3 bloki
[6:5] – indeks bufora sieci, w którym znajdują się bloki pamięci. Zwróć uwagę, że gdy używany jest dedykowany bufor, wszystkie bloki pamięci są przydzielane z dedykowanego bufora, a ten parametr indeksu jest ignorowany.
[6:5] Dekodowanie
00 Bufor sieci nr 0
-
11 Bufor sieci 3
[7] – określa, czy bloki są przeznaczone do przechowywania długo- czy krótkoterminowego.
[7] Dekodowanie
0 Krótkotrwałe bloki pamięci
1 Długoterminowe bloki pamięci

Zmienne

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







}

Zakodowany blok ustawia parametry.

sBufferAllocationMask

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




                                                                                       }

Zestaw masek bloków bufora.

Określa, czy można zwolnić wszystkie bloki w buforze i nieprzydzielone, a następnie zwolnić bufor.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Wskazuje, który blok jest przydzielony, a który nieprzydzielony.

Zainicjowana wartość 0 oznacza, że wszystkie bloki pamięci i nieprzydzielone zasoby pamięci.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Wskaźniki buforów pamięci zainicjowanych jako NULL.

Gdy używane są bufory sieciowe, sMemBufs[] wskazuje obiekty PacketBuffer. Gdy używany jest dedykowany bufor, sMemBufs[0] wskazuje na ten bufor, a inne wskaźniki sMemBufs[] są ignorowane.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Wartość logiczna wskazująca, czy (prawda) czy nie (fałsz) bufory sieciowe są używane przez prosty alokator.

Gdy ma wartość Fałsz, używany jest specjalny bufor udostępniony przez funkcję MemoryInit().

Funkcje

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
)

Ta funkcja jest wywoływana przez warstwę Weave w celu generowania danych losowych.

Szczegóły
Parametry
[in] buf
Wskaźnik do bufora pamięci, w którym mają być przechowywane żądane dane losowe.
[in] len
Określa żądany losowy rozmiar danych w bajtach.
Zwracane wartości
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Jeśli źródło entropii nie wygeneruje entropii żądanej przez generator danych losowych.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Jeśli losowe źródło danych nie wygeneruje danych losowych.
WEAVE_ERROR_INCORRECT_STATE
Jeśli losowe źródło danych jest w nieprawidłowym stanie.
WEAVE_NO_ERROR
Powodzenie.

InitSecureRandomDataSource

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

Ta funkcja jest wywoływana przez warstwę Weave w celu zainicjowania losowego źródła danych.

Ta funkcja zależy od platformy i może być pusta, jeśli nie jest wymagane inicjowanie losowego źródła danych.

Szczegóły
Parametry
[in] entropyFunct
Wskaźnik funkcji generującej entropię do generatora danych losowych. Jeśli algorytm nie wymaga danych wejściowych entropii, te dane mogą mieć wartość NULL, co jest możliwe, gdy używana jest wersja generatora danych losowych OpenSSL.
[in] entropyLen
Określa rozmiar entropii w bajtach, która powinna być generowana przez funkcję entropii, gdy jest używana.
[in] personalizationData
Wskaźnik do bufora pamięci, w którym są przechowywane wprowadzone dane personalizacji. Dane wejściowe powinny być dostosowane do urządzenia i pomagają poprawić właściwości statystyczne danych losowych.
[in] perDataLen
Określa rozmiar danych personalizacji w bajtach.
Zwracane wartości
WEAVE_ERROR_INVALID_ARGUMENT
Jeśli do tej funkcji przekazano nieprawidłowy argument.
WEAVE_NO_ERROR
Powodzenie.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Ta funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o „rozmiarze” B.

Ta funkcja jest odpowiednikiem funkcji MemoryAlloc(rozmiar, fałsz).

Szczegóły
Parametry
[in] size
Określa żądany rozmiar pamięci w bajtach.
Zwracane wartości
Pointer
do bloku pamięci na wypadek sukcesu.
NULL-pointer
jeśli przydział pamięci się nie uda.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Ta funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o „rozmiarze” B.

Szczegóły
Parametry
[in] size
Określa żądany rozmiar pamięci w bajtach.
[in] isLongTermAlloc
Wartość logiczna wskazująca, czy (prawda) czy nie (fałsz), żądany blok pamięci jest przeznaczony do długoterminowego użytkowania. Alokacja długoterminowa to pamięć, która powinna pozostać przydzielona do momentu zakończenia bezpiecznej sesji lub uzgadniania połączenia. Przykłady alokacji długoterminowej obejmują bloki przydzielone dla obiektów CASE/PASE i ich danych kontekstowych. Alokacja krótkoterminowa to pamięć potrzebna do wykonania określonej operacji i może zostać zwolniona natychmiast po niej. Te dane wejściowe pomagają zoptymalizować wykorzystanie pamięci w systemie z ograniczonym dostępem. Użycie tego parametru jest dowolne i zależy od implementatora funkcji. Na przykład ten parametr jest ignorowany, gdy używana jest funkcja Malloc() Biblioteki standardowej w C.
Zwracane wartości
Pointer
do bloku pamięci na wypadek sukcesu.
NULL-pointer
jeśli przydział pamięci się nie uda.

MemoryFree

void MemoryFree(
  void *p
)

Ta funkcja jest wywoływana przez warstwę Weave w celu uwolnienia bloku pamięci przydzielonego przez funkcję MemeoryAlloc().

Szczegóły
Parametry
[in] p
Wskaźnik do bloku pamięci, który powinien zostać zwolniony.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Ta funkcja jest wywoływana przez warstwę Weave w celu zainicjowania pamięci i zasobów wymaganych do prawidłowego działania przydziału pamięci menedżera zabezpieczeń Weave.

Ta funkcja zależy od platformy i w niektórych przypadkach może być pusta. Na przykład ta funkcja nie robi nic, gdy do alokacji pamięci są używane funkcje Malloc() i free() w bibliotece standardowej.

Szczegóły
Parametry
[in] buf
Wskaźnik do dedykowanego bufora pamięci, który powinien być używany jako pula pamięci na potrzeby alokacji pamięci przez menedżera zabezpieczeń Weave. To pole jest opcjonalne (wartość domyślna to NULL) i nie należy go używać, jeśli nie jest używany dedykowany bufor pamięci.
[in] bufSize
Rozmiar dedykowanego bufora pamięci. To pole jest opcjonalne (wartość domyślna to 0) i nie należy go używać, jeśli nie jest używany dedykowany bufor pamięci. Gdy używany jest dedykowany bufor pamięci, funkcja sprawdza i generuje błąd, jeśli rozmiar bufora nie jest wystarczająco duży, aby obsługiwać przypadki użycia menedżera zabezpieczeń Weave.
Zwracane wartości
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli rozmiar osobnego bufora wejściowego nie jest wystarczający do obsługi zastosowań menedżera zabezpieczeń Weave.
WEAVE_NO_ERROR
Powodzenie.
other
Błąd wygenerowany przez funkcję inicjowania pamięci specyficzną dla platformy.

MemoryShutdown

void MemoryShutdown(
  void
)

Ta funkcja jest wywoływana przez warstwę Weave w celu zwolnienia wszystkich zasobów, które zostały przydzielone przez funkcję MemoryInit().

Gdy nie ma potrzeby zwalniania zasobów, ta funkcja może być pusta. Tak jest na przykład w przypadku, gdy do alokacji pamięci są używane funkcje Malloc() i free() w bibliotece C Standard Library.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Ta funkcja jest wywoływana w celu powiadomienia aplikacji o zakończeniu czasochłonnej operacji kryptograficznej.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Ta funkcja jest wywoływana, aby powiadamiać aplikację o zbliżającym się rozpoczęciu czasochłonnej operacji kryptograficznej.