nl::Weave::Platform::Security

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

Tóm tắt

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

Bảng 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ủa các trường thông số tập hợp ở dạng được 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 các tham số của tập hợp khối.

Typedef

BlockMark_t typedef
uint8_t
Loại dùng để đánh dấu khối nào hiện đang được phân bổ/chưa phân bổ.
BlockSetParams_t typedef
uint8_t
Kiểu này được dùng để mã hoá thông tin 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]
Tập hợp khối được mã hoá tham số.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Tập hợp mặt nạ khối vùng đệm.
sMemBlocksAllocated = 0
Cho biết khối nào được phân bổ/chưa phân bổ.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Con trỏ đến vùng đệm bộ nhớ được khởi chạy đến NULL.
sNetworkBuffersUsed = true
bool
Một giá trị boolean cho biết liệu (true) hay không (false) vùng đệm mạng có được Simple Allocations sử dụng hay khô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ó kích thước "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ó kích thước "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)
Hàm này được lớp Weave gọi để 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ớ Security (Bảo mật) trong Trình quản lý Weave.
MemoryShutdown(void)
void
Hàm này được lớp Weave gọi để giải phóng tất cả tài nguyên đã được phân bổ bằng hàm MemoryInit().
OnTimeConsumingCryptoDone(void)
void
Hàm này được gọi để thông báo cho ứng dụng khi thao tác mã hoá mất nhiều thời gian vừa hoàn tất.
OnTimeConsumingCryptoStart(void)
void
Hàm này được gọi để thông báo cho ứng dụng khi quá trình mã hoá tốn 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

Bảng liệt kê

BlockSetParamFields

 BlockSetParamFields

Chặn vị trí của các trường thông số tập hợp ở dạng được mã hoá 8 bit.

Thuộc tính
kBlockSetBufferIndexMask

Mặt nạ cho trường (field mask) của chỉ mục vùng đệm.

kBlockSetBufferIndexShift

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

kBlockSetCountMask

Đếm mặt nạ cho trường.

kBlockSetCountShift

Thay đổi trường đếm.

kBlockSetIsLongTermMask

Nhập mặt nạ cho trường (field mask).

kBlockSetIsLongTermShift

Thay đổi trường nhập.

kBlockSetSizeMask

Kích thước mặt nạ cho trường (field mask).

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 các tham số của tập hợp khối.

Thuộc tính
kBlockSet1BufferIndex

Chỉ mục bộ đệm của bộ #1 là 0.

kBlockSet1Count

Số khối #1 là 1.

kBlockSet1Size

Kích thước bộ #1 là 128 byte.

kBlockSet1isLongTerm

Loại nhóm 1 là dài hạn.

kBlockSet2BufferIndex

Đặt chỉ mục vùng đệm #2 là 0.

kBlockSet2Count

Số khối #2 là 1.

kBlockSet2Size

Kích thước bộ #2 là 512 byte.

kBlockSet2isLongTerm

Loại nhóm 2 là dài hạn.

kBlockSet3BufferIndex

Đặt chỉ mục vùng đệm #3 là 0.

kBlockSet3Count

Số khối #3 là 1.

kBlockSet3Size

Kích thước bộ #3 là 512 byte.

kBlockSet3isLongTerm

Loại nhóm 3 là ngắn hạn.

kBlockSet4BufferIndex

Đặt chỉ mục vùng đệm #4 là 1.

kBlockSet4Count

Số khối #4 là 2.

kBlockSet4Size

Kích thước bộ #4 là 640 byte.

kBlockSet4isLongTerm

Loại nhóm 4 là ngắn hạn.

kMaxBlockSize

Kích thước khối tối đa được Simple Allocations hỗ trợ.

kMinBufferSize

Cần có dung lượng bộ đệm mạng tối thiểu để hỗ trợ các trường hợp sử dụng Đơn giản phân bổ.

Tham số này bắt nguồn 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ả cá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ả các khối bộ nhớ được phân bổ từ vùng đệm mạng #1.

kNumberOfBlockSets

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

kNumberOfNetworkBuffers

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

kTotalMemorySize

Tổng bộ nhớ mà Simple Allocations sử dụng.

Typedef

BlockMark_t

uint8_t BlockMark_t

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

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

BlockSetParams_t

uint8_t BlockSetParams_t

Kiểu này được dùng để mã hoá thông tin nhóm khối.

