Kripto - Platform

Bu modül, Crypto'nun platform soyutlamasını içerir.

Özet

Sıralamalar

anonymous enum{
  OT_CRYPTO_KEY_USAGE_NONE = 0,
  OT_CRYPTO_KEY_USAGE_EXPORT = 1 << 0,
  OT_CRYPTO_KEY_USAGE_ENCRYPT = 1 << 1,
  OT_CRYPTO_KEY_USAGE_DECRYPT = 1 << 2,
  OT_CRYPTO_KEY_USAGE_SIGN_HASH = 1 << 3
}
enum
Bu sıralama, temel kullanım işaretlerini tanımlar.
otCryptoKeyAlgorithm{
  OT_CRYPTO_KEY_ALG_VENDOR,
  OT_CRYPTO_KEY_ALG_AES_ECB,
  OT_CRYPTO_KEY_ALG_HMAC_SHA_256
}
enum
Bu sıralama, temel algoritmaları tanımlar.
otCryptoKeyStorage{
  OT_CRYPTO_KEY_STORAGE_VOLATILE,
  OT_CRYPTO_KEY_STORAGE_PERSISTENT
}
enum
Bu sıralama, temel depolama türlerini tanımlar.
otCryptoKeyType{
  OT_CRYPTO_KEY_TYPE_RAW,
  OT_CRYPTO_KEY_TYPE_AES,
  OT_CRYPTO_KEY_TYPE_HMAC
}
enum
Bu sıralama, anahtar türlerini tanımlar.

Türler

otCryptoContext Tür
otCryptoKey Tür
struct otCryptoKey
otCryptoKeyRef Tür
uint32_t
Bu veri türü, anahtar referansını temsil eder.

İşlevler

otPlatCryptoAesEncrypt(otCryptoContext *aContext, const uint8_t *aInput, uint8_t *aOutput)
Paylaşılan verileri şifreleyin.
otPlatCryptoAesFree(otCryptoContext *aContext)
AES bağlamını serbest bırakın.
otPlatCryptoAesInit(otCryptoContext *aContext)
AES işlemini başlatın.
otPlatCryptoAesSetKey(otCryptoContext *aContext, const otCryptoKey *aKey)
AES işlemi için anahtarı ayarlayın.
otPlatCryptoDestroyKey(otCryptoKeyRef aKeyRef)
PSA ITS'te depolanan bir anahtarı kaldırın.
otPlatCryptoExportKey(otCryptoKeyRef aKeyRef, uint8_t *aBuffer, size_t aBufferLen, size_t *aKeyLen)
PSA ITS'te depolanan bir anahtarı dışa aktarın.
otPlatCryptoHasKey(otCryptoKeyRef aKeyRef)
bool
Geçilen anahtar referansının, PSA ITS'te ilişkili bir anahtarı olup olmadığını kontrol edin.
otPlatCryptoHkdfDeinit(otCryptoContext *aContext)
HKDF bağlamını başlat.
otPlatCryptoHkdfExpand(otCryptoContext *aContext, const uint8_t *aInfo, uint16_t aInfoLength, uint8_t *aOutputKey, uint16_t aOutputKeyLength)
HKDF Genişletme adımını gerçekleştir.
otPlatCryptoHkdfExtract(otCryptoContext *aContext, const uint8_t *aSalt, uint16_t aSaltLength, const otCryptoKey *aInputKey)
HKDF Ayıklama adımını gerçekleştirin.
otPlatCryptoHkdfInit(otCryptoContext *aContext)
HKDF bağlamını başlatın.
otPlatCryptoHmacSha256Deinit(otCryptoContext *aContext)
HMAC işlemini başlatın.
otPlatCryptoHmacSha256Finish(otCryptoContext *aContext, uint8_t *aBuf, size_t aBufLength)
HMAC işlemini tamamlayın.
otPlatCryptoHmacSha256Init(otCryptoContext *aContext)
HMAC işlemini başlatın.
otPlatCryptoHmacSha256Start(otCryptoContext *aContext, const otCryptoKey *aKey)
HMAC işlemini başlatın.
otPlatCryptoHmacSha256Update(otCryptoContext *aContext, const void *aBuf, uint16_t aBufLength)
HMAC işlemini yeni girişle güncelleyin.
otPlatCryptoImportKey(otCryptoKeyRef *aKeyRef, otCryptoKeyType aKeyType, otCryptoKeyAlgorithm aKeyAlgorithm, int aKeyUsage, otCryptoKeyStorage aKeyPersistence, const uint8_t *aKey, size_t aKeyLen)
Kamu Eğitim Bakanlığı'nın BTS sistemine anahtar aktarın.
otPlatCryptoInit(void)
void
Crypto modülünü başlatın.
otPlatCryptoRandomDeinit(void)
void
Kriptografik olarak güvenli olan sözde rastgele sayı oluşturma aracını (CSPRNG) başlatın.
otPlatCryptoRandomGet(uint8_t *aBuffer, uint16_t aSize)
Belirli bir arabelleği kriptografik olarak güvenli rastgele baytlarla doldurur.
otPlatCryptoRandomInit(void)
void
Kriptografik olarak güvenli sözde rastgele sayı oluşturma aracını (CSPRNG) başlatın.
otPlatCryptoSha256Deinit(otCryptoContext *aContext)
SHA-256 işlemini başlatın.
otPlatCryptoSha256Finish(otCryptoContext *aContext, uint8_t *aHash, uint16_t aHashSize)
SHA-256 işlemini tamamlayın.
otPlatCryptoSha256Init(otCryptoContext *aContext)
SHA-256 işlemini başlatın.
otPlatCryptoSha256Start(otCryptoContext *aContext)
SHA-256 işlemini başlatın.
otPlatCryptoSha256Update(otCryptoContext *aContext, const void *aBuf, uint16_t aBufLength)
SHA-256 işlemini yeni girişle güncelleyin.

