нл:: Переплетение:: Платформа:: Безопасность

Это пространство имен включает в себя все интерфейсы внутри Weave для диспетчера памяти Weave Security Monitor.

Краткое содержание

Функции в этом пространстве имен должны быть реализованы платформами, использующими Weave, в соответствии с потребностями/ограничениями конкретной среды.

Перечисления

BlockSetParamFields {
kBlockSetSizeMask = 0x07,
kBlockSetSizeShift = 0,
kBlockSetSizeValueShift = 7,
kBlockSetCountMask = 0x18,
kBlockSetCountShift = 3,
kBlockSetBufferIndexMask = 0x60,
kBlockSetBufferIndexShift = 5,
kBlockSetIsLongTermMask = 0x80,
kBlockSetIsLongTermShift = 7
}
перечисление
Расположение полей параметров блочного набора в 8-битном закодированном виде.
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
}
перечисление
Определяет параметры набора блоков.

Определения типов

BlockMark_t определение типа
uint8_t
Тип, используемый для обозначения того, какой блок в данный момент выделен/нераспределен.
BlockSetParams_t определение типа
uint8_t
Этот тип используется для кодирования информации о наборе блоков.

Переменные

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]
Закодированный блок устанавливает параметры.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
Набор масок буферных блоков.
sMemBlocksAllocated = 0
Указывает, какой блок выделен/нераспределен.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Указатели на буферы памяти, инициализированные значением NULL.
sNetworkBuffersUsed = true
bool
Логическое значение, указывающее, используются ли (true) или нет (false) сетевые буферы Simple Allocator.

Функции

