nl::Weave::Platform::Security

この名前空間には、Weave Security Monitor メモリ マネージャー用の Weave 内のすべてのインターフェースが含まれます。

概要

この名前空間の関数は、特定の環境のニーズや制約に応じて、Weave を使用するプラットフォームによって実装されます。

列挙型

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
ブロックセット パラメータ フィールドの場所は、8 ビットでエンコードされた形式で示されます。
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
ブロックセットのパラメータを定義します。

Typedef

BlockMark_t typedef
uint8_t
現在割り当てられている/未割り当てのブロックをマークするために使用するタイプ。
BlockSetParams_t typedef
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]
エンコードされたブロックはパラメータを設定します。
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
バッファ ブロック マスクのセット。
sMemBlocksAllocated = 0
割り当てられている/未割り当てのブロックを示します。
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
NULL に初期化されたメモリバッファへのポインタ。
sNetworkBuffersUsed = true
bool
ネットワーク バッファが Simple Allocator で使用されている(true)かどうか(false)を示すブール値。

関数

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
この関数は、MemeoryAlloc()関数によって割り当てられたメモリブロックを解放するために、Weave レイヤによって呼び出されます。
MemoryInit(void *buf, size_t bufSize)
この関数は、Weave セキュリティ マネージャーのメモリ アロケータの適切な機能に必要なメモリとリソースを初期化するために、Weave レイヤによって呼び出されます。
MemoryShutdown(void)
void
この関数は Weave レイヤによって呼び出され、MemoryInit() 関数によって割り当てられたすべてのリソースを解放します。
OnTimeConsumingCryptoDone(void)
void
この関数は、時間のかかる暗号オペレーションが終了した直後にアプリケーションに通知するために呼び出されます。
OnTimeConsumingCryptoStart(void)
void
この関数は、時間のかかる暗号オペレーションが開始しようとしたときにアプリケーションに通知するために呼び出されます。

クラス

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

列挙型

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

Simple Allocator のユースケースをサポートするために必要な最小ネットワーク バッファサイズ。

このパラメータは、ネットワーク バッファ #1 に割り当てられた 2 つのメモリブロック(640 + 600)のサイズから導出されます。

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] - セット内のメモリブロックのサイズ。サイズ値は 128 バイトの粒度でエンコードされます。
[2:0] デコード
000 0 バイト
001 128 バイト
010 256 バイト
... -
111 回 896 バイト
[4:3] - セット内のブロック数。
[4:3] デコード
00 4 ブロック
01 1 ブロック
10 2 ブロック
11 3 ブロック
[6:5] - メモリブロックが存在するネットワーク バッファ インデックス。専用バッファが使用されている場合、すべてのメモリブロックが専用バッファから割り当てられ、このインデックス パラメータは無視されます。
[6:5] デコード
00 ネットワーク バッファ #0
... -
11 ネットワーク バッファ #3
[7] - ブロックが長期/短期ストレージ用かどうかを指定します。
[7]。 デコード
撮影していない 短期メモリブロック
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

ネットワーク バッファが Simple Allocator で使用されている(true)かどうか(false)を示すブール値。

false の場合 - 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 レイヤによって呼び出されます。

詳細
パラメータ
[in] buf
リクエストされたランダムデータが格納されるメモリバッファへのポインタ。
[in] len
リクエストするランダムなデータサイズをバイト単位で指定します。
戻り値
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
エントロピー ソースが、ランダム データ生成ツールによって要求されたエントロピーを生成できない場合。
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
ランダム データソースがランダムデータの生成に失敗した場合。
WEAVE_ERROR_INCORRECT_STATE
ランダムなデータソースが不適切な状態にある場合。
WEAVE_NO_ERROR
成功時。

InitSecureRandomDataSource

WEAVE_ERROR InitSecureRandomDataSource(
  nl::Weave::Crypto::EntropyFunct entropyFunct,
  uint16_t entropyLen,
  const uint8_t *personalizationData,
  uint16_t perDataLen
)

この関数は、ランダムなデータソースを初期化するために Weave レイヤによって呼び出されます。

この関数はプラットフォーム固有で、ランダムなデータソースの初期化が不要な場合は空になることがあります。

