nl::Weave::Profiles::安全

此命名空间包含 Weave 中适用于 Weave Security 配置文件的所有接口。

摘要

枚举

@235 枚举
X.509 证书密钥用途标记。
@236 枚举
X.509 证书密钥用法标志。
@237 枚举
Weave 认证标志。
@238 枚举
Weave 证书解码标志。
@239 枚举
Weave 证书验证标记。
@240 枚举
@280 枚举
@281 枚举
@282 枚举
@283 枚举
@284 枚举
@285 枚举
@286 枚举
@287 枚举
@288 枚举
@289 枚举

类型定义符

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 访问令牌并构建包含访问令牌证书的 CASE Certificate Info TLV 结构。
CASECertInfoFromAccessToken(TLVReader & reader, TLVWriter & writer)
读取 Weave 访问令牌并写入 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 访问令牌并提取访问令牌证书。
ExtractPrivateKeyFromAccessToken(const uint8_t *accessToken, uint32_t accessTokenLen, uint8_t *privKeyBuf, uint16_t privKeyBufSize, uint16_t & privKeyLen)
读取 Weave 访问令牌并提取私钥。
ExtractPrivateKeyFromAccessToken(TLVReader & reader, TLVWriter & writer)
读取 Weave 访问令牌并提取私钥。
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 以来的秒数转换为打包证书日期/时间。
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::Security::CertificateKeyId
nl::Weave::Profiles::Security::ValidationContext
nl::Weave::Profiles::Security::WeaveCertificateData
nl::Weave::Profiles::Security::WeaveCertificateSet
nl::Weave::Profiles::Security::WeaveDN
nl::Weave::Profiles::Security::WeaveProvisioningBundle
nl::Weave::Profiles::Security::WeaveSignatureGenerator

使用内存中的私钥生成 WeaveSignature。

nl::Weave::Profiles::Security::WeaveSignatureGeneratorBase

提供用于生成 WeaveSignature 的通用功能。

命名空间

nl::Weave::Profiles::Security::AppKeys

此命名空间包括 Weave 中适用于 Weave 安全配置文件的 Weave 应用密钥库的所有接口。

nl::Weave::Profiles::Security::CASE

此命名空间包括 Weave 中适用于 Weave 安全配置文件中的证书身份验证会话创建 (CASE) 协议中的所有接口。

nl::Weave::Profiles::Security::CertProvisioning

此命名空间包括 Weave 中适用于 Weave 安全配置文件中的 Weave 证书配置协议的所有接口。

nl::Weave::Profiles::Security::KeyExport

此命名空间包含 Weave 中适用于 Weave 安全配置文件中的密钥导出协议的所有接口。

nl::Weave::Profiles::Security::PASE

此命名空间包括 Weave 中密码身份验证会话创建 (PASE) 协议中的所有接口。

nl::Weave::Profiles::Security::密码

此命名空间包括 Weave 中适用于 Weave 安全配置文件内的 Weave 密码库的所有接口。

nl::Weave::Profiles::Security::采用

此命名空间包括 Weave 安全配置文件中令牌身份验证密钥交换 (TAKE) 协议中的所有接口。

枚举

@235

 @235

X.509 证书密钥用途标记。

@236

 @236

X.509 证书密钥用法标志。

@237

 @237

Weave 认证标志。

包含已加载到 WeaveCertSet 对象中的证书的信息。

@238

 @238

Weave 证书解码标志。

包含指定应如何解码证书的信息。

@239

 @239

Weave 证书验证标记。

包含指定应如何验证证书的信息。

@240

 @240

@280

 @280

@281

 @281

@282

 @282

@283

 @283

@284

 @284

@285

 @285

@286

 @286

@287 次

 @287

@288

 @288

289 @

 @289

类型定义符

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 访问令牌并构建包含访问令牌证书的 CASE Certificate Info TLV 结构。

此函数对给定的 Weave 访问令牌进行解码,并针对 Weave CASE 证书信息结构对 TLV 进行编码。CertificateInfo 结构中的 EntityCertificate 字段会设置为访问令牌证书,而 RelatedCertificates 字段(如果存在)会设置为访问令牌中的相应字段。

详细信息
参数
accessToken
指向包含已编码 Weave 访问令牌的缓冲区的指针。
accessTokenLen
已编码的访问令牌的长度。
certInfoBuf
指向应编码 CASE 证书信息结构的缓冲区的指针。
certInfoBufSize
certInfoBuf 指向的缓冲区大小。
certInfoLen
对整数的引用将设置为编码证书信息结构的长度。注意:仅在函数成功返回时设置此值。
返回值
WEAVE_NO_ERROR
访问CASE证书信息结构是否已成功编码。
tlv-errors
编织与读取或写入 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

CASECertInfoFromAccessToken

WEAVE_ERROR CASECertInfoFromAccessToken(
  TLVReader & reader,
  TLVWriter & writer
)

