加密編譯 - 平台

這個模組包含 Crypto 的平台抽象化機制。

摘要

列舉

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,
  OT_CRYPTO_KEY_USAGE_VERIFY_HASH = 1 << 4
}
列舉
定義金鑰用途標記。
otCryptoKeyAlgorithm{
  OT_CRYPTO_KEY_ALG_VENDOR,
  OT_CRYPTO_KEY_ALG_AES_ECB,
  OT_CRYPTO_KEY_ALG_HMAC_SHA_256,
  OT_CRYPTO_KEY_ALG_ECDSA
}
列舉
定義金鑰演算法。
otCryptoKeyStorage{
  OT_CRYPTO_KEY_STORAGE_VOLATILE,
  OT_CRYPTO_KEY_STORAGE_PERSISTENT
}
列舉
定義金鑰儲存空間類型。
otCryptoKeyType{
  OT_CRYPTO_KEY_TYPE_RAW,
  OT_CRYPTO_KEY_TYPE_AES,
  OT_CRYPTO_KEY_TYPE_HMAC,
  OT_CRYPTO_KEY_TYPE_ECDSA
}
列舉
定義金鑰類型。

Typedefs

otCryptoContext typedef
otCryptoKey typedef
struct otCryptoKey
otCryptoKeyRef typedef
uint32_t
這個資料類型代表鍵的參照。
otPlatCryptoEcdsaKeyPair typedef
otPlatCryptoEcdsaPublicKey typedef
otPlatCryptoEcdsaSignature typedef
otPlatCryptoSha256Hash typedef
代表 SHA-256 雜湊。

Variables

OT_TOOL_PACKED_END

函式

