nl::Weave::Platform::Security

Namespace ini mencakup semua antarmuka dalam Weave untuk pengelola memori Weave Security Monitor.

Ringkasan

Fungsi dalam namespace ini akan diimplementasikan oleh platform yang menggunakan Weave, sesuai dengan kebutuhan/batasan lingkungan tertentu.

Enumerasi

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Blok set lokasi kolom parameter dalam bentuk berenkode 8-bit.
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
Menentukan parameter kumpulan blok.

Typedef

BlockMark_t typedef
uint8_t
Jenis yang digunakan untuk menandai blok mana yang saat ini dialokasikan/belum dialokasikan.
BlockSetParams_t typedef
uint8_t
Jenis ini digunakan untuk mengenkode informasi kumpulan blok.

Variabel

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]
Parameter kumpulan blok yang dienkode.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Kumpulan mask blok buffer.
sMemBlocksAllocated = 0
Menunjukkan blok mana yang dialokasikan/tidak dialokasikan.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Pointer ke buffer memori yang diinisialisasi ke NULL.
sNetworkBuffersUsed = true
bool
Boolean yang menunjukkan apakah (true) atau tidak (false) buffer jaringan digunakan oleh Simple Allocator.

Fungsi

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Fungsi ini dipanggil oleh lapisan Weave untuk menghasilkan data acak.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Fungsi ini dipanggil oleh lapisan Weave untuk menginisialisasi sumber data acak.
MemoryAlloc(size_t size)
void *
Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori byte "ukuran".
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori byte "ukuran".
MemoryFree(void *p)
void
Fungsi ini dipanggil oleh lapisan Weave untuk melepaskan blok memori yang dialokasikan oleh fungsi MemeoryAlloc().
MemoryInit(void *buf, size_t bufSize)
Fungsi ini dipanggil oleh lapisan Weave untuk menginisialisasi memori dan resource yang diperlukan untuk fungsionalitas yang tepat dari pengalokasi memori Weave Security Manager.
MemoryShutdown(void)
void
Fungsi ini dipanggil oleh lapisan Weave untuk melepaskan semua resource yang dialokasikan oleh fungsi MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Fungsi ini dipanggil untuk memberi tahu aplikasi saat operasi kriptografi yang memakan waktu baru saja selesai.
OnTimeConsumingCryptoStart(void)
void
Fungsi ini dipanggil untuk memberi tahu aplikasi ketika operasi kriptografi yang memakan waktu akan dimulai.

Class

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

Enumerasi

BlockSetParamFields

 BlockSetParamFields

Blok set lokasi kolom parameter dalam bentuk berenkode 8-bit.

Properti
kBlockSetBufferIndexMask

Mask kolom indeks buffer.

kBlockSetBufferIndexShift

Pergeseran kolom indeks buffer.

kBlockSetCountMask

Mask kolom jumlah.

kBlockSetCountShift

Hitung perubahan kolom.

kBlockSetIsLongTermMask

Mask kolom jenis.

kBlockSetIsLongTermShift

Perubahan kolom jenis.

kBlockSetSizeMask

Mask kolom ukuran.

kBlockSetSizeShift

Pergeseran kolom ukuran.

kBlockSetSizeValueShift

Pergeseran decoding kolom ukuran (kalikan dengan 128).

BlockSetParams

 BlockSetParams

Menentukan parameter kumpulan blok.

Properti
kBlockSet1BufferIndex

Tetapkan indeks buffering #1 adalah 0.

kBlockSet1Count

Jumlah blok set #1 adalah 1.

kBlockSet1Size

Ukuran set #1 adalah 128 byte.

kBlockSet1isLongTerm

Jenis penetapan #1 bersifat jangka panjang.

kBlockSet2BufferIndex

Tetapkan indeks buffering #2 adalah 0.

kBlockSet2Count

Jumlah blok set #2 adalah 1.

kBlockSet2Size

Ukuran set #2 adalah 512 byte.

kBlockSet2isLongTerm

Jenis penetapan #2 bersifat jangka panjang.

kBlockSet3BufferIndex

Tetapkan indeks buffering #3 adalah 0.

kBlockSet3Count

Jumlah blok set #3 adalah 1.

kBlockSet3Size

Ukuran set #3 adalah 512 byte.

kBlockSet3isLongTerm

Jenis penetapan #3 bersifat jangka pendek.

kBlockSet4BufferIndex

Tetapkan indeks buffering #4 adalah 1.

kBlockSet4Count

Jumlah blok set #4 adalah 2.

kBlockSet4Size

Ukuran set #4 adalah 640 byte.

kBlockSet4isLongTerm

Jenis kumpulan #4 bersifat jangka pendek.

kMaxBlockSize