Struct

otCryptoContext

Bu yapı, platform API'leri için bağlam nesnesini depolar.

otCryptoAnahtarı

Bu yapı, Şifreleme işlemleri için gereken Temel Materyali temsil eder.

Sıralamalar

anonim enum

 anonymous enum

Bu sıralama, temel kullanım işaretlerini tanımlar.

Özellikler
OT_CRYPTO_KEY_USAGE_DECRYPT

Anahtar Kullanımı: AES ECB.

OT_CRYPTO_KEY_USAGE_ENCRYPT

Anahtar Kullanımı: Şifreleme (sağlayıcı tanımlı).

OT_CRYPTO_KEY_USAGE_EXPORT

Anahtar Kullanımı: Anahtar dışa aktarılabilir.

OT_CRYPTO_KEY_USAGE_NONE

Anahtar Kullanımı: Anahtar Kullanımı boş.

OT_CRYPTO_KEY_USAGE_SIGN_HASH

Anahtar Kullanımı: HMAC SHA-256.

otCryptoKeyAlgoritma

 otCryptoKeyAlgorithm

Bu sıralama, temel algoritmaları tanımlar.

Özellikler
OT_CRYPTO_KEY_ALG_AES_ECB

Anahtar Algoritması: AES ECB.

OT_CRYPTO_KEY_ALG_HMAC_SHA_256

Anahtar Algoritması: HMAC SHA-256.

OT_CRYPTO_KEY_ALG_VENDOR

Anahtar Algoritması: Tedarikçi Tarafından Tanımlanan.

otCryptoKeyStorage

 otCryptoKeyStorage

Bu sıralama, temel depolama türlerini tanımlar.

Özellikler
OT_CRYPTO_KEY_STORAGE_PERSISTENT

Anahtar Kalıcılığı: Anahtar kalıcıdır.

