# 兼容性对照（Compatibility）

本项目是 **ToolsFx**（<https://github.com/Leon406/ToolsFx>，ISC License，作者 Leon406）的
行为对齐 MoonBit 移植：不复制上游源码，按 MoonBit 习惯重新实现算法。

## 本次移植范围

| ToolsFx 模块 | 本项目状态 | 说明 |
|---|---|---|
| 编解码（Base16/32/58/58Check/62/64/85/91） | ✅ 已完成 | RFC 4648、Bitcoin base58check、ASCII85、basE91 |
| 杂凑（SM3 等） | 🚧 规划中 | GB/T 32905-2016 |
| 对称密码（SM4 等） | 🚧 规划中 | GB/T 32907-2016 |
| 非对称（SM2 等） | 🚧 规划中 | GB/T 32918 系列 |
| 古典密码 / CTF 编码 | 🚧 规划中 | Caesar/ROT/Vigenère/Playfair 等 + 密文识别 |
| 浏览器可视化工作台 | 🚧 规划中 | wasm-gc + GitHub Pages |
| JavaFX 桌面 GUI | ❌ 不移植 | 改为 WASM 网页工作台 |
| 二维码 / OCR / 网络扫描 | ❌ 不移植 | 超出本项目范围 |

## 修改与适配

- 移除 JavaFX 桌面 GUI，改为纯 MoonBit 库 API + 计划中的 WASM 网页工作台；
- 类型体系改为 MoonBit 原生类型（`Bytes` / `String` / `Result` / 类型化错误）；
- 错误处理统一为 `EncodingError`（消息以 codec 名开头，便于定位）；
- 依赖 `cc06b/mooncry`（Apache-2.0）复用通用密码原语，减少重复实现。

## 尚未移植 / 暂不支持

- JavaFX 桌面 GUI；
- 二维码 / OCR / 网络扫描；
- 依赖在线接口的编码（Punycode/URL/Unicode 转义等在路线图中）。

## 依赖与许可证

| 项目 | 许可证 | 关系 |
|---|---|---|
| ToolsFx（Leon406） | ISC | 行为对齐移植来源 |
| cc06b/mooncry | Apache-2.0 | 通用密码原语依赖 |
| toolsfx-moonbit（本仓库） | ISC | — |

## 测试向量来源

- base16 / base32 / base64：RFC 4648 官方向量；
- base58 / base58check：Bitcoin 参考向量（double-SHA256 校验）；
- ASCII85：对照 CPython `binascii.c` 行为；
- basE91：对照 sourceforge basE91 参考实现；
- 全部解码路径补充 quickcheck 往返属性测试。
