nl::Weave::Platform::Security

Bu ad alanı, Weave Security Monitor bellek yöneticisi için Weave içindeki tüm arayüzleri içerir.

Özet

Bu ad alanındaki işlevler, belirli ortamın ihtiyaçlarına/kısıtlamalarına göre Weave'i kullanan platformlar tarafından uygulanır.

Sıralamalar

BlockSetParamFields{
  kBlockSetSizeMask = 0x07,
  kBlockSetSizeShift = 0,
  kBlockSetSizeValueShift = 7,
  kBlockSetCountMask = 0x18,
  kBlockSetCountShift = 3,
  kBlockSetBufferIndexMask = 0x60,
  kBlockSetBufferIndexShift = 5,
  kBlockSetIsLongTermMask = 0x80,
  kBlockSetIsLongTermShift = 7
}
enum
Ayarlanan parametre alanlarının konumunu 8 bit olarak kodlanmış biçimde engelle.
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
Blok grubu parametrelerini tanımlar.

Türdefler

BlockMark_t typedef
uint8_t
Şu anda ayrılmış/ayrılmış bloku işaretlemek için kullanılan tür.
BlockSetParams_t typedef
uint8_t
Bu tür, blok grubu bilgilerini kodlamak için kullanılır.

Değişkenler

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]
Kodlanmış blok grubu parametreleri.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Tampon blok maskeleri grubu.
sMemBlocksAllocated = 0
Hangi blokun ayrıldığını/ayrıldığını gösterir.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
NULL olarak başlatılmış bellek arabelleklerine yönelik işaretçiler.
sNetworkBuffersUsed = true
bool
Ağ arabelleklerinin Basit Ayırıcı tarafından kullanılıp kullanılmadığını (doğru) veya olmadığını (yanlış) gösteren boole değeri.

İşlevler

DecodeBlockSetParams(BlockSetParams_t blockSetParams, uint16_t & blockSize, uint8_t & blockCount, uint8_t & blockBufferIndex, bool & blockIsLongTerm)
void
GetSecureRandomData(uint8_t *buf, uint16_t len)
Bu işlev, rastgele veriler oluşturmak için Weave katmanı tarafından çağrılır.
InitSecureRandomDataSource(nl::Weave::Crypto::EntropyFunct entropyFunct, uint16_t entropyLen, const uint8_t *personalizationData, uint16_t perDataLen)
Bu işlev, rastgele veri kaynağını başlatmak için Weave katmanı tarafından çağrılır.
MemoryAlloc(size_t size)
void *
Bu işlev, "boyut" baytlık bir bellek bloğunu ayırmak için Weave katmanı tarafından çağrılır.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Bu işlev, "boyut" baytlık bir bellek bloğunu ayırmak için Weave katmanı tarafından çağrılır.
MemoryFree(void *p)
void
Bu işlev, MemeoryAlloc() işlevi tarafından ayrılmış bellek bloğunu serbest bırakmak için Weave katmanı tarafından çağrılır.
MemoryInit(void *buf, size_t bufSize)
Bu işlev, Weave Güvenlik Yöneticisi bellek ayırıcısının düzgün çalışması için gereken belleği ve kaynakları başlatmak amacıyla Weave katmanı tarafından çağrılır.
MemoryShutdown(void)
void
Bu işlev, MemoryInit() işlevi tarafından ayrılan tüm kaynakları serbest bırakmak için Weave katmanı tarafından çağrılır.
OnTimeConsumingCryptoDone(void)
void
Bu işlev, zaman alan bir şifreleme işlemi yeni bittiğinde uygulamayı bildirmek için çağrılır.
OnTimeConsumingCryptoStart(void)
void
Bu işlev, zaman alan bir şifreleme işlemi başlamak üzereyken uygulamayı bilgilendirmek için çağrılır.

Sınıflar

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

Sıralamalar

BlockSetParamFields

 BlockSetParamFields

Ayarlanan parametre alanlarının konumunu 8 bit olarak kodlanmış biçimde engelle.

Özellikler
kBlockSetBufferIndexMask

Arabellek dizini alan maskesi.

kBlockSetBufferIndexShift

Arabellek dizini alan kayması.

kBlockSetCountMask

Sayı alanı maskesi.

kBlockSetCountShift

Sayım alanı kayması.

kBlockSetIsLongTermMask

Alan maskesini yazın.

