nl::Weave::Profiles::Security

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

摘要

枚举

@235 枚举
X.509 证书密钥用途标志。
@236 枚举
X.509 证书密钥用途标记。
@237 枚举
Weave Certificate Flags。
@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 证书信息 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
为指定的一组 Thermostat 设备凭据生成验证哈希值(采用 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 内适用于 Weave 安全配置文件内基于密码经过身份验证的会话建立 (PASE) 协议的所有接口。

nl::Weave::Profiles::Security::Passcodes

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

nl::Weave::Profiles::Security::TAKE

此命名空间包含 Weave Security 配置文件内用于通过令牌身份验证的密钥交换 (TAKE) 协议的 Weave 中的所有接口。

枚举

@235

 @235

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

@236

 @236

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

@237

 @237

Weave Certificate Flags。

包含已加载到 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 证书信息 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
)

ConvertCertificate

WEAVE_ERROR ConvertCertificate(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertDistinguishedName

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
)

ConvertExtensions

WEAVE_ERROR ConvertExtensions(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertSubjectPublicKeyInfo

WEAVE_ERROR ConvertSubjectPublicKeyInfo(
  ASN1Reader & reader,
  TLVWriter & writer
)

ConvertValidity

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

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
)

DecodeConvertSubjectPublicKeyInfo

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
)

DecodeWeaveCert

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

DecodeWeaveCert

WEAVE_ERROR DecodeWeaveCert(
  TLVReader & reader,
  WeaveCertificateData & certData
)

DecodeWeaveDN

WEAVE_ERROR DecodeWeaveDN(
  TLVReader & reader,
  WeaveDN & dn
)

DecodeWeaveECDSASignature

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
)

DescribeWeaveCertId

const char * DescribeWeaveCertId(
  OID attrOID,
  uint64_t weaveCertId
)

DetermineCertType

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
)

ExtractCertFromAccessToken

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
其他特定于平台的错误。

ExtractPrivateKeyFromAccessToken

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
其他特定于平台的错误。

ExtractPrivateKeyFromAccessToken

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

IsCurveInSet

bool IsCurveInSet(
  uint32_t curveId,
  uint8_t curveSet
)

IsSupportedCurve

bool IsSupportedCurve(
  uint32_t curveId
)

IsWeaveIdX509Attr

bool IsWeaveIdX509Attr(
  OID oid
)

IsWeaveX509Attr

bool IsWeaveX509Attr(
  OID oid
)

LoadAccessTokenCerts

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
Weave 与读取 TLV 相关的错误。
cert-errors
与解码 Weave 证书相关的 Weave 错误。
platform-errors
其他特定于平台的错误。

LoadAccessTokenCerts

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
Weave 与读取 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
)

为指定的一组 Thermostat 设备凭据生成验证哈希值(采用 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
指向包含 base-64 格式的 Weave 设备证书的缓冲区的指针。
[in] weaveCertLen
WeaveCert 指向的证书值的长度。
[in] weavePrivKey
指向包含 Base-64 格式的 Weave 设备私钥的缓冲区的指针。
[in] weavePrivKeyLen
weavePrivKey 指向的私钥值的长度。
[in] pairingCode
指向包含设备配对代码的缓冲区的指针。
[in] pairingCodeLen
由 PairCode 指向的配对码值的长度。
[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
如果提供的缓冲区太小,无法保存生成的哈希值。

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 或 2000/01/01 之后的日期。当保存在 16 位无符号整数内时,打包的证书日期可表示截至 2176 年的日期。

详细信息
参数
packedTime
要转换的封装证书日期/时间。
返回值
相应的数据包证书日期。

ParseWeaveIdAttribute

WEAVE_ERROR ParseWeaveIdAttribute(
  ASN1Reader & reader,
  uint64_t & weaveIdOut
)

PrintCert

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
)

PrintCertType

void PrintCertType(
  FILE *out,
  uint8_t certType
)

PrintCertValidationResults

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

PrintECDSASignature

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
)

PrintWeaveSignature

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

SecondsSinceEpochToPackedCertTime

NL_DLL_EXPORT uint32_t SecondsSinceEpochToPackedCertTime(
  uint32_t secondsSinceEpoch
)

将自 1970-01-01 00:00:00 UTC 以来的秒数转换为打包证书的日期/时间。

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

TranslateOpenSSLError

WEAVE_ERROR TranslateOpenSSLError(
  WEAVE_ERROR defaultErr
)

UnpackCertTime

NL_DLL_EXPORT WEAVE_ERROR UnpackCertTime(
  uint32_t packedTime,
  ASN1UniversalTime & time
)

将打包的证书日期/时间解压缩到 ASN.1 世界时间结构中。

详细信息
参数
packedTime
等待解压缩的已打包证书的时间。
time
对用于接收解压缩日期/时间的 ASN1UniversalTime 结构的引用。
返回值
WEAVE_NO_ERROR
如果输入时间已成功解压缩。

VerifyWeaveSignature

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

VerifyWeaveSignature

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
)