nl::Weave::Platform::Security

Không gian tên này bao gồm tất cả giao diện trong Weave dành cho trình quản lý bộ nhớ Giám sát Security của Weave.

Tóm tắt

Các hàm trong không gian tên này sẽ do các nền tảng sử dụng Weave triển khai, theo nhu cầu/quy tắc ràng buộc của môi trường cụ thể.

Liệt kê

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Chặn vị trí các trường tham số đã đặt ở dạng mã hoá 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
Xác định tham số nhóm khối.

Typedef

BlockMark_t typedef
uint8_t
Loại được dùng để đánh dấu khối hiện đang được phân bổ/chưa phân bổ.
BlockSetParams_t typedef
uint8_t
Loại này dùng để mã hoá thông tin về nhóm khối.

Biến

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]
Các tham số của nhóm khối được mã hoá.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Tập hợp các mặt nạ khối đệm.
sMemBlocksAllocated = 0
Cho biết khối nào được phân bổ/chưa được phân bổ.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Con trỏ đến vùng đệm bộ nhớ được khởi tạo đến giá trị NULL.
sNetworkBuffersUsed = true
bool
Giá trị boolean cho biết liệu (true) hay không (false) các vùng đệm mạng được Trình phân bổ đơn giản sử dụng.

Hàm

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Hàm này được lớp Weave gọi để tạo dữ liệu ngẫu nhiên.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Hàm này được lớp Weave gọi để khởi tạo nguồn dữ liệu ngẫu nhiên.
MemoryAlloc(size_t size)
void *
Hàm này được lớp Weave gọi để phân bổ một khối bộ nhớ có giá trị "size" byte.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Hàm này được lớp Weave gọi để phân bổ một khối bộ nhớ có giá trị "size" byte.
MemoryFree(void *p)
void
Hàm này được lớp Weave gọi để giải phóng một khối bộ nhớ do hàm Memeoryalloc() phân bổ.
MemoryInit(void *buf, size_t bufSize)
Lớp Weave gọi hàm này để khởi tạo bộ nhớ và tài nguyên cần thiết cho chức năng thích hợp của trình phân bổ bộ nhớ của Trình quản lý bảo mật Weave.
MemoryShutdown(void)
void
Hàm này do lớp Weave gọi để giải phóng tất cả tài nguyên do hàm MemoryInit() phân bổ.
OnTimeConsumingCryptoDone(void)
void
Hàm này được gọi để thông báo cho ứng dụng khi một thao tác mã hoá tốn thời gian vừa kết thúc.
OnTimeConsumingCryptoStart(void)
void
Hàm này được gọi để thông báo cho ứng dụng khi một thao tác mã hoá cần nhiều thời gian sắp bắt đầu.

Lớp

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

Liệt kê

BlockSetParamFields

 BlockSetParamFields

Chặn vị trí các trường tham số đã đặt ở dạng mã hoá 8 bit.

Thuộc tính
kBlockSetBufferIndexMask

Mặt nạ trường chỉ mục vùng đệm.

kBlockSetBufferIndexShift

Thay đổi trường chỉ mục vùng đệm.

kBlockSetCountMask

Mặt nạ trường đếm.

kBlockSetCountShift

Đếm lượt thay đổi trường.

kBlockSetIsLongTermMask

Nhập mặt nạ trường.

kBlockSetIsLongTermShift

Thay đổi trường loại.

kBlockSetSizeMask

Mặt nạ trường kích thước.

kBlockSetSizeShift

Thay đổi trường kích thước.

kBlockSetSizeValueShift

Thay đổi giải mã trường kích thước (nhân với 128).

BlockSetParams

 BlockSetParams

Xác định tham số nhóm khối.

Thuộc tính
kBlockSet1BufferIndex

Chỉ mục vùng đệm đặt số 1 là 0.

kBlockSet1Count

Số khối #1 là 1.

kBlockSet1Size

Kích thước của bộ số 1 là 128 byte.

kBlockSet1isLongTerm

Loại đặt số 1 là dài hạn.

kBlockSet2BufferIndex

Chỉ mục vùng đệm số 2 là 0.

