Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

nl::Weave::Platform::Bảo mật

Vùng chứa tên này bao gồm tất cả giao diện trong Weave cho trình quản lý bộ nhớ Weave Security giám sát.

Tóm tắt

Các chức năng trong vùng chứa tên này phải được triển khai bởi các nền tảng sử dụng Weave, theo nhu cầu/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ác trường thông số đã đặt ở dạng mã hóa 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 thông số nhóm 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 được phân bổ.
BlockSetParams_t typedef
uint8_t
Loại này dùng để mã hóa 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]
Khối mã hóa đặt các thông số.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Bộ mặt nạ chặn đệm.
sMemBlocksAllocated = 0
Cho biết khối nào được phân bổ/chưa được phân bổ.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Trỏ tới bộ nhớ đệm khởi tạo thành NULL.
sNetworkBuffersUsed = true
bool
Boolean cho biết liệu bộ đệm mạng có được sử dụng (đúng) hay không (false).

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 chạy nguồn dữ liệu ngẫu nhiên.
MemoryAlloc(size_t size)
void *
Hàm này được gọi bởi lớp Weave để phân bổ một khối bộ nhớ gồm "size" byte.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Hàm này được gọi bởi lớp Weave để phân bổ một khối bộ nhớ gồm "size" byte.
MemoryFree(void *p)
void
Hàm này được lớp Weave gọi để giải phóng khối bộ nhớ do hàm Memeoryfusionc() 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 phù hợp của trình phân bổ bộ nhớ Trình quản lý bảo mật.
MemoryShutdown(void)
void
Hàm này được lớp Weave gọi để phát hành tất cả các tài nguyên được hàm CacheInit() 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ật mã 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ật mã 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ê

Khối SetParamParamFields

 BlockSetParamFields

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

Thuộc tính
kBlockSetBufferIndexMask

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

kBlockSetBufferIndexShift

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

kBlockSetCountMask

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

kBlockSetCountShift

Đếm mức thay đổi trường.

kBlockSetIsLongTermMask

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

kBlockSetIsLongTermShift

Nhập mức thay đổi trường.

kBlockSetSizeMask

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

kBlockSetSizeShift

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

kBlockSetSizeValueShift

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

BlockSetparam

 BlockSetParams

Xác định các thông số nhóm khối.

Thuộc tính
kBlockSet1BufferIndex

Chỉ số bộ đệm số 1 là 0.

kBlockSet1Count

Số khối số 1 là 1.

kBlockSet1Size

Kích thước số 1 là 128 byte.

kBlockSet1isLongTerm

Loại số 1 là loại dài hạn.

kBlockSet2BufferIndex

Chỉ số bộ đệm số 2 là 0.

kBlockSet2Count

Số khối số 2 là 1.

kBlockSet2Size

Kích thước số 2 là 512 byte.

kBlockSet2isLongTerm

Loại số 2 là loại dài hạn.

kBlockSet3BufferIndex

Chỉ số bộ đệm số 3 là 0.

kBlockSet3Count

Số khối số 3 là 1.

kBlockSet3Size

Kích thước số 3 là 512 byte.

kBlockSet3isLongTerm

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

kBlockSet4BufferIndex

Chỉ số bộ đệm số 4 là 1.

kBlockSet4Count

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

kBlockSet4Size

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

kBlockSet4isLongTerm

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

kMaxBlockSize

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

kMinBufferSize

Dung lượng bộ nhớ đệm tối thiểu của mạng cần thiết để hỗ trợ các trường hợp sử dụng Bộ phân bổ đơn giản.

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

kNetworkBuffer0BlockAllocationMask

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

kNetworkBuffer1BlockAllocationMask

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

kNumberOfBlockSets

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

kNumberOfNetworkBuffers

Số bộ đệm mạng được sử dụng trong Công cụ phân bổ đơn giản.

kTotalMemorySize

Tổng mức bộ nhớ mà đơn vị phân bổ đơn giản đã sử dụng.

Typedef

Khối Mark_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 được 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ớ tổng uint32_t - hỗ trợ tổng cộng tối đa 32 khối bộ nhớ

Khối SetParams_t

uint8_t BlockSetParams_t

Loại này dùng để mã hóa thông tin nhóm khối.

Tập hợp khối là một nhóm đoạn bộ nhớ có cùng thuộc tính (kích thước, loại và thuộc về cùng một bộ đệm). Sơ đồ dưới đây cho thấy cách thông tin về nhóm khối được mã hóa ở định dạng 8 bit:

Dài hạn Chỉ mục chặn Số 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 bộ. Giá trị kích thước được mã hóa 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 nhóm.
[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 bộ đệm mạng nơi lưu trữ bộ nhớ chặn. Lưu ý rằng khi bộ đệm riêng được dùng, tất cả khối bộ nhớ sẽ được phân bổ từ bộ đệm chuyên dụng và thông số chỉ mục này sẽ bị bỏ qua.
[6:5] Giải mã
00 Vùng đệm mạng số 0
... -
11 Vùng đệm mạng số 3
[7] – Chỉ định xem các khối là dành cho bộ nhớ 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),







}

Khối mã hóa đặt các thông số.

sBufferAllocationMask

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




                                                                                       }

Bộ mặt nạ chặn đệm.

Xác định xem tất cả các khối trong bộ đệm và không được phân bổ thì bộ đệm có thể được gỡ bỏ hay không.

Đã phân bổ sMemBlocks