otPlatCryptoAesEncrypt(otCryptoContext *aContext, const uint8_t *aInput, uint8_t *aOutput)
加密指定資料。
otPlatCryptoAesFree(otCryptoContext *aContext)
釋放 AES 內容。
otPlatCryptoAesInit(otCryptoContext *aContext)
初始化 AES 作業。
otPlatCryptoAesSetKey(otCryptoContext *aContext, const otCryptoKey *aKey)
設定 AES 作業的金鑰。
otPlatCryptoDestroyKey(otCryptoKeyRef aKeyRef)
刪除 PSA ITS 中儲存的金鑰。
otPlatCryptoEcdsaExportPublicKey(otCryptoKeyRef aKeyRef, otPlatCryptoEcdsaPublicKey *aPublicKey)
從傳遞的金鑰參照中取得相關聯的公開金鑰。
otPlatCryptoEcdsaGenerateAndImportKey(otCryptoKeyRef aKeyRef)
已透過參照的方式產生並匯入新的 ECDSA 金鑰組。
otPlatCryptoEcdsaGenerateKey(otPlatCryptoEcdsaKeyPair *aKeyPair)
使用新的 ECDSA 金鑰組,產生並填入輸出緩衝區。
otPlatCryptoEcdsaGetPublicKey(const otPlatCryptoEcdsaKeyPair *aKeyPair, otPlatCryptoEcdsaPublicKey *aPublicKey)
從輸入結構定義中取得相關聯的公開金鑰。
otPlatCryptoEcdsaSign(const otPlatCryptoEcdsaKeyPair *aKeyPair, const otPlatCryptoSha256Hash *aHash, otPlatCryptoEcdsaSignature *aSignature)
使用輸入結構定義中的私密金鑰,計算已雜湊處理訊息的 ECDSA 簽章。
otPlatCryptoEcdsaSignUsingKeyRef(otCryptoKeyRef aKeyRef, const otPlatCryptoSha256Hash *aHash, otPlatCryptoEcdsaSignature *aSignature)
使用傳遞的 Key 參照,計算已雜湊處理訊息的 ECDSA 簽章。
otPlatCryptoEcdsaVerify(const otPlatCryptoEcdsaPublicKey *aPublicKey, const otPlatCryptoSha256Hash *aHash, const otPlatCryptoEcdsaSignature *aSignature)
使用輸入結構定義中的金鑰,驗證經雜湊處理訊息的 ECDSA 簽名。
otPlatCryptoEcdsaVerifyUsingKeyRef(otCryptoKeyRef aKeyRef, const otPlatCryptoSha256Hash *aHash, const otPlatCryptoEcdsaSignature *aSignature)
使用 Keyref 驗證經雜湊處理郵件的 ECDSA 簽章。
otPlatCryptoExportKey(otCryptoKeyRef aKeyRef, uint8_t *aBuffer, size_t aBufferLen, size_t *aKeyLen)
匯出儲存在 PSA ITS 中的金鑰。
otPlatCryptoHasKey(otCryptoKeyRef aKeyRef)
bool
檢查傳遞的金鑰參照項目是否在 PSA ITS 中具有相關聯的金鑰。
otPlatCryptoHkdfDeinit(otCryptoContext *aContext)
取消初始化 HKDF 結構定義。
otPlatCryptoHkdfExpand(otCryptoContext *aContext, const uint8_t *aInfo, uint16_t aInfoLength, uint8_t *aOutputKey, uint16_t aOutputKeyLength)
執行 HKDF 展開步驟。
otPlatCryptoHkdfExtract(otCryptoContext *aContext, const uint8_t *aSalt, uint16_t aSaltLength, const otCryptoKey *aInputKey)
執行 HKDF 擷取步驟。
otPlatCryptoHkdfInit(otCryptoContext *aContext)
初始化 HKDF 結構定義。
otPlatCryptoHmacSha256Deinit(otCryptoContext *aContext)
取消初始化 HMAC 作業。
otPlatCryptoHmacSha256Finish(otCryptoContext *aContext, uint8_t *aBuf, size_t aBufLength)
完成 HMAC 作業。
otPlatCryptoHmacSha256Init(otCryptoContext *aContext)
初始化 HMAC 作業。
otPlatCryptoHmacSha256Start(otCryptoContext *aContext, const otCryptoKey *aKey)
啟動 HMAC 作業。
otPlatCryptoHmacSha256Update(otCryptoContext *aContext, const void *aBuf, uint16_t aBufLength)
使用新的輸入內容更新 HMAC 作業。
otPlatCryptoImportKey(otCryptoKeyRef *aKeyRef, otCryptoKeyType aKeyType, otCryptoKeyAlgorithm aKeyAlgorithm, int aKeyUsage, otCryptoKeyStorage aKeyPersistence, const uint8_t *aKey, size_t aKeyLen)
將金鑰匯入 PSA ITS。
otPlatCryptoInit(void)
void
初始化 Crypto 模組。
otPlatCryptoPbkdf2GenerateKey(const uint8_t *aPassword, uint16_t aPasswordLen, const uint8_t *aSalt, uint16_t aSaltLen, uint32_t aIterationCounter, uint16_t aKeyLen, uint8_t *aKey)
使用 CMAC (AES-CMAC-PRF-128) 執行 PKCS#5 PBKDF2。
otPlatCryptoRandomDeinit(void)
void
將經過加密編譯且安全無虞的虛擬隨機號碼產生器 (CSPRNG)。
otPlatCryptoRandomGet(uint8_t *aBuffer, uint16_t aSize)
將經過加密的安全隨機位元組填入指定的緩衝區。
otPlatCryptoRandomInit(void)
void
初始化安全加密的虛擬隨機號碼產生器 (CSPRNG)。
otPlatCryptoSha256Deinit(otCryptoContext *aContext)
取消初始化 SHA-256 作業。
otPlatCryptoSha256Finish(otCryptoContext *aContext, uint8_t *aHash, uint16_t aHashSize)
完成 SHA-256 作業。
otPlatCryptoSha256Init(otCryptoContext *aContext)
初始化 SHA-256 作業。
otPlatCryptoSha256Start(otCryptoContext *aContext)
啟動 SHA-256 作業。
otPlatCryptoSha256Update(otCryptoContext *aContext, const void *aBuf, uint16_t aBufLength)
使用新的輸入更新 SHA-256 作業。

結構

otCryptoContext

儲存平台 API 的結構定義物件。

otCryptoKey

代表 Crypto 作業所需的金鑰內容。