OT_CRYPTO_KEY_STORAGE_VOLATILE

Anahtar Kalıcılığı: Tuş değişkendir.

otCryptoKeyType

 otCryptoKeyType

Bu sıralama, anahtar türlerini tanımlar.

Özellikler
OT_CRYPTO_KEY_TYPE_AES

Anahtar Türü: AES.

OT_CRYPTO_KEY_TYPE_HMAC

Anahtar Türü: HMAC.

OT_CRYPTO_KEY_TYPE_RAW

Anahtar Türü: Ham Veriler.

Türler

otCryptoBağlamı

struct otCryptoContext otCryptoContext

otCryptoAnahtarı

struct otCryptoKey otCryptoKey

otCryptoKeyRef

uint32_t otCryptoKeyRef

Bu veri türü, anahtar referansını temsil eder.

İşlevler

otPlatCryptoAesEncrypt

otError otPlatCryptoAesEncrypt(
  otCryptoContext *aContext,
  const uint8_t *aInput,
  uint8_t *aOutput
)

Paylaşılan verileri şifreleyin.

Ayrıntılar
Parametreler
[in] aContext
AES işlemi için bağlam.
[in] aInput
Giriş arabelleğine işaretçi.
[in] aOutput
Çıkış arabelleğine işaretçi.
Döndürülen Değerler
OT_ERROR_NONE
aInput başarıyla şifrelendi.
OT_ERROR_FAILED
aInput şifrelenemedi.
OT_ERROR_INVALID_ARGS
aContext, aKey veya aOutput BOŞtu

otPlatCryptoAesÜcretsiz

otError otPlatCryptoAesFree(
  otCryptoContext *aContext
)

AES bağlamını serbest bırakın.

Ayrıntılar
Parametreler
[in] aContext
AES işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
AES bağlamı başarıyla serbest bırakıldı.
OT_ERROR_FAILED
AES bağlamı serbest bırakılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoAesInit

otError otPlatCryptoAesInit(
  otCryptoContext *aContext
)

AES işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
AES işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
AES işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
AES işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu
OT_ERROR_NO_BUFS
Bağlam atanamıyor.

otPlatCryptoAesSetAnahtarı

otError otPlatCryptoAesSetKey(
  otCryptoContext *aContext,
  const otCryptoKey *aKey
)

AES işlemi için anahtarı ayarlayın.

Ayrıntılar
Parametreler
[in] aContext
AES işlemi için bağlam.
[out] aKey
AES işlemi için kullanılacak anahtar.
Döndürülen Değerler
OT_ERROR_NONE
AES işlemi için anahtar başarıyla ayarlandı.
OT_ERROR_FAILED
AES işlemi için anahtar ayarlanamadı.
OT_ERROR_INVALID_ARGS
aContext veya aKey BOŞtu

otPlatCryptoDestroyKey

otError otPlatCryptoDestroyKey(
  otCryptoKeyRef aKeyRef
)

PSA ITS'te depolanan bir anahtarı kaldırın.

Ayrıntılar
Parametreler
[in] aKeyRef
Kaldırılacak anahtar referans
Döndürülen Değerler
OT_ERROR_NONE
Anahtar başarıyla kaldırıldı.
OT_ERROR_FAILED
Anahtar kaldırılamadı.

otPlatCryptoDışa Aktarma Anahtarı

otError otPlatCryptoExportKey(
  otCryptoKeyRef aKeyRef,
  uint8_t *aBuffer,
  size_t aBufferLen,
  size_t *aKeyLen
)

PSA ITS'te depolanan bir anahtarı dışa aktarın.

