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 레이어에 의해 호출되어 'size' 메모리 블록을 할당합니다. 바이트.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
이 함수는 Weave 레이어에 의해 호출되어 'size' 메모리 블록을 할당합니다. 바이트.
MemoryFree(void *p)
void
이 함수는 Weave 레이어에 의해 호출되어 MemeoryAlloc() 함수에 의해 할당된 메모리 블록을 해제합니다.
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

필드 Shift를 입력합니다.

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

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

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시]
[2:0] - 세트의 메모리 블록 크기입니다. 크기 값은 128바이트 단위로 인코딩됩니다.
[2시] 디코딩
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 레이어에 의해 호출되어 '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)를 나타내는 부울입니다. 장기 할당은 보안 세션/핸드셰이크가 완료될 때까지 할당된 상태로 유지되어야 하는 메모리입니다. 장기 할당의 예로는 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 Security Manager 메모리 할당자의 올바른 작동에 필요한 메모리와 리소스를 초기화합니다.

이 함수는 플랫폼에 따라 다르며 경우에 따라 비어 있을 수 있습니다. 예를 들어, 이 함수는 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
)

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