otPlatCryptoEcdsaKeyPair

代表 ECDSA 金鑰組 (公開和私密金鑰)。

otPlatCryptoEcdsaPublicKey

代表 ECDSA 公開金鑰。

otPlatCryptoEcdsaSignature

代表 ECDSA 簽章。

otPlatCryptoSha256Hash

代表 SHA-256 雜湊。

列舉

匿名列舉

 anonymous enum

定義金鑰用途標記。

屬性
OT_CRYPTO_KEY_USAGE_DECRYPT

金鑰使用方式:AES ECB。

OT_CRYPTO_KEY_USAGE_ENCRYPT

金鑰用途:加密 (已定義供應商)。

OT_CRYPTO_KEY_USAGE_EXPORT

金鑰使用方式:您可以匯出金鑰。

OT_CRYPTO_KEY_USAGE_NONE

金鑰使用方式:金鑰使用情況空白。

OT_CRYPTO_KEY_USAGE_SIGN_HASH

金鑰用途:簽署雜湊。

OT_CRYPTO_KEY_USAGE_VERIFY_HASH

金鑰用途:驗證雜湊。

otCryptoKeyAlgorithm

 otCryptoKeyAlgorithm

定義金鑰演算法。

屬性
OT_CRYPTO_KEY_ALG_AES_ECB

金鑰演算法:AES ECB。

OT_CRYPTO_KEY_ALG_ECDSA

金鑰演算法:ECDSA。

OT_CRYPTO_KEY_ALG_HMAC_SHA_256

金鑰演算法:HMAC SHA-256。

OT_CRYPTO_KEY_ALG_VENDOR

金鑰演算法:供應商定義。

otCryptoKeyStorage

 otCryptoKeyStorage

定義金鑰儲存空間類型。

屬性
OT_CRYPTO_KEY_STORAGE_PERSISTENT

關鍵保留:金鑰是永久性的。

OT_CRYPTO_KEY_STORAGE_VOLATILE

關鍵持續性:關鍵是多變的。

otCryptoKeyType

 otCryptoKeyType

定義金鑰類型。

屬性
OT_CRYPTO_KEY_TYPE_AES

金鑰類型:AES。

OT_CRYPTO_KEY_TYPE_ECDSA

金鑰類型:ECDSA。

OT_CRYPTO_KEY_TYPE_HMAC

金鑰類型:HMAC。

OT_CRYPTO_KEY_TYPE_RAW

金鑰類型:原始資料。

Typedefs

otCryptoContext

struct otCryptoContext otCryptoContext

otCryptoKey

struct otCryptoKey otCryptoKey

otCryptoKeyRef

uint32_t otCryptoKeyRef

這個資料類型代表鍵的參照。

otPlatCryptoEcdsaKeyPair

struct otPlatCryptoEcdsaKeyPair otPlatCryptoEcdsaKeyPair

otPlatCryptoEcdsaPublicKey

struct otPlatCryptoEcdsaPublicKey otPlatCryptoEcdsaPublicKey

otPlatCryptoEcdsaSignature

struct otPlatCryptoEcdsaSignature otPlatCryptoEcdsaSignature

otPlatCryptoSha256Hash

struct otPlatCryptoSha256Hash otPlatCryptoSha256Hash

代表 SHA-256 雜湊。

Variables

OT_TOOL_PACKED_END

OT_TOOL_PACKED_BEGIN struct otPlatCryptoSha256Hash OT_TOOL_PACKED_END

函式

otPlatCryptoAesEncrypt

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

加密指定資料。

詳細說明
參數
[in] aContext
AES 作業的背景資訊。
[in] aInput
輸入緩衝區的指標。
[in] aOutput
輸出緩衝區的指標。
傳回值
OT_ERROR_NONE
已成功加密 aInput
OT_ERROR_FAILED
無法為「aInput」加密。
OT_ERROR_INVALID_ARGS
aContextaKeyaOutput 為空值

otPlatCryptoAesFree

otError otPlatCryptoAesFree(
  otCryptoContext *aContext
)

釋放 AES 內容。

