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
단순 할당자가 네트워크 버퍼를 사용하는지 (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 레이어에서 호출되어 '크기' 바이트의 메모리 블록을 할당합니다.
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
이 함수는 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

첫 번째 세트 유형은 장기적입니다.

kBlockSet2BufferIndex

세트 #2 버퍼 색인은 0입니다.

kBlockSet2Count

세트 2 블록 수는 1개입니다.

kBlockSet2Size

세트 2 크기는 512바이트입니다.

kBlockSet2isLongTerm

세트 2 유형은 장기적입니다.

kBlockSet3BufferIndex

세트 #3 버퍼 색인은 0입니다.

kBlockSet3Count

세트 3의 블록 수는 1개입니다.

kBlockSet3Size

세트 3의 크기는 512바이트입니다.

kBlockSet3isLongTerm

세 번째 세트 유형은 단기적입니다.

kBlockSet4BufferIndex

세트 #4 버퍼 색인은 1입니다.

kBlockSet4Count

세트 4 블록 수는 2입니다.

kBlockSet4Size

세트 #4 크기는 640바이트입니다.

kBlockSet4isLongTerm

네 번째 세트 유형은 단기적입니다.

kMaxBlockSize

단순 할당자가 지원하는 최대 블록 크기입니다.

kMinBufferSize

단순 할당자 사용 사례를 지원하는 데 필요한 최소 네트워크 버퍼 사이즈.

이 매개변수는 네트워크 버퍼 1에 할당된 두 메모리 블록 (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] 디코딩
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) 또는 사용하지 않음 (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 레이어에서 호출되어 '크기' 바이트의 메모리 블록을 할당합니다.

이 함수는 MemoryAlloc(size, false)와 동일합니다.

세부정보
매개변수
[in] size
요청된 메모리 크기를 바이트 단위로 지정합니다.
반환 값
Pointer
성공할 경우 메모리 블록에 저장하는 것이 좋습니다.
NULL-pointer
메모리 할당 실패 시

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

이 함수는 Weave 레이어에서 호출되어 '크기' 바이트의 메모리 블록을 할당합니다.

세부정보
매개변수
[in] size
요청된 메모리 크기를 바이트 단위로 지정합니다.
[in] isLongTermAlloc
요청된 메모리 블록이 장기 사용인지 (true)인지 아닌지 (false)를 나타내는 부울입니다. 장기 할당은 보안 세션/핸드셰이크가 완료될 때까지 할당된 상태로 유지되어야 하는 메모리입니다. 장기 할당의 예로는 CASE/PASE 객체에 할당된 블록과 해당 컨텍스트 데이터가 있습니다. 단기 할당은 특정 작업을 실행하는 데 필요한 메모리이며 그 직후 해제될 수 있습니다. 이 입력은 메모리가 제한된 시스템에서 메모리 사용률을 최적화하는 데 도움이 됩니다. 이 매개변수의 사용은 임의적이며 함수 구현자에 따라 다릅니다. 예를 들어, 이 매개변수는 C 표준 라이브러리 malloc()이 사용되면 무시됩니다.
반환 값
Pointer
성공할 경우 메모리 블록에 저장하는 것이 좋습니다.
NULL-pointer
메모리 할당 실패 시

MemoryFree

void MemoryFree(
  void *p
)

이 함수는 Weave 레이어에 의해 호출되어 MemeoryAlloc() 함수에서 할당된 메모리 블록을 해제합니다.

세부정보
매개변수
[in] p
해제되어야 하는 메모리 블록을 가리키는 포인터입니다.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

이 함수는 Weave 레이어에서 호출되어 Weave 보안 관리자 메모리 할당자의 적절한 기능에 필요한 메모리와 리소스를 초기화합니다.

이 함수는 플랫폼에 따라 다르며 특정 경우에는 비어 있을 수 있습니다. 예를 들어, 이 함수는 C 표준 라이브러리 malloc() 및 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 표준 라이브러리 malloc() 및 free() 함수가 메모리 할당에 사용되는 경우가 여기에 해당합니다.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

이 함수는 시간이 많이 걸리는 암호화 작업이 끝났을 때 애플리케이션에 알리기 위해 호출됩니다.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

이 함수는 시간이 오래 걸리는 암호화 작업이 시작되려고 할 때 애플리케이션에 알리기 위해 호출됩니다.