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.
Definiuje typ |
|
---|---|
BlockMark_t
|
typedefuint8_t
Typ używany do oznaczenia, który blok jest obecnie przydzielony/nieprzydzielony. |
BlockSetParams_t
|
typedefuint8_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]
|
const BlockSetParams_t
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.
|
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] | Dekodowanie |
000 | 0 bajtów |
001 | 128 bajtów |
010 | 256 bajtów |
… | - |
111 | 896 bajtów |
[4:3] | Dekodowanie |
00 | 4 bloki |
01 | 1 blok |
10 | 2 bloki |
11 | 3 bloki |
[6:5] | Dekodowanie |
00 | Bufor sieci nr 0 |
… | - |
11 | Bufor sieci 3 |
[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 |
|
||||||||
Zwracane wartości |
|
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 |
|
||||||||
Zwracane wartości |
|
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 |
|
||||
Zwracane wartości |
|
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 |
|
||||
Zwracane wartości |
|
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 |
|
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 |
|
||||||
Zwracane wartości |
|
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.