
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载本篇技术指南聚焦 libwebsocketslws在 RFC 8152 COSECBOR Object Signing and Encryption方向上的官方自测示例lws-api-test-cose讲解其在当前仓库TEN-framework 以 third_party 形式内嵌 libwebsockets 源码中的位置、构建前提、运行方式与命令行参数并结合main.c、keys.c、sign.c以及公开头文件lws-cose.h逐项拆解它实际验证的 COSE 密钥导入/导出/生成、Sign1/Sign/MAC 签名校验等能力。读完本文你将能够独立编译并运行该自测程序、读懂其 PASS/FAIL 输出并掌握其背后lws_cose_*API 的调用范式。示例概览与仓库位置lws-api-test-cose是 libwebsocketsminimal-examples/api-tests系列中面向 COSE API 的自动回归测试selftest程序源码位于仓库内的 third_party/libwebsockets/minimal-examples/api-tests/api-test-cose/由 4 个文件组成文件职责README.md示例说明构建、用法、预期输出CMakeLists.txtCMake 构建脚本与依赖检查main.c程序入口、上下文创建、汇总测试结果keys.ctest_cose_keys()密钥导入/导出/生成自测sign.ctest_cose_sign()签名与 MAC 校验自测需要说明的是该目录下 README 的标题与示例输出沿用了api-test-lwsac的模板文案标题写作 “lws api test lwsac”运行示例写作./lws-api-test-lwsac实际的可执行文件名为lws-api-test-cose测试对象是 COSE API 而非 lwsac阅读与运行时请以代码与二进制名称为准。所有源码文件均以 CC0 1.0 公有领域协议发布可直接参考与复刻。前置条件与构建该示例的官方构建方式非常简洁在示例目录内执行$ cmake . make但这隐含了严格的构建前提libwebsockets 必须以启用 COSE 与 CBOR 支持的方式构建。CMakeLists.txt 中通过LwsCheckRequirements宏做了显式检查set(requirements 1) require_lws_config(LWS_WITH_COSE 1 requirements) require_lws_config(LWS_WITH_CBOR 1 requirements)即只有当底层 libwebsockets 配置同时打开了LWS_WITH_COSE与LWS_WITH_CBOR两个编译开关时requirements才保持为真lws-api-test-cose才会被真正编译链接add_executable(${SAMP} ${SRCS})否则整个目标被跳过。因此构建前需要先以-DLWS_WITH_COSEON -DLWS_WITH_CBORON配置 libwebsockets 本体。两个额外细节同样值得注意链接方式与 libwebsockets 共享库/静态库的构建形态相关websockets_shared存在时链接websockets_shared否则链接静态websockets并附上LIBWEBSOCKETS_DEP_LIBS依赖库。自测注册add_test(NAME api-test-cose COMMAND lws-api-test-cose)带有一个条件当使用 mbedTLS 且其缺少内部 AES 加密接口LWS_WITH_MBEDTLS AND NOT LWS_HAVE_mbedtls_internal_aes_encrypt时不注册 CTest 测试。也就是说在 OpenSSL 后端下可以放心通过ctest直接跑该自测mbedTLS 后端则取决于其 AES 能力是否完整。在 TEN-framework 仓库中libwebsockets 位于 third_party/libwebsockets/ 下作为内置三方依赖整体参与构建本文所述示例即属于该 vendored 目录的一部分。运行方式与命令行参数编译产物为lws-api-test-cose直接运行即可执行全部自测$ ./lws-api-test-cose程序支持一个命令行选项命令行参数含义-d loglevel以十进制设置日志详细程度debug verbosity例如-d15该参数的解析与日志级别设置位于 main.c默认日志级别为LLL_USER | LLL_ERR | LLL_WARN | LLL_NOTICE的组合当命令行存在-d选项时通过atoi()将其解析为十进制整数并整体覆盖默认级别随后调用lws_set_log_level()生效。测试过程的关键步骤均使用lwsl_user()输出因此即便不调整-d也能看到完整的测试进度与最终结论。运行结束后程序返回码即测试结果main.c中test_cose_keys()与test_cose_sign()的返回值通过按位或result | ...汇总任一失败都会让进程以非零码退出并打印$ ./lws-api-test-cose [2018/10/09 09:14:17:4834] USER: LWS COSE api tests [2018/10/09 09:14:17:4835] USER: Completed: PASSREADME 示例输出中的时间戳来自旧版日志实际运行时间会随当前时间变化首行输出在源码中为lwsl_user(LWS COSE api tests\n)。由于不涉及网络服务main.c在创建 lws context 时使用了CONTEXT_PORT_NO_LISTENmain.c即纯本地运行、不监听任何端口context 创建失败则直接返回 1。自测内容一COSE 密钥 APIkeys.c 中的test_cose_keys()覆盖了lws_cose_key_t的导入、导出与生成三类操作内嵌的 CBOR 原始密钥数据来自 COSE 工作组官方示例集KeySet.txt。密钥导入与类型校验测试逐一对cose_key1~cose_key9执行lws_cose_key_import()并按密钥类型断言导入结果EC2 密钥cose_key1/2/4/6导入后校验ck-kty LWSCOSE_WKKTV_EC2、gencrypto_kty LWS_GENCRYPTO_KTY_EC并逐一比对X、Y、D三个 EC 密钥元素的长度与字节内容对应LWS_GENCRYPTO_EC_KEYEL_X/Y/D。这些原始字节在源文件中以key1_x、key1_y、key1_d等独立常量保存作为期望值参与memcmp()比对。对称密钥cose_key3/5/7/8/9导入后校验kty LWSCOSE_WKKTV_SYMMETRIC、gencrypto_kty LWS_GENCRYPTO_KTY_OCT并比对k值LWS_GENCRYPTO_OCT_KEYEL_K。其中cose_key8与cose_key9的注释标明其 kid 分别为 sec-48HMAC 384与 sec-64HMAC 512对应不同长度的密钥材料。单个密钥导入时pkey_set传 NULL返回值直接是lws_cose_key_t *导入失败返回 NULL 并跳转到bail标签。另有一个可选的回调参数key_import_cb会在每个密钥导入时被调用并打印key type仅cose_key1演示了该用法。密钥使用完毕后均调用lws_cose_key_destroy(ck)释放。密钥集合与导出cose_key_set1是一个 CBOR 数组形式的密钥集合共 9 把钥匙前 8 把与上述单钥一致测试以非空lws_dll2_owner_t set作为pkey_set导入随后用lws_cose_key_set_destroy(set)一次性销毁集合内全部密钥——这正是 lws-cose.h 中lws_cose_key_import()声明的行为传入集合 owner 时会把数组中每个 cose_key 解析为独立的lws_cose_key_t并挂入链表。导出测试针对cose_key1执行先用lws_lec_init()初始化 CBOR 写出上下文lws_lec_pctx_t调用lws_cose_key_export(ck, wc, LWSJWKF_EXPORT_PRIVATE)将私钥导出为 CBOR校验返回值必须为LWS_LECPCTX_RET_FINISHED。这一流程与 README.cbor-cose.md 中“导出 API 复用lws_lec_printf()的 CBOR 写上下文可能返回RET_AGAIN表示缓冲已满需换缓冲继续”的说明一致。密钥生成测试最后调用lws_cose_key_generate()现场生成一把 EC2 密钥ck lws_cose_key_generate(context, LWSCOSE_WKKTV_EC2, (1 LWSCOSE_WKKO_SIGN) | (1 LWSCOSE_WKKO_VERIFY) | (1 LWSCOSE_WKKO_ENCRYPT) | (1 LWSCOSE_WKKO_DECRYPT), 0, P-256, (const uint8_t *)the-keyid, 9);对应 lws-cose.h 中lws_cose_key_generate()的参数语义cose_kty取LWSCOSE_WKKTV_EC2use_mask是(1 LWSCOSE_WKKO_...)位域此处允许 SIGN/VERIFY/ENCRYPT/DECRYPT 四种用途bits对 EC 无效传 0curve取 P-256当前支持的曲线名为 P-256 / P-384 / P-521kid为 the-keyid。生成失败同样直接返回失败。自测内容二签名与 MAC 校验sign.c 中的test_cose_sign()是整套自测最丰富的部分内嵌了 COSE 官方测试向量sign1-tests、sign-tests、hmac-examples以SIGTYPE_*区分消息类型逐一走“建上下文 → 喂 CBOR → 取结果 → 断言”的流程。校验流程骨架每个用例的模式高度统一lws_dll2_owner_clear(set)清空密钥集合用lws_cose_key_import(set, NULL, NULL, keyset1.set, keyset1.len)导入公钥集合填充lws_cose_validate_create_info_t infocx、keyset、sigtype、可选的ext_cb/ext_len调用lws_cose_validate_create(info)创建校验上下文调用lws_cose_validate_chunk(cps, sig, sizeof(sig), NULL)一次性喂入整条签名 CBOR调用lws_cose_validate_results(cps)取出lws_dll2_owner_t结果链表断言o-count 1再经lws_container_of拿到首个lws_cose_validate_res_t依据用例期望断言res-result0 表示校验通过依次lws_cose_validate_destroy()与lws_cose_key_set_destroy()清理。Sign1 用例SIGTYPE_SINGLE对应cose_sign1单算法单密钥签名可单趟校验sign1_pass_01/02/03合法签名分别覆盖无保护头、带外部数据ext_cb提供 12 字节外部载荷以及无 CBOR 包裹标签三种情况期望result 0sign1_pass_01 - no key同样合法的签名但密钥集合为空此时无法判定结果对象存在但result ! 0sign1_fail_01CBOR 标签错误使用0xd9 0x03 0xe6错误标签解析阶段即返回非零失败sign1_fail_02篡改签名字节解析成功但校验结果必须为失败sign1_fail_03篡改算法alg 变为 -999 之类结果必须失败sign1_fail_04头部出现未知算法名 unknown必须失败sign1_fail_06/07保护属性被篡改/被移除必须失败。这组用例完整演示了“解析parse成功”与“校验validate成功”是两回事解析失败是硬错误而解析成功可能产出result ! 0的失败结果上层策略需要自行判断整体有效性——这正是 README.cbor-cose.md 强调的设计动机。Sign 多签名用例SIGTYPE_MULTI对应cose_sign同一载荷可被多把钥匙、多种算法签名。sign_pass_01/02/03期望校验通过sign_fail_01为错误标签在解析期失败sign_fail_02篡改签名、sign_fail_03/04篡改算法-999 与 0、sign_fail_06/07增删保护属性均期望解析成功但结果失败。多个失败用例的测试点正好呼应 RFC 8152 中“受保护属性protected attributes参与签名计算”的机制——任何对保护头的改动都会使签名校验必然失败。MAC 用例HMAC 相关用例区分两类SIGTYPE_MACcose_machmac-01/02/03分别用 HMAC 256/384/512 校验通过hmac-04篡改 MAC 标签必须失败hmac-05覆盖 HS256/64截断标签且通过SIGTYPE_MAC0cose_mac0无 recipient 列表的隐式密钥 MACenc-01/02/03使用 kid 为 our-secret、sec-48、sec-64 的隐式密钥分别完成 HS256/384/512 校验enc-04篡改标签必须失败enc-05为 HS256/64 变体且通过。注意 MAC0 场景导入的是单钥key3/key8/key9而非完整密钥集合。源码中countersignSIGTYPE_COUNTERSIGNED相关用例整体位于#if 0块内且被注释为 not yet supported与 lws-cose.h 中SIGTYPE_COUNTERSIGNED /* not yet supported */及 README.cbor-cose.md 的说明相互印证。底层 COSE API 全景该自测程序是 lws-cose.h 声明能力的直接消费者综合 README.cbor-cose.md可归纳出如下 API 全景能力域API说明密钥导入lws_cose_key_import()单钥或密钥集合CBOR 数组导入可带逐钥回调密钥导出lws_cose_key_export()写出为 CBORLWSJWKF_EXPORT_PRIVATE控制是否含私钥密钥生成lws_cose_key_generate()EC/RSA/对称密钥生成支持用途位域与 kid密钥销毁lws_cose_key_destroy()/lws_cose_key_set_destroy()单钥与集合两种销毁粒度校验上下文lws_cose_validate_create()/_chunk()/_results()/_destroy()分块喂入签名 CBOR产出结果链表支持外部数据回调签名上下文lws_cose_sign_create()/_add()/_payload_chunk()/_destroy()多算法/多密钥签名载荷可分块输入支持的算法与类型在头文件中以枚举固化ECDSAES256/384/512值 -7/-35/-36、EdDSA-8、HMACHS256/64、HS256、HS384、HS512值 4~7、AES-GCM1/2/3、ChaCha20-Poly130524等密钥类型包括 OKP1、EC22、RSA3、SYMMETRIC4等。整个 COSE 层构建在 lws gencrypto 之上通过 TLS 密码库实现OpenSSL 与 mbedTLS 后端行为一致。自测程序的工程价值在 TEN-framework 将 libwebsockets 作为内置三方依赖的场景下lws-api-test-cose这类 api-tests 的价值在于回归保障内嵌官方测试向量含各类 pass/fail 变体与add_testCTest 注册可在 libwebsockets 升级或裁剪编译选项后快速验证 COSE 路径完好API 使用范式keys.c与sign.c的调用序列导入 → 建上下文 → 喂块 → 查结果 → 销毁即lws_cose_*的标准集成模板可直接迁移到实际业务代码行为契约验证解析与校验分离、外部数据ext_cb、多签名结果链表、MAC0 隐式密钥等细节都能从测试断言中反推得到确证。延伸阅读完整的 COSE API 声明与参数注释include/libwebsockets/lws-cose.hCOSE 特性总览含构建开关、支持矩阵、设计动机READMEs/README.cbor-cose.md同系列命令行封装示例minimal-examples/crypto/minimal-crypto-cose-key/与minimal-examples/crypto/minimal-crypto-cose-sign/同样位于 third_party/libwebsockets/ 之下赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐libwebsockets COSE Key 实战用 lws-crypto-cose-key 创建与解析 RFC 8152 密钥libwebsockets COSE Key 实战用 lws crypto cose key 创建与解析 RFC 8152 密钥 本文围绕 libwebsoc人工智能AI Agent多模态语音AI 应用libwebsockets 内置 DHCP 客户端 API 自测lws-api-test-dhcpc 构建、运行与源码解析libwebsockets 内置 DHCP 客户端 API 自测lws api test dhcpc 构建、运行与源码解析 libwebsocketsLWS人工智能AI Agent多模态语音AI 应用libwebsockets 通用加密 API 自测示例解析lws-api-test-gencrypto 的构建、运行与实现原理libwebsockets 通用加密 API 自测示例解析lws api test gencrypto 的构建、运行与实现原理 本篇技术指南围绕 TEN fr人工智能AI Agent多模态语音AI 应用上一篇如何快速搭建Sunshine游戏串流服务器面向新手的完整指南下一篇城通网盘极速下载3分钟告别限速烦恼的免费方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考