詳細說明
參數
[in] aContext
AES 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功釋出 AES 內容。
OT_ERROR_FAILED
無法釋放 AES 內容。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoAesInit

otError otPlatCryptoAesInit(
  otCryptoContext *aContext
)

初始化 AES 作業。

詳細說明
參數
[in] aContext
AES 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功初始化 AES 作業。
OT_ERROR_FAILED
無法初始化 AES 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值
OT_ERROR_NO_BUFS
無法分配結構定義。

otPlatCryptoAesSetKey

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

設定 AES 作業的金鑰。

詳細說明
參數
[in] aContext
AES 作業的背景資訊。
[out] aKey
用於 AES 作業的金鑰。
傳回值
OT_ERROR_NONE
已成功設定 AES 作業的金鑰。
OT_ERROR_FAILED
無法設定 AES 作業的金鑰。
OT_ERROR_INVALID_ARGS
aContextaKey 為空值

otPlatCryptoDestroyKey

otError otPlatCryptoDestroyKey(
  otCryptoKeyRef aKeyRef
)

刪除 PSA ITS 中儲存的金鑰。

詳細說明
參數
[in] aKeyRef
要刪除的金鑰參考資料
傳回值
OT_ERROR_NONE
已成功刪除金鑰。
OT_ERROR_FAILED
無法刪除金鑰。

otPlatCryptoEcdsaExportPublicKey

otError otPlatCryptoEcdsaExportPublicKey(
  otCryptoKeyRef aKeyRef,
  otPlatCryptoEcdsaPublicKey *aPublicKey
)

從傳遞的金鑰參照中取得相關聯的公開金鑰。

公開金鑰儲存方式會因使用的加密編譯後端程式庫而異 (OPENTHREAD_CONFIG_CRYPTO_LIB)。

這個 API 必須確保以未壓縮曲線點 (RFC 6605 - sec 4) 的位元組序列表示法傳回公開金鑰

詳細說明
參數
[in] aKeyRef
索引鍵配對儲存位置的鍵參照。
[out] aPublicKey
指向 ECDSA 公開金鑰結構的指標,用於儲存公開金鑰。
傳回值
OT_ERROR_NONE
公開金鑰擷取成功,aBuffer 已更新。
OT_ERROR_PARSE
無法剖析金鑰組 DER 格式 (格式無效)。
OT_ERROR_INVALID_ARGS
aContext 為空值。

otPlatCryptoEcdsaGenerateAndImportKey

otError otPlatCryptoEcdsaGenerateAndImportKey(
  otCryptoKeyRef aKeyRef
)

已透過參照的方式產生並匯入新的 ECDSA 金鑰組。

詳細說明
參數
[in] aKeyRef
索引鍵配對儲存位置的鍵參照。
傳回值
OT_ERROR_NONE
已成功產生新的金鑰組。
OT_ERROR_NO_BUFS
無法分配緩衝區來產生金鑰。
OT_ERROR_NOT_CAPABLE
不支援的功能。
OT_ERROR_FAILED
無法產生金鑰組。

otPlatCryptoEcdsaGenerateKey

otError otPlatCryptoEcdsaGenerateKey(
  otPlatCryptoEcdsaKeyPair *aKeyPair
)

使用新的 ECDSA 金鑰組,產生並填入輸出緩衝區。

詳細說明
參數
[out] aKeyPair
指向 ECDSA 金鑰組結構的指標,用於儲存產生的金鑰組。
傳回值
OT_ERROR_NONE
已成功產生新的金鑰組。
OT_ERROR_NO_BUFS
無法分配緩衝區來產生金鑰。
OT_ERROR_NOT_CAPABLE
不支援的功能。
OT_ERROR_FAILED
無法產生金鑰組。

otPlatCryptoEcdsaGetPublicKey

otError otPlatCryptoEcdsaGetPublicKey(
  const otPlatCryptoEcdsaKeyPair *aKeyPair,
  otPlatCryptoEcdsaPublicKey *aPublicKey
)

從輸入結構定義中取得相關聯的公開金鑰。

