2 个不稳定版本
0.2.0 | 2022 年 1 月 28 日 |
---|---|
0.1.0 | 2021 年 7 月 3 日 |
#1654 在 密码学
21 每月下载次数
45KB
1K SLoC
greenpass
一个 Rust 包,用于解析欧盟 COVID-19 数字绿色证书,并提供一个简单的工具以格式化的方式导出证书。
基于欧盟发布的《数字绿色证书 JSON 规范》和《数字绿色证书技术规范》(JSON 规范 和 技术规范)。未实现加密签名的验证。请不要将此代码用于非教育目的的证书验证。
用法
此包能够加载 Base45 编码的 DGC 有效载荷。它不支持直接解析条形码,但可以与 ZBar 一起使用,从图像中读取数字绿色证书
$ greenpass <(zbarimg -q pass.png | sed s/QR-Code://)
EU Digital COVID Certificate
Issued by: AT
Created at: 2021-07-02 23:58:57 UTC
Expires at: 2022-07-02 23:58:57 UTC
Pass#0:
Cert version 1.2.1
Emitted to: Gabriele Musterfrau-Gößinger
Standardized Name: GABRIELE MUSTERFRAU<GOESSINGER
Date of birth: 1998-02-26
Vaccination data:
Cert ID: URN:UVCI:01:AT:10807843F94AEE0EE5093FBC254BD813#B
Disease: 840539006
Issuer: Ministry of Health, Austria
Country: AT
Vaccination date: 2021-02-18
Doses administered: 1/2
Product ID: EU/1/20/1528
Market Authorization ID: ORG-100030215
Vaccine/Prophylaxis ID: 1119349007
上面的证书是虚构的,并使用 此工具生成。
从代码解析证书
此包也可以用作库
let vac_hc = HealthCert {
some_issuer: Some("AT".into()),
created: Utc.ymd(2021, 07, 02).and_hms(23, 58, 57),
expires: Utc.ymd(2022, 07, 02).and_hms(23, 58, 57),
passes: vec![GreenPass {
date_of_birth: "1998-02-26".into(),
surname: "Musterfrau-Gößinger".into(),
givenname: "Gabriele".into(),
std_surname: "MUSTERFRAU<GOESSINGER".into(),
std_givenname: "GABRIELE".into(),
ver: "1.2.1".into(),
entries: vec![CertInfo::Vaccine(Vaccine {
cert_id: "URN:UVCI:01:AT:10807843F94AEE0EE5093FBC254BD813#B".into(),
country: "AT".into(),
date: NaiveDate::from_ymd(2021, 02, 18),
disease: "840539006".into(),
dose_number: 1,
dose_total: 2,
issuer: "Ministry of Health, Austria".into(),
market_auth: "ORG-100030215".into(),
product: "EU/1/20/1528".into(),
prophylaxis_kind: "1119349007".into(),
})],
}],
};
let buf_str = std::fs::read_to_str("vac_base45.txt")?;
let hc_parsed = greenpass::parse(&buf_str)?;
assert_eq!(hc_parsed, vac_hc);
模糊测试
要运行模糊测试器,需要 cargo-fuzz
cargo安装 cargo-fuzz
然后进行基本的模糊测试活动
cargo+nightly fuzz run greenpass_parse
cargo-fuzz 的更多选项请参阅其文档。
依赖项
~4.5MB
~83K SLoC