kBlockSet2Count

Số khối đặt #2 là 1.

kBlockSet2Size

Kích thước của bộ số 2 là 512 byte.

kBlockSet2isLongTerm

Loại đặt số 2 là dài hạn.

kBlockSet3BufferIndex

Chỉ mục vùng đệm đặt số 3 là 0.

kBlockSet3Count

Số khối đặt #3 là 1.

kBlockSet3Size

Kích thước của bộ số 3 là 512 byte.

kBlockSet3isLongTerm

Loại đặt số 3 là ngắn hạn.

kBlockSet4BufferIndex

Chỉ mục vùng đệm số 4 là 1.

kBlockSet4Count

Số khối đặt số 4 là 2.

kBlockSet4Size

Kích thước của bộ số 4 là 640 byte.

kBlockSet4isLongTerm

Loại đặt số 4 là ngắn hạn.

kMaxBlockSize

Kích thước khối tối đa được Trình phân bổ đơn giản hỗ trợ.

kMinBufferSize

Cần có dung lượng bộ nhớ đệm mạng tối thiểu để hỗ trợ các trường hợp sử dụng của Simple Allocator.

Tham số này lấy từ kích thước của hai khối bộ nhớ (640 + 600) được phân bổ trong vùng đệm mạng #1.

kNetworkBuffer0BlockAllocationMask

Mặt nạ này xác định tất cả khối bộ nhớ được phân bổ từ vùng đệm mạng #0.

kNetworkBuffer1BlockAllocationMask

Mặt nạ này xác định tất cả khối bộ nhớ được phân bổ từ vùng đệm mạng 1.

kNumberOfBlockSets

Số tập hợp khối được Trình phân bổ đơn giản sử dụng.

kNumberOfNetworkBuffers

Số vùng đệm mạng mà Simple Allocator sử dụng.

kTotalMemorySize

Tổng bộ nhớ mà Trình phân bổ đơn giản đã sử dụng.

Typedef

BlockMark_t

uint8_t BlockMark_t

Loại được dùng để đánh dấu khối hiện đang được phân bổ/chưa phân bổ.

uint8_t - hỗ trợ tổng cộng 8 khối bộ nhớ uint16_t - hỗ trợ tối đa 16 khối bộ nhớ tổng cộng uint32_t - hỗ trợ tổng cộng tối đa 32 khối bộ nhớ

BlockSetParams_t

uint8_t BlockSetParams_t

Loại này dùng để mã hoá thông tin về nhóm khối.

Nhóm khối là một nhóm các phần bộ nhớ có cùng thuộc tính (kích thước, loại và thuộc cùng một vùng đệm). Sơ đồ dưới đây trình bày cách thông tin nhóm khối được mã hoá theo định dạng 8 bit:

Dài hạn Chỉ mục khối Số lượng khối Kích thước khối
[7] [6:5] [4:3] [2:0]
[2:0] – Kích thước của khối bộ nhớ trong một tập hợp. Giá trị kích thước được mã hoá với độ chi tiết 128 byte.
[2:0] Giải mã
000 0 byte
001 128 byte
010 256 byte
... -
111 896 byte
[4:3] - Số khối trong một tập hợp.
[4:3] Giải mã
00 4 khối
01 1 khối
10 2 khối
11 3 khối
[6:5] – Chỉ mục vùng đệm mạng nơi các khối bộ nhớ thường trú. Xin lưu ý rằng khi sử dụng vùng đệm chuyên dụng, tất cả các khối bộ nhớ sẽ được phân bổ từ vùng đệm dành riêng và tham số chỉ mục này sẽ bị bỏ qua.
[6:5] Giải mã
00 Vùng đệm mạng #0
... -
11 Vùng đệm mạng 3
[7] – Chỉ định xem khối dành cho lưu trữ dài hạn/ngắn hạn.
[7] Giải mã
0 Khối kỷ niệm ngắn hạn
1 Khối bộ nhớ dài hạn

Biến

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







}

Các tham số của nhóm khối được mã hoá.

sBufferAllocationMask

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




                                                                                       }

Tập hợp các mặt nạ khối đệm.

