nl:: Weave:: แพลตฟอร์ม:: ความปลอดภัย
เนมสเปซนี้รวมอินเทอร์เฟซทั้งหมดภายใน Weave สําหรับตัวจัดการหน่วยความจํา การตรวจสอบความปลอดภัย ของ Weave
สรุป
ฟังก์ชันที่ใช้เนมสเปซนี้จะใช้โดยแพลตฟอร์มที่ใช้ Weave ตามความต้องการ/ข้อจํากัดของสภาพแวดล้อมที่เฉพาะเจาะจง
ประเภทคําจํากัดความ |
|
---|---|
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
Basic บูลีนที่ระบุว่า (จริง) บัฟเฟอร์ (โดยใช้หรือไม่ใช้) เครือข่ายมีการใช้บัฟเฟอร์แบบง่ายหรือไม่
|
ฟังก์ชัน |
|
---|---|
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
|
MemoryShutdown(void)
|
void
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อปล่อยทรัพยากรทั้งหมดที่จัดสรรโดยฟังก์ชัน MemoryInit()
|
OnTimeConsumingCryptoDone(void)
|
void
ระบบจะเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการเข้ารหัสเสร็จสิ้น
|
OnTimeConsumingCryptoStart(void)
|
void
ระบบจะเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการเข้ารหัสที่เข้ารหัสกําลังจะเริ่มขึ้น
|
การแจกแจง
บล็อก SetParamField
BlockSetParamFields
บล็อกตําแหน่งของช่องพารามิเตอร์ที่ตั้งค่าไว้ในรูปแบบที่เข้ารหัส 8 บิต
พร็อพเพอร์ตี้ | |
---|---|
kBlockSetBufferIndexMask
|
มาสก์ช่องดัชนีบัฟเฟอร์ |
kBlockSetBufferIndexShift
|
บัฟเฟอร์ช่องดัชนีบัฟเฟอร์ |
kBlockSetCountMask
|
จํานวนมาสก์ของช่อง |
kBlockSetCountShift
|
การเปลี่ยนแปลงช่องการนับ |
kBlockSetIsLongTermMask
|
พิมพ์มาสก์ของช่อง |
kBlockSetIsLongTermShift
|
พิมพ์การเปลี่ยนแปลงช่อง |
kBlockSetSizeMask
|
ขนาดมาสก์ช่อง |
kBlockSetSizeShift
|
การเปลี่ยนแปลงช่องขนาด |
kBlockSetSizeValueShift
|
การเปลี่ยนแปลงของการถอดรหัสช่องขนาด (คูณด้วย 128) |
บล็อกชุดเซ็ต
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
|
ขนาดบล็อกสูงสุดที่รองรับโดย Allcatcator |
kMinBufferSize
|
ขนาดบัฟเฟอร์เครือข่ายขั้นต่ําที่ต้องใช้เพื่อรองรับ Use Case ของ Allcatcator ที่เรียบง่าย พารามิเตอร์นี้ได้มาจากขนาดของบล็อกหน่วยความจํา 2 บล็อก (640 + 600) ที่จัดสรรไว้ในบัฟเฟอร์เครือข่าย #1 |
kNetworkBuffer0BlockAllocationMask
|
มาสก์นี้จะระบุการบล็อกหน่วยความจําทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่าย #0 |
kNetworkBuffer1BlockAllocationMask
|
มาสก์นี้จะระบุการบล็อกหน่วยความจําทั้งหมดที่จัดสรรจากบัฟเฟอร์เครือข่าย #1 |
kNumberOfBlockSets
|
จํานวนชุดบล็อกที่ Simple Allcator ใช้ |
kNumberOfNetworkBuffers
|
จํานวนบัฟเฟอร์เครือข่ายที่ Simple Allcator ใช้ |
kTotalMemorySize
|
หน่วยความจํารวมที่ใช้โดย Simple Allcator |
ประเภทคําจํากัดความ
บล็อก_ทําเครื่องหมาย
uint8_t BlockMark_t
ประเภทที่ใช้ทําเครื่องหมายว่าระบบจะจัดสรร/ไม่ได้บล็อกการบล็อกใดในขณะนี้
uint8_t - รองรับการบล็อกหน่วยความจําสูงสุด 8 บล็อก uint16_t - รองรับการบล็อกหน่วยความจําสูงสุด 16 บล็อก uint32_t - รองรับการบล็อกหน่วยความจําสูงสุด 32 บล็อก
บล็อก SetParams_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 | การบล็อกหน่วยความจําระยะยาว |
ตัวแปร
บล็อกบล็อกสี่เหลี่ยม
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), }
พารามิเตอร์ชุดบล็อกที่เข้ารหัส
หน้ากากกันชน
const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }
ชุดหน้ากากบล็อกบัฟเฟอร์
ดูว่าบล็อกทั้งหมดในบัฟเฟอร์และยกเลิกการจัดสรรหรือไม่ แล้วจะบัฟเฟอร์ได้
บล็อกสื่อหลายรายการ
BlockMark_t sMemBlocksAllocated = 0
ระบุการบล็อกที่จัดสรร/ไม่ได้จัดสรร
เริ่มต้นที่ 0 หมายความว่าหน่วยความจําทั้งหมดบล็อกและยกเลิกการจัดสรร
SMemBuf
void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }
ตัวชี้ไปยังบัฟเฟอร์หน่วยความจําเริ่มต้นด้วย NULL
เมื่อใช้บัฟเฟอร์เครือข่าย sMemBufs[] ชี้ไปที่ออบเจ็กต์ PacketBuffer เมื่อมีการใช้บัฟเฟอร์เฉพาะ sMemBufs[0] ชี้ไปยังบัฟเฟอร์นั้น และละเว้นตัวชี้ sMemBufs[] อื่นๆ
sNetworkBuffers ใช้แล้ว
bool sNetworkBuffersUsed = true
Basic บูลีนที่ระบุว่า (จริง) บัฟเฟอร์ (โดยใช้หรือไม่ใช้) เครือข่ายมีการใช้บัฟเฟอร์แบบง่ายหรือไม่
เมื่อเป็นเท็จ - มีการใช้บัฟเฟอร์ที่มีให้กับฟังก์ชัน MemoryInit()
ฟังก์ชัน
ถอดรหัสบล็อกSetParams
void DecodeBlockSetParams( BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm )
รับข้อมูลแบบสุ่มที่ปลอดภัย
WEAVE_ERROR GetSecureRandomData( uint8_t *buf, uint16_t len )
ฟังก์ชัน Weave จะเรียกใช้ฟังก์ชันนี้เพื่อสร้างข้อมูลแบบสุ่ม
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
แสดงผลค่า |
|
แหล่งที่มาของข้อมูลแบบสุ่ม
WEAVE_ERROR InitSecureRandomDataSource( nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen )
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อเริ่มแหล่งข้อมูลแบบสุ่ม
ฟังก์ชันนี้ใช้แพลตฟอร์มที่เฉพาะเจาะจงและอาจว่างเปล่าเมื่อไม่จําเป็นต้องเริ่มต้นแหล่งข้อมูลแบบสุ่ม
รายละเอียด | |||||||||
---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||
แสดงผลค่า |
|
หน่วยความจําทั้งหมด
void * MemoryAlloc( size_t size )
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อจัดสรรบล็อกหน่วยความจําของ "size" ไบต์
ฟังก์ชันนี้เทียบเท่ากับ MemoryAlloc(size, false)
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
หน่วยความจําทั้งหมด
void * MemoryAlloc( size_t size, bool isLongTermAlloc )
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อจัดสรรบล็อกหน่วยความจําของ "size" ไบต์
รายละเอียด | |||||
---|---|---|---|---|---|
พารามิเตอร์ |
|
||||
แสดงผลค่า |
|
ไม่ต้องใช้หน่วยความจํา
void MemoryFree( void *p )
ฟังก์ชัน Weave จะเรียกใช้ฟังก์ชันนี้เพื่อปล่อยบล็อกหน่วยความจําที่จัดสรรโดยฟังก์ชัน MemeoryAlloc()
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
หน่วยความจํา
WEAVE_ERROR MemoryInit( void *buf, size_t bufSize )
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อเริ่มต้นหน่วยความจําและทรัพยากรที่จําเป็นสําหรับฟังก์ชันการทํางานที่เหมาะสมของตัวจัดสรรหน่วยความจําของความปลอดภัยของ Weave
ฟังก์ชันนี้เป็นแพลตฟอร์มเฉพาะและอาจว่างเปล่าในบางกรณี เช่น ฟังก์ชันนี้จะไม่ทําอะไรเมื่อมีการใช้ฟังก์ชัน Coc Library Malloc() และ free() สําหรับการจัดสรรหน่วยความจํา
รายละเอียด | |||||||
---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||
แสดงผลค่า |
|
หน่วยความจํา
void MemoryShutdown( void )
ฟังก์ชันนี้จะเรียกโดยเลเยอร์ Weave เพื่อปล่อยทรัพยากรทั้งหมดที่จัดสรรโดยฟังก์ชัน MemoryInit()
ฟังก์ชันนี้อาจว่างเปล่าได้ถ้าไม่จําเป็นต้องปล่อยทรัพยากร เช่น กรณีที่มีการใช้ฟังก์ชันต่างๆ ของไลบรารีมาตรฐาน Standardoc() และ Free() สําหรับการจัดสรรหน่วยความจํา
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
ระบบจะเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการเข้ารหัสเสร็จสิ้น
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
ระบบจะเรียกใช้ฟังก์ชันนี้เพื่อแจ้งเตือนแอปพลิเคชันเมื่อการเข้ารหัสที่เข้ารหัสกําลังจะเริ่มขึ้น