詳細說明
參數
[in] aKeyPair
指向儲存金鑰組的 ECDSA 金鑰組結構。
[out] aPublicKey
指向 ECDSA 公開金鑰結構的指標,用於儲存公開金鑰。
傳回值
OT_ERROR_NONE
公開金鑰擷取成功,aBuffer 已更新。
OT_ERROR_PARSE
無法剖析金鑰組 DER 格式 (格式無效)。
OT_ERROR_INVALID_ARGS
aContext 為空值。

otPlatCryptoEcdsaSign

otError otPlatCryptoEcdsaSign(
  const otPlatCryptoEcdsaKeyPair *aKeyPair,
  const otPlatCryptoSha256Hash *aHash,
  otPlatCryptoEcdsaSignature *aSignature
)

使用輸入結構定義中的私密金鑰,計算已雜湊處理訊息的 ECDSA 簽章。

使用 RFC 6979 的確定性數位簽章產生程序。

詳細說明
參數
[in] aKeyPair
指向儲存金鑰組的 ECDSA 金鑰組結構。
[in] aHash
指向儲存簽名計算所使用的雜湊值 SHA-256 雜湊結構。
[out] aSignature
指向 ECDSA 簽名結構的指標,用於輸出計算的簽名。
傳回值
OT_ERROR_NONE
已成功計算簽名,aSignature 已更新。
OT_ERROR_PARSE
無法剖析金鑰組 DER 格式 (格式無效)。
OT_ERROR_NO_BUFS
無法分配緩衝區來進行簽名計算。
OT_ERROR_INVALID_ARGS
aContext 為空值。

otPlatCryptoEcdsaSignUsingKeyRef

otError otPlatCryptoEcdsaSignUsingKeyRef(
  otCryptoKeyRef aKeyRef,
  const otPlatCryptoSha256Hash *aHash,
  otPlatCryptoEcdsaSignature *aSignature
)

使用傳遞的 Key 參照,計算已雜湊處理訊息的 ECDSA 簽章。

使用 RFC 6979 的確定性數位簽章產生程序。

詳細說明
參數
[in] aKeyRef
索引鍵配對儲存位置的鍵參照。
[in] aHash
指向儲存簽名計算所使用的雜湊值 SHA-256 雜湊結構。
[out] aSignature
指向 ECDSA 簽名結構的指標,用於輸出計算的簽名。
傳回值
OT_ERROR_NONE
已成功計算簽名,aSignature 已更新。
OT_ERROR_PARSE
無法剖析金鑰組 DER 格式 (格式無效)。
OT_ERROR_NO_BUFS
無法分配緩衝區來進行簽名計算。
OT_ERROR_INVALID_ARGS
aContext 為空值。

otPlatCryptoEcdsaVerify

otError otPlatCryptoEcdsaVerify(
  const otPlatCryptoEcdsaPublicKey *aPublicKey,
  const otPlatCryptoSha256Hash *aHash,
  const otPlatCryptoEcdsaSignature *aSignature
)

使用輸入結構定義中的金鑰,驗證經雜湊處理訊息的 ECDSA 簽名。

詳細說明
參數
[in] aPublicKey
指向用來儲存簽名驗證的公開金鑰的 ECDSA 公開金鑰結構。
[in] aHash
指向儲存簽名驗證雜湊值的 SHA-256 雜湊結構。
[in] aSignature
指向要儲存待驗證簽名值的 ECDSA 簽名結構。
傳回值
OT_ERROR_NONE
已成功驗證簽章。
OT_ERROR_SECURITY
簽名無效。
OT_ERROR_INVALID_ARGS
金鑰或雜湊無效。
OT_ERROR_NO_BUFS
無法分配緩衝區來進行簽名驗證作業。

otPlatCryptoEcdsaVerifyUsingKeyRef

otError otPlatCryptoEcdsaVerifyUsingKeyRef(
  otCryptoKeyRef aKeyRef,
  const otPlatCryptoSha256Hash *aHash,
  const otPlatCryptoEcdsaSignature *aSignature
)

使用 Keyref 驗證經雜湊處理郵件的 ECDSA 簽章。

