#uri #uniform #resources #uniform-resource #binary-data #data-encoding #background

无需std ur

Rust实现的统一资源

5 个版本 (3 个重大更新)

0.4.1 2023年10月16日
0.4.0 2023年8月4日
0.3.0 2023年1月7日
0.2.0 2021年12月8日
0.1.0 2021年8月23日

#1029编码

Download history 27/week @ 2024-03-13 37/week @ 2024-03-20 78/week @ 2024-03-27 65/week @ 2024-04-03 46/week @ 2024-04-10 25/week @ 2024-04-17 40/week @ 2024-04-24 28/week @ 2024-05-01 17/week @ 2024-05-08 40/week @ 2024-05-15 52/week @ 2024-05-22 23/week @ 2024-05-29 31/week @ 2024-06-05 37/week @ 2024-06-12 27/week @ 2024-06-19 17/week @ 2024-06-26

每月114次下载
7 个crate中使用 (通过 bc-ur)

MIT 许可证

105KB
2K SLoC

Rust统一资源

build status build status build status dependency status

ur 是一个crate,用于与二进制数据的“统一资源”编码进行交互。编码方案针对通过URI和QR码传输进行了优化。

ur::Encoder 允许字节有效载荷分多个阶段传输,同时遵守最大大小要求。底层使用 fountain 编码器创建一个无界流URI,接收方可以将其重新组合成有效载荷

let data = String::from("Ten chars!").repeat(10);
let max_length = 5;
let mut encoder = ur::Encoder::bytes(data.as_bytes(), max_length).unwrap();
let part = encoder.next_part().unwrap();
assert_eq!(
    part,
    "ur:bytes/1-20/lpadbbcsiecyvdidatkpfeghihjtcxiabdfevlms"
);
let mut decoder = ur::Decoder::default();
while !decoder.complete() {
    let part = encoder.next_part().unwrap();
    // Simulate some communication loss
    if encoder.current_index() & 1 > 0 {
        decoder.receive(&part).unwrap();
    }
}
assert_eq!(decoder.message().unwrap().as_deref(), Some(data.as_bytes()));

以下有用的构建块也是公共API的一部分

  • crate::bytewords 模块包含将字节有效载荷编码到合适字母表的功能,实现每字符十六进制字节效率。
  • crate::fountain 模块提供了一个喷泉编码器的实现,它将字节有效载荷分割成多个部分,并生成一个无界的部分流,接收方可以在解码器端重新组合。

使用方法

ur 添加到您的 Cargo.toml 的依赖项中

cargo add ur

示例

动画QR码

要运行此示例,请执行

cargo run --example qr -- "This is my super awesome UR payload"

这将打印出传输提供有效载荷的URI和QR码。

背景:统一资源

统一资源

提出了一种编码任意内容和长度的二进制数据的方法,使其适用于通过URI或QR码传输。

对允许的编码字母表的结果约束进行了很好的分析这里

以下构建块相互作用以实现这一目标

  • Bytewords将二进制数据映射到不区分大小写的字符,效率为4位/字符(与十六进制编码相同)
  • 基于Luby转换(一种特定的喷泉编码),构建用于传输多部分消息的片段,这些片段的子集可以恢复原始消息
  • CBOR允许自描述的字节有效载荷
  • 正确初始化的Xoshiro伪随机生成器允许编码和解码方就哪些消息部分被组合到喷泉编码片段中达成一致

其他实现

这个Rust实现,特别是其测试向量,基于以下参考实现

贡献

欢迎提交拉取请求。

许可证

本项目根据MIT许可证的条款进行许可。

依赖关系

~2.5MB
~55K SLoC