nl::編織::設定檔::安全性

這個命名空間包含 Weave 中所有 Weave 安全性設定檔的介面。

總結

列舉

@235 列舉
X.509 憑證金鑰用途標幟。
@236 列舉
X.509 憑證金鑰使用方式標記。
@237 列舉
編製憑證標記。
@238 列舉
標記憑證解碼標記。
@239 列舉
使用憑證驗證標記。
@240 列舉
@280 列舉
@281 列舉
@282 列舉
@283 列舉
@284 列舉
@285 列舉
@286 列舉
@287 列舉
@288 列舉
@289 列舉

Typedefs

GenerateECDSASignatureFunct)(const uint8_t *hash, uint8_t hashLen, EncodedECDSASignature &ecdsaSig) typedef
使用本機 Weave 節點的私密金鑰產生 ECDSA 簽名。

變數

gProvisioningBundleKDFSalt = "Weave Provisioning Bundle v1"[]
const char

函式

CASECertInfoFromAccessToken(const uint8_t *accessToken, uint32_t accessTokenLen, uint8_t *certInfoBuf, uint16_t certInfoBufSize, uint16_t & certInfoLen)
讀取 Weave Access Token 並建構含有存取憑證中憑證的 CASE 憑證資訊 TLV 結構。
CASECertInfoFromAccessToken(TLVReader & reader, TLVWriter & writer)
讀取 Weveve Access Token 並寫入包含存取憑證憑證的 CASE 憑證資訊 TLV 結構。
ConvertAuthorityKeyIdentifierExtension(ASN1Reader & reader, TLVWriter & writer)
ConvertCertificate(ASN1Reader & reader, TLVWriter & writer)
ConvertDistinguishedName(ASN1Reader & reader, TLVWriter & writer, uint64_t tag)
ConvertECDSASignature_DERToWeave(const uint8_t *sigBuf, uint8_t sigLen, TLVWriter & writer, uint64_t tag)
ConvertExtension(ASN1Reader & reader, TLVWriter & writer)
ConvertExtensions(ASN1Reader & reader, TLVWriter & writer)
ConvertSubjectPublicKeyInfo(ASN1Reader & reader, TLVWriter & writer)
ConvertValidity(ASN1Reader & reader, TLVWriter & writer)
ConvertWeaveCertToX509Cert(const uint8_t *weaveCert, uint32_t weaveCertLen, uint8_t *x509CertBuf, uint32_t x509CertBufSize, uint32_t & x509CertLen)
ConvertX509CertToWeaveCert(const uint8_t *x509Cert, uint32_t x509CertLen, uint8_t *weaveCertBuf, uint32_t weaveCertBufSize, uint32_t & weaveCertLen)
DecodeConvertAuthorityKeyIdentifierExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertBasicConstraintsExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertCert(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertDN(TLVReader & reader, ASN1Writer & writer, WeaveDN & dn)
DecodeConvertECDSASignature(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertExtendedKeyUsageExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertExtensions(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertKeyUsageExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertRSASignature(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertSubjectKeyIdentifierExtension(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertSubjectPublicKeyInfo(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertTBSCert(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeConvertValidity(TLVReader & reader, ASN1Writer & writer, WeaveCertificateData & certData)
DecodeCopyECDSASignature_DER(const uint8_t *sigBuf, uint8_t sigLen, EncodedECDSASignature & sig)
DecodeWeaveCert(const uint8_t *weaveCert, uint32_t weaveCertLen, WeaveCertificateData & certData)
DecodeWeaveCert(TLVReader & reader, WeaveCertificateData & certData)
DecodeWeaveDN(TLVReader & reader, WeaveDN & dn)
DecodeWeaveECDSASignature(TLVReader & reader, EncodedECDSASignature & sig)
DecodeWeaveECPrivateKey(const uint8_t *buf, uint32_t len, uint32_t & weaveCurveId, EncodedECPublicKey & pubKey, EncodedECPrivateKey & privKey)
NL_DLL_EXPORT WEAVE_ERROR
DescribeWeaveCertId(OID attrOID, uint64_t weaveCertId)
const char *
DetermineCertType(WeaveCertificateData & cert)
決定 Weave 憑證的一般類型。
EncodeWeaveECDSASignature(TLVWriter & writer, EncodedECDSASignature & sig, uint64_t tag)
EncodeWeaveECPrivateKey(uint32_t weaveCurveId, const EncodedECPublicKey *pubKey, const EncodedECPrivateKey & privKey, uint8_t *outBuf, uint32_t outBufSize, uint32_t & outLen)
NL_DLL_EXPORT WEAVE_ERROR
ExtractCertFromAccessToken(TLVReader & reader, TLVWriter & writer, uint64_t tag)
讀取 Weave Access Token 並擷取存取憑證憑證。
ExtractPrivateKeyFromAccessToken(const uint8_t *accessToken, uint32_t accessTokenLen, uint8_t *privKeyBuf, uint16_t privKeyBufSize, uint16_t & privKeyLen)
讀取 Weave Access Token 並擷取私密金鑰。
ExtractPrivateKeyFromAccessToken(TLVReader & reader, TLVWriter & writer)
讀取 Weave Access Token 並擷取私密金鑰。
GenerateAndEncodeWeaveECDSASignature(TLVWriter & writer, uint64_t tag, const uint8_t *msgHash, uint8_t msgHashLen, const uint8_t *signingKey, uint16_t signingKeyLen)
產生 Weave ECDSA 簽名並編碼。
GenerateOperationalDeviceCert(uint64_t deviceId, EncodedECPublicKey & devicePubKey, uint8_t *cert, uint16_t certBufSize, uint16_t & certLen, GenerateECDSASignatureFunct genCertSignature)
NL_DLL_EXPORT WEAVE_ERROR
產生 Weave 作業裝置憑證。
GetWeaveSignatureAlgo(const uint8_t *sig, uint16_t sigLen, OID & sigAlgoOID)
Indent(FILE *out, uint16_t count)
void
InsertRelatedCertificatesIntoWeaveSignature(uint8_t *sigBuf, uint16_t sigLen, uint16_t sigBufLen, const uint8_t *relatedCerts, uint16_t relatedCertsLen, uint16_t & outSigLen)
IsCertificateExtensionTag(uint64_t tag)
bool
IsCurveInSet(uint32_t curveId, uint8_t curveSet)
bool
IsSupportedCurve(uint32_t curveId)
bool
IsWeaveIdX509Attr(OID oid)
bool
IsWeaveX509Attr(OID oid)
bool
LoadAccessTokenCerts(const uint8_t *accessToken, uint32_t accessTokenLen, WeaveCertificateSet & certSet, uint16_t decodeFlags, WeaveCertificateData *& accessTokenCert)
將存取憑證中的憑證載入 Weave 憑證集。
LoadAccessTokenCerts(TLVReader & reader, WeaveCertificateSet & certSet, uint16_t decodeFlags, WeaveCertificateData *& accessTokenCert)
將存取憑證中的憑證載入 Weave 憑證集。
MakeDeviceCredentialHash(const char *serialNum, size_t serialNumLen, const char *deviceId, size_t deviceIdLen, const char *deviceSecret, size_t deviceSecretLen, char *hashBuf, size_t hashBufSize)
NL_DLL_EXPORT WEAVE_ERROR
為一組溫度控制器裝置憑證產生驗證雜湊 (採用 Base-64 格式)。
MakeWeaveProvisioningHash(uint64_t nodeId, const char *weaveCert, size_t weaveCertLen, const char *weavePrivKey, size_t weavePrivKeyLen, const char *pairingCode, size_t pairingCodeLen, char *hashBuf, size_t hashBufSize)
NL_DLL_EXPORT WEAVE_ERROR
產生一組 Weave 佈建資訊的驗證雜湊 (採用 Base-64 格式)。
OIDToWeaveCurveId(ASN1::OID curveOID)
uint32_t
PackCertTime(const ASN1UniversalTime & time, uint32_t & packedTime)
NL_DLL_EXPORT WEAVE_ERROR
將憑證日期/時間 (採用 ASN.1 通用時間結構的格式) 轉換為封裝的憑證日期/時間。
PackedCertDateToTime(uint16_t packedDate)
NL_DLL_EXPORT uint32_t
將打包的認證憑證日期轉換成對應的封裝憑證日期/時間,其中時間的時間部分設為 00:00:00。
PackedCertTimeToDate(uint32_t packedTime)
NL_DLL_EXPORT uint16_t
將經過封裝的憑證日期/時間轉換為已包裝的憑證日期。
ParseWeaveIdAttribute(ASN1Reader & reader, uint64_t & weaveIdOut)
PrintCert(FILE *out, const WeaveCertificateData & cert, const WeaveCertificateSet *certSet, uint16_t indent, bool verbose)
NL_DLL_EXPORT void
PrintCertArray(FILE *out, TLVReader & reader, uint16_t indent)
PrintCertReference(FILE *out, TLVReader & reader, uint16_t indent)
PrintCertType(FILE *out, uint8_t certType)
void
PrintCertValidationResults(FILE *out, const WeaveCertificateSet & certSet, const ValidationContext & validContext, uint16_t indent)
NL_DLL_EXPORT void
PrintECDSASignature(FILE *out, TLVReader & reader, uint16_t indent)
PrintHexField(FILE *out, const char *name, uint16_t indent, uint16_t count, const uint8_t *data)
void
PrintPackedDate(FILE *out, uint16_t t)
void
PrintPackedTime(FILE *out, uint32_t t)
void
PrintWeaveDN(FILE *out, const WeaveDN & dn)
void
PrintWeaveDN(FILE *out, TLVReader & reader)
PrintWeaveSignature(FILE *out, TLVReader & reader, uint16_t indent)
SecondsSinceEpochToPackedCertTime(uint32_t secondsSinceEpoch)
NL_DLL_EXPORT uint32_t
自 1970-01-01 00:00:00 UTC 以來的秒數數據為 1970-01-01 UTC 00:00。
TranslateOpenSSLError(WEAVE_ERROR defaultErr)
UnpackCertTime(uint32_t packedTime, ASN1UniversalTime & time)
NL_DLL_EXPORT WEAVE_ERROR
將封裝的憑證日期/時間解壓縮為 ASN.1 通用時間結構。
VerifyWeaveSignature(const uint8_t *msgHash, uint8_t msgHashLen, const uint8_t *sig, uint16_t sigLen, WeaveCertificateSet & certSet, ValidationContext & certValidContext)
NL_DLL_EXPORT WEAVE_ERROR
VerifyWeaveSignature(const uint8_t *msgHash, uint8_t msgHashLen, const uint8_t *sig, uint16_t sigLen, OID expectedSigAlgoOID, WeaveCertificateSet & certSet, ValidationContext & certValidContext)
NL_DLL_EXPORT WEAVE_ERROR
WeaveCurveIdToOID(uint32_t weaveCurveId)
NL_DLL_EXPORT OID

類別

nl::Weave::Profiles::安全性::CertificateKeyId
nl::Weave::Profiles::安全性::ValidationContext
nl::Weave::Profiles::安全性::WeaveCertificateData
nl::Weave::Profiles::安全性::WeaveCertificateSet
nl::Weave::Profiles::安全性::WeaveDN
nl::Weave::Profiles::安全性::WeaveProvisioningBundle
nl::Weave::Profiles::安全性::WeaveSignatureGenerator

使用記憶體內私密金鑰產生 WeaveSignature。

nl::Weave::Profiles::安全性::WeaveSignatureGeneratorBase

提供產生 WeaveSignature 的一般功能。

命名空間

nl::Weave::Profiles::安全性::AppKeys

這個命名空間包含 Weave 中所有 Weave 安全性設定檔中的 Weave 應用程式金鑰程式庫介面。

nl::編織::設定檔::安全性::案例

這個命名空間包含 Weave 中所有 Weave 安全性設定檔的憑證驗證工作階段 (CASE) 通訊協定。

nl::Weave::Profiles::安全性::CertProvisioning

這個命名空間包含 Weave 中所有 Weave 安全性設定檔中的 Weave 憑證佈建通訊協定。

nl::Weave::Profiles::安全性::KeyExport

這個命名空間包含 Weave 中所有 Weave 安全性設定檔的主要匯出通訊協定。

nl::編織::設定檔::安全性::PASE

這個命名空間包含 Weave 中所有 Weave 安全性設定檔的密碼驗證工作階段 (PASE) 通訊協定。

nl::Weave::Profiles::安全性::密碼

這個命名空間包含 Weave 中所有 Weave 安全性設定檔中的 Weave 密碼程式庫。

nl::編織::設定檔::安全性:: TAKE

這個命名空間包含 Weave 內所有用於 Weave 安全性設定檔的憑證驗證金鑰交換 (TAKE) 通訊協定。

列舉

@235

 @235

X.509 憑證金鑰用途標幟。

@236

 @236

X.509 憑證金鑰使用方式標記。

@237

 @237

編製憑證標記。

內含已載入至 WeaveCertSet 物件的憑證相關資訊。

@238

 @238

標記憑證解碼標記。

內含的資訊會指定憑證的解碼方式。

@239

 @239

使用憑證驗證標記。

內含指定憑證驗證方式的相關資訊。

@240

 @240

@280

 @280

@281

 @281

@282

 @282

@283

 @283

@284

 @284

@285

 @285

@286

 @286

@287

 @287

@288

 @288

@289

 @289

Typedefs

GenerateECDSASignatureFunct

WEAVE_ERROR(* GenerateECDSASignatureFunct)(const uint8_t *hash, uint8_t hashLen, EncodedECDSASignature &ecdsaSig)

使用本機 Weave 節點的私密金鑰產生 ECDSA 簽名。

叫用時,實作必須使用以節點的私密金鑰對指定雜湊值進行簽章。

詳細資料
參數
[in] hash
包含待簽署憑證雜湊的緩衝區。
[in] hashLen
雜湊的位元組長度。
[in] ecdsaSig
ecdsa 簽名物件的參照,用來儲存這個函式的結果。
傳回值
WEAVE_NO_ERROR
如果作業成功,

變數

gProvisioningBundleKDFSalt

const char gProvisioningBundleKDFSalt[] = "Weave Provisioning Bundle v1"

函式

CASECertInfoFromAccessToken

WEAVE_ERROR CASECertInfoFromAccessToken(
  const uint8_t *accessToken,
  uint32_t accessTokenLen,
  uint8_t *certInfoBuf,
  uint16_t certInfoBufSize,
  uint16_t & certInfoLen
)

讀取 Weave Access Token 並建構含有存取憑證中憑證的 CASE 憑證資訊 TLV 結構。

這個函式會將指定的 Weave Access Token 進行編碼,並將 TLV 編碼為 Weave CASE 憑證資訊結構。CertificateInfo 結構內的 EntityCertificate 欄位已設為存取憑證憑證,而「RelatedCertificates」欄位 (如果有的話) 則設為存取憑證內的對應欄位。

詳細資料
參數
accessToken
包含已編碼 Weave Access Token 的緩衝區指標。
accessTokenLen
經過編碼的存取憑證長度。
certInfoBuf
指向 HTTP 憑證資訊結構編碼的緩衝區指標。
certInfoBufSize
certInfoBuf 指向的緩衝區大小。
certInfoLen
整數的參照將設為編碼憑證資訊結構的長度。注意:只有在函式成功傳回時,才會設定這個值。
傳回值
WEAVE_NO_ERROR
如果存取權 CASE 憑證資訊結構成功編碼。
tlv-errors
讀取或寫入 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

CASECertInfoFromAccessToken

WEAVE_ERROR CASECertInfoFromAccessToken(
  TLVReader & reader,
  TLVWriter & writer
)

讀取 Weveve Access Token 並寫入包含存取憑證憑證的 CASE 憑證資訊 TLV 結構。

這個函式會從指定的 TLVreader 讀取 Weave Access Token,並將 TLV 用於編織 Weave CASE 憑證資訊結構,並寫入 TLVWriter。CertificateInfo 結構內的 EntityCertificate 欄位已設為存取憑證憑證,而「RelatedCertificates」欄位 (如果有的話) 則設為存取憑證內的對應欄位。

詳細資料
參數
[in] reader
位於 weLve Access Token 上的 TLVreader。
[in] writer
用來記錄輸出 CASE 憑證資訊的 TLVWriter。
傳回值
WEAVE_NO_ERROR
如果存取權 CASE 憑證資訊結構成功編碼。
tlv-errors
讀取或寫入 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

轉換作者金鑰識別碼擴充欄位

WEAVE_ERROR ConvertAuthorityKeyIdentifierExtension(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換憑證

WEAVE_ERROR ConvertCertificate(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換 DistinguishedName

WEAVE_ERROR ConvertDistinguishedName(
  ASN1Reader & reader,
  TLVWriter & writer,
  uint64_t tag
)

ConvertECDSASignature_DERToWeave 檔案

WEAVE_ERROR ConvertECDSASignature_DERToWeave(
  const uint8_t *sigBuf,
  uint8_t sigLen,
  TLVWriter & writer,
  uint64_t tag
)

轉換擴充功能

WEAVE_ERROR ConvertExtension(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換擴充功能

WEAVE_ERROR ConvertExtensions(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換主體公開金鑰資訊

WEAVE_ERROR ConvertSubjectPublicKeyInfo(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換有效性

WEAVE_ERROR ConvertValidity(
  ASN1Reader & reader,
  TLVWriter & writer
)

轉換 WeaveCertToX509Cert

WEAVE_ERROR ConvertWeaveCertToX509Cert(
  const uint8_t *weaveCert,
  uint32_t weaveCertLen,
  uint8_t *x509CertBuf,
  uint32_t x509CertBufSize,
  uint32_t & x509CertLen
)

轉換 X509CertToWeaveCert

WEAVE_ERROR ConvertX509CertToWeaveCert(
  const uint8_t *x509Cert,
  uint32_t x509CertLen,
  uint8_t *weaveCertBuf,
  uint32_t weaveCertBufSize,
  uint32_t & weaveCertLen
)

DecodeConvertAuthorityKeyIdentifierExtension

WEAVE_ERROR DecodeConvertAuthorityKeyIdentifierExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertBasicConstraintsExtension

WEAVE_ERROR DecodeConvertBasicConstraintsExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換憑證

WEAVE_ERROR DecodeConvertCert(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換 DN

WEAVE_ERROR DecodeConvertDN(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveDN & dn
)

DecodeConvertECDSA 簽名

WEAVE_ERROR DecodeConvertECDSASignature(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換金鑰使用方式擴充

WEAVE_ERROR DecodeConvertExtendedKeyUsageExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換擴充功能

WEAVE_ERROR DecodeConvertExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換擴充功能

WEAVE_ERROR DecodeConvertExtensions(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertKeyUsageExtension

WEAVE_ERROR DecodeConvertKeyUsageExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertRSASignature

WEAVE_ERROR DecodeConvertRSASignature(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertSubjectKeyIdentifierExtensionExtension

WEAVE_ERROR DecodeConvertSubjectKeyIdentifierExtension(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertSubjectPublicKeyInfo

WEAVE_ERROR DecodeConvertSubjectPublicKeyInfo(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeConvertTBSCert

WEAVE_ERROR DecodeConvertTBSCert(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

解碼轉換有效性

WEAVE_ERROR DecodeConvertValidity(
  TLVReader & reader,
  ASN1Writer & writer,
  WeaveCertificateData & certData
)

DecodeCopyECDSASignature_DER

WEAVE_ERROR DecodeCopyECDSASignature_DER(
  const uint8_t *sigBuf,
  uint8_t sigLen,
  EncodedECDSASignature & sig
)

DecodeWeaveCert

WEAVE_ERROR DecodeWeaveCert(
  const uint8_t *weaveCert,
  uint32_t weaveCertLen,
  WeaveCertificateData & certData
)

DecodeWeaveCert

WEAVE_ERROR DecodeWeaveCert(
  TLVReader & reader,
  WeaveCertificateData & certData
)

解碼代碼

WEAVE_ERROR DecodeWeaveDN(
  TLVReader & reader,
  WeaveDN & dn
)

DecodeWeaveECDSA 簽名

WEAVE_ERROR DecodeWeaveECDSASignature(
  TLVReader & reader,
  EncodedECDSASignature & sig
)

DecodeWeaveECPrivateKey

NL_DLL_EXPORT WEAVE_ERROR DecodeWeaveECPrivateKey(
  const uint8_t *buf,
  uint32_t len,
  uint32_t & weaveCurveId,
  EncodedECPublicKey & pubKey,
  EncodedECPrivateKey & privKey
)

描述 WeaveCertId

const char * DescribeWeaveCertId(
  OID attrOID,
  uint64_t weaveCertId
)

指定類型

WEAVE_ERROR DetermineCertType(
  WeaveCertificateData & cert
)

決定 Weave 憑證的一般類型。

這個函式會根據憑證主體 DN 的結構和現存的擴充功能,對憑證類型進行一般評估。應用程式可以免費覆寫此評估,只要將 cert.CertType 設為其他值,包括應用程式定義的值即可。

一般來說,應用程式只會在連結至信任的根憑證的情況下,才信任對等點的憑證。不過,指派給憑證的類型可能會影響這項信任的「自然」,例如允許或禁止存取特定功能。因此,對這個演算法所做的調整可能會對整體系統安全性產生重大影響,而且在無法完全瞭解其影響的情況下,不應進行相關變更。

注意:存取憑證的認證無法只因兩者的結構而有所區別。因此,這個函式永遠不會設定 cert.CertType = kCertType_AccessToken。

EncodeWeaveECDSA 簽名

WEAVE_ERROR EncodeWeaveECDSASignature(
  TLVWriter & writer,
  EncodedECDSASignature & sig,
  uint64_t tag
)

EncodeWeaveECPrivateKey

NL_DLL_EXPORT WEAVE_ERROR EncodeWeaveECPrivateKey(
  uint32_t weaveCurveId,
  const EncodedECPublicKey *pubKey,
  const EncodedECPrivateKey & privKey,
  uint8_t *outBuf,
  uint32_t outBufSize,
  uint32_t & outLen
)

擷取憑證來源存取憑證

WEAVE_ERROR ExtractCertFromAccessToken(
  TLVReader & reader,
  TLVWriter & writer,
  uint64_t tag
)

讀取 Weave Access Token 並擷取存取憑證憑證。

這個函式會從 TLVreader 讀取 Weave Access Token,並將 Access Token Certificate 寫入指定的 TLVWriter。

詳細資料
參數
[in] reader
位於 weLve Access Token 上的 TLVreader。
[in] writer
要寫入憑證的 TLVWriter。
[in] tag
寫入憑證時所使用的 TLV 標記。
傳回值
WEAVE_NO_ERROR
如果存取權 CASE 憑證資訊結構成功編碼。
tlv-errors
讀取或寫入 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

FetchPrivateKeyFromAccessToken

WEAVE_ERROR ExtractPrivateKeyFromAccessToken(
  const uint8_t *accessToken,
  uint32_t accessTokenLen,
  uint8_t *privKeyBuf,
  uint16_t privKeyBufSize,
  uint16_t & privKeyLen
)

讀取 Weave Access Token 並擷取私密金鑰。

這個函式會將指定的 Weave Access Token 解碼,並從憑證中擷取私密金鑰欄位。

詳細資料
參數
accessToken
包含已編碼 Weave Access Token 的緩衝區指標。
accessTokenLen
經過編碼的存取憑證長度。
privKeyBuf
指向私密金鑰編碼位置的緩衝區指標。
privKeyBufSize
privKeyBuf 指向的緩衝區大小。
privKeyLen
整數的參照將設為私密金鑰的長度。注意:只有在函式成功傳回時,才會設定這個值。
傳回值
WEAVE_NO_ERROR
成功擷取私密金鑰。
tlv-errors
讀取或寫入 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

FetchPrivateKeyFromAccessToken

WEAVE_ERROR ExtractPrivateKeyFromAccessToken(
  TLVReader & reader,
  TLVWriter & writer
)

讀取 Weave Access Token 並擷取私密金鑰。

這個函式會將指定的 Weave Access Token 解碼,並從憑證中擷取私密金鑰欄位。

詳細資料
參數
[in] reader
位於 weLve Access Token 上的 TLVreader。
[in] writer
要寫入私密金鑰的 TLVWriter。
傳回值
WEAVE_NO_ERROR
成功擷取私密金鑰。
tlv-errors
讀取或寫入 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

產生 AndEncodeWeaveECDSA 簽名

WEAVE_ERROR GenerateAndEncodeWeaveECDSASignature(
  TLVWriter & writer,
  uint64_t tag,
  const uint8_t *msgHash,
  uint8_t msgHashLen,
  const uint8_t *signingKey,
  uint16_t signingKeyLen
)

產生 Weave ECDSA 簽名並編碼。

使用指定的私密金鑰和訊息雜湊計算 ECDSA 簽名,並將簽章以 Weave ECDSASignature 結構寫入指定的標記 TLV 寫入器中。

詳細資料
參數
[in] writer
要寫入編碼簽名的 TLVWriter 物件。
[in] tag
TLV 標記,以便與編碼的簽名結構建立關聯。
[in] msgHash
包含待簽署訊息雜湊的緩衝區。
[in] msgHashLen
訊息雜湊的長度 (以位元組為單位)。
[in] signingKey
包含用來產生簽章的私密金鑰的緩衝區。私密金鑰預計會編成 Weave EllipticCurvePrivateKey TLV 結構。
[in] signingKeyLen
編碼私密金鑰的長度 (以位元組為單位)。
傳回值
WEAVE_NO_ERROR
如果作業成功,
other
其他與解碼私密金鑰、產生簽章或為簽名編碼相關的 Weave 錯誤代碼。

產生作業裝置憑證

NL_DLL_EXPORT WEAVE_ERROR GenerateOperationalDeviceCert(
  uint64_t deviceId,
  EncodedECPublicKey & devicePubKey,
  uint8_t *cert,
  uint16_t certBufSize,
  uint16_t & certLen,
  GenerateECDSASignatureFunct genCertSignature
)

產生 Weave 作業裝置憑證。

這個函式會產生以 Weave TLV 格式編碼的 Weave 自行簽署作業憑證。

詳細資料
參數
deviceId
追蹤作業裝置 ID。
devicePubKey
編織作業裝置公開金鑰。
cert
指向已寫入產生的憑證的緩衝區指標。
certBufSize
提供的憑證緩衝區長度 (以位元組為單位)。
certLen
產生的憑證長度 (以位元組為單位)。
genCertSignature
這個函式指向使用作業裝置私密金鑰,在指定的憑證雜湊上產生 ECDSA 簽名的函式。
傳回值
WEAVE_NO_ERROR
是否成功產生 Weave 憑證。

GetWeaveSignatureAlgo

WEAVE_ERROR GetWeaveSignatureAlgo(
  const uint8_t *sig,
  uint16_t sigLen,
  OID & sigAlgoOID
)

縮排

void Indent(
  FILE *out,
  uint16_t count
)

插入相關憑證

WEAVE_ERROR InsertRelatedCertificatesIntoWeaveSignature(
  uint8_t *sigBuf,
  uint16_t sigLen,
  uint16_t sigBufLen,
  const uint8_t *relatedCerts,
  uint16_t relatedCertsLen,
  uint16_t & outSigLen
)

憑證擴充標記

bool IsCertificateExtensionTag(
  uint64_t tag
)

設定集

bool IsCurveInSet(
  uint32_t curveId,
  uint8_t curveSet
)

支援曲線

bool IsSupportedCurve(
  uint32_t curveId
)

是 WeaveIdX509Attr

bool IsWeaveIdX509Attr(
  OID oid
)

伊維韋 X509 Attr

bool IsWeaveX509Attr(
  OID oid
)

載入存取憑證憑證

WEAVE_ERROR LoadAccessTokenCerts(
  const uint8_t *accessToken,
  uint32_t accessTokenLen,
  WeaveCertificateSet & certSet,
  uint16_t decodeFlags,
  WeaveCertificateData *& accessTokenCert
)

將存取憑證中的憑證載入 Weave 憑證集。

此函式會將指定的 Weave 存取憑證進行解碼,並將存取憑證憑證載入指定的 Weave 憑證集物件。如果存取憑證包含一或多個相關憑證,這些憑證也會載入到憑證集。

詳細資料
參數
accessToken
包含已編碼 Weave Access Token 的緩衝區指標。
accessTokenLen
經過編碼的存取憑證長度。
certSet
要載入存取憑證憑證的憑證集。
decodeFlags
憑證解碼應用於載入憑證時要使用的標記。
accessTokenCert
指標會參照存取憑證憑證的 Weave 憑證資料結構。注意:只有在函式成功傳回時,才會設定此指標。
傳回值
WEAVE_NO_ERROR
存取存取憑證憑證是否成功載入。
tlv-errors
讀取 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

載入存取憑證憑證

WEAVE_ERROR LoadAccessTokenCerts(
  TLVReader & reader,
  WeaveCertificateSet & certSet,
  uint16_t decodeFlags,
  WeaveCertificateData *& accessTokenCert
)

將存取憑證中的憑證載入 Weave 憑證集。

這個函式會從指定的 TLVreader 讀取 Weave 存取憑證,並將存取憑證憑證載入指定的 Weave 憑證集物件。如果存取憑證包含一或多個相關憑證,這些憑證也會載入到憑證集。

詳細資料
參數
reader
TLVreader 物件,位於 Weave Access Token 之前。
certSet
要載入存取憑證憑證的憑證集。
decodeFlags
憑證解碼應用於載入憑證時要使用的標記。
accessTokenCert
指標會參照存取憑證憑證的 Weave 憑證資料結構。注意:只有在函式成功傳回時,才會設定這個值。
傳回值
WEAVE_NO_ERROR
存取存取憑證憑證是否成功載入。
tlv-errors
讀取 TLV 相關錯誤。
cert-errors
將 Weave 憑證解碼時發生的錯誤。
platform-errors
其他特定平台的錯誤。

MakeDeviceCredentialHash

NL_DLL_EXPORT WEAVE_ERROR MakeDeviceCredentialHash(
  const char *serialNum,
  size_t serialNumLen,
  const char *deviceId,
  size_t deviceIdLen,
  const char *deviceSecret,
  size_t deviceSecretLen,
  char *hashBuf,
  size_t hashBufSize
)

為一組溫度控制器裝置憑證產生驗證雜湊 (採用 Base-64 格式)。

詳細資料
參數
[in] serialNum
指向裝置序號的緩衝區。
[in] serialNumLen
序號字串長度。
[in] deviceId
指向裝置 ID 的緩衝區。
[in] deviceIdLen
裝置 ID 的長度。
[in] deviceSecret
包含裝置密鑰的緩衝區指標。
[in] deviceSecretLen
裝置密鑰長度。
[in,out] hashBuf
指向接收緩衝區值的緩衝區 (以 Base-64 格式表示)。輸出字串將會終止空值。這個緩衝區不得小於 kDeviceCredentialHashLength + 1。
[in] hashBufSize
由 TCPBuf 指向的緩衝區大小 (以位元組為單位)。
傳回值
WEAVE_NO_ERROR
如果方法成功執行。
WEAVE_ERROR_INVALID_STRING_LENGTH
如果其中一個輸入值太長 (> 65535)。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果提供的緩衝區太小,無法容納產生的雜湊值。

MakeWeaveProvisioningHash

NL_DLL_EXPORT WEAVE_ERROR MakeWeaveProvisioningHash(
  uint64_t nodeId,
  const char *weaveCert,
  size_t weaveCertLen,
  const char *weavePrivKey,
  size_t weavePrivKeyLen,
  const char *pairingCode,
  size_t pairingCodeLen,
  char *hashBuf,
  size_t hashBufSize
)

產生一組 Weave 佈建資訊的驗證雜湊 (採用 Base-64 格式)。

詳細資料
參數
[in] nodeId
裝置的 Weave 節點 ID。
[in] weaveCert
這個遊標指向含有 Base-64 格式的 Weave 裝置憑證的緩衝區。
[in] weaveCertLen
由 weaveCert 指向的憑證值長度。
[in] weavePrivKey
這個遊標指向含有 Base-64 格式的 Weave 裝置私密金鑰的緩衝區。
[in] weavePrivKeyLen
由 weavePrivKey 指向的私密金鑰值長度。
[in] pairingCode
包含裝置配對碼的緩衝區指標。
[in] pairingCodeLen
配對代碼指向的配對碼值長度。
[in,out] hashBuf
指向接收緩衝區值的緩衝區 (以 Base-64 格式表示)。輸出字串將會終止空值。這個緩衝區不得小於 kWeaveProvisioningHashLength + 1。
[in] hashBufSize
由 TCPBuf 指向的緩衝區大小 (以位元組為單位)。
傳回值
WEAVE_NO_ERROR
如果方法成功執行。
WEAVE_ERROR_INVALID_STRING_LENGTH
如果其中一個輸入值太長 (> 65535)。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果提供的緩衝區太小,無法容納產生的雜湊值。

OIDToWeaveCurveId

uint32_t OIDToWeaveCurveId(
  ASN1::OID curveOID
)

PackCertTime

NL_DLL_EXPORT WEAVE_ERROR PackCertTime(
  const ASN1UniversalTime & time,
  uint32_t & packedTime
)

將憑證日期/時間 (採用 ASN.1 通用時間結構的格式) 轉換為封裝的憑證日期/時間。

打包憑證憑證/時間可提供精簡的表示憑證時間值 (notBefore 和 notAfter),可代表憑證的完整時間值,不需要經過完整的日曆數學解譯。

打包憑證的日期/時間含有日曆日期/時間的欄位,例如年、月、日、小時、分鐘,第二個是不帶符號的整數。這個位元表示法可排列方式,確保打包日期/時間值的序數比較對應到對應時間的自然排序。要減少其大小,打包的憑證日期/時間為限於 2000/01/01 00:00:00 或之後的時間。安裝在 32 位不帶符號整數內,打包的憑證日期/時間可以代表到 2133 年的時間。

詳細資料
參數
time
要轉換的日曆日期/時間。
packedTime
可接收打包日期/時間的整數。
傳回值
WEAVE_NO_ERROR
如果輸入時間成功轉換。
ASN1_ERROR_UNSUPPORTED_ENCODING
如果輸入時間包含年份值,而這些資料在封裝憑證時間值中就無法顯示。

PackedCertDateToTime

NL_DLL_EXPORT uint32_t PackedCertDateToTime(
  uint16_t packedDate
)

將打包的認證憑證日期轉換成對應的封裝憑證日期/時間,其中時間的時間部分設為 00:00:00。

詳細資料
參數
packedDate
要轉換的封裝憑證日期。
傳回
對應的封包憑證日期/時間。

PackedCertTimeToDate

NL_DLL_EXPORT uint16_t PackedCertTimeToDate(
  uint32_t packedTime
)

將經過封裝的憑證日期/時間轉換為已包裝的憑證日期。

打包憑證日期包含日曆日期年月內的欄位,而日期是包含未簽署的整數。這些位元的排列方式是將打包日期值的序數比較對應到對應日期的自然排序。要減少其大小,打包的憑證日期限於表示 2000/01/01 或之後的日期。當位於 16 位元不帶正負號的整數內時,已納入憑證的有效期限可涵蓋 2176 年以前的日期。

詳細資料
參數
packedTime
要轉換的封裝憑證日期/時間。
傳回
對應的封包憑證日期。

ParseWeaveIdAttribute

WEAVE_ERROR ParseWeaveIdAttribute(
  ASN1Reader & reader,
  uint64_t & weaveIdOut
)

列印憑證

NL_DLL_EXPORT void PrintCert(
  FILE *out,
  const WeaveCertificateData & cert,
  const WeaveCertificateSet *certSet,
  uint16_t indent,
  bool verbose
)

PrintCertArray

WEAVE_ERROR PrintCertArray(
  FILE *out,
  TLVReader & reader,
  uint16_t indent
)

列印憑證參考

WEAVE_ERROR PrintCertReference(
  FILE *out,
  TLVReader & reader,
  uint16_t indent
)

列印憑證類型

void PrintCertType(
  FILE *out,
  uint8_t certType
)

列印認證驗證結果

NL_DLL_EXPORT void PrintCertValidationResults(
  FILE *out,
  const WeaveCertificateSet & certSet,
  const ValidationContext & validContext,
  uint16_t indent
)

PrintECDSA 簽名

WEAVE_ERROR PrintECDSASignature(
  FILE *out,
  TLVReader & reader,
  uint16_t indent
)

PrintHexField

void PrintHexField(
  FILE *out,
  const char *name,
  uint16_t indent,
  uint16_t count,
  const uint8_t *data
)

PrintPackedDate

void PrintPackedDate(
  FILE *out,
  uint16_t t
)

PrintPackedTime

void PrintPackedTime(
  FILE *out,
  uint32_t t
)

PrintWeaveDN

void PrintWeaveDN(
  FILE *out,
  const WeaveDN & dn
)

PrintWeaveDN

WEAVE_ERROR PrintWeaveDN(
  FILE *out,
  TLVReader & reader
)

PrintWeave 簽名

WEAVE_ERROR PrintWeaveSignature(
  FILE *out,
  TLVReader & reader,
  uint16_t indent
)

以秒為單位 (EpochToPackedCertTime)

NL_DLL_EXPORT uint32_t SecondsSinceEpochToPackedCertTime(
  uint32_t secondsSinceEpoch
)

自 1970-01-01 00:00:00 UTC 以來的秒數數據為 1970-01-01 UTC 00:00。

詳細資料
參數
secondsSinceEpoch
自 1970-01-01 00:00:00 UTC 起的秒數。注意:這個值與 POSIX time_t 值的 positive 值相容,直到 2005 年為止。
傳回
對應的封包憑證日期/時間。

TranslateOpenSSLError

WEAVE_ERROR TranslateOpenSSLError(
  WEAVE_ERROR defaultErr
)

取消封裝時間

NL_DLL_EXPORT WEAVE_ERROR UnpackCertTime(
  uint32_t packedTime,
  ASN1UniversalTime & time
)

將封裝的憑證日期/時間解壓縮為 ASN.1 通用時間結構。

詳細資料
參數
packedTime
已解除封裝的封裝憑證時間。
time
接收 ASN1UniversalTime 結構的參照,以接收未封裝的日期/時間。
傳回值
WEAVE_NO_ERROR
成功將輸入時間解除封裝。

驗證簽名

NL_DLL_EXPORT WEAVE_ERROR VerifyWeaveSignature(
  const uint8_t *msgHash,
  uint8_t msgHashLen,
  const uint8_t *sig,
  uint16_t sigLen,
  WeaveCertificateSet & certSet,
  ValidationContext & certValidContext
)

驗證簽名

NL_DLL_EXPORT WEAVE_ERROR VerifyWeaveSignature(
  const uint8_t *msgHash,
  uint8_t msgHashLen,
  const uint8_t *sig,
  uint16_t sigLen,
  OID expectedSigAlgoOID,
  WeaveCertificateSet & certSet,
  ValidationContext & certValidContext
)

WeaveCurveIdToOID

NL_DLL_EXPORT OID WeaveCurveIdToOID(
  uint32_t weaveCurveId
)