Một tập hợp 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 tập hợp khối được mã hoá ở đị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] Đang giải mã
000 0 byte
001 128 byte
010 256 byte
... -
111 896 byte
[4:3] – Số khối trong một bộ.
[4:3] Đang 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ác khối bộ nhớ. Lưu ý rằng khi vùng đệm chuyên dụng được sử dụng, tất cả các khối bộ nhớ được phân bổ từ vùng đệm chuyên dụng và tham số chỉ mục này sẽ bị bỏ qua.
[6:5] Đang giải mã
00 Vùng đệm mạng #0
... -
11 Vùng đệm mạng số 3
[7] – Chỉ định xem quy tắc chặn có dùng để lưu trữ dài hạn/ngắn hạn hay không.
[7] Đang giải mã
0 Khối bộ nhớ 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),







}

Tập hợp khối được mã hoá tham số.

sBufferAllocationMask

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




                                                                                       }

Tập hợp mặt nạ khối vùng đệm.

Xác định xem có thể giải phóng tất cả các khối trong vùng đệm hay không, sau đó 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 phân bổ.

Được 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 chạy đến NULL.

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

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Một giá trị boolean cho biết liệu (true) hay không (false) vùng đệm mạng có được Simple Allocations sử dụng hay không.

Khi giá trị false (sai) – vùng đệm chuyên dụng được cung cấp kèm theo hàm MemoryInit() đượ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
Các 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 do trình tạo dữ liệu ngẫu nhiên yêu cầu.
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
Các tham số
[in] entropyFunct
Con trỏ đến một hàm tạo ra entropy đến trình tạo dữ liệu ngẫu nhiên. Khi giá trị đầu vào entropy không bắt buộc, giá trị đầu vào này có thể là NULL (Rỗng) trong trường hợp này khi phiên bản OpenSSL của trình tạo dữ liệu ngẫu nhiên được sử dụng.
[in] entropyLen
Chỉ định kích thước entropy bằng byte mà hàm này sẽ được tạo khi được sử dụng.
[in] personalizationData
Con trỏ đến vùng đệm bộ nhớ lưu trữ dữ liệu đầu vào của dữ liệu cá nhân hoá. Dữ liệu nhập vào phải dành riêng cho từng thiết bị và giúp cải thiện các thuộc tính 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ó kích thước "size" byte.

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

Thông tin chi tiết
Các 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
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ó kích thước "size" byte.

Thông tin chi tiết
Các 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 giá trị (true) hay không (false) khối bộ nhớ được yêu cầu có dùng trong dài hạn. Phân bổ dài hạn là bộ nhớ sẽ được phân bổ cho đến khi phiên/cơ chế bắt tay bảo mật hoàn tất. Ví dụ về mô hình 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 ngữ cảnh của các đối tượng đó. Phân bổ ngắn hạn là một bộ nhớ cần thiết để thực hiện 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á mức sử dụng bộ nhớ trong một hệ thống bị hạn chế 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 bị bỏ qua khi sử dụng Thư viện chuẩn C Malloc().
Giá trị trả về
Pointer
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
Các tham số
[in] p
Con trỏ đến một khối bộ nhớ sẽ được giải phóng.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Hàm này được lớp Weave gọi để 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ớ Security (Bảo mật) trong Trình quản lý 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 các hàm Malloc() và free() của Thư viện chuẩn C được dùng để phân bổ bộ nhớ.

Thông tin chi tiết
Các tham số
[in] buf
Con trỏ đến vùng đệm bộ nhớ chuyên dụng, sẽ được dùng làm nhóm bộ nhớ để phân bổ bộ nhớ cho Trình quản lý Bảo mật của Weave. Giá trị đầu vào này là không bắt buộc (giá trị mặc định là NULL) và không nên dùng nếu vùng đệm bộ nhớ chuyên dụng không được sử dụng.
[in] bufSize
Kích thước của vùng đệm bộ nhớ chuyên dụng. Dữ liệu đầu vào này là không bắt buộc (mặc định là 0) và không nên dùng nếu vùng đệm bộ nhớ chuyên dụng không được sử 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 vùng đệm không đủ lớn để hỗ trợ các trường hợp sử dụng 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
Một 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 được lớp Weave gọi để giải phóng tất cả tài nguyên đã được phân bổ bằng hàm MemoryInit().

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 thao tác mã hoá mất nhiều thời gian vừa hoàn tất.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Hàm này được gọi để thông báo cho ứng dụng khi quá trình mã hoá tốn thời gian sắp bắt đầu.