读取 Weave 访问令牌并写入 CASE 证书信息 TLV 结构,其中包含访问令牌中的证书。

此函数从给定的 TLVReader 读取 Weave 访问令牌,并将 Weave CASE 证书信息结构的 TLV 写入 TLVWriter。CertificateInfo 结构中的 EntityCertificate 字段会设置为访问令牌证书,而 RelatedCertificates 字段(如果存在)会设置为访问令牌中的相应字段。

详细信息
参数
[in] reader
位于 Weave 访问令牌上的 TLVReader。
[in] writer
用于记录输出 CASE 证书信息的 TLVWriter。
返回值
WEAVE_NO_ERROR
访问CASE证书信息结构是否已成功编码。
tlv-errors
编织与读取或写入 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

ConvertAuthorityKeyIdentifierExtension

WEAVE_ERROR ConvertAuthorityKeyIdentifierExtension(
  ASN1Reader & reader,
  TLVWriter & writer
)

转化证书

WEAVE_ERROR ConvertCertificate(
  ASN1Reader & reader,
  TLVWriter & writer
)

转化名称

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
)

ConvertExtension

WEAVE_ERROR ConvertExtension(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertExtension

WEAVE_ERROR ConvertExtensions(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertSubjectPublicKeyInfo

WEAVE_ERROR ConvertSubjectPublicKeyInfo(
  ASN1Reader & reader,
  TLVWriter & writer
)

转化有效性

WEAVE_ERROR ConvertValidity(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertWeaveCertToX509Cert

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

ConvertX509CertToWeaveCert

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
)

DecodeConvertCert

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

DecodeConvertDN(解码转化 DN)

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

DecodeConvertECDSASignature

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

DecodeConvertExtendedKeyUsageExtension

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

DecodeConvertExtension

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

DecodeConvertExtensions

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
)

DecodeConvertSubjectKeyIdentifierExtension

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

解码主题公开密钥信息

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

DecodeConvertTBSCert

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

DecodeConvertValidity

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

DecodeCopyECDSASignature_DER

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

解码代码

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

解码代码

WEAVE_ERROR DecodeWeaveCert(
  TLVReader & reader,
  WeaveCertificateData & certData
)

DecodeWeaveDN

WEAVE_ERROR DecodeWeaveDN(
  TLVReader & reader,
  WeaveDN & dn
)

解码 WeDSA ECDSASignature

WEAVE_ERROR DecodeWeaveECDSASignature(
  TLVReader & reader,
  EncodedECDSASignature & sig
)

解码 WeaveECPrivateKey

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

ExplainWeaveCertId

const char * DescribeWeaveCertId(
  OID attrOID,
  uint64_t weaveCertId
)

确定认证类型

WEAVE_ERROR DetermineCertType(
  WeaveCertificateData & cert
)

确定 Weave 证书的常规类型。

此函数根据证书持有者 DN 的结构和现有的扩展名对证书类型进行常规评估。应用可以将 cert.CertType 设置为其他值(包括应用定义的值),以覆盖此评估。

一般情况下,仅当某个对等证书链接到受信任的根证书时,应用才会信任该证书。但是,分配给证书的类型可能会影响此信任的性质,例如允许或禁止使用特定功能。因此,更改此算法可能会对系统的整体安全性产生重大影响,并且可能不足以让用户了解这些影响。

注意:访问令牌证书不能只由其结构来区分。因此,此函数从不设置 cert.CertType = kCertType_AccessToken,

EncodeWeaveECDSASignature

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 访问令牌并提取访问令牌证书。

此函数从 TLVReader 读取 Weave 访问令牌,并将访问令牌证书写入指定的 TLVWriter。

详细信息
参数
[in] reader
位于 Weave 访问令牌上的 TLVReader。
[in] writer
要写入证书的 TLVWriter。
[in] tag
写入证书时使用的 TLV 标记。
返回值
WEAVE_NO_ERROR
访问CASE证书信息结构是否已成功编码。
tlv-errors
编织与读取或写入 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

提取私有密钥的访问令牌

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

读取 Weave 访问令牌并提取私钥。

此函数对给定的 Weave 访问令牌进行解码,并从令牌中提取私钥字段。

详细信息
参数
accessToken
指向包含已编码 Weave 访问令牌的缓冲区的指针。
accessTokenLen
已编码的访问令牌的长度。
privKeyBuf
指向应编码私钥结构的缓冲区的指针。
privKeyBufSize
privKeyBuf 指向的缓冲区大小。
privKeyLen
对整数的引用将设置为私钥的长度。注意:仅在函数成功返回时设置此值。
返回值
WEAVE_NO_ERROR
私钥是否已成功提取。
tlv-errors
编织与读取或写入 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

提取私有密钥的访问令牌

WEAVE_ERROR ExtractPrivateKeyFromAccessToken(
  TLVReader & reader,
  TLVWriter & writer
)

读取 Weave 访问令牌并提取私钥。

此函数对给定的 Weave 访问令牌进行解码,并从令牌中提取私钥字段。

详细信息
参数
[in] reader
位于 Weave 访问令牌上的 TLVReader。
[in] writer
要写入私钥的 TLVWriter。
返回值
WEAVE_NO_ERROR
私钥是否已成功提取。
tlv-errors
编织与读取或写入 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

GenerateAndEncodeWeaveECDSASignature

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 错误代码。

GenerateOperationalDeviceCert

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
Weave 操作设备 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
)

