#ring #name #index #version #borrowing #stealing #different

构建 isildur

用于重发布具有不同名称的crate的工具

2个不稳定版本

0.2.0 2019年2月3日
0.1.0 2019年2月1日

#506 in 构建工具

MIT 许可证

19KB
282

isildur

不是真的在偷Ring,只是借用...

这是一个下载crates.io上所有版本crate并将其以不同名称重新发布的工具。我为什么要这么做呢?嗯...

基本上,Rust的ring加密库很棒,但它的撤销策略真的很让人头疼。所以,这是一个可以通过cron等工具调用的程序,它可以定期监视crates.io索引,如果它看到发布了新的ring版本,将尝试获取它(即使它已被撤销)并尝试以不同的crate名称(如gnir,为什么不呢)重新发布,而这个版本永远不会被撤销。

如果你想编写一个使用ring的库,而不希望在你的一些用户尝试使用ring时破坏一切,可以考虑使用gnir。尽管这样做是你自己的风险,因为这个工具需要对ring的构建脚本进行一些令人烦恼的修改,并且它这样做非常盲目。此外,请注意,使用ring的旧版本可能会使你面临安全漏洞,并且原始维护者不提供对旧版本的支持,除非通过付费合同。而且我绝对不负责使用此工具重新发布的任何其他crate。

这是可靠的吗?

我需要这个功能,所以我打算让它永远运行。然而,我永远都不会永远存在,无论如何,所以我提供这个软件供任何想用它来实现他们自己的类似功能的人使用。

如果你不相信,你可以自由地部署这个软件本身。它并不是真正设计为供其他人使用的。我当然不会费心修复那些没有附带pull request的报告的任何错误。

也有可能,目前存在的旧crate,如ring 0.3,已经不能再发布到crates.io。这可能由几个不同原因造成

  • 具有讽刺意味的是,这可能会依赖于另一个已被撤回的crate(例如,一个旧版本的untrusted随机选择一个例子),因此您必须向下遍历依赖树,并将所有这些也镜像出来,并修补您想要镜像的crate以指向这些镜像。幸运的是,cargo支持重命名crate,因此这个工具有一个要修补的crate名称列表,并将它们重命名为指定的名称。
  • Rust随着时间的推移已经发生了一些变化,并不总是以向后兼容的方式,因此旧包可能无法构建。

这安全吗?

此软件的目标是在源crate之外不进行任何修改,除了名称和readme中的免责声明。不幸的是,ring的构建系统做了足够的随机操作,这个程序实际上必须进入其中并以可怕的方式对其进行篡改。除了这个过程的结果可能实际上是损坏的之外,其他人也可能假装镜像一个crate,但生产出含有恶意软件的模仿crate。因为crates.io对crate文件的校验和包括当计算其哈希值时的Cargo.toml文件,而此工具必须修改Cargo.toml以更新crate的名称,因此由这个工具创建的重新发布的crate将具有与原始crate不同的校验和。这使得检测这种攻击变得更加困难(尽管仍然不是不可能),请确保您信任您的来源!

我想自己重新发布ring!

不,您不想。

好吧,好吧,但如果你真的做了,确保你已经安装了yasm并将其符号链接到yasm.exe,否则它将无法工作。版本在0.7.2之前的ring无论如何都不工作,但我不在乎那些。

依赖项

~22–34MB
~603K SLoC