littlebot
Published on 2025-04-14 / 0 Visits
0

【源码】基于C语言的椭圆曲线密码学库(libecc)

项目简介

libecc 是一个用于实现椭圆曲线密码学(Elliptic Curve Cryptography, ECC)的开源库。它支持多种椭圆曲线和哈希函数,提供多种签名算法(如ECDSA、ECKCDSA等)。以代码可读性和可移植性为核心设计目标,适用于嵌入式系统和资源受限的环境,其核心代码不依赖外部库,甚至不依赖标准C库,保证了在不同平台上的可移植性。

项目的主要特性和功能

  1. 支持多种签名算法:包括ECDSA、ECKCDSA、ECGDSA、ECRDSA、ECOSDSA、ECFSDSA。
  2. 支持众多椭圆曲线:如SECP224R1、SECP256R1、SECP384R1等多种曲线。
  3. 支持多种哈希函数:涵盖SHA - 2(224、256、384、512)和SHA - 3(224、256、384、512)。
  4. 无外部依赖:不依赖任何外部库,可在不同平台上移植。
  5. 可扩展性:能通过脚本轻松添加自定义椭圆曲线,支持扩展新的哈希函数和签名算法。
  6. 性能与内存优化:在大多数平台表现良好,内存占用低,适合嵌入式设备。
  7. 盲签名支持:启用盲签名技术,可抵御侧信道攻击。

安装使用步骤

假设用户已经下载了本项目的源码文件,以下是编译和使用的步骤:

1. 编译静态库和自测试程序

在项目根目录下执行命令: bash $ make 编译完成后,生成的静态库和二进制文件将存放在 build/ 目录下。

2. 运行自测试程序

编译完成后,运行自测试程序验证库的功能: bash $ ./build/ec_self_tests 自测试程序将执行已知测试向量验证、随机签名/验证测试、性能测试。

3. 使用 ec_utils 工具

生成密钥对

bash $ ./build/ec_utils gen_keys BRAINPOOLP512R1 ECKCDSA mykeypair 生成私钥和公钥文件,分别为 mykeypair_private_key.binmykeypair_public_key.bin

签名文件

bash $ ./build/ec_utils sign BRAINPOOLP512R1 ECKCDSA SHA3_512 myfile mykeypair_private_key.bin sig.bin 使用私钥对文件 myfile 签名,结果保存到 sig.bin 中。

验证签名

bash $ ./build/ec_utils verify BRAINPOOLP512R1 ECKCDSA SHA3_512 myfile mykeypair_public_key.bin sig.bin 使用公钥验证文件签名并输出结果。

4. 编译用户示例

bash $ cd src/examples $ make 编译完成后,在 src/examples/ 目录下找到生成的示例程序。

5. 配置库

修改 src/lib_ecc_config.h 文件配置库的功能,可启用或禁用特定的曲线、哈希函数和签名算法。例如,禁用FRP256V1曲线: c /* #define WITH_CURVE_FRP256V1 */

6. 扩展库

使用以下命令添加新的曲线: bash $ python scripts/expand_libecc.py --name="mynewcurve" --ECfile=brainpoolP320r1.der --add-test-vectors=1 生成新的曲线定义文件并添加到库中。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】