nl::Weave::Platform::Security

この名前空間には、Weave セキュリティ モニター メモリ マネージャー用の 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 Security Manager のメモリ アロケータの適切な機能に必要なメモリとリソースを初期化します。
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

Size フィールドのシフト。

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

シンプル アロケータで使用されるブロックセットの数。

kNumberOfNetworkBuffers

シンプル アロケータが使用するネットワーク バッファの数。

kTotalMemorySize

シンプル アロケータによって使用された合計メモリ。

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 標準ライブラリ malloc() を使用している場合、このパラメータは無視されます。
戻り値
Pointer
割り当てられています。
NULL-pointer
メモリ割り当てが失敗した場合などです。

MemoryFree

void MemoryFree(
  void *p
)

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

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

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

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

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

詳細
パラメータ
[in] buf
専用のメモリバッファへのポインタ。Weave セキュリティ マネージャーのメモリ割り当て用のメモリプールとして使用されます。この入力は省略可能です(デフォルトは NULL)ため、専用のメモリバッファが使用されていない場合は使用しないでください。
[in] bufSize
専用メモリバッファのサイズ。この入力は省略可能です(デフォルトは 0)。専用のメモリバッファが使用されていない場合は使用しないでください。専用のメモリバッファが使用されている場合、バッファサイズが Weave セキュリティ マネージャーのユースケースをサポートするのに十分な大きさでない場合は、この関数がチェックしてエラーを生成します。
戻り値
WEAVE_ERROR_BUFFER_TOO_SMALL
専用の入力バッファサイズが Weave セキュリティ マネージャーのユースケースをサポートするには不十分である場合。
WEAVE_NO_ERROR
成功時。
other
プラットフォーム固有のメモリ初期化関数によって生成されたエラー。

MemoryShutdown

void MemoryShutdown(
  void
)

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

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

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

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

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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