nl:: Weave:: Platform:: Security
इस नेमस्पेस में, Weave सिक्योरिटी मॉनिटर मेमोरी मैनेजर के लिए, Weave के सभी इंटरफ़ेस शामिल हैं.
खास जानकारी
इस नेमस्पेस में फ़ंक्शन उन प्लैटफ़ॉर्म पर लागू किए जाने चाहिए जो खास एनवायरमेंट की ज़रूरतों/सीमाओं के हिसाब से Weave का इस्तेमाल करते हैं.
टाइपडिफ़ |
|
---|---|
BlockMark_t
|
टाइपडिफ़uint8_t
यह मार्क करने के लिए इस्तेमाल किया जाने वाला टाइप कि कौनसा ब्लॉक फ़िलहाल असाइन किया गया है/नहीं असाइन किया गया है. |
BlockSetParams_t
|
टाइपडिफ़uint8_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
एक बूलियन जो बताता है कि सिंपल ऐलोकेटर, नेटवर्क बफ़र का इस्तेमाल करता है या नहीं (सही) है या नहीं.
|
फ़ंक्शन |
|
---|---|
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 सिक्योरिटी मैनेजर मेमोरी ऐलोकेटर के सही तरीके से काम करने के लिए ज़रूरी मेमोरी और संसाधनों को शुरू किया जा सके.
|
MemoryShutdown(void)
|
void
MemoryInit() फ़ंक्शन से असाइन किए गए सभी संसाधनों को रिलीज़ करने के लिए, इस फ़ंक्शन को Weave लेयर कॉल किया जाता है.
|
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 पर ब्लॉक की संख्या एक है. |
kBlockSet1Size
|
सेट #1 का साइज़ 128 बाइट है. |
kBlockSet1isLongTerm
|
सेट #1 टाइप लंबे समय तक इस्तेमाल किया जा सकता है. |
kBlockSet2BufferIndex
|
सेट #2 का बफ़र इंडेक्स 0 है. |
kBlockSet2Count
|
सेट #2 पर ब्लॉक की संख्या एक है. |
kBlockSet2Size
|
सेट #2 का साइज़ 512 बाइट है. |
kBlockSet2isLongTerm
|
सेट #2 टाइप लंबे समय तक इस्तेमाल किया जा सकता है. |
kBlockSet3BufferIndex
|
सेट #3 का बफ़र इंडेक्स 0 है. |
kBlockSet3Count
|
सेट #3 के ब्लॉक की संख्या 1 है. |
kBlockSet3Size
|
सेट #3 का साइज़ 512 बाइट है. |
kBlockSet3isLongTerm
|
सेट #3 का टाइप कम समय के लिए है. |
kBlockSet4BufferIndex
|
सेट #4 का बफ़र इंडेक्स 1 है. |
kBlockSet4Count
|
सेट #4 पर ब्लॉक की संख्या दो है. |
kBlockSet4Size
|
सेट #4 का साइज़ 640 बाइट है. |
kBlockSet4isLongTerm
|
सेट #4 का टाइप कम समय के लिए है. |
kMaxBlockSize
|
सरल आलोकेटर द्वारा समर्थित अधिकतम ब्लॉक आकार. |
kMinBufferSize
|
सामान्य आलोकेटर के इस्तेमाल के उदाहरणों के लिए, कम से कम नेटवर्क बफ़र साइज़ का होना ज़रूरी है. यह पैरामीटर, नेटवर्क बफ़र #1 में तय किए गए दो मेमोरी ब्लॉक (640 + 600) के साइज़ से लिया जाता है. |
kNetworkBuffer0BlockAllocationMask
|
यह मास्क, नेटवर्क बफ़र #0 से असाइन किए गए सभी मेमोरी ब्लॉक की पहचान करता है. |
kNetworkBuffer1BlockAllocationMask
|
यह मास्क, नेटवर्क बफ़र #1 से असाइन किए गए सभी मेमोरी ब्लॉक की पहचान करता है. |
kNumberOfBlockSets
|
सिंपल आलोकेटर के इस्तेमाल किए गए ब्लॉक सेट की संख्या. |
kNumberOfNetworkBuffers
|
सिंपल ऐलोकेटर की ओर से इस्तेमाल किए गए नेटवर्क बफ़र की संख्या. |
kTotalMemorySize
|
सिंपल आलोकेटर की ओर से इस्तेमाल की गई कुल मेमोरी. |
टाइपडिफ़
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 }
मेमोरी बफ़र के लिए पॉइंटर, शून्य में शुरू किए गए.
जब नेटवर्क बफ़र का इस्तेमाल किया जाता है, तो sMemBuffs[] PacketBuffer ऑब्जेक्ट पर ले जाती है. जब खास तरह के बफ़र का इस्तेमाल किया जाता है, तो उस बफ़र पर sMemBufs[0] पॉइंट पॉइंट किए जाते हैं और दूसरे sMemBufs[] पॉइंटर को अनदेखा कर दिया जाता है.
sNetworkBuffersUsed
bool sNetworkBuffersUsed = true
एक बूलियन जो बताता है कि सिंपल ऐलोकेटर, नेटवर्क बफ़र का इस्तेमाल करता है या नहीं (सही) है या नहीं.
गलत होने पर - 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 सिक्योरिटी मैनेजर मेमोरी ऐलोकेटर के सही तरीके से काम करने के लिए ज़रूरी मेमोरी और संसाधनों को शुरू किया जा सके.
यह फ़ंक्शन सिर्फ़ प्लैटफ़ॉर्म के लिए है. कुछ मामलों में शायद यह उपलब्ध न हो. उदाहरण के लिए, जब C Standard Library Maloc() और free() फ़ंक्शन, मेमोरी के बंटवारे के लिए इस्तेमाल किए जाते हैं, तो यह फ़ंक्शन कुछ नहीं करता.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
MemoryShutdown
void MemoryShutdown( void )
MemoryInit() फ़ंक्शन से असाइन किए गए सभी संसाधनों को रिलीज़ करने के लिए, इस फ़ंक्शन को Weave लेयर कॉल किया जाता है.
अगर संसाधनों को रिलीज़ करने की ज़रूरत नहीं है, तो यह फ़ंक्शन एक खाली कॉल हो सकता है. उदाहरण के लिए, ऐसा तब होता है, जब मेमोरी के बंटवारे के लिए, C Standard Library Maloc() और free() फ़ंक्शन इस्तेमाल किए जाते हैं.
OnTimeConsumingCryptoDone
void OnTimeConsumingCryptoDone( void )
जब समय लेने वाला क्रिप्टोग्राफ़िक ऑपरेशन खत्म हो जाए, तब ऐप्लिकेशन को सूचना देने के लिए यह फ़ंक्शन कॉल किया जाता है.
OnTimeConsumingCryptoStart
void OnTimeConsumingCryptoStart( void )
जब समय लेने वाला क्रिप्टोग्राफ़िक ऑपरेशन शुरू होने वाला हो, तब ऐप्लिकेशन को सूचना देने के लिए यह फ़ंक्शन कॉल किया जाता है.