Ukuran blok maksimum yang didukung oleh Simple Allocator.

kMinBufferSize

Ukuran buffer jaringan minimum yang diperlukan untuk mendukung kasus penggunaan Simple Allocator.

Parameter ini berasal dari ukuran dua blok memori (640 + 600) yang dialokasikan di buffering jaringan #1.

kNetworkBuffer0BlockAllocationMask

Mask ini mengidentifikasi semua blok memori yang dialokasikan dari buffering jaringan #0.

kNetworkBuffer1BlockAllocationMask

Mask ini mengidentifikasi semua blok memori yang dialokasikan dari buffering jaringan #1.

kNumberOfBlockSets

Jumlah kumpulan blok yang digunakan oleh Simple Allocator.

kNumberOfNetworkBuffers

Jumlah buffer jaringan yang digunakan oleh Simple Allocator.

kTotalMemorySize

Total memori yang digunakan oleh Simple Allocator.

Typedef

BlockMark_t

uint8_t BlockMark_t

Jenis yang digunakan untuk menandai blok mana yang saat ini dialokasikan/belum dialokasikan.

uint8_t - mendukung total hingga 8 blok memori uint16_t - mendukung hingga total 16 blok memori total uint32_t - mendukung total hingga 32 blok memori

BlockSetParams_t

uint8_t BlockSetParams_t

Jenis ini digunakan untuk mengenkode informasi kumpulan blok.

Set blok adalah sekelompok potongan memori yang memiliki properti yang sama (ukuran, jenis, dan milik {i>buffer<i} yang sama). Diagram di bawah menunjukkan bagaimana informasi kumpulan blok dienkode dalam format 8-bit:

Berjangka Panjang Indeks Blokir Jumlah Blok Ukuran Blok
[7] [6:5] [4:3] [2:0]
[2:0] - Ukuran blok memori dalam satu set. Nilai ukuran dienkode dengan perincian 128 byte.
[2:0] Dekode
000 0 byte
001 128 byte
010 256 byte
... -
111 896 byte
[4:3] - Jumlah blok dalam satu set.
[4:3] Dekode
00 4 blok
01 1 blok
10 2 blok
11 3 blok
[6:5] - Indeks buffering jaringan tempat blok memori berada. Perhatikan bahwa saat buffer khusus digunakan, semua blok memori dialokasikan dari buffer khusus dan parameter indeks ini diabaikan.
[6:5] Dekode
00 Buffering jaringan #0
... -
11 Buffering jaringan #3
[7] - Menentukan apakah blok ditujukan untuk penyimpanan jangka panjang/pendek.
[7] Dekode
0 Blok memori jangka pendek
1 Blok memori jangka panjang

Variabel

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







}

Parameter kumpulan blok yang dienkode.

sBufferAllocationMask

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




                                                                                       }

Kumpulan mask blok buffer.

Mengidentifikasi apakah semua blok dalam buffer dan belum dialokasikan, lalu buffer dapat dihilangkan.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Menunjukkan blok mana yang dialokasikan/tidak dialokasikan.

Diinisialisasi ke 0 - berarti semua blok memori dan belum dialokasikan.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Pointer ke buffer memori yang diinisialisasi ke NULL.

Saat buffer jaringan digunakan, sMemBufs[] akan mengarah ke objek PacketBuffer. Jika buffering khusus digunakan, sMemBufs[0] akan mengarah ke buffer tersebut, dan pointer sMemBuf[] lainnya akan diabaikan.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Boolean yang menunjukkan apakah (true) atau tidak (false) buffer jaringan digunakan oleh Simple Allocator.

Saat false - buffer khusus yang disediakan dengan fungsi MemoryInit() digunakan.

Fungsi

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
)

Fungsi ini dipanggil oleh lapisan Weave untuk menghasilkan data acak.

Detail
Parameter
[in] buf
Pointer ke buffer memori, tempat data acak yang diminta harus disimpan.
[in] len
Menentukan ukuran data acak yang diminta dalam byte.
Nilai Pengembalian
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Jika sumber entropi gagal menghasilkan entropi yang diminta oleh generator data acak.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Apakah sumber data acak gagal menghasilkan data acak.
WEAVE_ERROR_INCORRECT_STATE
Apakah sumber data acak ditemukan dalam status yang salah.
WEAVE_NO_ERROR
Setelah berhasil.

InitSecureRandomDataSource

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

Fungsi ini dipanggil oleh lapisan Weave untuk menginisialisasi sumber data acak.

Fungsi ini bersifat spesifik per platform dan mungkin kosong jika tidak diperlukan inisialisasi sumber data acak.