DecodeBlockSetParams ( BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData (uint8_t *buf, uint16_t len)
Эта функция вызывается слоем Weave для генерации случайных данных.
InitSecureRandomDataSource ( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Эта функция вызывается слоем Weave для инициализации источника случайных данных.
MemoryAlloc (size_t size)
void *
Эта функция вызывается слоем Weave для выделения блока памяти «размера» в байтах.
MemoryAlloc (size_t size, bool isLongTermAlloc)
void *
Эта функция вызывается слоем Weave для выделения блока памяти «размера» в байтах.
MemoryFree (void *p)
void
Эта функция вызывается слоем Weave для освобождения блока памяти, выделенного функцией MemeoryAlloc().
MemoryInit (void *buf, size_t bufSize)
Эта функция вызывается уровнем Weave для инициализации памяти и ресурсов, необходимых для правильной работы распределителя памяти Weave Security Manager.
MemoryShutdown (void)
void
Эта функция вызывается слоем Weave для освобождения всех ресурсов, выделенных функцией MemoryInit() .
OnTimeConsumingCryptoDone (void)
void
Эта функция вызывается для уведомления приложения о завершении трудоемкой криптографической операции.
OnTimeConsumingCryptoStart (void)
void
Эта функция вызывается для уведомления приложения о начале трудоемкой криптографической операции.

Классы

nl:: Weave:: Платформа:: Безопасность:: AES128BlockCipher
nl:: Weave:: Платформа:: Безопасность:: AES128BlockCipherDec
nl:: Weave:: Платформа:: Безопасность:: AES128BlockCipherEnc
nl:: Weave:: Платформа:: Безопасность:: AES256BlockCipher
nl:: Weave:: Платформа:: Безопасность:: AES256BlockCipherDec
nl:: Weave:: Платформа:: Безопасность:: AES256BlockCipherEnc
nl:: Weave:: Платформа:: Безопасность:: SHA1
nl:: Weave:: Платформа:: Безопасность:: SHA256

Перечисления

Блоксетпарамфилдс

 BlockSetParamFields

Расположение полей параметров блочного набора в 8-битном закодированном виде.

Характеристики
kBlockSetBufferIndexMask

Маска поля индекса буфера.

kBlockSetBufferIndexShift

Сдвиг поля индекса буфера.

kBlockSetCountMask

Маска поля подсчета.

kBlockSetCountShift

Подсчитайте сдвиг поля.

kBlockSetIsLongTermMask

Введите маску поля.

kBlockSetIsLongTermShift

Введите сдвиг поля.

kBlockSetSizeMask

Маска поля размера.

kBlockSetSizeShift

Сдвиг поля размера.

kBlockSetSizeValueShift

Сдвиг декодирования поля размера (умножить на 128).

Блоксетпарамс

 BlockSetParams

Определяет параметры набора блоков.

Характеристики
kBlockSet1BufferIndex

Индекс буфера №1 равен 0.

kBlockSet1Count

В наборе №1 количество блоков равно 1.

kBlockSet1Size

Размер набора №1 составляет 128 байт.

kBlockSet1isLongTerm

Тип комплекта №1 – долгосрочный.

kBlockSet2BufferIndex

Индекс буфера набора №2 равен 0.

kBlockSet2Count

В наборе №2 количество блоков равно 1.

kBlockSet2Size

Размер набора №2 составляет 512 байт.

kBlockSet2isLongTerm

Тип комплекта №2 – долгосрочный.

kBlockSet3BufferIndex

Индекс буфера набора №3 равен 0.

kBlockSet3Count

В наборе №3 количество блоков равно 1.

kBlockSet3Size

Размер набора №3 составляет 512 байт.

kBlockSet3isLongTerm

Тип комплекта №3 – краткосрочный.

kBlockSet4BufferIndex

Индекс буфера набора №4 равен 1.

kBlockSet4Count

В наборе №4 количество блоков равно 2.

kBlockSet4Size

Размер набора №4 составляет 640 байт.

kBlockSet4isLongTerm

Тип комплекта №4 – краткосрочный.

kMaxBlockSize

Максимальный размер блока, поддерживаемый Simple Allocator.

kMinBufferSize

Минимальный размер сетевого буфера, необходимый для поддержки вариантов использования Simple Allocator.

Этот параметр получается из размеров двух блоков памяти (640 + 600), выделенных в сетевом буфере №1.

kNetworkBuffer0BlockAllocationMask

Эта маска идентифицирует все блоки памяти, выделенные из сетевого буфера №0.

kNetworkBuffer1BlockAllocationMask

Эта маска идентифицирует все блоки памяти, выделенные из сетевого буфера №1.

kNumberOfBlockSets

Количество наборов блоков, используемых Simple Allocator.

kNumberOfNetworkBuffers

Количество сетевых буферов, используемых Simple Allocator.

kTotalMemorySize

Общий объем памяти, используемый Simple Allocator.

Определения типов

БлокМарк_t

uint8_t BlockMark_t

Тип, используемый для обозначения того, какой блок в данный момент выделен/нераспределен.

uint8_t — всего поддерживается до 8 блоков памяти uint16_t — всего поддерживается до 16 блоков памяти uint32_t — всего поддерживается до 32 блоков памяти

БлокСетПарамс_т

uint8_t BlockSetParams_t

Этот тип используется для кодирования информации о наборе блоков.

Набор блоков — это группа фрагментов памяти, которые имеют одинаковые свойства (размер, тип и принадлежат одному и тому же буферу). На диаграмме ниже показано, как информация о наборе блоков кодируется в 8-битном формате:

долгосрочный Индекс блока Количество блоков Размер блока
[7] [6:5] [4:3] [2:0]
[2:0] - Размер блока памяти в наборе. Значение размера кодируется с точностью до 128 байт.
[2:0] Декодирование
000 0 байт
001 128 байт
010 256 байт
... -
111 896 байт
[4:3] - Количество блоков в наборе.
[4:3] Декодирование
00 4 блока
01 1 блок
10 2 блока
11 3 блока
[6:5] — Индекс сетевого буфера, в котором находятся блоки памяти. Обратите внимание, что при использовании выделенного буфера все блоки памяти выделяются из выделенного буфера, и этот параметр индекса игнорируется.
[6:5] Декодирование
00 Сетевой буфер №0
... -
11 Сетевой буфер №3
[7] — указывает, предназначены ли блоки для долгосрочного/краткосрочного хранения.
[7] Декодирование
0 Блоки кратковременной памяти
1 Блоки долговременной памяти

Переменные

сблоксетпарамс

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







}

Закодированный блок устанавливает параметры.

sBufferAllocationMask

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




                                                                                       }

Набор масок буферных блоков.

Определяет, все ли блоки в буфере нераспределены, а затем можно освободить буфер.

смемблоксаллокатед

BlockMark_t sMemBlocksAllocated = 0

Указывает, какой блок выделен/нераспределен.

Инициализировано значением 0 — означает, что вся память заблокирована и нераспределена.

смембуфс

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Указатели на буферы памяти, инициализированные значением NULL.

Когда используются сетевые буферы, sMemBufs[] указывает на объекты PacketBuffer. Когда используется выделенный буфер, sMemBufs[0] указывает на этот буфер, а другие указатели sMemBufs[] игнорируются.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Логическое значение, указывающее, используются ли (true) или нет (false) сетевые буферы Simple Allocator.

Когда false — используется выделенный буфер, предоставляемый функцией MemoryInit() .

Функции

Декодированиеблоксетпарамс

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
)

Эта функция вызывается слоем Weave для генерации случайных данных.

Подробности
Параметры
[in] buf
Указатель на буфер памяти, в котором должны храниться запрошенные случайные данные.
[in] len
Указывает запрошенный размер случайных данных в байтах.
Возвращаемые значения
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Если источник энтропии не может сгенерировать энтропию, запрошенную генератором случайных данных.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Если источник случайных данных не может генерировать случайные данные.
WEAVE_ERROR_INCORRECT_STATE
Если источник случайных данных обнаружен в неправильном состоянии.
WEAVE_NO_ERROR
Об успехе.

