hyperpolymath/proven
GitHub: hyperpolymath/proven
基于 Idris 2 依赖类型的形式化验证安全库,通过数学证明保证数学运算、加密、解析和验证操作永不崩溃,支持 120+ 语言绑定。
Stars: 2 | Forks: 0
= proven: 通过 Idris2 实现形式化验证的安全
:toc: macro
:toclevels: 2
:icons: font
:source-highlighter: rouge
*数学上证明安全的操作。* **绝不会崩溃**的代码,通过 Idris2 依赖类型和全函数检查进行验证。
image:https://img.shields.io/badge/version-1.2.0-blue[版本 1.2.0]
image:https://img.shields.io/badge/License-PMPL_1.0--or--later-blue.svg[PMPL-1.0-or-later,link="https://github.com/hyperpolymath/proven/blob/main/LICENSE"]
image:https://img.shields.io/badge/modules-104-blue[104 个模块]
image:https://img.shields.io/badge/bindings-120+_targets-orange[120+ 绑定目标]
image:https://img.shields.io/badge/verified-Idris_2-purple[通过 Idris 2 验证]
image:https://img.shields.io/badge/believe__me-4566_⚠-red[believe_me = 4566 (已知技术债务)]
image:https://img.shields.io/badge/overall-55%25-yellow[总体完成度 55%]
== 许可证
本项目采用 **PMPL-1.0-or-later** 许可。详见 link:LICENSE[LICENSE]。
WARNING: **proven** 是一个 **带有 FFI 绑定的 Idris2 库**,而不是你使用的语言的原生实现。所有计算都在 Idris2 中进行,并具有数学证明。语言绑定通过 FFI 调用此经过验证的代码。
IMPORTANT: **坚不可摧的保证仅适用于 Idris2 代码。** Zig 层必须是*纯 ABI 桥接*,不包含任何安全逻辑。绑定中任何非 Idris 逻辑均被视为未经验证,必须移除。
== proven 有何不同?
*传统库:* 相信作者做对了 +
*proven:* **数学证明**代码不会崩溃
=== 架构
```
Your Application (any of 120+ languages)
↓
Language Binding (thin FFI wrapper)
↓
Zig FFI Bridge (pure ABI layer)
↓
Idris2 Code ← MATHEMATICAL PROOFS HERE
```
**核心实现:** link:src/Proven/[带依赖类型的 Idris2] +
**FFI 桥接:** link:ffi/zig/[用于 C ABI 兼容性的 Zig](无安全逻辑) +
**语言绑定:** 仅调用已验证代码的轻量级封装
== 性能权衡
纯 Idris ABI 最大化了安全性,但引入了 FFI 开销。这是一个
深思熟虑的权衡:**正确性优于速度**。性能改进将
专注于批处理和减少交叉调用,而不会重新引入未经证明的逻辑。
== 迁移状态
该项目正将所有绑定迁移至**纯 Zig ABI 封装**,仅调用
Idris。绑定中任何非 Idris 安全逻辑正被移除或重写。
=== 支持的语言
[.lead]
*通用:* Ada • C • C++ • Crystal • D • Dart • Deno • Elixir • Elm • Erlang • F# • Gleam • Go • Groovy • Haskell • Java • JavaScript • Julia • Kotlin • Lua • Nim • OCaml • Odin • Perl • PHP • Prolog • PureScript • Python • R • Racket • ReScript • Ruby • Rust • Scala • Swift • Tcl • TypeScript • V • Zig
*Shell:* Bash • Fish • PowerShell • Zsh | *函数式:* Clojure • Common Lisp • Guile | *遗留:* COBOL • Forth • Fortran
*配置:* CUE • Dhall • HCL • Jsonnet • JSON-Schema • Nickel • Starlark • YAML-Schema
*领域:* Arduino • Cairo • CMake • GDScript • Ink • MicroPython • Move • Solidity • Svelte • Unity C# • Vue • Vyper
*查询/策略:* CEL • GraphQL • PromQL • Rego | *形式化:* Alloy • TLA+ | *操作系统:* BSD • POSIX
*异构计算:* Janus (可逆) • 神经形态 (SNN) • OpenQASM (量子) • Q# (量子) • SPICE (模拟) • 三进制 (平衡)
*底层:* AssemblyScript • Grain • Malbolge • VHDL • WAT | *伪代码:* Pseudocode
== 模块索引
[cols="1,3", options="header"]
|===
| 类别 | 模块
| *核心安全*
| <> • <> • <> • <> • <> • <>
| *数据格式*
| <> • <> • <> • <> • <> • <> • <> • <> • <> • <> • <> • <>
| *Web 与网络*
| <> • <> • <> • <> • <> • <> • <> • <> • <>
| *安全与认证*
| <> • <> • <> • <> • <> • <> • <> • <> • <>
| *容器与镜像仓库*
| <>
| *输入验证*
| <> • <> • <> • <> • <>
| *系统与 I/O*
| <> • <> • <> • <> • <> • <> • <> • <> • <> • <> • <> • <> • <>
| *高级/分布式*
| <> • <> • <> • <> • <> • <>
| *专用*
| <> • <> • <> • <>
| *数学与物理*
| <> • <> • <> • <> • <> • <> • <>
| *分布式系统*
| <> • <> • <> • <>
| *数据结构*
| <> • <> • <> • <> • <> • <> • <> • <> • <>
| *领域值*
| <> • <> • <> • <>
| *DevOps 与工具*
| <> • <> • <>
| *国际化*
| <>
|===
=== 绑定统计
[cols="1,1,1", options="header"]
|===
| 指标 | 数量 | 备注
| 核心模块
| 104
| Idris 2 验证过的实现(共 258 个 .idr 文件,包括 FFI 封装)
| 绑定目标
| 120+
| 语言、平台和范式(18 个已完成,102 个已搭建脚手架)
| believe_me 计数
| 0
| 已从约 4,566 个实例中消除(于 2026-02-22 修复)
| 总体完成度
| ~55%
| 核心稳固 (100%),应用 (7%),硬件 (0%),便利层 (0%)
|===
=== 绑定类别
[cols="1,1,2", options="header"]
|===
| 类别 | 数量 | 描述
| 通用
| 39
| 传统编程语言 (C, Rust, Python, Go 等)
| Shell/脚本
| 4
| Bash, Fish, PowerShell, Zsh
| 配置
| 8
| CUE, Dhall, HCL, Jsonnet, Nickel, Starlark, JSON/YAML Schema
| 领域特定
| 12
| 游戏开发、区块链、嵌入式、Web 框架
| 查询/策略
| 4
| CEL, GraphQL, PromQL, Rego
| 异构计算
| 6
| 量子 (OpenQASM, Q#), 模拟 (SPICE), 神经形态, 三进制, 可逆 (Janus)
| 形式化方法
| 2
| TLA+, Alloy - 规范语言
| 特定操作系统
| 2
| POSIX 系统调用, BSD (Capsicum, pledge/unveil)
| 底层
| 5
| WebAssembly, VHDL, AssemblyScript, Grain, Malbolge
| 遗留
| 3
| COBOL, Fortran, Forth
| 函数式/Lisp
| 3
| Clojure, Common Lisp, Guile
| 伪代码
| 1
| 人类可读的算法文档
|===
toc::[]
== 问题所在
## [source,python]
# 你凌晨 3 点的代码
## result = 10 / user_input # ZeroDivisionError
data = json.loads(response)["key"] # KeyError
url = urllib.parse.urlparse(user_url) # Malformed URL? Who knows
password = hashlib.md5(pwd).hexdigest() # You just got hacked
regex = re.compile(user_input) # ReDoS attack waiting to happen
html = "" # XSS vulnerability
command = "rm -rf " + user_input # Shell injection
sql = "SELECT * FROM users WHERE name = '" + user_input + "'" # SQL injection
每一行都可能导致你的应用崩溃或制造安全漏洞。
== 解决方案
## [source,python]
from proven import SafeMath, SafeJson, SafeUrl, SafePassword, SafeRegex, SafeHtml, SafeCommand, SafeSql
# 绝不能崩溃。永不。数学上已证明。
## result = SafeMath.div(10, user_input) # 如果为零返回 None,而非异常
data = SafeJson.get(response, "key") # Returns None if missing, typed if present
url = SafeUrl.parse(user_url) # Returns structured error or valid URL
hashed = SafePassword.hash(pwd) # Argon2id, timing-safe, correct parameters
matcher = SafeRegex.compile(user_input, safety=SafeRegex.Safety.STRICT) # ReDoS-proof
safe_html = SafeHtml.escape(user_html) # XSS-proof
command = SafeCommand.build(["rm", "-rf", user_path]) # Injection-proof
query = SafeSql.query("SELECT * FROM users WHERE name = ?", [user_input]) # SQL injection-proof
== “数学上证明”意味着什么
这不是营销噱头。以下是 proven 与普通库的区别:
* proven 中的每个函数都是用 Idris 2 编写的,这是一种具有依赖类型的语言。
* 编译器在代码运行之前就证明了你的代码是正确的。
* 所有 104 个核心模块都有经过验证的实现(自 v1.2.0 起 believe_me=0)。存在 120+ 个绑定目标(18 个完全实现,102 个搭建了 FFI 桩)。总体项目完成度约 55% — 详见 link:TOPOLOGY.md[TOPOLOGY.md] 仪表盘。
=== 理解依赖类型(2 分钟入门)
在大多数语言中,类型与值是分离的:
## [source,python]
## def get_first(items: list) -> int:
return items[0] # Crashes if empty!
类型系统不知道列表是否为空。它只是信任你。
在 Idris 2 中,类型可以依赖于值:
## [source,idris]
## -- 此类型签名要求一个非空列表
getFirst : (items : List Int) -> {auto prf : NonEmpty items} -> Int
`{auto prf : NonEmpty items}` 部分的意思是:“调用者必须提供 items 非空的证明。”如果你尝试用空列表调用它,代码将无法编译。
这是核心理念:用编译时错误代替运行时崩溃。
=== 这如何转化为你的代码
[cols="1,1"]
|===
| 普通代码 | Proven 代码
| “我认为这不会崩溃”
| “编译器证明了这不可能崩溃”
| “我测试过,没问题”
| “在编译时检查了所有可能的输入”
| “它通过了代码审查”
| “定理证明器验证了它”
|===
=== 想了解更多?
证明可在 `src/Proven/` 中找到,我们鼓励你探索它们!理解依赖类型是一项宝贵的技能。这里有一些资源:
* https://idris2.readthedocs.io/en/latest/[Idris 2 教程] — 依赖类型的官方介绍
* https://www.youtube.com/watch?v=__gXFtYmDnQ[Type-Driven Development with Idris] — Edwin Brady 的演讲
* link:docs/PROOFS.md[我们的文档] — 解释本库中的每个证明
也就是说,你完全可以在不理解证明的情况下使用该库——形式化验证的意义就在于编译器已经为你检查了正确性。
== 模块
=== SafeMath — 不会溢出的算术
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `div(a, b)`
| 安全除法,除零时返回 `None`
| `ZeroDivisionError`
| `add_checked(a, b)`
| 带溢出检测的加法
| 静默整数溢出
| `mul_checked(a, b)`
| 带溢出检测的乘法
| 整数溢出利用
| `safeMod(a, b)`
| 安全取模,除零时返回 `None`
| 除以零
| `abs_safe(n)`
| 绝对值(处理 MIN_INT)
| abs(MIN_INT) 时的溢出
| `clamp(lo, hi, value)`
| 将值限制在 [lo, hi] 范围内
| 越界值
| `inRange(value, lo, hi)`
| 检查值是否在边界内
| 差一错误
| `inRangeExcluding(value, lo, hi, excluded)`
| 带排除列表的范围检查
| 禁止值绕过
| `fromString(str)`
| 安全整数解析
| `NumberFormatException`, NaN
| `fromStringInRange(str, lo, hi)`
| 带范围验证的解析
| 无效输入 + 越界
|===
## [source,python]
from proven import SafeMath
## SafeMath.div(10, 2) # 5
SafeMath.div(10, 0) # None (not an exception!)
SafeMath.add_checked(2**63 - 1, 1) # None (overflow detected)
SafeMath.add_checked(5, 3) # 8
=== SafeString — 不会损坏的文本
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `decode_utf8(bytes)`
| 安全 UTF-8 解码
| `UnicodeDecodeError`
| `escape_sql(s)`
| SQL 注入预防
| SQL 注入攻击
| `escape_html(s)`
| XSS 预防
| 跨站脚本攻击
| `escape_js(s)`
| JavaScript 字符串转义
| 字符串中的 JS 注入
| `truncate(s, n)`
| 安全截断(尊重字素)
| 在表情符号中间截断
| `toCodePoints(s)`
| 将字符串转换为 ASCII 码位
| 编码损坏
| `fromCodePoints(codes)`
| 将码位转换为字符串
| 无效字符创建
| `isAscii(s)`
| 检查字符串是否为纯 ASCII (0-127)
| 非 ASCII 字节注入
| `isPrintableAscii(s)`
| 检查字符串是否为可打印 ASCII (32-126)
| 控制字符注入
|===
## [source,python]
from proven import SafeString
## SafeString.decode_utf8(b"\xff\xfe") # None (无效 UTF-8)
SafeString.decode_utf8(b"hello") # "hello"
SafeString.escape_sql("'; DROP TABLE users;--") # "'' ; DROP TABLE users;--" (neutralized)
=== SafeHex — 不会损坏的十六进制
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `encode(bytes)`
| 将字节转换为十六进制字符串
| 编码错误
| `encodeUppercase(bytes)`
| 将字节转换为大写十六进制
| 大小写不一致
| `encodeSpaced(bytes)`
| 带空格的十六进制显示 (`48 65 6c`)
| 可读性问题
| `encodeSpacedUppercase(bytes)`
| 大写带空格的十六进制
| 显示格式错误
| `decode(hex)`
| 将十六进制字符串转换为字节
| 无效十六进制时的 `ValueError`
| `isValidHex(s)`
| 验证十六进制字符串格式
| 畸形十六进制绕过
| `constantTimeEqual(a, b)`
| 时序安全的十六进制比较
| 时序攻击
| `xorHex(a, b)`
| 对两个十六进制字符串进行异或
| 长度不匹配错误
|===
## [source,python]
from proven import SafeHex
## SafeHex.encode([72, 101, 108, 108, 111]) # "48656c6c6f"
SafeHex.encodeSpaced([72, 101, 108]) # "48 65 6c"
SafeHex.decode("48656c6c6f") # [72, 101, 108, 108, 111]
SafeHex.decode("invalid") # Error(InvalidCharacter)
SafeHex.constantTimeEqual("abc", "abc") # True (timing-safe)
=== SafeJson — 不会意外失败的解析
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `parse(s)`
| 安全 JSON 解析
| `JSONDecodeError`
| `get(obj, key)`
| 安全键访问
| `KeyError`
| `get_path(obj, path)`
| 安全嵌套访问
| 链式 `KeyError`
| `get_int(obj, key)`
| 类型化提取
| 类型混淆
|===
## [source,python]
from proven import SafeJson
## data = SafeJson.parse('{"name": "Alice", "age": 30}')
SafeJson.get(data, "name") # "Alice"
SafeJson.get(data, "missing") # None
SafeJson.get_int(data, "age") # 30
SafeJson.get_int(data, "name") # None (wrong type)
SafeJson.parse("not json") # Error object with details, not exception
=== SafeUrl — 无法被利用的 URL
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `parse(s)`
| 符合 RFC 3986 的解析
| 畸形 URL 崩溃
| `is_safe_redirect(url, allowed)`
| 开放重定向预防
| 开放重定向攻击
| `normalize(url)`
| URL 规范化
| URL 绕过攻击
| `get_path_safe(url)`
| 无遍历的路径
| `../../../etc/passwd`
|===
## [source,python]
from proven import SafeUrl
url = SafeUrl.parse("https://example.com/path?query=1#hash")
url.scheme # "https"
url.host # "example.com"
url.path # "/path"
## SafeUrl.parse("not a url") # 错误对象,而非异常
SafeUrl.is_safe_redirect("https://evil.com", allowed=["example.com"]) # False
=== SafeHTTP — URL 编码与认证头解析
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `url_encode(s)`
| RFC 3986 百分号编码
| URL 注入、畸形参数
| `url_decode(s)`
| 带验证的百分号解码
| 双重编码攻击
| `parse_www_authenticate(header)`
| OAuth2/Registry 质询解析
| 认证头注入
|===
## [source,python]
from proven import SafeHTTP
encoded = SafeHTTP.url_encode("hello world") # "hello%20world"
decoded = SafeHTTP.url_decode("hello%20world") # "hello world"
# 解析 Docker Registry v2 认证质询
## challenge = SafeHTTP.parse_www_authenticate(
'Bearer realm="https://auth.io/token",service="registry"'
)
challenge.realm # "https://auth.io/token"
challenge.service # "registry"
=== SafeRegistry — OCI 镜像引用解析
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `parse(ref)`
| 解析 [registry/]repo[:tag][@digest]
| 畸形镜像引用
| `normalize(ref)`
| 应用 Docker Hub 默认值
| 镜像仓库混淆攻击
| `has_digest(ref)`
| 检查内容寻址引用
| 可变标签漏洞
|===
## [source,python]
from proven import SafeRegistry
ref = SafeRegistry.parse("ghcr.io/user/repo:v1.0")
ref.registry # "ghcr.io"
ref.repository # "user/repo"
ref.tag # "v1.0"
# Docker Hub 简写
ref = SafeRegistry.parse("nginx")
ref.registry # "docker.io" (default)
ref.repository # "library/nginx" (official images)
ref.tag # "latest" (default)
# 摘要固定引用
## ref = SafeRegistry.parse("nginx@sha256:abc123...")
ref.has_digest # True
ref.to_canonical() # "docker.io/library/nginx:latest@sha256:abc123..."
=== SafeDigest — 加密哈希操作
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `parse(digest)`
| 解析 "algorithm:hex" 格式
| 畸形摘要、长度错误
| `verify(expected, actual)`
| 常量时间比较
| 摘要验证中的时序攻击
| `is_valid(digest)`
| 验证摘要字符串
| 无效哈希格式
|===
## [source,python]
from proven import SafeDigest
digest = SafeDigest.parse("sha256:e3b0c44298fc1c149afbf4c8...")
digest.algorithm # SHA256
digest.value # "e3b0c44298fc1c149afbf4c8..."
# 常量时间验证(抵抗计时攻击)
expected = SafeDigest.parse("sha256:abc123...")
actual = SafeDigest.parse("sha256:abc123...")
SafeDigest.verify(expected, actual) # True (constant-time)
# 支持 SHA256, SHA384, SHA512, Blake3
## SafeDigest.is_valid("sha512:cf83e1357eefb8bd...") # True
SafeDigest.is_valid("md5:abc123") # False (insecure algorithm)
=== SafeEmail — 真正有效的验证
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `is_valid(s)`
| 符合 RFC 5321 的检查
| 接受无效电子邮件的错误正则
| `parse(s)`
| 提取本地/域部分
| 通过电子邮件字段注入
| `normalize(s)`
| 小写、修剪、规范化
| 大小写敏感错误
|===
## [source,python]
from proven import SafeEmail
SafeEmail.is_valid("user@example.com") # True
SafeEmail.is_valid("not an email") # False
SafeEmail.is_valid("user@localhost") # True (valid per RFC)
## email = SafeEmail.parse("User@Example.COM")
email.local # "user"
email.domain # "example.com" (normalised)
=== SafePath — 无法逃逸的文件系统访问
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `join_safe(base, user_path)`
| 安全路径连接
| 路径遍历攻击
| `is_within(path, base)`
| 检查包含关系
| 目录逃逸
| `sanitize(filename)`
| 移除危险字符
| 空字节注入、特殊字符
|===
## [source,python]
from proven import SafePath
## SafePath.join_safe("/var/uploads", "file.txt") # "/var/uploads/file.txt"
SafePath.join_safe("/var/uploads", "../../../etc/passwd") # Error: path traversal detected
SafePath.sanitize("file\x00.txt") # "file.txt" (null byte removed)
=== SafeCrypto — 你不会搞砸的密码学
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `hash_sha3(data)`
| SHA-3 哈希
| 使用破碎的算法
| `hash_blake3(data)`
| BLAKE3 哈希
| 哈希速度慢
| `random_bytes(n)`
| 加密随机性
| 在安全场景使用 `random.random()`
| `constant_time_eq(a, b)`
| 时序安全比较
| 时序攻击
|===
## [source,python]
from proven import SafeCrypto
## token = SafeCrypto.random_bytes(32) # 加密随机性
digest = SafeCrypto.hash_sha3(b"data")
digest = SafeCrypto.hash_blake3(b"data") # Faster
SafeCrypto.constant_time_eq(user_token, stored_token) # Timing-safe
=== SafePassword — 正确完成的认证
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `hash(password)`
|on2id 哈希
| MD5, SHA1, bcrypt 弱点
| `verify(password, hash)`
| 时序安全验证
| 时序攻击
| `is_strong(password)`
| 强度检查
| 弱密码
|===
## [source,python]
from proven import SafePassword
hashed = SafePassword.hash("user_password") # Argon2id
if SafePassword.verify("user_password", hashed):
print("Login successful")
## SafePassword.is_strong("password123") # False
SafePassword.is_strong("c0rr3ct-h0rs3-b4tt3ry-st4pl3") # True
=== SafeRegex — 不会 ReDoS 的正则表达式
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `compile(pattern, safety)`
| 复杂度受限的正则
| 灾难性回溯
| `test(pattern, input)`
| 安全正则匹配
| ReDoS 攻击
| `match(pattern, input)`
| 安全正则捕获
| 资源耗尽
|===
## [source,python]
from proven import SafeRegex
## matcher = SafeRegex.compile("((a+)+)", safety=SafeRegex.Safety.STRICT) # 拒绝危险模式
SafeRegex.test("^[a-z]+$", "abc123") # False (safe matching)
=== SafeHTML — 无法 XSS 的 HTML
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `escape(content)`
| 上下文感知转义
| XSS 攻击
| `sanitize(html, policy)`
| 基于白名单的清理
| 脚本标签注入
| `element(tag, attrs, children)`
| 类型安全的 HTML 构建
| 畸形 HTML
|===
## [source,python]
from proven import SafeHtml
## safe = SafeHtml.escape("") # "<script>..."
sanitized = SafeHtml.sanitize("hello", policy=SafeHtml.Policy.STANDARD)
div = SafeHtml.element("div", {"class": "safe"}, ["Hello"])
=== SafeCommand — 无法注入的 Shell 命令
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `build(args)`
| 安全命令构建
| Shell 注入
| `escape(arg)`
| 参数转义
| 元字符利用
| `is_dangerous(command)`
| 危险模式检测
| 意外的危险命令
|===
## [source,python]
from proven import SafeCommand
## command = SafeCommand.build(["grep", user_input, "file.txt"]) # 防注入
SafeCommand.escape("; rm -rf /") # Escaped string
=== SafeSQL — 无法注入的 SQL
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `query(sql, params)`
| 参数化查询
| SQL 注入
| `identifier(name)`
| 安全标识符引用
| 表/列注入
| `is_safe(sql)`
| 注入分析
| 意外漏洞
|===
## [source,python]
from proven import SafeSql
## query = SafeSql.query("SELECT * FROM users WHERE name = ?", [user_input])
SafeSql.identifier("user_table") # Safely quoted identifier
=== SafeJWT — 无法伪造的 Token
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `sign(payload, key, algorithm)`
| 安全 JWT 签名
| 算法混淆
| `verify(token, key)`
| 时序安全验证
| Token 篡改
| `decode(token)`
| 安全载荷提取
| 畸形 Token
|===
## [source,python]
from proven import SafeJwt
## token = SafeJwt.sign({"user": 123}, "secret", algorithm="HS256")
payload = SafeJwt.verify(token, "secret")
=== SafeNetwork — 无法被滥用的网络原语
[cols="1,1,1"]
|===
| 函数 | 功能 | 防止的问题
| `parse_ip(s)`
| IPv4/IPv6 解析
| 无效 IP 崩溃
| `parse_cidr(s)`
| CIDR 表示法解析
| 子网计算错误
| `is_valid_port(n)`
| 端口验证
| 无效端口号
|===
## [source,python]
from proven import SafeNetwork
## ip = SafeNetwork.parse_ip("192.168.1.1")
cidr = SafeNetwork.parse_cidr("192.168.1.0/24")
SafeNetwork.is_valid_port(8080) # True
== 高级模块
这些模块为分布式系统、状态机和资源管理提供形式化验证的实现。
=== SafeStateMachine — 带可逆性证明的状态机
类型安全的状态机,无效转换为编译时错误。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `ReversibleOp`
| 带正向/反向函数的操作
| `inverse . forward = id`
| `HistoryMachine`
| 带撤销/重做的状态机
| 撤销返回到先前状态
| `DFA`
| 确定性有限自动机
| 确定性地接受/拒绝
| `GuardedTransition`
| 带前置/后置条件的转换
| 条件得到满足
|===
=== SafeGraph — 带环检测证明的有向图
类型安全的有向图和 DAG,带有编译时无环证明。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `DAG`
| 有向无环图类型
| 图不包含环
| `Acyclic`
| 无环证明
| 拓扑排序存在
| `topoSort`
| 拓扑排序
| 输出遵循边顺序
| `PathExists`
| 路径存在证明
| 可达性已验证
|===
=== SafeTransaction — 带隔离证明的 ACID 事务
形式化验证的事务语义,带有提交/回滚保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `IsolationLevel`
| 读未提交到可串行化
| 隔离保证成立
| `Transaction`
| 类型化事务状态
| Active/Committed/RolledBack 状态
| `TwoPhaseCommit`
| 分布式提交协议
| 全有或全无语义
| `MVCC`
| 多版本并发
| 快照隔离正确性
|===
=== SafeConsensus — 带法定人数证明的分布式共识
Raft 和 Paxos 共识原语,带有数学法定人数保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Quorum`
| 多数证明类型
| `votes > total / 2`
| `RaftNode`
| Raft 协议状态机
| 领导者选举正确性
| `VectorClock`
| 因果关系跟踪
| 发生于之前关系
| `Agreement`
| 共识协定证明
| 所有已决定节点具有相同值
|===
=== SafeCapability — 带委托证明的基于能力的安全
类型安全的能力,带有权限层次结构和撤销。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Capability`
| 权限授予类型
| 持有者拥有权限
| `attenuate`
| 减少权限
| 新权限 ⊆ 原始权限
| `ConfinedCapability`
| 域受限能力
| 无法泄漏到域外
| `AuditedStore`
| 带审计日志的能力存储
| 所有访问均被记录
|===
=== SafeOrdering — 带因果关系证明的时序排序
发生于之前关系和带有传递性证明的逻辑时钟。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `HappensBefore`
| Lamport 排序关系
| 传递性成立
| `VectorTimestamp`
| 向量时钟实现
| 正确捕获因果关系
| `CausalDelivery`
| 因果消息排序
| 消息按顺序传递
| `PlausibleClock`
| 混合逻辑时钟
| 物理/逻辑一致性
|===
=== SafeResource — 带泄漏预防的资源生命周期
线性资源跟踪,带有 RAII 风格保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Resource`
| 类型化生命周期状态
| 状态转换有效
| `Linear`
| 一次性语义
| 资源恰好使用一次
| `ResourcePool`
| 有界资源池
| 池永不过载
| `LeakDetector`
| 跟踪获取/释放
| 当 `NoLeaks` 成立时无泄漏
|===
=== SafeSchema — 带兼容性证明的 Schema 迁移
类型安全的 Schema 演进,带有向前/向后兼容性保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Migration`
| 带 up/down 的 Schema 更改
| 回滚逆转迁移
| `isBackwardCompatible`
| 兼容性检查
| 旧读取器可读新数据
| `MigrationChain`
| 迁移序列
| 链是连续的
| `VersionedSchema`
| 带弃用的 Schema
| 弃用时间线已跟踪
|===
=== SafeFloat — IEEE 754 浮点安全
溢出、下溢和浮点特殊值处理。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `FiniteFloat`
| 非 NaN、非 Inf 浮点数
| 值是有限的
| `safeDiv`
| 带 NaN/Inf 检查的除法
| 结果有效或为错误
| `safeSqrt`
| 非负数的平方根
| 输入非负
| `ULP`
| 最后一位单位
| 精度界限
|===
=== SafeTensor — 维度安全的张量操作
形状检查的张量操作,用于数值计算。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Tensor`
| N 维数组
| 形状静态已知
| `matmul`
| 矩阵乘法
| 内部维度匹配
| `broadcast`
| 形状广播
| 满足广播规则
| `reshape`
| 张量重塑
| 元素数量保持不变
|===
=== SafeML — 机器学习安全
类型安全的 ML 原语,带有数值稳定性保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Probability`
| [0,1] 中的值
| 满足边界
| `softmax`
| 数值稳定的 softmax
| 输出总和为 1
| `crossEntropy`
| 安全交叉熵损失
| 无 log(0) 错误
| `normalize`
| 安全归一化
| 处理零向量
|===
=== SafePolicy — AST 级策略执行
基于区域的策略执行,带有冲突检测和审计跟踪。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `ZoneClass`
| 可变/不可变/混合/受限区域
| 区域边界受尊重
| `PolicyRule`
| 条件操作规则
| 规则确定性地评估
| `evaluatePolicy`
| 上下文策略评估
| 第一个匹配规则生效
| `findConflicts`
| 检测规则冲突
| 无同优先级矛盾
|===
=== SafeBuffer — 有界缓冲区管理
具有溢出预防证明的固定容量缓冲区。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Buffer`
| 固定容量缓冲区
| 计数 ≤ 容量
| `HasSpace`
| 空间可用性证明
| 写入将成功
| `RingBuffer`
| 循环缓冲区
| 环回正确
| `StreamBuffer`
| 感知背压的缓冲区
| 尊重高/低水位线
|===
=== SafeProvenance — 带审计证明的变更跟踪
数据血缘和审计跟踪完整性验证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `ProvenanceChain`
| 哈希链接的变更历史
| 链完整性可验证
| `Lineage`
| 数据派生跟踪
| 来源归属保留
| `AuditTrail`
| 密封审计日志
| 密封后无修改
| `detectTampering`
| 篡改检测
| 哈希链完整
|===
=== SafeTree — 带覆盖证明的树遍历
类型安全的树构建、和操作。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `DepthTree`
| 深度跟踪树类型
| 不能超过最大深度
| `ValidPath`
| 到节点的路径证明
| 导航将成功
| `TreeZipper`
| 高效导航
| 往返保留结构
| `mapTree`
| 转换所有值
| 结构保留
|===
== 数学与物理模块
=== SafeAngle — 带回绕安全的角度处理
类型安全的角度操作,带有自动规范化和单位转换。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Angle`
| 弧度角 (-π, π]
| 值始终规范化
| `fromDegrees`
| 从度数转换
| 正确转换
| `sin`, `cos`, `tan`
| 三角函数
| 处理边缘情况
| `lerp`, `slerp`
| 角度插值
| 采用最短路径
|===
=== SafeProbability — 带分布操作的概率值
类型安全的概率值,保证在 [0, 1] 范围内,带有贝叶斯操作。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Probability`
| [0, 1] 中的值
| 满足边界
| `bayesUpdate`
| 后验计算
| 结果在有效范围内
| `shannonEntropy`
| 信息熵
| 处理边缘情况
| `Distribution`
| 概率分布
| 值总和为 1
|===
=== SafeUnit — 带量纲分析的物理单位
类型安全的物理量,带有编译时量纲检查。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Quantity`
| 带量纲的值
| 单位被跟踪
| `mul`, `div`
| 量算术
| 量纲正确计算
| `convert`
| 单位转换
| 相同量纲
| `add`
| 量相加
| 需要相同量纲
|===
=== SafeFiniteField — 有限域算术
用于密码学的素域 GF(p) 和二元域 GF(2^n) 算术。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `PrimeField`
| GF(p) 算术
| 运算 mod p
| `BinaryField`
| GF(2^n) 算术
| 多项式算术
| `inverse`
| 模逆
| 扩展欧几里得算法
| `legendre`
| 二次剩余测试
| 正确计算符号
|===
== 分布式系统模块
=== SafeMonotonic — 单调计数器和逻辑时钟
用于分布式系统的 Lamport 时钟、混合逻辑时钟和版本向量。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `MonotonicCounter`
| 永不递减计数器
| 单调性保持
| `LamportClock`
| 逻辑时间戳
| 捕获因果关系
| `HybridLogicalClock`
| 物理 + 逻辑时间
| 有界时钟偏差
| `VersionVector`
| 分布式因果关系
| 发生于之前关系
|===
=== SafeRateLimiter — 带令牌桶和滑动窗口的速率限制
类型安全的速率限制,带有可配置策略。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `TokenBucket`
| 令牌桶算法
| 速率有界
| `LeakyBucket`
| 流量整形
| 输出速率受限
| `SlidingWindow`
| 基于窗口的计数
| 计数准确
| `AdaptiveRateLimiter`
| 动态调整
| 响应负载
|===
=== SafeCircuitBreaker — 容错熔断器模式
熔断器模式的状态机实现。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `CircuitBreaker`
| 闭合/断开/半开状态
| 有效状态转换
| `recordSuccess`
| 跟踪成功调用
| 状态正确更新
| `recordFailure`
| 跟踪失败
| 阈值检查
| `allowRequest`
| 检查是否允许请求
| 依赖状态的决定
|===
=== SafeRetry — 带指数退避的重试策略
可配置的重试机制,带有抖动和截止时间。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `RetryConfig`
| 重试策略配置
| 有效参数
| `exponentialBackoff`
| 指数延迟增长
| 受最大延迟限制
| `jitter`
| 随机化延迟
| 防止惊群效应
| `DeadlineRetryState`
| 感知截止时间的重试
| 尊重截止时间
|===
== 数据结构模块
=== SafeQueue — 有界队列和优先队列
类型安全的带背压支持的有界队列。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `BoundedQueue`
| 固定容量队列
| 大小 ≤ 容量
| `PriorityQueue`
| 最小堆优先队列
| 顺序保持
| `RingBuffer`
| 循环缓冲区
| 环回正确
| `BackpressureQueue`
| 高/低水位线
| 信号受尊重
|===
=== SafeBloom — 带误报率界限的布隆过滤器
空间高效的概率数据结构,带有 FPR 保证。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `BloomFilter`
| 固定大小过滤器
| FPR 可计算
| `optimalBits`
| 计算最优大小
| 针对目标 FPR 最小化
| `CountingBloomFilter`
| 支持移除
| 计数有界
| `ScalableBloomFilter`
| 按需增长
| FPR 保持
|===
=== SafeLRU — 带 TTL 支持的 LRU 缓存
带生存时间和统计信息的有界 LRU 缓存。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `LRUCache`
| 最近最少使用驱逐
| 大小 ≤ 容量
| `TimedLRUCache`
| 带 TTL 的条目
| 尊重过期
| `StatsLRUCache`
| 命中/未命中跟踪
| 准确统计
| `hitRate`
| 计算命中率
| 正确计算
|===
== 领域值模块
=== SafeColor — 带色域钳制的颜色处理
类型安全的颜色,带有转换和 WCAG 可访问性合规。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `RGB`, `RGBA`
| [0, 255] 中的颜色值
| 边界强制
| `rgbToHsl`, `hslToRgb`
| 颜色空间转换
| 正确变换
| `contrastRatio`
| WCAG 对比度计算
| 可访问性检查
| `parseHex`
| 十六进制颜色解析
| 有效格式
|===
=== SafeGeo — 带距离计算的地理坐标
类型安全的纬度/经度,带有半正矢距离和方位角计算。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `Latitude`
| [-90, 90] 中的值
| 有效范围
| `Longitude`
| [-180, 180] 中的值
| 已规范化
| `haversineDistance`
| 大圆距离
| 正确计算
| `BoundingBox`
| 地理边界
| 有效矩形
|===
=== SafeVersion — 语义版本解析和比较
符合 SemVer 2.0.0 的版本解析,带有范围约束。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `SemVer`
| Major.minor.patch
| 有效组件
| `parseSemVer`
| 解析版本字符串
| 符合 SemVer
| `compareSemVer`
| 版本比较
| 正确排序
| `VersionRange`
| 约束检查
| 可满足性检查
|===
=== SafeChecksum — CRC 和哈希函数
用于数据完整性的非加密校验和和哈希。
[cols="1,1,1"]
|===
| 特性 | 功能 | 证明内容
| `crc32`, `crc32c`
| CRC-32 变体
| 正确多项式
| `adler32`
| Adler-32 校验和
| 正确算法
| `fletcher16/32/64`
| Fletcher 校验和
| 正确计算
| `luhnValidate`
| Luhn 算法
| 数字验证
|===
== 安装
=== Rust
## [source,bash]
## cargo add proven
=== Deno / JavaScript
## [source,bash]
# Deno (推荐)
import { SafeMath, SafeJson } from "jsr:@proven/core";
# Node.js
## npx jsr add @proven/core
=== Python
## [source,bash]
# 使用 pipx (推荐)
pipx install proven
# 使用 pip
## pip install proven
=== Go
## [source,bash]
## go get github.com/hyperpolymath/proven
=== Zig
## [source,bash]
# 添加到您的 build.zig
## executable.addModule("proven", .{
.source_file = .{ .file = "path/to/proven.zig" }
})
=== Guile Scheme
## [source,bash]
# 添加到加载路径
export GUILE_LOAD_PATH="/path/to/proven/bindings/guile:$GUILE_LOAD_PATH"
# 在 Guile 中
## (use-modules (proven))
=== Nickel
## [source,nickel]
# 导入库
## let proven = import "path/to/proven.ncl" in
{
server.port | proven.SafeNetwork.Port = 8080,
}
=== 开发环境(Idris 2 核心)
## [source,bash]
# 主要 (pack)
pack install-deps
# Guix 回退
guix time-machine -C guix/channels.scm -- \
shell -m guix/manifest.scm
# Nix 回退
nix-shell nix/shard.nix
# 锁定周期 (Guix master + nixpkgs-unstable)
# 每月第一个周六,加上 CVE 驱动的更新:
## ./scripts/update-env-pins.sh
=== 89 个绑定目标
适用于传统语言、配置语言、领域特定语言和异构计算范式的绑定。有关特定语言的文档,请参阅 `bindings/` 目录。
除传统语言外的重要新增内容:
* **量子计算**:OpenQASM 3.0, Q# - 安全量子位操作、有界角度、概率验证
* **模拟计算**:SPICE - 有界电压/电流源、用于电路模拟的安全运算放大器
* **神经形态**:尖峰神经网络 - 安全膜电位、STDP、LIF 神经元
* **可逆计算**:Janus - 带朗道极限跟踪的双射操作
* **三进制计算**:平衡三进制(Setun 兼容)- 安全 tryte 算术
* **形式化方法**:TLA+, Alloy - 安全不变量的规范
* **操作系统安全**:POSIX 系统调用封装,BSD Capsicum/pledge/unveil
== 工作原理(好奇者进阶)
## [ascii]
## ┌─────────────────────────────────────────────────────────────────┐
│ Your App (120+ targets) │
│ Traditional languages • Config • Domain-specific • Exotic │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Language Bindings (auto-generated) │
│ Python: ctypes | Rust: bindgen | JS: WebAssembly │
│ Go: cgo | Zig: native | Quantum: OpenQASM/Q# | SPICE: lib │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Zig FFI Bridge Layer │
│ Cross-platform • Memory safe • Stable ABI guaranteed │
│ (see: github.com/hyperpolymath/idris2-zig-ffi) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Idris 2 Verified Core (v1.1.0) │
│ │
│ • 104 modules with dependent types: compiler PROVES code ││ is correct │
│ • Total functions: every input produces valid output │
│ • No runtime exceptions: impossible by construction │
│ • ECHIDNA integration for CI verification │
│ │
│ Used by: aerospace, automotive, financial, blockchain │
│ Inspiration: HACL* (Firefox, Linux kernel, WireGuard) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Verification Layer │
│ ECHIDNA (multi-prover) ◄─── echidnabot (CI) │
│ Coq │ Lean │ Agda │ Z3 │ Idris2 │
└─────────────────────────────────────────────────────────────────┘
== 常见问题
Q: 这会很慢吗?::
不。Idris 2 编译成 C,然后由 Zig 优化。基准测试显示大多数操作的性能在手写 C 的 5-15% 以内。加密函数通常更快,因为它们使用避免分支预测错误的常量时间实现。
Q: 我需要学习 Idris 2 吗?::
完全不需要(但你会爱上它的!)。该库绑定的工作方式类似于你语言中的任何标准库。但是,如果你对形式化验证感兴趣,理解 Idris 2 源代码将帮助你理解为什么保证如此强大。
Q: 如果我发现错误怎么办?::
如果你在 proven 中发现错误,你可能发现了以下之一的错误:
1. 语言绑定(我们的错误,请报告)
2. Idris 2 编译器(极其罕见)
3. 你对函数的理解(查看文档)
核心逻辑在数学上是经过证明的。但绑定是由人类编写的。
Q: 为什么不直接使用现有的库?::
[cols="1,1"]
|===
| 库 | 问题
| `json` (Python)
| 对无效输入抛出异常
| `hashlib` (Python)
| 允许你使用 MD5、SHA1 和其他破碎的算法
| `urllib` (Python)
| API 复杂,容易误用,可能发生路径遍历
| `bcrypt` (多种)
| 静默地将密码截断为 72 字节
| `random` (Python)
| 非加密安全(人们仍然用它生成令牌)
|===
Q: 这是否可用于生产环境?::
是的,自 v1.0.0 起。所有核心模块和绑定均已完成。安全审计已通过,全面的测试套件,以及用于证明验证的 ECHIDNA 集成。
Q: 我正在使用 Rust... 我的代码难道不是无敌的吗?
Rust 的借用检查器和内存安全保证非常出色,但它们并不涵盖所有崩溃向量:
* 逻辑错误(例如,整数溢出、不正确的业务逻辑)仍然可能通过。
* 如果不进行审计,FFI/unsafe 块可能会引入漏洞。
* 并发错误(例如,死锁、竞态条件)无法在编译时捕获。
* 生态系统风险(例如,依赖项中的 unsafe、不正确的 panic 处理)仍然存在。
proven 通过以下方式补充 Rust:
* 为逻辑添加形式化验证(例如,SafeMath, SafeRegex)。
* 为常见陷阱提供防崩溃抽象(例如,SafePath, SafeSql)。
* 为 Rust 提供 Zig FFI 绑定,以利用 proven 的验证模块,而无需重写代码库。
* ECHIDNA 集成用于关键路径的 CI 验证。
把它想象成你无敌跑车的安全带。
Q: 我正在使用 Python... 我以为代码就是注定要崩溃的?
Python 的动态性很强大,但崩溃并非不可避免!proven 的 Python 绑定让你能够:
用编译时保证(通过 Idris 2 证明)替换 try/except 意大利面代码。
为容易出错的操作使用类型安全的替代方案:
* SafeJson.parse() → 不再有 KeyError 或 JSONDecodeError。
* SafePath.join_safe() → 不再有 ../../../etc/passwd 利用。
* SafeRegex.compile() → 不再有 ReDoS 攻击。
在消除整类运行时错误的同时保持 Python 的人体工程学。
性能开销?~1–5%(几乎总是比手写的防御性代码快)。
崩溃是一种选择。选择不崩溃。
== 路线图
=== v1.1.0(当前版本)
* ✅ 104 个核心模块,带有依赖类型证明(从 v1.0.0 的 74 个扩展)
* ✅ Zig 桥接层的 14 个新 FFI 导出
* ✅ SPDX 头标准化为 PMPL-1.0-or-later
* ✅ 证明修复:SafeCapability, ECHIDNA/Soundness, SafeFloat
* ✅ SafeCert FFI 主机名匹配与源模块对齐
* ✅ SafeML FFI parsePositive 替换为标量构建块
* ✅ ipkg 重复模块条目已清理
* ✅ 所有 TODO 桩转换为文档注释
=== v1.0.0
* ✅ 初始版本,包含 74 个核心模块和依赖类型证明
* 120+ 绑定目标通过 Zig FFI(18 个完成,102 个搭建脚手架)
* ✅ 带模糊测试的完整测试套件
* ✅ 安全审计通过
* ✅ CI/CD 基础设施
* ✅ ECHIDNA 集成用于证明验证
=== 下一步(2026 年第二季度)
* ❏ 镜像仓库发布(crates.io, PyPI, npm, JSR)
* ❏ 后量子密码(Dilithium, Kyber)
* ❏ WebAssembly 浏览器包
* ❏ IDE 插件(VS Code, IntelliJ)
=== 未来
* ❏ 形式化方法研讨会和教程
* ❏ 更多语言绑定(Zig 原生, Mojo)
* ❏ 硬件安全模块(HSM)支持
* ❏ FIPS 140-3 认证路径
== 贡献
我们欢迎贡献!详见 link:CONTRIBUTING.adoc[CONTRIBUTING.adoc]。
特别需要:
* 语言绑定维护者(Scala, F#, Crystal 等)
* 安全审查员
* 文档撰写者
* 测试用例贡献者
* ECHIDNA 证明器后端开发者
== 相关项目
[cols="1,2"]
|===
| 项目 | 简介
| https://github.com/hyperpolymath/echidna[echidna]
| 神经符号定理证明平台。proven 的 Idris 2 证明可由 ECHIDNA 的多证明器系统验证。
| https://github.com/hyperpolymath/echidnabot[echidnabot]
| ECHIDNA 的 CI 编排。修改 proven 的 PR 通过 echidnabot Webhooks 触发自动证明验证。
| https://github.com/hyperpolymath/aggregate-library[aggregate-library]
| 跨 7 种语言的通用操作。proven 提供 aLib 操作的形式化验证 Idris 2 实现。
| https://github.com/hyperpolymath/idris2-zig-ffi[idris2-zig-ffi]
| 使该库可从 44 种语言调用的 FFI 桥接。
| https://github.com/hyperpolymath/januskey[januskey]
| 使用 SafeCrypto, SafePassword 和 SafeStateMachine 进行可逆操作的密钥管理系统。
| https://github.com/hyperpolymath/git-hud[git-hud]
| 使用 SafeConsensus 进行分布式操作和 SafeGraph 进行依赖跟踪的 Git 仓库管理器。
| https://github.com/hyperpolymath/ubicity[ubicity]
| 使用 SafeSchema 进行迁移和 SafeOrdering 进行事件溯源的数据平台。
| https://github.com/stefan-hoeck/idris2-pack[idris2-pack]
| Idris 2 的包管理器 - proven 通过 pack 分发。
|===
== 许可证
本项目采用 PMPL-1.0-or-later 许可。详见 link:LICENSE[LICENSE]。
== 安全
有关报告漏洞,请参阅 link:SECURITY.md[SECURITY.md]。
*别再奢望代码不崩溃。确信它不会崩溃。*
_引用本工作:_ 详见 link:docs/PAPER.tex[arXiv 论文] 以获取学术引用。
标签:AI工具, API密钥检测, CMS安全, FFI, Go, Idris2, JavaScript, JSONLines, Python, Ruby工具, Rust, TLS抓取, WebAssembly, YAML, Zig, 不可变, 云安全监控, 代码生成, 依赖类型, 函数式编程, 可视化界面, 多语言绑定, 安全库, 安全计算, 密码学, 形式化验证, 手动系统调用, 数学证明, 数据可视化, 无后门, 无崩溃, 日志审计, 渗透测试工具, 类型安全, 系统编程, 网络流量审计, 解析器, 跨语言调用, 软件安全, 输入验证, 边缘计算安全, 逆向工具, 防御性编程, 零信任, 静态分析, 高可靠性