nl::Weave::Profiles::Security

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

摘要

枚举

@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 应用密钥库中的所有接口。

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

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

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

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

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

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

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

此命名空间包含 Weave 安全配置文件内用于密码身份验证会话建立 (PASE) 协议的 Weave 中的所有接口。

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

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

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

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

枚举

@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 访问令牌进行解码,并对 TLV 进行编码,以生成 Weave CASE 证书信息结构。系统会将 CertificateInfo 结构中的 EntityCertificate 字段设为访问令牌证书,并将 RelatedCertificates 字段(如果存在)设为访问令牌中的相应字段。

具体说明
参数
accessToken
指向包含已编码的 Weave 访问令牌的缓冲区的指针。
accessTokenLen
已编码的访问令牌的长度。
certInfoBuf
指向应将 CASE 证书信息结构编码到其中的缓冲区的指针。
certInfoBufSize
certInfoBuf 所指向的缓冲区的大小。
certInfoLen
对整数的引用将设为编码后的证书信息结构的长度。注意:此值仅在函数成功返回时设置。
返回值
WEAVE_NO_ERROR
访问 CASE 证书信息结构是否已成功编码。
tlv-errors
Weave 与读取或写入 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
Weave 与读取或写入 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
Weave 与读取或写入 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
Weave 与读取或写入 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
Weave 与读取或写入 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
指向包含 Weave 设备证书的缓冲区(采用 base-64 格式)的指针。
[in] weaveCertLen
weaveCert 所指向的证书值的长度。
[in] weavePrivKey
指向包含 Weave 设备私钥的缓冲区(采用 base-64 格式)的指针。
[in] weavePrivKeyLen
weavePrivKey 所指向的私钥值的长度。
[in] pairingCode
指向包含设备配对代码的缓冲区的指针。
[in] pairingCodeLen
配对码所指向的配对码值的长度。
[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 或之后的日期。当包含在 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
)