#zip-archive #key-file #tar #ed25519-key #generate-keys #signing-key #verify

app zipsign

使用 ed25519 签名密钥对 .zip.tar.gz 文件进行签名和验证

7 个版本

0.1.2 2024年7月4日
0.1.1 2023年11月5日
0.1.0 2023年10月23日
0.1.0-a.32023年9月16日

#250 in 密码学

Download history 25/week @ 2024-05-03 221/week @ 2024-05-10 70/week @ 2024-05-17 51/week @ 2024-05-24 26/week @ 2024-05-31 7/week @ 2024-06-07 4/week @ 2024-06-14 83/week @ 2024-06-28 55/week @ 2024-07-05 30/week @ 2024-07-12 6/week @ 2024-07-19 42/week @ 2024-07-26 14/week @ 2024-08-02 27/week @ 2024-08-09 27/week @ 2024-08-16

110 每月下载量

Apache-2.0 WITH LLVM-exception

61KB
1.5K SLoC

zipsign

一个用于使用 ed25519 签名密钥对 .zip.tar.gz 文件进行签名和验证的工具。

GitHub Workflow Status Crates.io License: License: Apache-2.0

安装

cargo install zipsign

cargo install --git https://github.com/Kijewski/zipsign

示例

  • .zip

    # Generate key pair:
    $ zipsign gen-key priv.key pub.key
    
    # ZIP a file and list the content of the ZIP file:
    $ zip Cargo.lock.zip Cargo.lock
    $ unzip -l Cargo.lock.zip
    Cargo.lock
    
    # Sign the ZIP file:
    $ zipsign sign zip Cargo.lock.zip priv.key
    $ unzip -l Cargo.lock.zip
    Cargo.lock
    
    # Verify that the generated signature is valid:
    $ zipsign verify zip Cargo.lock.zip pub.key
    OK
    
  • .tar

    # Generate key pair:
    $ zipsign gen-key priv.key pub.key
    
    # TAR a file and list the content of the ZIP file:
    $ tar czf Cargo.lock.tgz Cargo.lock
    $ tar tzf Cargo.lock.tgz
    Cargo.lock
    
    # Sign the .tar.gz file:
    $ zipsign sign tar Cargo.lock.tgz priv.key
    $ tar tzf Cargo.lock.tgz
    Cargo.lock
    
    # Verify that the generated signature is valid:
    $ zipsign verify tar Cargo.lock.tgz pub.key
    OK
    

生成密钥

用法:zipsign gen-key <PRIVATE_KEY> <VERIFYING_KEY>

参数

  • PRIVATE_KEY:要创建的私钥文件
  • VERIFYING_KEY:验证密钥(公钥)文件要创建

选项

  • -e--extract:不创建新的密钥对,但从私钥中提取公钥
  • -f--force:如果存在则覆盖输出文件

签名 .zip 或 .tar.gz 文件

用法:zipsign sign [zip|tar] [-o <OUTPUT>] <INPUT> <KEYS>...

子命令

  • zip:签名 .zip 文件
  • tar:签名 .tar.gz 文件

选项

  • -o--output <OUTPUT>:要生成的签名文件(如果省略,则覆盖输入)
  • -c--context <CONTEXT>:用于对输入进行盐化的任意字符串,默认为输入文件的文件名
  • -f--force:如果存在则覆盖输出文件

参数

  • <INPUT>:待签名输入文件
  • <KEYS>...:包含私钥的一个或多个文件

验证签名

用法:zipsign verify [zip|tar] <INPUT>

子命令

  • zip:验证签名的.zip文件
  • tar:验证签名的.tar.gz文件

选项

  • -c--context <CONTEXT>:用于加盐输入的任意字符串,默认为<INPUT>的文件名
  • -q--quiet:如果验证成功则不输出“OK”

参数

  • <INPUT>:签名的.zip.tar.gz文件
  • <KEYS>...:包含验证密钥的一个或多个文件

移除签名

用法:zipsign unsign [zip|tar] [-o <OUTPUT>] <INPUT>

子命令

  • zip:从.zip文件中移除签名
  • tar:从.tar.gz文件中移除签名

参数

  • <INPUT>:签名的.zip.tar.gz文件

选项

  • -o--output <OUTPUT>:要生成的未签名文件(如果省略,则覆盖输入文件)
  • -f--force:如果存在则覆盖输出文件

它是如何工作的?

使用ed25519ph使用一个或多个私钥对文件进行签名。签名透明地存储在数据旁边。

对于.tar.gz文件,签名被编码为base64字符串。该字符串作为GZIP文件的注释封装,并将该GZIP文件附加到输入文档。这是因为多个GZIP文件可以自由连接。

对于.zip文件,签名被附加到输入文档的开头。这是因为只要在之后修复所有相对地址,ZIP文件可以与任何数据连接。这个特性被用于例如自解压ZIP文件。

依赖关系

~5-15MB
~198K SLoC