Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

nl::Weave::보안:보안

이 네임스페이스에는 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
네트워크 할당자가 단순 할당자에서 네트워크 버퍼를 사용하고 있는지 여부를 나타내는 부울 값(true)입니다.

Functions

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 보안 관리자 메모리 할당자의 적절한 기능에 필요한 메모리 및 리소스를 초기화합니다.
MemoryShutdown(void)
void
이 함수는 Weave 레이어에 의해 호출되며 MemoryInit() 함수에서 할당한 모든 리소스를 해제합니다.
OnTimeConsumingCryptoDone(void)
void
이 함수는 시간이 오래 걸리는 암호화 작업이 방금 완료된 경우 애플리케이션에 알리기 위해 호출됩니다.
OnTimeConsumingCryptoStart(void)
void
이 함수는 시간이 오래 걸리는 암호화 작업이 시작되려고 할 때 애플리케이션에 호출하기 위해 호출됩니다.

클래스

nl::Weave::플랫폼::보안::AES128BlockCipher
nl::Weave::플랫폼::보안::AES128BlockCipherDec
nl::Weave::플랫폼::보안::AES128BlockCipherEnc
nl::Weave::플랫폼::보안::AES256BlockCipher
nl::Weave::플랫폼::보안::AES256BlockCipherDec
nl::Weave::플랫폼::보안::AES256BlockCipherEnc
nl::Weave::플랫폼::보안::SHA1
nl::Weave::플랫폼::보안::SHA256

열거

BlockSetParamFields

 BlockSetParamFields

8비트로 인코딩된 형식의 블록 매개변수 세트 위치 차단

속성
kBlockSetBufferIndexMask

버퍼 색인 필드 마스크.

kBlockSetBufferIndexShift

버퍼 색인 필드 이동

kBlockSetCountMask

카운트 필드 마스크.

kBlockSetCountShift

개수 필드 이동

kBlockSetIsLongTermMask

필드 마스크를 입력합니다.

kBlockSetIsLongTermShift

입력란 이동을 입력합니다.

kBlockSetSizeMask

크기 필드 마스크

kBlockSetSizeShift

크기 필드 이동

kBlockSetSizeValueShift

크기 필드 디코딩 변경 (128배)

블록 세트 매개변수

 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를 설정합니다.

kBlockSet4Count

블록 #4 설정 값은 2입니다.

kBlockSet4Size

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

kBlockSet4isLongTerm

세트 4 유형은 단기입니다.

kMaxBlockSize

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

kMinBufferSize

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

이 매개변수는 네트워크 버퍼 #1에 할당된 2개의 메모리 블록 (640 + 600)에서 크기가 파생됩니다.

kNetworkBuffer0BlockAllocationMask

이 마스크는 네트워크 버퍼 #0에서 할당된 모든 메모리 블록을 식별합니다.

kNetworkBuffer1BlockAllocationMask

이 마스크는 네트워크 버퍼 #1에서 할당된 모든 메모리 블록을 식별합니다.

kNumberOfBlockSets

단순 할당자에서 사용하는 블록 집합 수입니다.

kNumberOfNetworkBuffers

단순 할당자에서 사용하는 네트워크 버퍼 수입니다.

kTotalMemorySize

단순 할당자에서 사용한 총 메모리입니다.

Typedef

블록마크_t

uint8_t BlockMark_t

현재 할당/할당되지 않은 블록을 표시하는 데 사용되는 유형입니다.

uint8_t - 총 8개 메모리 블록 지원 uint16_t - 총 16개의 메모리 블록 지원 uint32_t - 총 32개의 메모리 블록 지원

블록 세트 매개변수_

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으로 초기화됨 - 모든 메모리 블록 및 할당되지 않은 상태를 의미합니다.

sememBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

메모리 버퍼에 대한 포인터가 NULL로 초기화되었습니다.

네트워크 버퍼를 사용할 경우 sMemBufs[] 는 PacketBuffer 객체를 가리킵니다. 전용 버퍼를 사용하면 sMemBufs[0] 가 이 버퍼를 가리키고 다른 sMemBufs[] 포인터는 무시됩니다.

sNetworkBuffers중고

bool sNetworkBuffersUsed = true

네트워크 할당자가 단순 할당자에서 네트워크 버퍼를 사용하고 있는지 여부를 나타내는 부울 값(true)입니다.

false - MemoryInit() 함수와 함께 제공된 전용 버퍼가 사용됩니다.

Functions

DecodeBlockSetParams

void DecodeBlockSetParams(
  BlockSetParams_t blockSetParams,
  uint16_t & blockSize,
  uint8_t & blockCount,
  uint8_t & blockBufferIndex,
  bool & blockIsLongTerm
)

GetSecureRdataData

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
성공했습니다.

InitSecureRdataData

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
성공했습니다.

메모리 할당

void * MemoryAlloc(
  size_t size
)

이 함수는 Weave 레이어에 의해 호출되며 "size" 바이트 메모리 블록을 할당합니다.

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

세부정보
매개변수
[in] size
요청된 메모리 크기를 바이트 단위로 지정합니다.
반환 값
Pointer
메모리 블록에 복사합니다
NULL-pointer
메모리 할당에 실패할 수 있습니다

메모리 할당

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

이 함수는 Weave 레이어에 의해 호출되며 "size" 바이트 메모리 블록을 할당합니다.

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

메모리 프리

void MemoryFree(
  void *p
)

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

세부정보
매개변수
[in] p
해제해야 하는 메모리 블록에 대한 포인터입니다.

메모리

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

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

이 함수는 플랫폼에 따라 다르며 경우에 따라 비어 있을 수도 있습니다. 예를 들어 이 함수는 C 표준 라이브러리 malloc() 및 free() 함수가 메모리 할당에 사용되는 경우 아무 작업도 하지 않습니다.

세부정보
매개변수
[in] buf
Weave Security 관리자 메모리 할당의 메모리 풀로 사용해야 하는 전용 메모리 버퍼의 포인터입니다. 이 입력은 선택사항이며 (기본값은 NULL), 전용 메모리 버퍼가 사용되지 않는 경우 사용해서는 안 됩니다.
[in] bufSize
전용 메모리 버퍼의 크기입니다. 이 입력은 선택사항이며 (기본값: 0), 전용 메모리 버퍼가 사용되지 않는 경우에는 사용하지 않아야 합니다. 전용 메모리 버퍼를 사용하는 경우 Weave 보안 관리자 사용 사례를 지원할 만큼 버퍼 크기가 충분히 크지 않으면 함수가 확인 후 오류를 생성합니다.
반환 값
WEAVE_ERROR_BUFFER_TOO_SMALL
전용 입력 버퍼 크기가 Weave 보안 관리자 사용 사례를 지원하는 데 충분하지 않은 경우
WEAVE_NO_ERROR
성공했습니다.
other
플랫폼별 메모리 초기화 함수에서 생성된 오류입니다.

메모리 종료

void MemoryShutdown(
  void
)

이 함수는 Weave 레이어에 의해 호출되며 MemoryInit() 함수에서 할당한 모든 리소스를 해제합니다.

이 함수는 리소스를 해제할 필요가 없는 경우 빈 호출일 수 있습니다. 예를 들어 C 표준 라이브러리 malloc() 및 free() 함수가 메모리 할당에 사용되는 경우입니다.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

이 함수는 시간이 오래 걸리는 암호화 작업이 방금 완료된 경우 애플리케이션에 알리기 위해 호출됩니다.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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