nl:: Weave:: Platform:: Security
เนมสเปซนี้มีอินเทอร์เฟซทั้งหมดภายใน Weave สำหรับตัวจัดการหน่วยความจำของการตรวจสอบความปลอดภัยของ Weave
สรุป
ฟังก์ชันในเนมสเปซนี้จะมีการใช้งานโดยแพลตฟอร์มที่ใช้ Weave ตามความต้องการ/ข้อจํากัดของสภาพแวดล้อมที่เฉพาะเจาะจง
Typedef |
|
---|---|
BlockMark_t
|
Typedefuint8_t
ประเภทที่ใช้เพื่อทำเครื่องหมายบล็อกที่ได้รับการจัดสรร/ไม่ได้จัดสรรอยู่ในปัจจุบัน |
BlockSetParams_t
|
Typedefuint8_t
ประเภทนี้ใช้ในการเข้ารหัสข้อมูลชุดบล็อก |
ตัวแปร |
|
---|---|
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]
|
const BlockSetParams_t
พารามิเตอร์ชุดบล็อกที่เข้ารหัส
|
sBufferAllocationMask = {
kNetworkBuffer0BlockAllocationMask,
kNetworkBuffer1BlockAllocationMask,
}[kNumberOfNetworkBuffers]
|
const BlockMark_t
ชุดมาสก์บัฟเฟอร์บล็อก
|
sMemBlocksAllocated = 0
|
ระบุว่าบล็อกใดมีการจัดสรร/ไม่ได้จัดสรร
|
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
|
void *
ตัวชี้ไปยังบัฟเฟอร์หน่วยความจำเริ่มต้นที่ค่าว่าง
|
sNetworkBuffersUsed = true
|
bool
บูลีนที่ระบุว่า Simple Allocator ใช้บัฟเฟอร์เครือข่าย (จริง) หรือไม่ (เท็จ)
|
ฟังก์ชัน |
|
---|---|
DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
|
void
|
GetSecureRandomData(uint8_t *buf, uint16_t len)
|
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อสร้างข้อมูลแบบสุ่ม
|
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
|
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นใช้งานแหล่งข้อมูลแบบสุ่ม
|
MemoryAlloc(size_t size)
|
void *
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อจัดสรรบล็อกหน่วยความจำ "ขนาด" ไบต์
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อจัดสรรบล็อกหน่วยความจำ "ขนาด" ไบต์
|
MemoryFree(void *p)
|
void
เลเยอร์ Weave จะเรียกใช้ฟังก์ชันนี้เพื่อปล่อยบล็อกหน่วยความจำที่ฟังก์ชัน MemeoryAlloc() จัดสรรไว้
|
MemoryInit(void *buf, size_t bufSize)
|
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นหน่วยความจำและทรัพยากรที่จำเป็นสำหรับฟังก์ชันการทำงานที่เหมาะสมของตัวจัดสรรหน่วยความจำของ Weave Security Manager
|
MemoryShutdown(void)
|
void
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อปล่อยทรัพยากรทั้งหมดที่จัดสรรโดยฟังก์ชัน MemoryInit()
|
OnTimeConsumingCryptoDone(void)
|
void
มีการเรียกฟังก์ชันนี้เพื่อแจ้งแอปพลิเคชันเมื่อการดำเนินการเข้ารหัสที่ใช้เวลานานเพิ่งเสร็จสิ้น
|
OnTimeConsumingCryptoStart(void)
|
void
มีการเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการดำเนินการเข้ารหัสที่ใช้เวลานานกำลังจะเริ่มขึ้น
|
การแจงนับ
BlockSetParamFields
BlockSetParamFields
บล็อกตำแหน่งช่องพารามิเตอร์ที่ตั้งค่าในรูปแบบที่เข้ารหัส 8 บิต
พร็อพเพอร์ตี้ | |
---|---|
kBlockSetBufferIndexMask
|
มาสก์ช่องดัชนีบัฟเฟอร์ |
kBlockSetBufferIndexShift
|
การเปลี่ยนแปลงช่องดัชนีบัฟเฟอร์ |
kBlockSetCountMask
|
จำนวนมาสก์ของช่อง |
kBlockSetCountShift
|
การเปลี่ยนช่องจำนวน |
kBlockSetIsLongTermMask
|
พิมพ์ฟิลด์มาสก์ |
kBlockSetIsLongTermShift
|
การเปลี่ยนช่องประเภท |
kBlockSetSizeMask
|
มาสก์ฟิลด์ขนาด |
kBlockSetSizeShift
|
การเปลี่ยนช่องขนาด |
kBlockSetSizeValueShift
|
การเปลี่ยนช่องถอดรหัสขนาด (คูณด้วย 128) |
BlockSetParams
BlockSetParams
กำหนดพารามิเตอร์ชุดบล็อก
พร็อพเพอร์ตี้ | |
---|---|
kBlockSet1BufferIndex
|
ดัชนีบัฟเฟอร์ชุดที่ 1 เท่ากับ 0 |
kBlockSet1Count
|
จำนวนบล็อกแบบที่ 1 คือ 1 |
kBlockSet1Size
|
ขนาดชุดที่ 1 คือ 128 ไบต์ |
kBlockSet1isLongTerm
|
ประเภทชุดที่ 1 เป็นแบบระยะยาว |
kBlockSet2BufferIndex
|
ดัชนีบัฟเฟอร์ชุดที่ 2 เท่ากับ 0 |
kBlockSet2Count
|
จำนวนบล็อกแบบที่ 2 คือ 1 |
kBlockSet2Size
|
ขนาดชุดที่ 2 คือ 512 ไบต์ |
kBlockSet2isLongTerm
|
ประเภทชุดที่ 2 เป็นแบบระยะยาว |
kBlockSet3BufferIndex
|
ดัชนีบัฟเฟอร์ชุดที่ 3 เท่ากับ 0 |
kBlockSet3Count
|
ชุดที่ 3 จำนวนบล็อกคือ 1 |
kBlockSet3Size
|
ขนาดชุดที่ 3 คือ 512 ไบต์ |
kBlockSet3isLongTerm
|
ประเภทชุดที่ 3 เป็นการดำเนินการระยะสั้น |
kBlockSet4BufferIndex
|
ดัชนีบัฟเฟอร์ชุดที่ 4 คือ 1 |
kBlockSet4Count
|
ชุดที่ 4 จำนวนบล็อกเท่ากับ 2 |
kBlockSet4Size
|
ขนาดชุด #4 คือ 640 ไบต์ |
kBlockSet4isLongTerm
|
ประเภทชุดที่ 4 เป็นการดำเนินการระยะสั้น |
kMaxBlockSize
|
ขนาดบล็อกสูงสุดที่ Simple Allocator รองรับ |
kMinBufferSize
|
ขนาดบัฟเฟอร์เครือข่ายขั้นต่ำที่กำหนดเพื่อรองรับกรณีการใช้งาน Allo แบบง่าย พารามิเตอร์นี้มาจากขนาดของบล็อกหน่วยความจำ 2 บล็อก (640 + 600) ที่จัดสรรในบัฟเฟอร์เครือข่ายที่ 1 |
kNetworkBuffer0BlockAllocationMask
|
มาสก์นี้จะระบุบล็อกหน่วยความจำทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่าย #0 |
kNetworkBuffer1BlockAllocationMask
|
มาสก์นี้จะระบุบล็อกหน่วยความจำทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่ายที่ 1 |
kNumberOfBlockSets
|
จำนวนชุดบล็อกที่ Simple Allocator ใช้ |
kNumberOfNetworkBuffers
|
จำนวนบัฟเฟอร์เครือข่ายที่ Simple Allocator ใช้ |
kTotalMemorySize
|
หน่วยความจำทั้งหมดที่ Simple Allocator ใช้ |
Typedef
BlockMark_t
uint8_t BlockMark_t
ประเภทที่ใช้เพื่อทำเครื่องหมายบล็อกที่ได้รับการจัดสรร/ไม่ได้จัดสรรอยู่ในปัจจุบัน
uint8_t - รองรับบล็อกหน่วยความจำสูงสุด 8 บล็อก ทั้งหมด uint16_t - รองรับบล็อกหน่วยความจำสูงสุด 16 บล็อก ทั้งหมด uint32_t - รองรับบล็อกหน่วยความจำทั้งหมดสูงสุด 32 บล็อก
BlockSetParams_t
uint8_t BlockSetParams_t
ประเภทนี้ใช้ในการเข้ารหัสข้อมูลชุดบล็อก
ชุดบล็อกคือกลุ่มชิ้นส่วนหน่วยความจำที่มีพร็อพเพอร์ตี้เดียวกัน (ขนาด ประเภท และอยู่ในบัฟเฟอร์เดียวกัน) แผนภาพด้านล่างจะแสดงวิธีการเข้ารหัสข้อมูลชุดบล็อกในรูปแบบ 8 บิต
เป็นระยะยาว | ดัชนีบล็อก | จำนวนบล็อก | ขนาดบล็อก |
[7] | [6:5] | [4:3] | [2:0] |
[2:0] | กำลังถอดรหัส |
000 | 0 ไบต์ |
001 | 128 ไบต์ |
010 | 256 ไบต์ |
... | - |
111 | 896 ไบต์ |
[4:3] | กำลังถอดรหัส |
00 | 4 บล็อก |
01 | 1 บล็อก |
10 | 2 บล็อก |
11 | 3 บล็อก |
[6:5] | กำลังถอดรหัส |
00 | บัฟเฟอร์เครือข่าย #0 |
... | - |
11 | บัฟเฟอร์เครือข่ายที่ 3 |
[7] | กำลังถอดรหัส |
0 | บล็อกความจำระยะสั้น |
1 | บล็อกหน่วยความจำระยะยาว |
ตัวแปร
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), }
พารามิเตอร์ชุดบล็อกที่เข้ารหัส
sBufferAllocationMask
const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }
ชุดมาสก์บัฟเฟอร์บล็อก
ระบุว่ามีการบล็อกทั้งหมดในบัฟเฟอร์และไม่ได้จัดสรร จากนั้นจะบรรเทาบัฟเฟอร์ได้
sMemBlocksAllocated
BlockMark_t sMemBlocksAllocated = 0
ระบุว่าบล็อกใดมีการจัดสรร/ไม่ได้จัดสรร
กำหนดค่าเริ่มต้นเป็น 0 หมายความว่าหน่วยความจำบล็อกทั้งหมดและไม่ได้จัดสรรไว้
sMemBufs
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
ตัวชี้ไปยังบัฟเฟอร์หน่วยความจำเริ่มต้นที่ค่าว่าง
เมื่อใช้บัฟเฟอร์เครือข่าย sMemBufs[] จะชี้ไปที่ออบเจ็กต์ PacketBuffer เมื่อใช้บัฟเฟอร์เฉพาะ sMemBufs[0] จะชี้ไปที่บัฟเฟอร์ดังกล่าวและละเว้นตัวชี้ sMemBuf[] อื่นๆ
sNetworkBuffersUsed
bool sNetworkBuffersUsed = true
บูลีนที่ระบุว่า Simple Allocator ใช้บัฟเฟอร์เครือข่าย (จริง) หรือไม่ (เท็จ)
เมื่อเป็นเท็จ ระบบจะใช้บัฟเฟอร์เฉพาะที่มาพร้อมกับฟังก์ชัน MemoryInit()
ฟังก์ชัน
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 )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อสร้างข้อมูลแบบสุ่ม
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
ผลลัพธ์ |
|
InitSecureRandomDataSource
WEAVE_ERROR InitSecureRandomDataSource( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นใช้งานแหล่งข้อมูลแบบสุ่ม
ฟังก์ชันนี้เป็นฟังก์ชันเฉพาะแพลตฟอร์ม และอาจว่างเปล่าเมื่อไม่จำเป็นต้องมีการเริ่มต้นแหล่งข้อมูลแบบสุ่ม
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
ผลลัพธ์ |
|
MemoryAlloc
void * MemoryAlloc( size_t size )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อจัดสรรบล็อกหน่วยความจำ "ขนาด" ไบต์
ฟังก์ชันนี้เทียบเท่ากับ MemoryAlloc(size, false)
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
ผลลัพธ์ |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อจัดสรรบล็อกหน่วยความจำ "ขนาด" ไบต์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
ผลลัพธ์ |
|
MemoryFree
void MemoryFree( void *p )
เลเยอร์ Weave จะเรียกใช้ฟังก์ชันนี้เพื่อปล่อยบล็อกหน่วยความจำที่ฟังก์ชัน MemeoryAlloc() จัดสรรไว้
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
MemoryInit
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นหน่วยความจำและทรัพยากรที่จำเป็นสำหรับฟังก์ชันการทำงานที่เหมาะสมของตัวจัดสรรหน่วยความจำของ Weave Security Manager
ฟังก์ชันนี้เป็นฟังก์ชันเฉพาะของแต่ละแพลตฟอร์มและอาจว่างเปล่าในบางกรณี ตัวอย่างเช่น ฟังก์ชันนี้จะไม่ดำเนินการใดๆ เมื่อมีการใช้ฟังก์ชัน C Standard Library Malloc() และ Free() ในการจัดสรรหน่วยความจำ
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
ผลลัพธ์ |
|
MemoryShutdown
void MemoryShutdown( void )
เลเยอร์ Weave เรียกใช้ฟังก์ชันนี้เพื่อปล่อยทรัพยากรทั้งหมดที่ฟังก์ชัน MemoryInit() จัดสรรไว้
ฟังก์ชันนี้อาจเป็นการเรียกใช้เปล่าหากไม่จำเป็นต้องปล่อยทรัพยากร ตัวอย่างเช่น เมื่อมีการใช้ฟังก์ชัน C Standard Library Malloc() และ Free() ในการจัดสรรหน่วยความจำ
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
มีการเรียกฟังก์ชันนี้เพื่อแจ้งแอปพลิเคชันเมื่อการดำเนินการเข้ารหัสที่ใช้เวลานานเพิ่งเสร็จสิ้น
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
มีการเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการดำเนินการเข้ารหัสที่ใช้เวลานานกำลังจะเริ่มขึ้น