InitSecureRandomDataSource

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

Эта функция вызывается слоем Weave для инициализации источника случайных данных.

Эта функция зависит от платформы и может быть пустой, если не требуется инициализация источника случайных данных.

Подробности
Параметры
[in] entropyFunct
Указатель на функцию, которая генерирует энтропию для генератора случайных данных. Когда алгоритм не требует ввода энтропии, этот вход может быть NULL, что происходит в случае, когда используется версия генератора случайных данных OpenSSL.
[in] entropyLen
Указывает размер энтропии в байтах, который должен генерироваться функцией энтропии при ее использовании.
[in] personalizationData
Указатель на буфер памяти, в котором хранятся вводимые данные персонализации. Этот ввод данных должен зависеть от устройства и помогает улучшить статистические свойства случайных данных.
[in] perDataLen
Указывает размер данных персонализации в байтах.
Возвращаемые значения
WEAVE_ERROR_INVALID_ARGUMENT
Если в эту функцию был передан недопустимый аргумент.
WEAVE_NO_ERROR
Об успехе.

ПамятьАллок

void * MemoryAlloc(
  size_t size
)

Эта функция вызывается слоем Weave для выделения блока памяти «размера» в байтах.

Эта функция эквивалентна MemoryAlloc(size, false).

Подробности
Параметры
[in] size
Указывает запрошенный размер памяти в байтах.
Возвращаемые значения
Pointer
в блок памяти в случае успеха.
NULL-pointer
если выделение памяти не удалось.

ПамятьАллок

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Эта функция вызывается слоем Weave для выделения блока памяти «размера» в байтах.

Подробности
Параметры
[in] size
Указывает запрошенный размер памяти в байтах.
[in] isLongTermAlloc
Логическое значение, указывающее, предназначен ли (истина) или нет (ложь) запрошенный блок памяти для долгосрочного использования. Долгосрочное выделение — это память, которая должна оставаться выделенной до завершения безопасного сеанса/квитирования. Примеры долгосрочного распределения включают блоки, выделенные для объектов CASE/PASE и их контекстных данных. Краткосрочное выделение — это память, необходимая для выполнения определенной операции, которая может быть освобождена сразу после этого. Этот ввод помогает оптимизировать использование памяти в системе с ограниченной памятью. Использование этого параметра произвольно и зависит от реализатора функции. Например, этот параметр игнорируется при использовании функции malloc() стандартной библиотеки C.
Возвращаемые значения
Pointer
в блок памяти в случае успеха.
NULL-pointer
если выделение памяти не удалось.

ПамятьБесплатно

void MemoryFree(
  void *p
)

Эта функция вызывается слоем Weave для освобождения блока памяти, выделенного функцией MemeoryAlloc().

Подробности
Параметры
[in] p
Указатель на блок памяти, который следует освободить.

ПамятьИнит

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Эта функция вызывается уровнем Weave для инициализации памяти и ресурсов, необходимых для правильной работы распределителя памяти Weave Security Manager.

Эта функция зависит от платформы и в некоторых случаях может быть пустой. Например, эта функция ничего не делает, когда для выделения памяти используются функции malloc() и free() стандартной библиотеки C.

Подробности
Параметры
[in] buf
Указатель на выделенный буфер памяти, который следует использовать в качестве пула памяти для выделения памяти Weave Security Manager. Этот вход является необязательным (по умолчанию NULL) и не должен использоваться, если не используется выделенный буфер памяти.
[in] bufSize
Размер выделенного буфера памяти. Этот вход является необязательным (по умолчанию 0) и не должен использоваться, если выделенный буфер памяти не используется. Когда используется выделенный буфер памяти, функция проверяет и генерирует ошибку, если размер буфера недостаточно велик для поддержки сценариев использования Weave Security Manager.
Возвращаемые значения
WEAVE_ERROR_BUFFER_TOO_SMALL
Если размер выделенного входного буфера недостаточен для поддержки сценариев использования Weave Security Manager.
WEAVE_NO_ERROR
Об успехе.
other
Ошибка, вызванная функцией инициализации памяти, зависящей от платформы.

ПамятьОтключение

void MemoryShutdown(
  void
)

Эта функция вызывается слоем Weave для освобождения всех ресурсов, выделенных функцией MemoryInit() .

Эта функция может быть пустым вызовом, если нет необходимости освобождать ресурсы. Например, это тот случай, когда для распределения памяти используются функции malloc() и free() стандартной библиотеки C.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Эта функция вызывается для уведомления приложения о завершении трудоемкой криптографической операции.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Эта функция вызывается для уведомления приложения о начале трудоемкой криптографической операции.