Detail
Parameter
[in] entropyFunct
Pointer ke fungsi yang menghasilkan entropi ke generator data acak. Jika input entropi tidak diperlukan oleh algoritma, input ini bisa berupa NULL, yang terjadi jika generator data acak versi OpenSSL digunakan.
[in] entropyLen
Menentukan ukuran entropi dalam byte yang harus dihasilkan oleh fungsi entropi saat digunakan.
[in] personalizationData
Pointer ke buffering memori yang menyimpan input data personalisasi. Input data ini harus spesifik perangkat dan membantu meningkatkan properti statistik data acak.
[in] perDataLen
Menentukan ukuran data personalisasi dalam byte.
Nilai Pengembalian
WEAVE_ERROR_INVALID_ARGUMENT
Jika argumen yang tidak valid diteruskan ke fungsi ini.
WEAVE_NO_ERROR
Setelah berhasil.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori byte "ukuran".

Fungsi ini setara dengan MemoryAlloc(size, false).

Detail
Parameter
[in] size
Menentukan ukuran memori yang diminta dalam byte.
Nilai Pengembalian
Pointer
ke blok memori jika berhasil.
NULL-pointer
jika alokasi memori gagal.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori byte "ukuran".

Detail
Parameter
[in] size
Menentukan ukuran memori yang diminta dalam byte.
[in] isLongTermAlloc
Boolean yang menunjukkan apakah (true) atau tidak (false) blok memori yang diminta untuk penggunaan jangka panjang. Alokasi jangka panjang adalah memori yang harus tetap dialokasikan hingga sesi/handshake aman selesai. Contoh alokasi jangka panjang mencakup blok yang dialokasikan untuk objek CASE/PASE dan data konteksnya. Alokasi jangka pendek adalah memori yang diperlukan untuk melakukan operasi tertentu dan dapat dilepaskan segera setelahnya. Input ini membantu mengoptimalkan penggunaan memori dalam sistem yang dibatasi memori. Penggunaan parameter ini bersifat arbitrer dan bergantung pada pengimplementasi fungsi. Misalnya, parameter ini diabaikan ketika C malloc() Perpustakaan Standar C digunakan.
Nilai Pengembalian
Pointer
ke blok memori jika berhasil.
NULL-pointer
jika alokasi memori gagal.

MemoryFree

void MemoryFree(
  void *p
)

Fungsi ini dipanggil oleh lapisan Weave untuk melepaskan blok memori yang dialokasikan oleh fungsi MemeoryAlloc().

Detail
Parameter
[in] p
Pointer ke blok memori yang harus dirilis.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Fungsi ini dipanggil oleh lapisan Weave untuk menginisialisasi memori dan resource yang diperlukan untuk fungsionalitas yang tepat dari pengalokasi memori Weave Security Manager.

Fungsi ini khusus untuk platform dan mungkin kosong dalam kasus tertentu. Misalnya, fungsi ini tidak melakukan apa-apa ketika fungsi C Standard Library malloc() dan free() digunakan untuk alokasi memori.

Detail
Parameter
[in] buf
Pointer ke buffering memori khusus, yang harus digunakan sebagai kumpulan memori untuk alokasi memori Pengelola Keamanan Weave. Input ini bersifat opsional (default-nya adalah NULL) dan tidak boleh digunakan jika buffer memori khusus tidak digunakan.
[in] bufSize
Ukuran buffer memori khusus. Input ini bersifat opsional (default-nya adalah 0) dan tidak boleh digunakan jika buffering memori khusus tidak digunakan. Saat buffer memori khusus digunakan, fungsi tersebut akan memeriksa dan menghasilkan error jika ukuran buffer tidak cukup besar untuk mendukung kasus penggunaan Pengelola Keamanan Weave.
Nilai Pengembalian
WEAVE_ERROR_BUFFER_TOO_SMALL
Jika ukuran buffer input khusus tidak cukup untuk mendukung kasus penggunaan Pengelola Keamanan Weave.
WEAVE_NO_ERROR
Setelah berhasil.
other
Error yang dihasilkan oleh fungsi inisialisasi memori khusus platform.

MemoryShutdown

void MemoryShutdown(
  void
)

Fungsi ini dipanggil oleh lapisan Weave untuk melepaskan semua resource yang dialokasikan oleh fungsi MemoryInit().

Fungsi ini dapat berupa panggilan kosong jika tidak perlu melepaskan resource. Misalnya, ini adalah kasus ketika fungsi C Standard Library malloc() dan free() digunakan untuk alokasi memori.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Fungsi ini dipanggil untuk memberi tahu aplikasi saat operasi kriptografi yang memakan waktu baru saja selesai.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Fungsi ini dipanggil untuk memberi tahu aplikasi ketika operasi kriptografi yang memakan waktu akan dimulai.