Ayrıntılar
Parametreler
[in] aKeyRef
Kripto işlemleri için kullanılacak anahtar referansı.
[out] aBuffer
Anahtarın dışa aktarılması gereken arabellek.
[in] aBufferLen
Dışa aktarılan anahtarın depolanması için iletilen arabelleğin uzunluğu.
[out] aKeyLen
Dışa aktarılan anahtarın uzunluğunu döndürmek için işaretçi.
Döndürülen Değerler
OT_ERROR_NONE
aKeyRef başarıyla dışa aktarıldı.
OT_ERROR_FAILED
aKeyRef dışa aktarılamadı.
OT_ERROR_INVALID_ARGS
aBuffer BOŞtu

otPlatCryptoHasKey

bool otPlatCryptoHasKey(
  otCryptoKeyRef aKeyRef
)

Geçilen anahtar referansının, PSA ITS'te ilişkili bir anahtarı olup olmadığını kontrol edin.

Ayrıntılar
Parametreler
[in] aKeyRef
Kontrol edilecek Anahtar Ref.
Döndürülen Değerler
TRUE
aKeyRef ile ilişkilendirilmiş bir anahtar var.
FALSE
aKeyRef ile ilişkilendirilmiş anahtar yok.

otPlatCryptoHkdfDeinit

otError otPlatCryptoHkdfDeinit(
  otCryptoContext *aContext
)

HKDF bağlamını başlat.

Ayrıntılar
Parametreler
[in] aContext
HKDF işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
HKDF işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
HKDF işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoHkdfExpand

otError otPlatCryptoHkdfExpand(
  otCryptoContext *aContext,
  const uint8_t *aInfo,
  uint16_t aInfoLength,
  uint8_t *aOutputKey,
  uint16_t aOutputKeyLength
)

HKDF Genişletme adımını gerçekleştir.

Ayrıntılar
Parametreler
[in] aContext
HKDF için işlem bağlamı.
[in] aInfo
Bilgi dizisinin üzerine gelin.
[in] aInfoLength
Bilgi dizisi uzunluğu.
[out] aOutputKey
Çıkış anahtarının üzerine gelin.
[in] aOutputKeyLength
Çıkış anahtarı arabelleğinin boyutu.
Döndürülen Değerler
OT_ERROR_NONE
HKDF Genişletme başarılı oldu.
OT_ERROR_FAILED
HKDF Genişletme başarısız oldu.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoHkdf Ayıklama

otError otPlatCryptoHkdfExtract(
  otCryptoContext *aContext,
  const uint8_t *aSalt,
  uint16_t aSaltLength,
  const otCryptoKey *aInputKey
)

HKDF Ayıklama adımını gerçekleştirin.

Ayrıntılar
Parametreler
[in] aContext
HKDF için işlem bağlamı.
[in] aSalt
HKDF için Tuz'un üzerine gelin.
[in] aSaltLength
Tuz Uzunluğu.
[in] aInputKey
Giriş anahtarının üzerine gelin.
Döndürülen Değerler
OT_ERROR_NONE
HKDF Ayıklama başarılı oldu.
OT_ERROR_FAILED
HKDF Ayıklama başarısız.

otPlatCryptoHkdfInit

otError otPlatCryptoHkdfInit(
  otCryptoContext *aContext
)

HKDF bağlamını başlatın.

Ayrıntılar
Parametreler
[in] aContext
HKDF işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
AES işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
AES işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoHmacSha256Deinit

otError otPlatCryptoHmacSha256Deinit(
  otCryptoContext *aContext
)

HMAC işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
HMAC işleminin bağlamı.
Döndürülen Değerler
OT_ERROR_NONE
HMAC işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
HMAC işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoHmacSha256Finish

otError otPlatCryptoHmacSha256Finish(
  otCryptoContext *aContext,
  uint8_t *aBuf,
  size_t aBufLength
)

HMAC işlemini tamamlayın.

Ayrıntılar
Parametreler
[in] aContext
HMAC işleminin bağlamı.
[out] aBuf
Çıkış arabelleğine bir işaretçi.
[in] aBufLength
aBuf cinsinden bayt cinsinden uzunluk.
Döndürülen Değerler
OT_ERROR_NONE
HMAC işlemi başarıyla tamamlandı.
OT_ERROR_FAILED
HMAC işlemi tamamlanamadı.
OT_ERROR_INVALID_ARGS
aContext veya aBuf BOŞtu

