nl::Weave::Platform::Güvenlik

Bu ad alanı, Weave Güvenlik Monitörü 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ıtlarına göre Weave 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ı konumunu 8 bit olarak kodlanmış biçimde engelleyin.
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
Engelleme grubu parametrelerini tanımlar.

Türler

BlockMark_t Tür
uint8_t
Şu anda hangi blokun ayrıldığını/ayrılmadığını işaretlemek için kullanılan tür.
BlockSetParams_t Tür
uint8_t
Bu tür, blok kümesi 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 kümeleri parametreleri.
sBufferAllocationMask = { kNetworkBuffer0BlockAllocationMask, kNetworkBuffer1BlockAllocationMask, }[kNumberOfNetworkBuffers]
const BlockMark_t
Bumper maske maskeleri grubu.
sMemBlocksAllocated = 0
Hangi blokun ayrıldığını/ayrılmadığını belirtir.
sMemBufs = { NULL }[kNumberOfNetworkBuffers]
void *
Bellek arabelleğine işaretçiler NULL olarak başlatıldı.
sNetworkBuffersUsed = true
bool
Ağ arabelleklerinin Basit Ayırma Aracı tarafından kullanılıp (yanlış) kullanılıp kullanılmadığını (yanlış) gösteren bir boole değeridir.

İş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 veri 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, Weave katmanı tarafından "bayt" değerinde bir bellek bloku ayırmak için çağrılır.
MemoryAlloc(size_t size, bool isLongTermAlloc)
void *
Bu işlev, Weave katmanı tarafından "bayt" değerinde bir bellek bloku ayırmak için çağrılır.
MemoryFree(void *p)
void
Bu işlev, MemeoryAlloc() işlevi tarafından ayrılan bir 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 ayrıştırıcısının düzgün çalışması için gereken bellek ve kaynakları başlatmak üzere Weave katmanı tarafından çağrılır.
MemoryShutdown(void)
void
Bu işlev, Weave katmanı tarafından BellekInit() işlevi tarafından ayrılan tüm kaynakları serbest bırakmak için çağrılır.
OnTimeConsumingCryptoDone(void)
void
Zaman alan bir şifreleme işlemi tamamlandığında uygulamayı bilgilendirmek için bu işlev çağrılır.
OnTimeConsumingCryptoStart(void)
void
Zaman alan bir şifreleme işlemi başlamak üzereyken bu işlev, 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::Güvenlik:SHA256

Sıralamalar

BlockSetParamDomains'i

 BlockSetParamFields

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

Özellikler
kBlockSetBufferIndexMask

Arabellek dizini alan maskesi.

kBlockSetBufferIndexShift

Arabellek dizini alan kayması.

kBlockSetCountMask

Sayı alanı maskesi.

kBlockSetCountShift

Sayı alanı kayması.

kBlockSetIsLongTermMask

Alan maskesi girin.

kBlockSetIsLongTermShift

Alan kaydırma.

kBlockSetSizeMask

Boyut maskesi.

kBlockSetSizeShift

Boyut alanı kayması.

kBlockSetSizeValueShift

Boyut alanı kod çözme değişimi (128 ile çarpılır).

Blok Para Birimi

 BlockSetParams

Engelleme grubu parametrelerini tanımlar.

Özellikler
kBlockSet1BufferIndex

Set #1 arabellek dizini 0'dır.

kBlockSet1Count

1. blok sayısı 1'dir.

kBlockSet1Size

Küme 1, 128 bayttır.

kBlockSet1isLongTerm

1. küme türü uzun vadelidir.

kBlockSet2BufferIndex

Set #2 arabelleğe alma değeri 0'dır.

kBlockSet2Count

2. blok sayısı 1'dir.

kBlockSet2Size

#2 boyutu 512 bayttır.

kBlockSet2isLongTerm

Set #2 türü uzun süreli.

kBlockSet3BufferIndex

Set #3 arabelleğe alma değeri 0'dır.

kBlockSet3Count

Ayarlanan 3. blok sayısı 1'dir.

kBlockSet3Size

Set #3 boyutu 512 bayttır.

kBlockSet3isLongTerm

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

kBlockSet4BufferIndex

#4 arabellek dizini 1'dir.

kBlockSet4Count

