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
Memblokir lokasi kolom parameter set dalam bentuk yang dienkode 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/tidak 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]
Kumpulan parameter 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 Alcator.

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 melakukan inisialisasi sumber data acak.
MemoryAlloc(size_t size)
void *
Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori "ukuran" {i>byte.<i}
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori "ukuran" {i>byte.<i}
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 melakukan inisialisasi memori dan resource yang diperlukan agar dapat berfungsi dengan baik dari pengalokasi memori Pengelola Security Weave.
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

Memblokir lokasi kolom parameter set dalam bentuk yang dienkode 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

Pergeseran kolom Ketik.

kBlockSetSizeMask

Mask kolom ukuran.

kBlockSetSizeShift

Pergeseran kolom ukuran.

kBlockSetSizeValueShift

Pergeseran decoding kolom ukuran (dikalikan dengan 128).

BlockSetParams

 BlockSetParams

Menentukan parameter kumpulan blok.

Properti
kBlockSet1BufferIndex

Indeks buffer set #1 adalah 0.

kBlockSet1Count

Jumlah blok #1 adalah 1.

kBlockSet1Size

Ukuran {i>set #1<i} adalah 128 byte.

kBlockSet1isLongTerm

Jenis kumpulan #1 adalah jangka panjang.

kBlockSet2BufferIndex

Indeks buffer set #2 adalah 0.

kBlockSet2Count

Jumlah blok #2 adalah 1.

kBlockSet2Size

Ukuran {i>Set #2<i} adalah 512 byte.

kBlockSet2isLongTerm

Jenis kumpulan #2 adalah jangka panjang.

kBlockSet3BufferIndex

Indeks buffer set #3 adalah 0.

kBlockSet3Count

Jumlah blok #3 adalah 1.

kBlockSet3Size

Ukuran {i>Set #3<i} adalah 512 byte.

kBlockSet3isLongTerm

Jenis kumpulan #3 adalah jangka pendek.

kBlockSet4BufferIndex

Indeks buffer set #4 adalah 1.

kBlockSet4Count

Jumlah blok #4 adalah 2.

kBlockSet4Size

Ukuran {i>Set #4<i} adalah 640 byte.

kBlockSet4isLongTerm

Jenis kumpulan #4 adalah jangka pendek.

kMaxBlockSize

Ukuran blok maksimum yang didukung oleh Alokasi Sederhana.

kMinBufferSize

Ukuran buffer jaringan minimum yang diperlukan untuk mendukung kasus penggunaan Alokasi Sederhana.

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

kNetworkBuffer0BlockAllocationMask

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

kNetworkBuffer1BlockAllocationMask

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

kNumberOfBlockSets

Jumlah kumpulan blok yang digunakan oleh Alokasi Sederhana.

kNumberOfNetworkBuffers

Jumlah buffer jaringan yang digunakan oleh Simple Alcator.

kTotalMemorySize

Total memori yang digunakan oleh Simple Alcator.

Typedef

BlockMark_t

uint8_t BlockMark_t

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

uint8_t - mendukung hingga 8 blok memori total uint16_t - mendukung hingga 16 blok memori total uint32_t - mendukung hingga total 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 buffer yang sama). Diagram di bawah ini menunjukkan bagaimana informasi kumpulan blok dienkode dalam format 8-bit:

Jangka Panjang Blokir Indeks 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 buffer jaringan tempat blok memori berada. Perhatikan bahwa ketika buffer khusus digunakan, semua blok memori dialokasikan dari buffer khusus dan parameter indeks ini diabaikan.
[6:5] Dekode
00 Buffer jaringan #0
... -
11 Buffer 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),







}

Kumpulan parameter yang dienkode.

sBufferAllocationMask

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




                                                                                       }

Kumpulan mask blok buffer.

Mengidentifikasi apakah semua blok dalam buffer dan belum dialokasikan, kemudian buffer dapat dikurangi.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Menunjukkan blok mana yang dialokasikan/tidak dialokasikan.

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

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Pointer ke buffer memori yang diinisialisasi ke NULL.

Jika buffer jaringan digunakan, sMemBufs[] arahkan ke objek PacketBuffer. Jika buffer khusus digunakan, titik sMemBufs[0] ke buffer tersebut dan pointer sMemBufs[] lainnya akan diabaikan.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

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

Jika false - buffer khusus yang disediakan dengan fungsi MemoryInit() akan 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 yang Ditampilkan
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Jika sumber entropi gagal menghasilkan entropi yang diminta oleh generator data acak.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Jika sumber data acak gagal menghasilkan data acak.
WEAVE_ERROR_INCORRECT_STATE
Jika sumber data acak ditemukan dalam status yang salah.
WEAVE_NO_ERROR
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 melakukan inisialisasi sumber data acak.

Fungsi ini khusus platform tertentu dan mungkin kosong jika inisialisasi sumber data acak tidak diperlukan.

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

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Fungsi ini dipanggil oleh lapisan Weave untuk mengalokasikan blok memori "ukuran" {i>byte.<i}

Fungsi ini setara dengan MemoryAlloc(size, false).

Detail
Parameter
[in] size
Menentukan ukuran memori yang diminta dalam byte.
Nilai yang Ditampilkan
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 "ukuran" {i>byte.<i}

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 adalah untuk penggunaan jangka panjang. Alokasi jangka panjang adalah memori yang harus tetap dialokasikan hingga sesi/handshake yang 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 bisa segera dirilis setelah itu. 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 jika malloc() Library Standar C digunakan.
Nilai yang Ditampilkan
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 dilepaskan.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Fungsi ini dipanggil oleh lapisan Weave untuk melakukan inisialisasi memori dan resource yang diperlukan agar dapat berfungsi dengan baik dari pengalokasi memori Pengelola Security Weave.

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

Detail
Parameter
[in] buf
Pointer ke buffer memori khusus, yang harus digunakan sebagai gabungan 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 buffer 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 yang Ditampilkan
WEAVE_ERROR_BUFFER_TOO_SMALL
Jika ukuran buffer input khusus tidak cukup untuk mendukung kasus penggunaan Pengelola Keamanan Weave.
WEAVE_NO_ERROR
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 terjadi ketika fungsi malloc() dan free() Library Standar C 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.