nl::Weave::Platform::Security

Ta przestrzeń nazw obejmuje wszystkie interfejsy weave na potrzeby menedżera pamięci Monitor zabezpieczeń Weave.

Podsumowanie

Funkcje w tej przestrzeni nazw powinny być wdrażane przez platformy używające Weave zgodnie z potrzebami i ograniczeniami 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 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
Określa parametry zestawu bloków.

Definicje typów

BlockMark_t typedef
uint8_t
Typ używany do oznaczania, 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 bloku bufora.
sMemBlocksAllocated = 0
Wskazuje, który blok jest przydzielony/nieprzydzielony.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Wskaźniki do buforów pamięci zainicjowanych z wartością NULL.
sNetworkBuffersUsed = true
bool
Wartość logiczna wskazująca, czy (prawda) czy nie (fałsz) bufory sieciowe są używane przez prosty lokalizator.

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 wygenerowania losowych danych.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Ta funkcja jest wywoływana przez warstwę Weave, aby zainicjować losowe źródło danych.
MemoryAlloc(size_t size)
void *
Funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o rozmiarze bajtów.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o rozmiarze bajtów.
MemoryFree(void *p)
void
Funkcja jest wywoływana przez warstwę Weave, aby zwolnić blok pamięci przydzielony przez funkcję MemeoryAlloc().
MemoryInit(void *buf, size_t bufSize)
Ta funkcja jest wywoływana przez warstwę Weave, aby zainicjować pamięć i zasoby wymagane do prawidłowego działania alokatora pamięci menedżera zabezpieczeń Weave.
MemoryShutdown(void)
void
Ta funkcja jest wywoływana przez warstwę Weave, aby zwolnić wszystkie zasoby przydzielone przez funkcję MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Ta funkcja jest wywoływana, aby powiadomić aplikację o zakończeniu czasochłonnej operacji kryptograficznej.
OnTimeConsumingCryptoStart(void)
void
Ta funkcja jest wywoływana, aby powiadomić 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 8-bitowej.

Właściwości
kBlockSetBufferIndexMask

Maska pola indeksu bufora.

kBlockSetBufferIndexShift

Przesunięcie pola indeksu bufora.

kBlockSetCountMask

Maska pola liczby.

kBlockSetCountShift

Licznik przesunięcia pola.

kBlockSetIsLongTermMask

Wpisz maskę pola.

kBlockSetIsLongTermShift

Wpisz przesunięcie pola.

kBlockSetSizeMask

Maska pola rozmiaru.

kBlockSetSizeShift

Przesunięcie pola rozmiaru.

kBlockSetSizeValueShift

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

BlockSetParams

 BlockSetParams

Określa parametry zestawu bloków.

Właściwości
kBlockSet1BufferIndex

Ustawony indeks bufora nr 1 to 0.

kBlockSet1Count

Ustawiony limit to 1.

kBlockSet1Size

Zestaw 1 ma rozmiar 128 bajtów.

kBlockSet1isLongTerm

Typ zestawu nr 1 jest długoterminowy.

kBlockSet2BufferIndex

Ustaw indeks bufora nr 2 to 0.

kBlockSet2Count

Ustawiona liczba bloków to 1.

kBlockSet2Size

Zestaw 2 ma rozmiar 512 bajtów.

kBlockSet2isLongTerm

Typ zestawu 2 jest długoterminowy.

kBlockSet3BufferIndex

Ustaw indeks bufora nr 3 to 0.

kBlockSet3Count

Ustawiony limit to 1.

kBlockSet3Size

Zestaw 3 ma rozmiar 512 bajtów.

kBlockSet3isLongTerm

Zestaw nr 3 jest typu krótkoterminowego.

kBlockSet4BufferIndex

Ustaw indeks bufora nr 4 to 1.

kBlockSet4Count

Ustawiona liczba bloków to 2.

kBlockSet4Size

Zestaw 4 ma rozmiar 640 bajtów.

kBlockSet4isLongTerm

Typ zestawu 4 jest krótkoterminowy.

kMaxBlockSize

Maksymalny rozmiar bloku obsługiwany przez zwykły lokalizator.

kMinBufferSize

Minimalny rozmiar bufora sieciowego wymagany do obsługi przypadków użycia funkcji Simple Allocator.

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

kNetworkBuffer0BlockAllocationMask

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

kNetworkBuffer1BlockAllocationMask

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

kNumberOfBlockSets

Liczba zestawów bloków używanych przez lokalizator.

kNumberOfNetworkBuffers

Liczba buforów sieciowych używanych przez Simple Allocator.

kTotalMemorySize

Łączna ilość pamięci używanej przez Simple Allocator.

Definicje typów

BlockMark_t

uint8_t BlockMark_t

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

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

BlockSetParams_t

uint8_t BlockSetParams_t

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