BlockMark_t sMemBlocksAllocated = 0

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

Được khởi tạo bằng 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 }

Trỏ tới bộ nhớ đệm khởi tạo thành NULL.

Khi bộ đệm mạng được sử dụng sMemBufs[], hãy trỏ đến đối tượng PacketBuffer. Khi vùng đệm chuyên dụng được sử 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

Boolean cho biết liệu bộ đệm mạng có được sử dụng (đúng) hay không (false).

Khi sai - bộ đệm chuyên dụng được cung cấp với hàm StorageInit() được sử dụng.

Hàm

DecodeBlockSetParams

void DecodeBlockSetParams(
  BlockSetParams_t blockSetParams,
  uint16_t & blockSize,
  uint8_t & blockCount,
  uint8_t & blockBufferIndex,
  bool & blockIsLongTerm
)

Nhận dữ liệu bảo mật ngẫu nhiên

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 thông số
[in] buf
Trỏ vào một vùng đệm bộ nhớ, nơi lưu trữ dữ liệu ngẫu nhiên đã yêu cầu.
[in] len
Chỉ định kích thước dữ liệu ngẫu nhiên đã 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 mà 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 tạo được dữ liệu ngẫu nhiên.
WEAVE_ERROR_INCORRECT_STATE
Nếu phát hiện nguồn dữ liệu ngẫu nhiên không đúng trạng thái.
WEAVE_NO_ERROR
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 chạy 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 cần khởi tạo nguồn dữ liệu ngẫu nhiên.

Thông tin chi tiết
Các thông số
[in] entropyFunct
Trỏ đến một hàm tạo entropy cho trình tạo dữ liệu ngẫu nhiên. Khi không có yêu cầu đầu vào entropy theo yêu cầu này, đầu vào này có thể là NULL. Trường hợp này khi sử dụng phiên bản UTM của trình tạo dữ liệu ngẫu nhiên.
[in] entropyLen
Chỉ định kích thước entropy bằng byte và cần được hàm entropy tạo ra khi sử dụng.
[in] personalizationData
Trỏ đến một vùng đệm bộ nhớ để lưu trữ dữ liệu đầu vào được cá nhân hoá. Dữ liệu đầu vào này phải dành riêng cho 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 hóa 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 chuyển vào hàm này.
WEAVE_NO_ERROR
Thành công!

Bộ nhớ sang trọng

void * MemoryAlloc(
  size_t size
)

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

Hàm này tương đương với Memory {1/}c(size, false).

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

Bộ nhớ sang trọng

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

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

Thông tin chi tiết
Các thông số
[in] size
Chỉ định kích thước bộ nhớ yêu cầu tính bằng byte.
[in] isLongTermAlloc
Boolean cho biết liệu khối bộ nhớ được yêu cầu có (đúng) hay không (false) để sử dụng lâu dài. Phân bổ dài hạn là bộ nhớ cần được phân bổ cho đến khi phiên/bắt tay an toàn hoàn tất. Ví dụ về cách 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. Phân bổ ngắn hạn là một bộ nhớ cần thiết để thực hiện một thao tác cụ thể và có thể phát hành ngay sau đó. Thông tin đầu vào này giúp tối ưu hóa việc sử dụng bộ nhớ trong một hệ thống hạn chế bộ nhớ. Việc sử dụng thông số này là tùy ý và phụ thuộc vào trình triển khai hàm. Ví dụ: thông số này bị bỏ qua khi sử dụng thư viện C Standard Library Mall().
Giá trị trả về
Pointer
thành khối nhớ trong trường hợp thành công.
NULL-pointer
nếu không phân bổ được bộ nhớ.

Bộ nhớ trống

void MemoryFree(
  void *p
)

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

Thông tin chi tiết
Các thông số
[in] p
Trỏ vào một khối bộ nhớ cần được thả.

Bộ nhớ

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 phù hợp của trình phân bổ bộ nhớ Trình quản lý bảo mật.

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. Ví dụ: hàm này không thực hiện thao tác nào khi hàm các tiêu chuẩn Thư viện C và thư viện() miễn phí() được dùng để phân bổ bộ nhớ.

Thông tin chi tiết
Các thông số
[in] buf
Con trỏ đến một vùng đệm bộ nhớ chuyên dụng, dùng làm bộ nhớ cho bộ nhớ Weave Security phân bổ bộ nhớ. Thông tin đầu vào này là không bắt buộc (mặc định là NULL) và không nên dùng nếu bộ đệm bộ nhớ chuyên dụng không được sử dụng.
[in] bufSize
Kích thước của bộ nhớ đệm riêng. Thông tin đầ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 bộ đệm bộ nhớ chuyên dụng không được sử dụng. Khi vùng đệm bộ nhớ chuyên dụng được sử dụng, hàm sẽ kiểm tra và tạo ra lỗi nếu kích thước bộ đệ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.
Giá trị trả về
WEAVE_ERROR_BUFFER_TOO_SMALL
Nếu kích thước bộ đệ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
Thành công!
other
Lỗi được tạo bởi hàm khởi tạo bộ nhớ theo nền tảng.

Tắt bộ nhớ

void MemoryShutdown(
  void
)

Hàm này được lớp Weave gọi để phát hành tất cả các tài nguyên được hàm CacheInit() phân bổ.

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

OnTimeConsumingcryptDone

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ật mã tốn thời gian vừa kết thúc.

OnTimeConsumingcryptStart

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ật mã tốn thời gian sắp bắt đầu.