4. blok sayısı 2'dir.

kBlockSet4Size

#4 boyutu 640 bayttır.

kBlockSet4isLongTerm

Set #4 türü kısa süreli.

kMaxBlockSize

Basit Ayırma Aracı tarafından desteklenen maksimum blok boyutu.

kMinBufferSize

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

Bu parametre, 1 numaralı ağ arabelleğine ayrılan 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ırma Aracı tarafından kullanılan engelleme gruplarının sayısı.

kNumberOfNetworkBuffers

Basit Ayırma Aracı tarafından kullanılan ağ arabelleklerinin sayısı.

kTotalMemorySize

Simple Allcator tarafından kullanılan toplam bellek.

Türler

Blok İşareti

uint8_t BlockMark_t

Şu anda hangi blokun ayrıldığını/ayrılmadığını işaretlemek için kullanılan tür.

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

Blok SetParams_t

uint8_t BlockSetParams_t

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

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

Uzun Vadeli Dizini Engelle Blok Sayısı Blok Boyutu
[7] [6:5] [4:3] [2:0]
[2:0] - Bir gruptaki bellek blokunun boyutu. Boyut değeri, 128 bayt ayrıntı düzeyiyle kodlanır.
[2:0] Kod çözme
000 0 bayt
001 128 bayt
010 256 bayt
... -
111) 896 bayt
[4:3] - Bir gruptaki blok sayısı.
[4:3] Kod çözme
00 4 blok
01 1 blok
10 2 blok
11 3 blok
[6:5] - Bellek bloklarının bulunduğu ağ arabelleği dizini. Özel arabellek kullanıldığında, tüm bellek blokları özel arabellekten ayrılır ve bu dizin parametresi yoksayılır.
[6:5] Kod çözme
00 Ağ arabelleği #0
... -
11 Ağ arabelleği #3
[7] - Blokların uzun/kısa süreli depolama için olup olmadığını belirtir.
[7] Kod çözme
0 Kısa süreli bellek blokları
1 Uzun süreli bellek blokları

Değişkenler

SBlockSetParams'ler

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 kümeleri parametreleri.

SBufferAllocationMaskesi

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




                                                                                       }

Bumper maske maskeleri grubu.

Tampondaki tüm blokların ayrılıp ayrılmadığını ve daha sonra arabelleğe alınıp alınamayacağını belirler.

sMemBlocks Ayırma

BlockMark_t sMemBlocksAllocated = 0

Hangi blokun ayrıldığını/ayrılmadığını belirtir.

0 olarak başlatılır. Tüm bellek blokları ve tahsisin olmadığı anlamına gelir.

SMemBufs

void * sMemBufs[kNumberOfNetworkBuffers] = { NULL }

Bellek arabelleğine işaretçiler NULL olarak başlatıldı.

Ağ arabellekleri kullanıldığında sMemBufs[], PacketBuffer nesnelerini işaret eder. Özel arabelleğe alma kullanıldığında sMemBufs[0] bu arabelleğe işaret eder ve diğer sMemBufs[] işaretçileri yoksayılır.

sNetworkBuffersKullanıldı

bool sNetworkBuffersUsed = true

Ağ arabelleklerinin Basit Ayırma Aracı tarafından kullanılıp (yanlış) kullanılıp kullanılmadığını (yanlış) gösteren bir boole değeridir.

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

İşlevler

Kod Çözme ParaParaları

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

GetSecureRastgele Veri

WEAVE_ERROR GetSecureRandomData(
  uint8_t *buf,
  uint16_t len
)

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