Zestaw bloków to grupa fragmentów pamięci o tych samych właściwościach (rozmiar, typ i należące do tego samego bufora). Poniższy diagram przedstawia sposób kodowania informacji o zestawie bloków 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ą 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 sieciowego, w którym znajdują się bloki pamięci. Pamiętaj, ż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 sieciowy nr 0
... -
11 Bufor sieciowy nr 3
[7] – określa, czy bloki są przeznaczone do przechowywania długo- czy krótkoterminowego.
[7] Dekodowanie
0 Bloki pamięci krótkoterminowej
1 Bloki pamięci długoterminowej

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 bloku bufora.

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

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Wskazuje, który blok jest przydzielony/nieprzydzielony.

Inicjowane na 0 – oznacza, że wszystkie bloki pamięci i nieprzydzielone.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Wskaźniki do buforów pamięci zainicjowanych z wartością NULL.

Gdy używane są bufory sieciowe, sMemBufs[] wskazują obiekty PacketBuffer. Gdy używany jest dedykowany bufor, sMemBufs[0] wskazuje 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 lokalizator.

Jeśli ma wartość false (fałsz), używany jest specjalny bufor udostępniany z 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 wygenerowania losowych danych.

Szczegóły
Parametry
[in] buf
Wskaźnik do bufora pamięci, w którym powinny 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 niewłaściwym stanie.
WEAVE_NO_ERROR
Na sukces.

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, aby zainicjować losowe źródło danych.

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

Szczegóły
Parametry
[in] entropyFunct
Wskaźnik do funkcji generującej entropię generatora danych losowych. Gdy algorytm nie wymaga danych wejściowych entropii, mogą one mieć wartość NULL, co ma miejsce, gdy używana jest wersja OpenSSL generatora danych losowych.
[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, który przechowuje dane wejściowe personalizacji. Dane wejściowe powinny być dostosowane do urządzenia. Pomaga to polepszać właściwości statystyczne losowych danych.
[in] perDataLen
Określa rozmiar danych personalizacji w bajtach.
Zwracane wartości
WEAVE_ERROR_INVALID_ARGUMENT
Jeśli do tej funkcji został przekazany nieprawidłowy argument.
WEAVE_NO_ERROR
Na sukces.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o rozmiarze bajtów.

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, jeśli się uda.
NULL-pointer
na wypadek niepowodzenia alokacji pamięci.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Funkcja jest wywoływana przez warstwę Weave, aby przydzielić blok pamięci o rozmiarze bajtów.

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żytku. Przydział długoterminowy to pamięć, która powinna pozostać przydzielona do momentu zakończenia bezpiecznej sesji lub uzgadniania połączenia. Przykłady alokacji długoterminowej to bloki przydzielone do obiektów CASE/PASE i ich danych kontekstowych. Alokacja krótkoterminowa to pamięć niezbędna do wykonania określonej operacji, którą można zwolnić natychmiast po jej zakończeniu. 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 klasa C Standard Library Malloc().
Zwracane wartości
Pointer
do bloku pamięci, jeśli się uda.
NULL-pointer
na wypadek niepowodzenia alokacji pamięci.

MemoryFree

void MemoryFree(
  void *p
)

Funkcja jest wywoływana przez warstwę Weave, aby zwolnić blok pamięci przydzielony 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, aby zainicjować pamięć i zasoby wymagane do prawidłowego działania alokatora pamięci menedżera zabezpieczeń Weave.

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

Szczegóły
Parametry
[in] buf
Wskaźnik dedykowanego bufora pamięci, który powinien być używany jako pula pamięci na potrzeby przydziału pamięci w Menedżerze zabezpieczeń Weave. Te dane wejściowe są opcjonalne (wartość domyślna to NULL) i nie należy ich używać, jeśli nie jest używany dedykowany bufor pamięci.
[in] bufSize
Rozmiar dedykowanego bufora pamięci. Te dane wejściowe są opcjonalne (wartość domyślna to 0) i nie należy ich używać, jeśli nie jest używany dedykowany bufor pamięci. W przypadku użycia dedykowanego bufora pamięci funkcja sprawdza i generuje błąd, jeśli rozmiar bufora jest zbyt mały, by obsłużyć przypadki użycia menedżera zabezpieczeń Weave.
Zwracane wartości
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli rozmiar dedykowanego bufora wejściowego nie jest wystarczający do obsługi przypadków użycia Menedżera zabezpieczeń Weave.
WEAVE_NO_ERROR
Na sukces.
other
Błąd generowany przez funkcję inicjowania pamięci na poziomie platformy.

MemoryShutdown

void MemoryShutdown(
  void
)

Ta funkcja jest wywoływana przez warstwę Weave, aby zwolnić wszystkie zasoby przydzielone przez funkcję MemoryInit().

Ta funkcja może być pustym wywołaniem, jeśli nie ma potrzeby zwalniania zasobów. Dzieje się tak na przykład wtedy, gdy do alokacji pamięci używane są funkcje Malloc() i free() w C Standard Library.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Ta funkcja jest wywoływana, aby powiadomić aplikację o zakończeniu czasochłonnej operacji kryptograficznej.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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