用途:rust-secp256k1 是上游 libsecp256k1 的 Rust 绑定,封装常量时间 C 实现并提供安全 API,用于不依赖比特币交易上下文的底层密码学操作,也可作为更高层抽象的基础,或在性能敏感路径上绕过 rust-bitcoin 层。仓库为 github.com/rust-bitcoin/rust-secp256k1;截至 0.33.1(2026 年 8 月)其元数据指向 git.rust-bitcoin.org/rust-bitcoin/rust-secp256k1。
主要能力:ECDSA 签名与验证、Schnorr(BIP340)、ECDH、密钥调整、MuSig2(BIP327,自 0.33 起)。没有 schnorr 或 musig 的 Cargo feature,两个模块无条件编译;可选 feature 有 std(默认)、alloc、rand、recovery、lowmemory、global-context、global-context-less-secure、serde、arbitrary。当前版本 0.33.1,2026-08-29 发布到 crates.io;0.32.0 从未发布,其 beta 版本已撤回,0.33.0(2026-08-28)取代之。
使用方式:在 Cargo.toml 中添加 secp256k1 = { version = "0.33", features = ["rand"] }。自 0.33.0 起 Secp256k1 上下文不再贯穿公共 API,自由函数使用内部全局上下文。密钥生成可用 secp256k1::generate_keypair(&mut rng),或 SecretKey::new 与 PublicKey::from_secret_key。ECDSA 用 ecdsa::sign 与 ecdsa::verify;Schnorr 用 schnorr::sign_no_aux_rand 与 schnorr::verify;MuSig2 使用 musig 模块的 KeyAggCache、Session、AggregatedNonce 等,并按 BIP327 做密钥排序。
限制与注意:Message::from_digest_slice 自 0.31.0 起弃用,改用接收 [u8; 32] 的 Message::from_digest;ecdsa::verify 参数顺序在 0.33.0 调整为 (sig, msg, pk);0.33.0 弃用上下文方法,全局上下文内部重随机化,rerandomize_global_context(&seed) 替代旧的 Secp256k1::randomize;secret_bytes 更名为 to_secret_bytes,SecretKey::from_slice 弃用改用 from_secret_bytes;unsafe/不稳定特性有额外风险;Keypair 类型跨版本略有差异,建议固定版本。比特币应用代码可从 bitcoin::secp256k1::* 导入以保持类型兼容。