kBlockSetIsLongTermShift

Alan kaydırma yazın.

kBlockSetSizeMask

Alan maskesini boyutlandırın.

kBlockSetSizeShift

Boyut alanı kayması.

kBlockSetSizeValueShift

Boyut alanı kod çözme kayması (128 ile çarpın).

BlockSetParams

 BlockSetParams

Blok grubu parametrelerini tanımlar.

Özellikler
kBlockSet1BufferIndex

1. kümenin arabellek dizini 0'dır.

kBlockSet1Count

1 numaralı küme sayısı 1'dir.

kBlockSet1Size

1. kümenin boyutu 128 bayttır.

kBlockSet1isLongTerm

1 numaralı küme türü uzun vadeli.

kBlockSet2BufferIndex

2. kümenin arabellek dizini 0'dır.

kBlockSet2Count

2. kümedeki blok sayısı 1'dir.

kBlockSet2Size

2. kümenin boyutu 512 bayttır.

kBlockSet2isLongTerm

2. küme türü uzun vadeli.

kBlockSet3BufferIndex

3. kümenin arabellek dizini 0'dır.

kBlockSet3Count

3. kümedeki blok sayısı 1'dir.

kBlockSet3Size

3. kümenin boyutu 512 bayttır.

kBlockSet3isLongTerm

3. küme türü kısa vadeli.

kBlockSet4BufferIndex

4. kümenin arabellek dizini 1'dir.

kBlockSet4Count

4. kümedeki blok sayısı 2'dir.

kBlockSet4Size

4. kümenin boyutu 640 bayttır.

kBlockSet4isLongTerm

4. küme türü kısa vadeli.

kMaxBlockSize

Basit Ayırıcı tarafından desteklenen maksimum blok boyutu.

kMinBufferSize

Basit Ayırıcı kullanım alanlarını desteklemek için gereken minimum ağ arabelleği boyutu.

Bu parametre, 1. ağ arabelleğinde ayrılmış iki bellek bloğunun (640 + 600) boyutlarından türetilir.

kNetworkBuffer0BlockAllocationMask

Bu maske, 0 numaralı ağ arabelleğinden ayrılan tüm bellek bloklarını tanımlar.

kNetworkBuffer1BlockAllocationMask

Bu maske, 1 numaralı ağ arabelleğinden ayrılan tüm bellek bloklarını tanımlar.

kNumberOfBlockSets

Basit Ayırıcı tarafından kullanılan blok kümesi sayısı.

kNumberOfNetworkBuffers

Basit Ayırıcı tarafından kullanılan ağ arabelleklerinin sayısı.

kTotalMemorySize

Basit Ayırıcı tarafından kullanılan toplam bellek.

Türdefler

BlockMark_t

uint8_t BlockMark_t

Şu anda ayrılmış/ayrılmış bloku işaretlemek için kullanılan tür.

uint8_t - toplam 8 bellek bloğunu destekler uint16_t - toplam 16 bellek bloğunu destekler toplam uint32_t - toplamda en fazla 32 bellek bloğunu destekler

BlockSetParams_t

uint8_t BlockSetParams_t

Bu tür, blok grubu bilgilerini kodlamak için kullanılır.

Blok grubu, aynı özelliklere (boyut, tür ve aynı arabelleğe ait) sahip bellek parçaları grubudur. Aşağıdaki şemada, blok kümesi bilgilerinin 8 bit biçiminde nasıl kodlandığı gösterilmektedir:

Uzun Vadeli Blok Dizini Blok Sayısı Blok Boyutu
[7] [6:5] [4:3] [2:0]
[2:0] - Bir kümedeki bellek bloğunun boyutu. Boyut değeri 128 bayt ayrıntı düzeyinde kodlanmış.
[2:0] Kod çözülüyor
000 0 bayt
001 128 bayt
010 256 bayt
... -
111 896 bayt
[4:3] - Bir kümedeki blok sayısı.
[4:3] Kod çözülüyor
00 4 blok
01 1 blok
10 2 blok
11 3 blok
[6:5] - Bellek bloklarının bulunduğu ağ arabellek dizini. Özel arabellek kullanıldığında tüm bellek bloklarının özel arabelleğe ayrıldığını ve bu dizin parametresinin yoksayıldığını unutmayın.
[6:5] Kod çözülüyor
00 Ağ arabelleği #0
... -
11 3. Ağ arabelleği
[7] - Engellemelerin uzun/kısa süreli depolama için olup olmadığını belirtir.
[7] Kod çözülüyor
0 Kısa süreli bellek blokları
1 Uzun süreli bellek blokları