詳細
パラメータ
[in] entropyFunct
ランダムデータ生成ツールへのエントロピーを生成する関数へのポインタ。アルゴリズムでエントロピー入力が必要ない場合は、この入力を NULL にできます。これは、ランダム データ ジェネレータの OpenSSL バージョンが使用されている場合です。
[in] entropyLen
エントロピー関数の使用時に生成されるエントロピー サイズをバイト単位で指定します。
[in] personalizationData
パーソナライズ データ入力を格納するメモリバッファへのポインタ。このデータ入力はデバイス固有である必要があり、ランダムデータの統計的特性の改善に役立ちます。
[in] perDataLen
パーソナライズ データのサイズをバイト単位で指定します。
戻り値
WEAVE_ERROR_INVALID_ARGUMENT
この関数に無効な引数が渡された場合。
WEAVE_NO_ERROR
成功時。

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

この関数は Weave レイヤによって呼び出され、「size」のメモリブロックを割り当てます。あります。

この関数は MemoryAlloc(size, false) と同等です。

詳細
パラメータ
[in] size
リクエストされたメモリサイズをバイト単位で指定します。
戻り値
Pointer
メモリブロックに書き込まれます。
NULL-pointer
メモリ割り当てが失敗した場合に再試行します

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

この関数は Weave レイヤによって呼び出され、「size」のメモリブロックを割り当てます。あります。

詳細
パラメータ
[in] size
リクエストされたメモリサイズをバイト単位で指定します。
[in] isLongTermAlloc
リクエストされたメモリブロックが長期間使用するかどうか(true)または無効(false)を示すブール値。長期割り当ては、安全なセッションまたは handshake が完了するまで割り当てておく必要のあるメモリです。長期的な割り当ての例としては、CASE/PASE オブジェクトに割り当てられたブロックとそのコンテキスト データが挙げられます。短期割り当ては特定のオペレーションの実行に必要なメモリで、その後すぐに解放できます。この入力は、メモリの制約があるシステムでのメモリ使用率の最適化に役立ちます。このパラメータの使用は任意であり、関数の実装者によって異なります。たとえば、C 標準ライブラリの maloc() が使用されている場合、このパラメータは無視されます。
戻り値
Pointer
メモリブロックに書き込まれます。
NULL-pointer
メモリ割り当てが失敗した場合に再試行します

MemoryFree

void MemoryFree(
  void *p
)

この関数は、MemeoryAlloc()関数によって割り当てられたメモリブロックを解放するために、Weave レイヤによって呼び出されます。

詳細
パラメータ
[in] p
解放するメモリブロックへのポインタ。

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

この関数は、Weave Security Manager のメモリ アロケータの適切な機能に必要なメモリとリソースを初期化するために、Weave レイヤによって呼び出されます。

この関数はプラットフォーム固有で、空の場合もあります。たとえば、C 標準ライブラリの maloc() 関数と free() 関数がメモリ割り当てに使用される場合、この関数は何もしません。

詳細
パラメータ
[in] buf
専用のメモリバッファへのポインタ。Weave Security Manager のメモリ割り当て用のメモリプールとして使用する必要があります。この入力はオプションです(デフォルトは NULL)。専用のメモリバッファを使用していない場合は、この入力を使用しないでください。
[in] bufSize
専用メモリバッファのサイズ。この入力は任意であり(デフォルトは 0)、専用のメモリバッファを使用していない場合は使用しないでください。専用のメモリバッファが使用されている場合、バッファサイズが Weave Security Manager のユースケースをサポートするのに十分なサイズでない場合、この関数はエラーを生成します。
戻り値
WEAVE_ERROR_BUFFER_TOO_SMALL
Weave Security Manager のユースケースをサポートするには、専用の入力バッファサイズでは不十分な場合。
WEAVE_NO_ERROR
成功時。
other
プラットフォーム固有のメモリ初期化関数によって生成されたエラー。

MemoryShutdown

void MemoryShutdown(
  void
)

この関数は Weave レイヤによって呼び出され、MemoryInit() 関数によって割り当てられたすべてのリソースを解放します。

リソースを解放する必要がない場合は、この関数を空の呼び出しにしてかまいません。たとえば、C 標準ライブラリの maloc() 関数と free() 関数がメモリ割り当てに使用される場合がこれに該当します。

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

この関数は、時間のかかる暗号オペレーションが終了した直後にアプリケーションに通知するために呼び出されます。

をご覧ください。

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

この関数は、時間のかかる暗号オペレーションが開始しようとしたときにアプリケーションに通知するために呼び出されます。

をご覧ください。