31 个版本 (16 个破坏性更新)
0.21.0 | 2024 年 8 月 1 日 |
---|---|
0.20.0 | 2024 年 6 月 27 日 |
0.19.0 | 2024 年 6 月 5 日 |
0.11.0 | 2024 年 3 月 4 日 |
0.0.0 | 2021 年 6 月 24 日 |
#360 在 解析器实现
每月 4,664 次下载
用于 36 个 crate(直接使用 3 个)
225KB
3.5K SLoC
tor-cert
Tor 证书的实现
概述
tor-cert crate 实现了 Tor 的 cert-spec.txt 中记录的二进制证书类型,这些类型用于验证 Tor 通道。 (最终还将添加对洋葱服务证书的支持。)
此 crate 是 Arti 项目的一部分,Arti 是一个用 Rust 实现 Tor 的项目。
此外,Tor 还使用其他类型的证书,它们在别处实现。特别是,请参阅 tor-netdoc::doc::authcert
了解目录协议中权威机构使用的证书类型。
设计说明
tor-cert 代码在其自己的单独的 crate 中,因为它被几个不相互依赖的高级 crate 所需要。例如,tor-netdoc 解析来自路由器描述符的编码证书,而 tor-proto 在验证中继时使用证书。
示例
解析、验证和检查证书
use base64ct::{Base64, Encoding as _};
use tor_cert::*;
use tor_checkable::*;
// Taken from a random relay on the Tor network.
let cert_base64 =
"AQQABrntAThPWJ4nFH1L77Ar+emd4GPXZTPUYzIwmR2H6Zod5TvXAQAgBAC+vzqh
VFO1SGATubxcrZzrsNr+8hrsdZtyGg/Dde/TqaY1FNbeMqtAPMziWOd6txzShER4
qc/haDk5V45Qfk6kjcKw+k7cPwyJeu+UF/azdoqcszHRnUHRXpiPzudPoA4=";
// Remove the whitespace, so base64 doesn't choke on it.
let cert_base64: String = cert_base64.split_whitespace().collect();
// Decode the base64.
let cert_bin = Base64::decode_vec(&cert_base64).unwrap();
// Decode the cert and check its signature.
let cert = Ed25519Cert::decode(&cert_bin).unwrap()
.check_key(None).unwrap()
.check_signature().unwrap()
.dangerously_assume_timely();
let signed_key = cert.subject_key();
许可:MIT 或 Apache-2.0
依赖关系
~15MB
~273K SLoC