Değişkenler

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),







}

Kodlanmış blok grubu parametreleri.

sBufferAllocationMask

const BlockMark_t sBufferAllocationMask[kNumberOfNetworkBuffers] = {
                                                   kNetworkBuffer0BlockAllocationMask,
                                                   kNetworkBuffer1BlockAllocationMask,




                                                                                       }

Tampon blok maskeleri grubu.

Tampondaki tüm blokların ayrılıp ayrılmadığını ve ardından tamponun serbest bırakılıp bırakılamayacağını tanımlar.

sMemBlocksAllocated

BlockMark_t sMemBlocksAllocated = 0

Hangi blokun ayrıldığını/ayrıldığını gösterir.

0 olarak başlatılır: Tüm bellek bloklarının ve ayrılmamış olduğu anlamına gelir.

sMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

NULL olarak başlatılmış bellek arabelleklerine yönelik işaretçiler.

Ağ arabellekleri kullanıldığında sMemBufs[], PacketBuffer nesnelerini işaret eder. Özel arabellek kullanıldığında sMemBufs[0], bu tamponu işaret eder ve diğer sMemBufs[] işaretçileri yok sayılır.

sNetworkBuffersUsed

bool sNetworkBuffersUsed = true

Ağ arabelleklerinin Basit Ayırıcı tarafından kullanılıp kullanılmadığını (doğru) veya olmadığını (yanlış) gösteren boole değeri.

Yanlış olduğunda - MemoryInit() işleviyle sağlanan özel arabellek kullanılır.

İşlevler

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
)

Bu işlev, rastgele veriler oluşturmak için Weave katmanı tarafından çağrılır.

Ayrıntılar
Parametreler
[in] buf
İstenen rastgele verilerin depolanması gereken bir bellek arabelleğine işaret eder.
[in] len
İstenen rastgele veri boyutunu bayt cinsinden belirtir.
Döndürülen Değerler
WEAVE_ERROR_DRBG_ENTROPY_SOURCE_FAILED
Entropi kaynağı, rastgele veri oluşturucu tarafından istenen entropiyi üretemezse.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Rastgele veri kaynağı rastgele veri oluşturamazsa.
WEAVE_ERROR_INCORRECT_STATE
Rastgele veri kaynağının yanlış durumda olup olmadığı.
WEAVE_NO_ERROR
Başarılı olun.

InitSecureRandomDataSource

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

Bu işlev, rastgele veri kaynağını başlatmak için Weave katmanı tarafından çağrılır.

Bu işlev platforma özgüdür ve rastgele veri kaynağının başlatılması gerekmediğinde boş olabilir.

Ayrıntılar
Parametreler
[in] entropyFunct
Rastgele veri oluşturucuya entropi oluşturan bir işlevin işaretçisi. Algoritma entropi girişini gerektirmediğinde, rastgele veri oluşturucunun OpenSSL sürümü kullanıldığında bu durum NULL olabilir.
[in] entropyLen
Entropi işlevi kullanıldığında, işlevi tarafından oluşturulması gereken bayt cinsinden entropi boyutunu belirtir.
[in] personalizationData
Kişiselleştirme verisi girişini depolayan bir bellek arabelleğinin işaretçisi. Bu veri girişi cihaza özel olmalıdır ve rastgele verilerin istatistiksel özelliklerinin iyileştirilmesine yardımcı olur.
[in] perDataLen
Kişiselleştirme verileri boyutunu bayt cinsinden belirtir.
Döndürülen Değerler
WEAVE_ERROR_INVALID_ARGUMENT
Bu işleve geçersiz bir bağımsız değişken geçirilip geçirilmediği.
WEAVE_NO_ERROR
Başarılı olun.

MemoryAlloc

void * MemoryAlloc(
  size_t size
)

Bu işlev, "boyut" baytlık bir bellek bloğunu ayırmak için Weave katmanı tarafından çağrılır.

Bu işlev, MemoryAlloc(boyut, false) ile eşdeğerdir.

