Some checks failed
CI / Lint (push) Has been cancelled
修正 cipher_guard_sdk 4 个关键密码学差异使其与老 Flutter 项目 (im-client-im-dev) 和 iOS
EncryptionManager 完全互操作:
1. AES: 显式 SIC/CTR 模式 + 16 zero-byte IV(原 SDK 用随机 IV + KDF 派生密钥)
2. RSA: bare RSAEngine 无 PKCS1 padding(原 SDK 用 PKCS1Encoding)
3. Session key: 32-char alphanumeric ASCII(原 SDK 用 base64 random bytes)
4. Wire format: base64(ciphertext) 无 IV 前缀
新增 EncryptionManager:
- Per-chat round-based key chain(最多 10 rounds/chat,FIFO 淘汰)
- 登录后自动 setup:RSA 密钥对生成/存储 + 公钥上传 + chat 密钥拉取解密
- API 集成:cipher/v2/key/my, key/set, chat/my
- 消息加密返回 JSON envelope {"round":N,"data":"<base64>"}
- 消息解密兼容 JSON envelope + legacy raw base64
集成到消息流:
- SendMessageUseCase: 发送前加密 content → wireContent
- WsMessageService: 收到消息后解密 content + lastMsg
- 无密钥时 fallback 到明文(对齐 iOS 行为)
注意:/app/api/cipher/v2/key/set 仍为预发布接口,仅测试阶段使用
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SDK 開發流程
IDE 開啟方式
請開啟 SDK 項目,不要直接開啟主項目或是根目錄。
- 範例:開發
networks_sdk,請開啟packages/networks_sdk
操作流程
- 開發:在功能分支開發,開發完成後手動更新
pubspec.yaml的版本號。 - 審核:提交 PR,通過測試與 Code Review,合併進入
dev分支。 - 發布:
- 執行
melos run publish:sdk -- <sdk-name> <version>- 範例:
melos run publish:sdk -- networks_sdk v1.1.0
- 範例:
- 執行
- 完成:Tag 已推送到遠端,其他專案可以引用該 Tag。
特殊情況
在一些緊急情況,或是特別難單獨在sdk解決的問題,必須跟主項目一起操作才能重現時, 可以透過指令執行: melos bootstrap:dev
執行後會產生一個 pubspec.overrides.yaml 的檔案,會自動鏈結所有項目強制讀取這個yaml 此時主項目中pubspec.yaml的sdk標籤引用會失效,會直接讀取sdk本地內容,可以幫助解決問題。
注意
如果使用特殊情況開發,開發完後,必須遵守:
- 執行 melos bootstrap:clean 刪除pubspec.overrides.yaml 的檔案(不可提交到gitea)
- 一樣必須走開發流程,不可主項目修改程式與sdk修改提交到同個commit。