nl:: Weave:: Platform:: Security
เนมสเปซนี้มีอินเทอร์เฟซทั้งหมดภายใน Weave สำหรับตัวจัดการหน่วยความจำ Security ของ 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 *
ตัวชี้ไปยังบัฟเฟอร์หน่วยความจำเริ่มต้นเป็น NULL
|
sNetworkBuffersUsed = true
|
bool
บูลีนที่ระบุว่า (true) หรือไม่ (เท็จ) ใช้บัฟเฟอร์เครือข่ายโดย 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 เพื่อจัดสรรบล็อกหน่วยความจำขนาด "size" ไบต์
|
MemoryAlloc(size_t size, bool isLongTermAlloc)
|
void *
ฟังก์ชันนี้เรียกโดยเลเยอร์ Weave เพื่อจัดสรรบล็อกหน่วยความจำขนาด "size" ไบต์
|
MemoryFree(void *p)
|
void
ฟังก์ชันนี้เรียกโดยเลเยอร์ Weave เพื่อปล่อยบล็อกหน่วยความจำที่จัดสรรโดยฟังก์ชัน MemeoryAlloc()
|
MemoryInit(void *buf, size_t bufSize)
|
เลเยอร์ Weave จะเรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นหน่วยความจำและทรัพยากรที่จำเป็นสำหรับฟังก์ชันการทำงานที่เหมาะสมของเครื่องมือจัดสรรหน่วยความจำของ Weave Security
|
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
|
ขนาดบัฟเฟอร์เครือข่ายขั้นต่ำที่จำเป็นต่อการรองรับ Use Case ของการจัดสรรแบบง่าย พารามิเตอร์นี้ได้มาจากขนาดของบล็อกหน่วยความจำ 2 บล็อก (640 + 600) ที่จัดสรรในบัฟเฟอร์เครือข่าย #1 |
kNetworkBuffer0BlockAllocationMask
|
มาสก์นี้จะระบุบล็อกหน่วยความจำทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่าย #0 |
kNetworkBuffer1BlockAllocationMask
|
มาสก์นี้จะระบุบล็อกหน่วยความจำทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่าย #1 |
kNumberOfBlockSets
|
จำนวนชุดบล็อกที่ Simple Allocator ใช้ |
kNumberOfNetworkBuffers
|
จำนวนบัฟเฟอร์เครือข่ายที่ Simple Allocator ใช้ |
kTotalMemorySize
|
หน่วยความจำทั้งหมดที่ผู้จัดสรรแบบง่ายใช้ |
Typedef
BlockMark_t
uint8_t BlockMark_t
ประเภทที่ใช้เพื่อทำเครื่องหมายบล็อกที่มีการจัดสรร/ไม่ได้จัดสรรในปัจจุบัน
uint8_t - รองรับ uint16_t บล็อกหน่วยความจำทั้งหมดสูงสุด 8 บล็อก - รองรับ uint32_t บล็อกหน่วยความจำทั้งหมด 16 บล็อก - รองรับบล็อกหน่วยความจำรวมสูงสุด 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 }
ตัวชี้ไปยังบัฟเฟอร์หน่วยความจำเริ่มต้นเป็น NULL
เมื่อใช้บัฟเฟอร์ของเครือข่าย sMemBufs[] จะชี้ไปที่ออบเจ็กต์ PacketBuffer เมื่อใช้บัฟเฟอร์เฉพาะ sMemBufs[0] ชี้ไปยังบัฟเฟอร์นั้นและตัวชี้ sMemBufs[] อื่นๆ
sNetworkBuffersUsed
bool sNetworkBuffersUsed = true
บูลีนที่ระบุว่า (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 เพื่อจัดสรรบล็อกหน่วยความจำขนาด "size" ไบต์
ฟังก์ชันนี้เทียบเท่ากับ MemoryAlloc(size, false)
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
MemoryAlloc
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
ฟังก์ชันนี้เรียกโดยเลเยอร์ Weave เพื่อจัดสรรบล็อกหน่วยความจำขนาด "size" ไบต์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
MemoryFree
void MemoryFree( void *p )
ฟังก์ชันนี้เรียกโดยเลเยอร์ Weave เพื่อปล่อยบล็อกหน่วยความจำที่จัดสรรโดยฟังก์ชัน MemeoryAlloc()
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
MemoryInit
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
เลเยอร์ Weave จะเรียกใช้ฟังก์ชันนี้เพื่อเริ่มต้นหน่วยความจำและทรัพยากรที่จำเป็นสำหรับฟังก์ชันการทำงานที่เหมาะสมของเครื่องมือจัดสรรหน่วยความจำของ Weave Security
ฟังก์ชันนี้เป็นเฉพาะบางแพลตฟอร์ม และอาจว่างเปล่าในบางกรณี ตัวอย่างเช่น ฟังก์ชันนี้จะไม่ทำอะไรเลยเมื่อมีการใช้ฟังก์ชัน C Standard Library Malloc() และfree() สำหรับการจัดสรรหน่วยความจำ
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
MemoryShutdown
void MemoryShutdown( void )
เลเยอร์ Weave จะเรียกฟังก์ชันนี้เพื่อปล่อยทรัพยากรทั้งหมดที่ฟังก์ชัน MemoryInit() จัดสรรไว้
ฟังก์ชันนี้อาจเป็นการเรียกใช้ที่ว่างเปล่าหากไม่จำเป็นต้องปล่อยทรัพยากร ตัวอย่างเช่น กรณีนี้เมื่อมีการใช้ฟังก์ชัน C Standard Library Malloc() และfree() สำหรับการจัดสรรหน่วยความจำ
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
ฟังก์ชันนี้จะถูกเรียกใช้เพื่อแจ้งให้แอปพลิเคชันทราบเมื่อการดำเนินการเข้ารหัสที่กินเวลานานเพิ่งเสร็จสิ้นลง
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
ฟังก์ชันนี้มีไว้เพื่อแจ้งแอปพลิเคชันเมื่อการดำเนินการเข้ารหัสที่กินเวลานานกำลังจะเริ่มต้น