Ayrıntılar
Parametreler
[in] size
İstenen bellek boyutunu bayt cinsinden belirtir.
Döndürülen Değerler
Pointer
bir bellek bloğuna ekleyebilirsiniz.
NULL-pointer
başarısız olur.

MemoryAlloc

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Bu işlev, "boyut" baytlık bir bellek bloğunu ayırmak için Weave katmanı tarafından çağrılır.

Ayrıntılar
Parametreler
[in] size
İstenen bellek boyutunu bayt cinsinden belirtir.
[in] isLongTermAlloc
İstenen bellek bloğunun uzun süreli kullanım için olduğunu (doğru) veya olmadığını (yanlış) gösteren bir Boole değeri. Uzun süreli ayırma, güvenli oturum/el sıkışma tamamlanana kadar ayrılması gereken bellektir. Uzun vadeli ayırmaya örnek olarak CASE/PASE nesneleri için ayrılmış bloklar ve bunların bağlam verileri verilebilir. Kısa süreli ayırma, belirli bir işlemi gerçekleştirmek için gereken bellektir ve bu işlemden hemen sonra serbest bırakılabilir. Bu giriş, bellek kısıtlamalı bir sistemde bellek kullanımını optimize etmeye yardımcı olur. Bu parametrenin kullanımı rastgeledir ve işlev uygulayan kişiye bağlıdır. Örneğin, C Standart Kitaplığı Malloc() kullanıldığında bu parametre yoksayılır.
Döndürülen Değerler
Pointer
bir bellek bloğuna ekleyebilirsiniz.
NULL-pointer
başarısız olur.

MemoryFree

void MemoryFree(
  void *p
)

Bu işlev, MemeoryAlloc() işlevi tarafından ayrılmış bellek bloğunu serbest bırakmak için Weave katmanı tarafından çağrılır.

Ayrıntılar
Parametreler
[in] p
Serbest bırakılması gereken bellek bloğunun işaretçisi.

MemoryInit

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

Bu işlev, Weave Güvenlik Yöneticisi bellek ayırıcısının düzgün çalışması için gereken belleği ve kaynakları başlatmak amacıyla Weave katmanı tarafından çağrılır.

Bu işlev platforma özgüdür ve bazı durumlarda boş olabilir. Örneğin, bellek ayırma için C Standart Kitaplığı Malloc() ve free() işlevleri kullanıldığında bu işlev hiçbir şey yapmaz.

Ayrıntılar
Parametreler
[in] buf
Weave Güvenlik Yöneticisi bellek tahsisi için bellek havuzu olarak kullanılması gereken özel bir bellek arabelleğine işaret eder. Bu giriş isteğe bağlıdır (varsayılan olarak NULL'dir) ve özel bir bellek arabelleği kullanılmıyorsa kullanılmamalıdır.
[in] bufSize
Ayrılmış bellek arabelleğinin boyutu. Bu giriş isteğe bağlıdır (varsayılan olarak 0'dır) ve özel bellek arabelleği kullanılmıyorsa kullanılmamalıdır. Ayrılmış bellek arabelleği kullanıldığında işlev kontrol eder ve arabellek boyutu Weave Güvenlik Yöneticisi kullanım alanlarını destekleyecek kadar büyük değilse hata oluşturur.
Döndürülen Değerler
WEAVE_ERROR_BUFFER_TOO_SMALL
Özel giriş arabelleği boyutu, Weave Güvenlik Yöneticisi kullanım alanlarını desteklemek için yeterli değilse.
WEAVE_NO_ERROR
Başarılı olun.
other
Platforma özgü bellek başlatma işlevi tarafından oluşturulan bir hata.

MemoryShutdown

void MemoryShutdown(
  void
)

Bu işlev, MemoryInit() işlevi tarafından ayrılan tüm kaynakları serbest bırakmak için Weave katmanı tarafından çağrılır.

Kaynakları serbest bırakmaya gerek yoksa bu işlev boş bir çağrı olabilir. Örneğin bu durum, bellek ayırma için C Standart Kitaplığı Malloc() ve free() işlevlerinin kullanıldığı durumlardır.

OnTimeConsumingCryptoDone

void OnTimeConsumingCryptoDone(
  void
)

Bu işlev, zaman alan bir şifreleme işlemi yeni bittiğinde uygulamayı bildirmek için çağrılır.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

Bu işlev, zaman alan bir şifreleme işlemi başlamak üzereyken uygulamayı bilgilendirmek için çağrılır.