# PQSign **Repository Path**: pqcrypto/pqsign ## Basic Information - **Project Name**: PQSign - **Description**: Post Quantum Sign application using Aigis-sig algorithm. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://pqcrypto.cn/ - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2024-06-20 - **Last Updated**: 2025-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: Crypto, Post-Quantum ## README # PQSign PQSign (Post Quantum Sign) 是一个使用后量子密码算法 Aigis-sig 对文件做签名/验签的工具。 PQSign 基于 [PQMagic](https://gitee.com/pqcrypto/pqmagic) 高性能后量子密码算法库以及 [sm3sum](https://gitee.com/pqcrypto/sm3sum) 实现。参考 [Minisign](https://jedisct1.github.io/minisign/) 的设计思路。 关于更多 PQSign 与 PQMagic 的信息请参考官网: https://pqcrypto.cn。 ## 编译 ```bash git clone --recursive https://gitee.com/pqcrypto/pqsign.git cd pqsign ``` ```bash mkdir build cd build cmake .. make ``` 在 `build/bin` 目录会生成 `pqsign` 可执行程序。 ## 使用 ### 生成公私钥对 ```bash ./pqsign -G ``` 执行命令后在当前目录会生成 `pqsign.pub` 公钥文件和 `pqsign.key` 私钥文件。 可以进一步指定生成公私钥对的文件名: ```bash ./pqsign -G -p mypubkey.pub -k myseckey.key ``` ### 对文件签名 ```bash ./pqsign -S myfile.txt ``` 执行命令后会使用当前目录下的私钥文件 `pqsign.key` 对 `myfile.txt` 文件进行签名,并在当前目录生成签名文件 `myfile.txt.pqsig`。 可以进一步指定私钥文件名和生成的签名文件: ```bash ./pqsign -S myfile.txt -k myseckey.key -x mysigfile.sig ``` 该操作将使用 `myseckey.key` 私钥文件对 `myfile.txt` 进行签名,生成签名文件 `mysigfile.sig`。 ### 对文件验签名 ```bash ./pqsign -V myfile.txt ``` 执行命令后会使用当前目录下的公钥文件 `pqsign.pub` 对 `myfile.txt` 文件和其对应的签名文件 `myfile.txt.pqsig` 进行验签。 可以进一步指定公钥文件和签名文件: ```bash ./pqsign -V myfile.txt -p mypubkey.pub -x mysigfile.sig ``` 该操作将使用 `mypubkey.pub` 公钥文件对文件 `myfile.txt` 和签名文件 `mysigfile.sig` 进行验签。 ### 说明 - 对文件的签名和验签过程,使用文件的 SM3 校验值(checksum)作为输入。 - 文件的 SM3 校验值(checksum)由 pqsign 工具在签名/验签前使用 [sm3sum](https://gitee.com/pqcrypto/sm3sum) 计算得到。 ## 文件格式 ### 签名文件格式 ```txt base64( 算法名称 || 签名字节串 || 签名长度 ) ``` 其中, - 算法名称:长度为12字节的字符串,不足12字节高地址补0 - pqsign 中算法名称为 `Aigis-sig` - 签名字节串:`Aigis-sig` 算法签名后得到的字节串 - 签名长度:`size_t` 类型的数据,记录签名的长度 ### 公钥文件格式 ```txt base64( 算法名称 || 公钥字节串 ) ``` 其中, - 算法名称:长度为12字节的字符串,不足12字节高地址补0 - pqsign 中算法名称为 `Aigis-sig` - 公钥字节串:`Aigis-sig` 算法生成的公钥字节串 ### 私钥文件格式 ```txt base64( 算法名称 || 私钥字节串 ) ``` 其中, - 算法名称:长度为12字节的字符串,不足12字节高地址补0 - pqsign 中算法名称为 `Aigis-sig` - 公钥字节串:`Aigis-sig` 算法生成的私钥字节串