InsertRelatedCertificatesIntoWeaveSignature

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

IsCertificateExtensionTag

bool IsCertificateExtensionTag(
  uint64_t tag
)

曲面集

bool IsCurveInSet(
  uint32_t curveId,
  uint8_t curveSet
)

支持的曲线

bool IsSupportedCurve(
  uint32_t curveId
)

IsWeaveIdX509 属性

bool IsWeaveIdX509Attr(
  OID oid
)

IsWeaveX509 属性

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 访问令牌的缓冲区的指针。
accessTokenLen
已编码的访问令牌的长度。
certSet
应在其中加载访问令牌证书的证书集。
decodeFlags
加载证书时应该使用的证书解码标志。
accessTokenCert
引用一个指针,此指针将设置为访问令牌证书的 Weave 证书数据结构。注意:只有在函数成功返回时才设置此指针。
返回值
WEAVE_NO_ERROR
访问令牌证书是否已成功加载。
tlv-errors
与读取 TLV 相关的编织错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他平台特定错误。

加载访问令牌证书

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

将访问令牌中的证书加载到 Weave 证书集中。

此函数从给定的 TLVReader 读取 Weave 访问令牌,并将访问令牌证书加载到指定的 Weave 证书集对象中。如果访问令牌包含一个或多个相关证书,系统也会将这些证书加载到证书集中。

详细信息
参数
reader
紧邻 Weave 访问令牌之前的 TLVReader 对象。
certSet
应在其中加载访问令牌证书的证书集。
decodeFlags
加载证书时应该使用的证书解码标志。
accessTokenCert
引用一个指针,此指针将设置为访问令牌证书的 Weave 证书数据结构。注意:仅在函数成功返回时设置此值。
返回值
WEAVE_NO_ERROR
访问令牌证书是否已成功加载。
tlv-errors
与读取 TLV 相关的编织错误。
cert-errors
与解码 Weave 证书相关的 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 格式的验证哈希值的缓冲区的指针。输出字符串将为 null 终止。此缓冲区应至少为 kDeviceCredentialHashLength + 1。
[in] hashBufSize
hashBuf 所指向的缓冲区大小(以字节为单位)。
返回值
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
指向包含 Weave 设备证书(采用 base-64 格式)的缓冲区的指针。
[in] weaveCertLen
weaveCert 指向的证书值的长度。
[in] weavePrivKey
指向包含 Weave 设备私钥(以 base-64 格式)的缓冲区的指针。
[in] weavePrivKeyLen
由 weavePrivKey 指向的私钥值的长度。
[in] pairingCode
指向包含设备配对代码的缓冲区的指针。
[in] pairingCodeLen
由 matchingCode 指向的配对码值的长度。
[in,out] hashBuf
指向将接收 base-64 格式的验证哈希值的缓冲区的指针。输出字符串将为 null 终止。此缓冲区应至少为 kWeaveProvisioningHashLength + 1。
[in] hashBufSize
hashBuf 所指向的缓冲区大小(以字节为单位)。
返回值
WEAVE_NO_ERROR
方法是否成功。
WEAVE_ERROR_INVALID_STRING_LENGTH
如果其中一个输入值过长 (> 65535)。
WEAVE_ERROR_BUFFER_TOO_SMALL
如果提供的缓冲区过小,无法容纳生成的哈希值。

OIDToWeave 曲线

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
输入时间包含无法在打包证书时间值中表示的年份值。

打包证书日期时间

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
)

PrintCertReference

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

打印认证类型

void PrintCertType(
  FILE *out,
  uint8_t certType
)

PrintCertValidationResults

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

打印 ECDSA 签名

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
)

打印日期

void PrintPackedDate(
  FILE *out,
  uint16_t t
)

打印包装时间

void PrintPackedTime(
  FILE *out,
  uint32_t t
)

PrintWeaveDN

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

PrintWeaveDN

WEAVE_ERROR PrintWeaveDN(
  FILE *out,
  TLVReader & reader
)

打印 WeaveSignature

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 以来的秒数转换为打包证书日期/时间。

详细信息
参数
secondsSinceEpoch
从世界协调时间 (UTC) 1970-01-01 00:00:00 开始计算的秒数。注意:此值与 POSIX time_t 值的值(一直到 2105 年)兼容。
返回值
对应的数据包证书日期/时间。

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
输入时间是否已成功解压。

验证 WeaveSignature

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

验证 WeaveSignature

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
)