Ayrıntılar
Parametreler
[in] buf
İstenen rastgele verilerin saklandığı bir bellek arabelleğine işaretçi.
[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 oluşturamıyorsa.
WEAVE_ERROR_RANDOM_DATA_UNAVAILABLE
Rastgele veri kaynağı rastgele veri oluşturamazsa.
WEAVE_ERROR_INCORRECT_STATE
Rastgele veri kaynağı yanlış durumda bulunursa.
WEAVE_NO_ERROR
Başarılı.

InitSecureRastgele Veri Kaynağı

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 özeldir ve rastgele veri kaynağının başlatılması gerekmiyorken boş olabilir.

Ayrıntılar
Parametreler
[in] entropyFunct
Rastgele veri oluşturucu için entropi oluşturan bir işlevin üzerine gelin. Algoritma tarafından entropi girişi gerekli olmadığında, bu giriş NULL olabilir. Bu da rastgele veri oluşturucunun OpenSSL sürümünün kullanılmasıdır.
[in] entropyLen
Kullanıldığında entropi işlevi tarafından oluşturulması gereken bayt cinsinden entropi boyutunu belirtir.
[in] personalizationData
Kişiselleştirme veri girişini depolayan bir bellek arabelleğinin üzerine gelin. Bu veri girişi cihaza özel olmalıdır ve rastgele verilerin istatistiksel özelliklerini iyileştirmeye yardımcı olur.
[in] perDataLen
Kişiselleştirme veri boyutunu bayt cinsinden belirtir.
Döndürülen Değerler
WEAVE_ERROR_INVALID_ARGUMENT
Bu işleve geçersiz bağımsız değişken iletildiyse.
WEAVE_NO_ERROR
Başarılı.

Hafızalı

void * MemoryAlloc(
  size_t size
)

Bu işlev, Weave katmanı tarafından "bayt" değerinde bir bellek bloku ayırmak için çağrılır.

Bu işlev, BellekAlloc(boyut, yanlış) 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 dönüştürür.
NULL-pointer
hatası oluşur.

Hafızalı

void * MemoryAlloc(
  size_t size,
  bool isLongTermAlloc
)

Bu işlev, Weave katmanı tarafından "bayt" değerinde bir bellek bloku ayırmak için çağrılır.

Ayrıntılar
Parametreler
[in] size
İstenen bellek boyutunu bayt cinsinden belirtir.
[in] isLongTermAlloc
İstenen bellek blokunun uzun süreli kullanım için (true) olup olmadığını (false) gösteren bir Boole. Uzun süreli ayırma, güvenli oturum/el sıkışma tamamlanana kadar ayrılması gereken bellektir. Uzun süreli ayırmaya örnek olarak, CASE/PASE nesneleri için ayrılmış bloklar ve bağlam verileri verilebilir. Kısa süreli ayırma, belirli bir işlem gerçekleştirmek için gereken bellektir ve bundan hemen sonra yayınlanabilir. 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 uygulamasına bağlıdır. Örneğin, C Standard Library Malloc() kullanıldığında bu parametre yok sayılır.
Döndürülen Değerler
Pointer
bir bellek bloğuna dönüştürür.
NULL-pointer
hatası oluşur.

Belleksiz

void MemoryFree(
  void *p
)

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

Ayrıntılar
Parametreler
[in] p
Yayınlanması gereken bellek blokunun üzerine gelin.

Hafızada

WEAVE_ERROR MemoryInit(
  void *buf,
  size_t bufSize
)

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

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

Ayrıntılar
Parametreler
[in] buf
Özel bir bellek arabelleğine işaret eden ve Weave Güvenlik Yöneticisi bellek tahsisi için bellek havuzu olarak kullanılması gerekir. Bu giriş isteğe bağlıdır (varsayılan olarak NULL şeklindedir) ve özel bir bellek arabelleği kullanılmıyorsa kullanılmamalıdır.
[in] bufSize
Özel bir 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. Özel bir bellek arabelleği kullanıldığında, işlev arabellek boyutu Weave Güvenlik Yöneticisi kullanım alanlarını desteklemek için yeterince büyük değilse işlev denetlenip bir 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ı.
other
Platforma özel bellek başlatma işlevi tarafından oluşturulan bir hata.

Bellek Kapatma

void MemoryShutdown(
  void
)

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

Kaynakların serbest bırakılması gerekmiyorsa bu işlev boş bir çağrı olabilir. Bu durum, C Standard Library Malloc() ve free() işlevlerinin bellek ayırma için kullanıldığı durumlara örnek olarak verilebilir.

OnTimeConsuming CryptoBitti

void OnTimeConsumingCryptoDone(
  void
)

Zaman alan bir şifreleme işlemi tamamlandığında uygulamayı bilgilendirmek için bu işlev çağrılır.

OnTimeConsumingCryptoStart

void OnTimeConsumingCryptoStart(
  void
)

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