otPlatCryptoHmacSha256Init

otError otPlatCryptoHmacSha256Init(
  otCryptoContext *aContext
)

HMAC işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
HMAC işleminin bağlamı.
Döndürülen Değerler
OT_ERROR_NONE
HMAC işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
HMAC işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoHmacSha256Başlat

otError otPlatCryptoHmacSha256Start(
  otCryptoContext *aContext,
  const otCryptoKey *aKey
)

HMAC işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
HMAC işleminin bağlamı.
[in] aKey
HMAC işlemi için kullanılacak anahtar materyali.
Döndürülen Değerler
OT_ERROR_NONE
HMAC işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
HMAC işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext veya aKey BOŞtu

otPlatCryptoHmacSha256Güncelleme

otError otPlatCryptoHmacSha256Update(
  otCryptoContext *aContext,
  const void *aBuf,
  uint16_t aBufLength
)

HMAC işlemini yeni girişle güncelleyin.

Ayrıntılar
Parametreler
[in] aContext
HMAC işleminin bağlamı.
[in] aBuf
Giriş arabelleğine bir işaretçi.
[in] aBufLength
aBuf cinsinden bayt cinsinden uzunluk.
Döndürülen Değerler
OT_ERROR_NONE
HMAC yeni giriş işlemiyle başarıyla güncellendi.
OT_ERROR_FAILED
HMAC işlemi güncellenemedi.
OT_ERROR_INVALID_ARGS
aContext veya aBuf BOŞtu

otPlatCryptoİçe Aktarma Anahtarı

otError otPlatCryptoImportKey(
  otCryptoKeyRef *aKeyRef,
  otCryptoKeyType aKeyType,
  otCryptoKeyAlgorithm aKeyAlgorithm,
  int aKeyUsage,
  otCryptoKeyStorage aKeyPersistence,
  const uint8_t *aKey,
  size_t aKeyLen
)

Kamu Eğitim Bakanlığı'nın BTS sistemine anahtar aktarın.

Not: AKeyPersence için OT_CRYPTO_KEY_STORAGE_PERSISTENT aktarılırsa aKeyRef değeri girilir ve platform, verilen aKeyRef'i kullanmalı ve değiştirmemelidir. aKeyPersistence için OT_CRYPTO_KEY_STORAGE_VOLATILE iletilirse aKeyRef çıkışı gerekir. Başlangıç değeri önemli değildir ve platform API'sinin bu değeri yeni anahtar referansı döndürecek şekilde güncellemesi GEREKİR.

Ayrıntılar
Parametreler
[in,out] aKeyRef
Şifreleme işlemleri için kullanılacak anahtar referansının üzerine gelin.
[in] aKeyType
Anahtar için Anahtar Türü kodlaması.
[in] aKeyAlgorithm
Anahtar için anahtar algoritması kodlaması.
[in] aKeyUsage
Anahtar için Anahtar Kullanımı kodlaması (OT_CRYPTO_KEY_USAGE_* kombinasyonları).
[in] aKeyPersistence
Bu anahtar için anahtar kalıcılığı
[in] aKey
İçe aktarılacak gerçek anahtar.
[in] aKeyLen
İçe aktarılacak anahtarın uzunluğu.
Döndürülen Değerler
OT_ERROR_NONE
Anahtar başarıyla içe aktarıldı.
OT_ERROR_FAILED
Anahtar içe aktarılamadı.
OT_ERROR_INVALID_ARGS
aKey NULL olarak ayarlandı.

Bu API, yalnızca OT çekirdeği tarafından OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE etkinleştirildiğinde kullanılır.

otPlatCryptoInit