Xác định xem tất cả các khối trong vùng đệm và chưa được phân bổ, sau đó có thể giải phóng vùng đệm.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Cho biết khối nào được phân bổ/chưa được phân bổ.

Khởi tạo là 0 – có nghĩa là tất cả các khối bộ nhớ và chưa được phân bổ.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Con trỏ đến vùng đệm bộ nhớ được khởi tạo đến giá trị NULL.

Khi sử dụng vùng đệm mạng, sMemBufs[] sẽ trỏ đến các đối tượng PacketBuffer. Khi sử dụng vùng đệm chuyên dụng, sMemBufs[0] trỏ đến vùng đệm đó và các con trỏ sMemBufs[] khác sẽ bị bỏ qua.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Giá trị boolean cho biết liệu (true) hay không (false) các vùng đệm mạng được Trình phân bổ đơn giản sử dụng.

Khi giá trị là false, vùng đệm riêng được cung cấp kèm theo hàm MemoryInit() sẽ được sử dụng.

Hàm

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
)

Hàm này được lớp Weave gọi để tạo dữ liệu ngẫu nhiên.

Thông tin chi tiết
Tham số
[in] buf
Con trỏ đến vùng đệm bộ nhớ, nơi lưu trữ dữ liệu ngẫu nhiên được yêu cầu.
[in] len
Chỉ định kích thước dữ liệu ngẫu nhiên được yêu cầu tính bằng byte.
Giá trị trả về
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Nếu nguồn entropy không tạo được entropy theo yêu cầu của trình tạo dữ liệu ngẫu nhiên.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Nếu nguồn dữ liệu ngẫu nhiên không thể tạo dữ liệu ngẫu nhiên.
WEAVE_ERROR_INCORRECT_STATE
Nếu hệ thống tìm thấy nguồn dữ liệu ngẫu nhiên ở trạng thái không chính xác.
WEAVE_NO_ERROR
Khi thành công.

InitSecureRandomDataSource

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

Hàm này được lớp Weave gọi để khởi tạo nguồn dữ liệu ngẫu nhiên.

Hàm này dành riêng cho nền tảng và có thể trống khi không yêu cầu khởi chạy nguồn dữ liệu ngẫu nhiên.

Thông tin chi tiết
Tham số
[in] entropyFunct
Con trỏ chỉ đến một hàm tạo entropy cho trình tạo dữ liệu ngẫu nhiên. Khi không yêu cầu đầu vào entropy bởi algorith, giá trị đầu vào này có thể là NULL, trong trường hợp này khi sử dụng phiên bản OpenSSL của trình tạo dữ liệu ngẫu nhiên.
[in] entropyLen
Chỉ định kích thước entropy tính bằng byte mà hàm entropy sẽ tạo khi sử dụng hàm này.
[in] personalizationData
Con trỏ đến vùng đệm bộ nhớ lưu trữ dữ liệu đầu vào của hoạt động cá nhân hoá. Dữ liệu đầu vào này phải dành riêng cho từng thiết bị để giúp cải thiện các tính chất thống kê của dữ liệu ngẫu nhiên.
[in] perDataLen
Chỉ định kích thước dữ liệu cá nhân hoá tính bằng byte.
Giá trị trả về
WEAVE_ERROR_INVALID_ARGUMENT
Nếu một đối số không hợp lệ được truyền vào hàm này.
WEAVE_NO_ERROR
Khi thành công.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Hàm này được lớp Weave gọi để phân bổ một khối bộ nhớ có giá trị "size" byte.

Hàm này tương đương với Memoryalloc(size, false).

Thông tin chi tiết
Tham số
[in] size
Chỉ định kích thước bộ nhớ được yêu cầu tính bằng byte.
Giá trị trả về
Pointer
thành một khối bộ nhớ nếu thành công.
NULL-pointer
nếu phân bổ bộ nhớ không thành công.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Hàm này được lớp Weave gọi để phân bổ một khối bộ nhớ có giá trị "size" byte.