詳細說明
參數
[in] aKeyRef
索引鍵配對儲存位置的鍵參照。
[in] aHash
指向儲存簽名驗證雜湊值的 SHA-256 雜湊結構。
[in] aSignature
指向要儲存待驗證簽名值的 ECDSA 簽名結構。
傳回值
OT_ERROR_NONE
已成功驗證簽章。
OT_ERROR_SECURITY
簽名無效。
OT_ERROR_INVALID_ARGS
金鑰或雜湊無效。
OT_ERROR_NO_BUFS
無法分配緩衝區來進行簽名驗證作業。

otPlatCryptoExportKey

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

匯出儲存在 PSA ITS 中的金鑰。

詳細說明
參數
[in] aKeyRef
要用於加密作業的金鑰參照。
[out] aBuffer
需要匯出金鑰的緩衝區指標。
[in] aBufferLen
傳遞用於儲存匯出金鑰的緩衝區長度。
[out] aKeyLen
指標會傳回匯出金鑰的長度。
傳回值
OT_ERROR_NONE
已成功匯出「aKeyRef」。
OT_ERROR_FAILED
無法匯出「aKeyRef」。
OT_ERROR_INVALID_ARGS
aBuffer 為空值

otPlatCryptoHasKey

bool otPlatCryptoHasKey(
  otCryptoKeyRef aKeyRef
)

檢查傳遞的金鑰參照項目是否在 PSA ITS 中具有相關聯的金鑰。

詳細說明
參數
[in] aKeyRef
要檢查的鑰匙參照。
傳回值
TRUE
有一個與「aKeyRef」相關聯的金鑰。
FALSE
aKeyRef」沒有相關聯的金鑰。

otPlatCryptoHkdfDeinit

otError otPlatCryptoHkdfDeinit(
  otCryptoContext *aContext
)

取消初始化 HKDF 結構定義。

詳細說明
參數
[in] aContext
HKDF 作業背景資訊。
傳回值
OT_ERROR_NONE
已成功取消初始化 HKDF 作業。
OT_ERROR_FAILED
無法取消初始化 HKDF 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoHkdfExpand

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

執行 HKDF 展開步驟。

詳細說明
參數
[in] aContext
HKDF 作業的作業情境。
[in] aInfo
指向資訊序列的指標。
[in] aInfoLength
資訊序列的長度。
[out] aOutputKey
輸出索引鍵的指標。
[in] aOutputKeyLength
輸出索引鍵緩衝區的大小。
傳回值
OT_ERROR_NONE
HKDF 展開成功。
OT_ERROR_FAILED
無法展開 HKDF 展開作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoHkdfExtract

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

執行 HKDF 擷取步驟。

詳細說明
參數
[in] aContext
HKDF 作業的作業情境。
[in] aSalt
指標指向香港法爾的鹽。
[in] aSaltLength
鹽長。
[in] aInputKey
輸入鍵的指標。
傳回值
OT_ERROR_NONE
HKDF 擷取成功。
OT_ERROR_FAILED
HKDF 擷取失敗。

otPlatCryptoHkdfInit

otError otPlatCryptoHkdfInit(
  otCryptoContext *aContext
)

初始化 HKDF 結構定義。

詳細說明
參數
[in] aContext
HKDF 作業背景資訊。
傳回值
OT_ERROR_NONE
已成功初始化 AES 作業。
OT_ERROR_FAILED
無法初始化 AES 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoHmacSha256Deinit

otError otPlatCryptoHmacSha256Deinit(
  otCryptoContext *aContext
)

取消初始化 HMAC 作業。

詳細說明
參數
[in] aContext
HMAC 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功取消初始化 HMAC 作業。
OT_ERROR_FAILED
無法取消初始化 HMAC 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoHmacSha256Finish

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

完成 HMAC 作業。

詳細說明
參數
[in] aContext
HMAC 作業的背景資訊。
[out] aBuf
指向輸出緩衝區的指標。
[in] aBufLength
aBuf 的長度 (以位元組為單位)。
傳回值
OT_ERROR_NONE
已成功完成 HMAC 作業。
OT_ERROR_FAILED
無法完成 HMAC 作業。
OT_ERROR_INVALID_ARGS
aContextaBuf 為空值