void otPlatCryptoInit(
  void
)

Crypto modülünü başlatın.

otPlatCryptoRastgeleDeinit

void otPlatCryptoRandomDeinit(
  void
)

Kriptografik olarak güvenli olan sözde rastgele sayı oluşturma aracını (CSPRNG) başlatın.

otPlatCryptorastgele

otError otPlatCryptoRandomGet(
  uint8_t *aBuffer,
  uint16_t aSize
)

Belirli bir arabelleği kriptografik olarak güvenli rastgele baytlarla doldurur.

Ayrıntılar
Parametreler
[out] aBuffer
Rastgele baytlarla doldurulacak bir arabellek işaretçisi.
[in] aSize
Tampon boyutu (doldurulacak bayt sayısı).
Döndürülen Değerler
OT_ERROR_NONE
Arabellek rastgele değerlerle başarıyla dolduruldu.
OT_ERROR_FAILED
İşlem gerçekleştirilemedi.

otPlatCryptoRastgeleInit

void otPlatCryptoRandomInit(
  void
)

Kriptografik olarak güvenli sözde rastgele sayı oluşturma aracını (CSPRNG) başlatın.

otPlatCryptoSha256ininit

otError otPlatCryptoSha256Deinit(
  otCryptoContext *aContext
)

SHA-256 işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
SHA-256 işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
SHA-256 işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
SHA-256 işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoSha256Finish

otError otPlatCryptoSha256Finish(
  otCryptoContext *aContext,
  uint8_t *aHash,
  uint16_t aHashSize
)

SHA-256 işlemini tamamlayın.

Ayrıntılar
Parametreler
[in] aContext
SHA-256 işlemi için bağlam.
[in] aHash
Karmanın depolanması gereken çıkış arabelleğine ait bir işaretçi.
[in] aHashSize
aHash cinsinden bayt cinsinden uzunluk.
Döndürülen Değerler
OT_ERROR_NONE
SHA-256 işlemi başarıyla tamamlandı.
OT_ERROR_FAILED
SHA-256 işlemi tamamlanamadı.
OT_ERROR_INVALID_ARGS
aContext veya aHash BOŞtu

otPlatCryptoSha256Init

otError otPlatCryptoSha256Init(
  otCryptoContext *aContext
)

SHA-256 işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
SHA-256 işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
SHA-256 işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
SHA-256 işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoSha256Başlat

otError otPlatCryptoSha256Start(
  otCryptoContext *aContext
)

SHA-256 işlemini başlatın.

Ayrıntılar
Parametreler
[in] aContext
SHA-256 işlemi için bağlam.
Döndürülen Değerler
OT_ERROR_NONE
SHA-256 işlemi başarıyla başlatıldı.
OT_ERROR_FAILED
SHA-256 işlemi başlatılamadı.
OT_ERROR_INVALID_ARGS
aContext BOŞtu

otPlatCryptoSha256Güncelleme

otError otPlatCryptoSha256Update(
  otCryptoContext *aContext,
  const void *aBuf,
  uint16_t aBufLength
)

SHA-256 işlemini yeni girişle güncelleyin.

Ayrıntılar
Parametreler
[in] aContext
SHA-256 işlemi için bağlam.
[in] aBuf
Giriş arabelleğine bir işaretçi.
[in] aBufLength
aBuf cinsinden bayt cinsinden uzunluk.
Döndürülen Değerler
OT_ERROR_NONE
Yeni giriş işlemiyle SHA-256 başarıyla güncellendi.
OT_ERROR_FAILED
SHA-256 işlemi güncellenemedi.
OT_ERROR_INVALID_ARGS
aContext veya aBuf BOŞtu

Kaynaklar

OpenThread API Referans konularının kaynağı, GitHub'daki kaynak kodudur. Daha fazla bilgi edinmek veya dokümanlarımıza katkıda bulunmak için Kaynaklar'a bakın.