Thông tin chi tiết
Tham số
[in] size
Chỉ định kích thước bộ nhớ được yêu cầu tính bằng byte.
[in] isLongTermAlloc
Giá trị boolean cho biết liệu (true) hay không (false) khối bộ nhớ được yêu cầu dùng để sử dụng trong thời gian dài. Quá trình phân bổ dài hạn là bộ nhớ cần được phân bổ cho đến khi phiên/bắt tay bảo mật hoàn tất. Ví dụ về việc phân bổ dài hạn bao gồm các khối được phân bổ cho đối tượng CASE/PASE và dữ liệu bối cảnh của các đối tượng đó. Phân bổ ngắn hạn là bộ nhớ cần thiết để thực hiện một thao tác cụ thể và có thể được giải phóng ngay sau đó. Dữ liệu đầu vào này giúp tối ưu hoá việc sử dụng bộ nhớ trong một hệ thống bị hạn chế về bộ nhớ. Việc sử dụng tham số này là tuỳ ý và phụ thuộc vào trình triển khai hàm. Ví dụ: tham số này sẽ bị bỏ qua khi bạn sử dụng Thư viện chuẩn C malloc().
Giá trị trả về
Pointer
thành một khối bộ nhớ nếu thành công.
NULL-pointer
nếu phân bổ bộ nhớ không thành công.

MemoryFree

void MemoryFree(
  void *p
)

Hàm này được lớp Weave gọi để giải phóng một khối bộ nhớ do hàm Memeoryalloc() phân bổ.

Thông tin chi tiết
Tham số
[in] p
Con trỏ đến một khối bộ nhớ cần được giải phóng.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Lớp Weave gọi hàm này để khởi tạo bộ nhớ và tài nguyên cần thiết cho chức năng thích hợp của trình phân bổ bộ nhớ của Trình quản lý bảo mật Weave.

Hàm này dành riêng cho nền tảng và có thể trống trong một số trường hợp nhất định. Ví dụ: hàm này không làm gì khi dùng các hàm malloc() và free() trong Thư viện chuẩn C để phân bổ bộ nhớ.

Thông tin chi tiết
Tham số
[in] buf
Con trỏ trỏ đến vùng đệm bộ nhớ chuyên dụng mà nên dùng làm nhóm bộ nhớ cho quá trình phân bổ bộ nhớ của Trình quản lý bảo mật Weave. Dữ liệu đầu vào này là không bắt buộc (mặc định là NULL) và không nên sử dụng nếu không sử dụng vùng đệm bộ nhớ chuyên dụng.
[in] bufSize
Kích thước của vùng đệm bộ nhớ chuyên dụng. Đầu vào này là không bắt buộc (mặc định là 0) và không nên sử dụng nếu không sử dụng vùng đệm bộ nhớ chuyên dụng. Khi sử dụng vùng đệm bộ nhớ chuyên dụng, hàm sẽ kiểm tra và tạo lỗi nếu dung lượng bộ nhớ đệm không đủ lớn để hỗ trợ các trường hợp sử dụng của Trình quản lý bảo mật của Weave.
Giá trị trả về
WEAVE_ERROR_BUFFER_TOO_SMALL
Nếu dung lượng bộ nhớ đệm đầu vào chuyên dụng không đủ để hỗ trợ các trường hợp sử dụng Trình quản lý bảo mật của Weave.
WEAVE_NO_ERROR
Khi thành công.
other
Lỗi do hàm khởi tạo bộ nhớ dành riêng cho nền tảng tạo ra.

MemoryShutdown

void MemoryShutdown(
  void
)

Hàm này do lớp Weave gọi để giải phóng tất cả tài nguyên do hàm MemoryInit() phân bổ.

Hàm này có thể là một lệnh gọi trống nếu không cần giải phóng tài nguyên. Ví dụ: đây là trường hợp khi các hàm malloc() và free() của Thư viện chuẩn C được dùng để phân bổ bộ nhớ.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Hàm này được gọi để thông báo cho ứng dụng khi một thao tác mã hoá tốn thời gian vừa kết thúc.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Hàm này được gọi để thông báo cho ứng dụng khi một thao tác mã hoá cần nhiều thời gian sắp bắt đầu.