otPlatCryptoHmacSha256Init

otError otPlatCryptoHmacSha256Init(
  otCryptoContext *aContext
)

初始化 HMAC 作業。

詳細說明
參數
[in] aContext
HMAC 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功初始化 HMAC 作業。
OT_ERROR_FAILED
無法初始化 HMAC 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoHmacSha256Start

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

啟動 HMAC 作業。

詳細說明
參數
[in] aContext
HMAC 作業的背景資訊。
[in] aKey
要用於 HMAC 作業的金鑰內容。
傳回值
OT_ERROR_NONE
已成功啟動 HMAC 作業。
OT_ERROR_FAILED
無法啟動 HMAC 作業。
OT_ERROR_INVALID_ARGS
aContextaKey 為空值

otPlatCryptoHmacSha256Update

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

使用新的輸入內容更新 HMAC 作業。

詳細說明
參數
[in] aContext
HMAC 作業的背景資訊。
[in] aBuf
指向輸入緩衝區的指標。
[in] aBufLength
aBuf 的長度 (以位元組為單位)。
傳回值
OT_ERROR_NONE
已成功使用新的輸入作業更新 HMAC。
OT_ERROR_FAILED
無法更新 HMAC 作業。
OT_ERROR_INVALID_ARGS
aContextaBuf 為空值

otPlatCryptoImportKey

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

將金鑰匯入 PSA ITS。

如果 aKeyPersistence 已傳遞 OT_CRYPTO_KEY_STORAGE_VOLATILE,則 aKeyRef 會輸出,且初始值無關緊要,平台 API 「必須」更新初始值以傳回新金鑰參照。

詳細說明
參數
[in,out] aKeyRef
指向用於加密運算的金鑰參照指標。
[in] aKeyType
鍵的金鑰類型編碼。
[in] aKeyAlgorithm
金鑰的金鑰演算法編碼。
[in] aKeyUsage
鍵的金鑰使用編碼 (OT_CRYPTO_KEY_USAGE_* 的組合)。
[in] aKeyPersistence
這組金鑰的金鑰持續性
[in] aKey
要匯入的實際金鑰。
[in] aKeyLen
要匯入的金鑰長度。
傳回值
OT_ERROR_NONE
已成功匯入金鑰。
OT_ERROR_FAILED
無法匯入金鑰。
OT_ERROR_INVALID_ARGS
aKey已設為空值。

只有在啟用 OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE 時,OT 核心才能使用這個 API。

otPlatCryptoInit

void otPlatCryptoInit(
  void
)

初始化 Crypto 模組。

otPlatCryptoPbkdf2GenerateKey

otError otPlatCryptoPbkdf2GenerateKey(
  const uint8_t *aPassword,
  uint16_t aPasswordLen,
  const uint8_t *aSalt,
  uint16_t aSaltLen,
  uint32_t aIterationCounter,
  uint16_t aKeyLen,
  uint8_t *aKey
)

使用 CMAC (AES-CMAC-PRF-128) 執行 PKCS#5 PBKDF2。

詳細說明
參數
[in] aPassword
產生金鑰時使用的密碼。
[in] aPasswordLen
密碼長度。
[in] aSalt
產生金鑰時使用的鹽。
[in] aSaltLen
鹽長度。
[in] aIterationCounter
疊代次數。
[in] aKeyLen
產生的金鑰長度 (以位元組為單位)。
[out] aKey
所產生金鑰的指標。
傳回值
OT_ERROR_NONE
已成功產生新的金鑰組。
OT_ERROR_NO_BUFS
無法分配緩衝區來產生金鑰。
OT_ERROR_NOT_CAPABLE
不支援的功能。
OT_ERROR_FAILED
無法產生金鑰,

otPlatCryptoRandomDeinit

void otPlatCryptoRandomDeinit(
  void
)

將經過加密編譯且安全無虞的虛擬隨機號碼產生器 (CSPRNG)。

otPlatCryptoRandomGet

otError otPlatCryptoRandomGet(
  uint8_t *aBuffer,
  uint16_t aSize
)

將經過加密的安全隨機位元組填入指定的緩衝區。

詳細說明
參數
[out] aBuffer
指向緩衝區的指標,用來填入隨機位元組。
[in] aSize
緩衝區大小 (要填入的位元組數)。
傳回值
OT_ERROR_NONE
已成功以隨機值填入緩衝區。
OT_ERROR_FAILED
作業失敗,

otPlatCryptoRandomInit

void otPlatCryptoRandomInit(
  void
)

初始化安全加密的虛擬隨機號碼產生器 (CSPRNG)。

otPlatCryptoSha256Deinit

otError otPlatCryptoSha256Deinit(
  otCryptoContext *aContext
)

取消初始化 SHA-256 作業。

詳細說明
參數
[in] aContext
SHA-256 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功取消初始化 SHA-256 作業。
OT_ERROR_FAILED
無法取消初始化 SHA-256 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoSha256Finish

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

完成 SHA-256 作業。

詳細說明
參數
[in] aContext
SHA-256 作業的背景資訊。
[in] aHash
指向輸出緩衝區的指標,這個緩衝區需要儲存雜湊。
[in] aHashSize
aHash 的長度 (以位元組為單位)。
傳回值
OT_ERROR_NONE
已成功完成 SHA-256 作業。
OT_ERROR_FAILED
無法完成 SHA-256 作業。
OT_ERROR_INVALID_ARGS
aContextaHash 為空值

otPlatCryptoSha256Init

otError otPlatCryptoSha256Init(
  otCryptoContext *aContext
)

初始化 SHA-256 作業。

詳細說明
參數
[in] aContext
SHA-256 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功初始化 SHA-256 作業。
OT_ERROR_FAILED
無法初始化 SHA-256 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoSha256Start

otError otPlatCryptoSha256Start(
  otCryptoContext *aContext
)

啟動 SHA-256 作業。

詳細說明
參數
[in] aContext
SHA-256 作業的背景資訊。
傳回值
OT_ERROR_NONE
已成功啟動 SHA-256 作業。
OT_ERROR_FAILED
無法啟動 SHA-256 作業。
OT_ERROR_INVALID_ARGS
aContext 為空值

otPlatCryptoSha256Update

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

使用新的輸入更新 SHA-256 作業。

詳細說明
參數
[in] aContext
SHA-256 作業的背景資訊。
[in] aBuf
指向輸入緩衝區的指標。
[in] aBufLength
aBuf 的長度 (以位元組為單位)。
傳回值
OT_ERROR_NONE
已成功使用新的輸入作業更新 SHA-256。
OT_ERROR_FAILED
無法更新 SHA-256 作業。
OT_ERROR_INVALID_ARGS
aContextaBuf 為空值

巨集

OT_CRYPTO_ECDSA_MAX_DER_SIZE

 OT_CRYPTO_ECDSA_MAX_DER_SIZE 125

代表 EDCSA 金鑰組 (以 DER 格式表示) 的緩衝區大小上限 (以位元組為單位)。

OT_CRYPTO_ECDSA_PUBLIC_KEY_SIZE

 OT_CRYPTO_ECDSA_PUBLIC_KEY_SIZE 64

代表 EDCSA 公開金鑰的緩衝區大小 (以位元組為單位)。

OT_CRYPTO_ECDSA_SIGNATURE_SIZE

 OT_CRYPTO_ECDSA_SIGNATURE_SIZE 64

代表 EDCSA 簽名的緩衝區大小 (以位元組為單位)。

OT_CRYPTO_PBDKF2_MAX_SALT_SIZE

 OT_CRYPTO_PBDKF2_MAX_SALT_SIZE 30

PBKDF2 SALT 長度上限:鹽前置字元 (6) + 延伸窗格 (8) + 網路名稱 (16)

OT_CRYPTO_SHA256_HASH_SIZE

 OT_CRYPTO_SHA256_HASH_SIZE 32

SHA256 雜湊長度 (以位元組為單位)。

資源

OpenThread API 參考資料主題源自原始碼,請前往 GitHub 取得。如要瞭解詳情或對說明文件做出貢獻,請參閱資源