5 个版本
0.2.1 | 2022年8月29日 |
---|---|
0.2.0 | 2022年8月23日 |
0.1.2 | 2022年8月19日 |
0.1.1 | 2022年8月15日 |
0.1.0 | 2022年8月15日 |
#5 在 #edwards
每月51 次下载
用于 gluon-mesh-vpn-key-transl…
19KB
301 行
libecdsautil
这将包含对 libecdsautil-sys
的安全封装,但当前仅提供基于 curve25519-dalek 的 fastd 公钥表示以及 dalek-ff-group。
理论
私有 fastd: 282615cc09656f1f3dbe5fa24b640bfd48d8302f982477d38335c2ffab84c17e
派生的公共 fastd: faebc966b4b255d9383f44fb2abc1b8b4d596ced9951a421af4df97f62aa1a7b
公共 fastd 密钥(u8[32]~256位)代表旧曲线上的一个点。Edwards25519(如 Ed25519 所用)上的点应该共享相同的 y 坐标;x 坐标可以通过类似于 ecc_25519_store_xy_legacy
和 ecc_25519_load_xy_legacy
的乘法来计算。
在 Ed25519 中,公钥存储在 "Edwards y" 格式中,这意味着前 255 位表示 y 坐标,而最后一个字节的最高位给出 x 的符号。
在 libuecc 中,公钥存储在可以称为 CompressedEdwardsX 的格式中,因为 x 坐标与 y 坐标的最低位(lsb)打包在一起。
未压缩的点表示为四元组 {X,Y,Z,T},其中
$x= {X \over Z}$
$y={Y \over Z}$
$ x*y={T \over Z} $
每个元组的段是 u32[32]~1024位
-> 但最后 24 位实际上是零,而在计算中并不是这样
验证步骤
- 使用 libuecc 解压缩 fastd 公钥
- 使用 rusts 的
curve25519_dalek
-crate 将解压缩的密钥加载为EdwardsPoint
- 为
EdwardsPoint
实现compressX
,它应该再次发出 fastd 公钥 - 为
CompressedEdwardsX
实现decompress,与前者相反
- 然后 fastd 密钥可以加载为
CompressedEdwardsX
并转换为 Dalek 表示,然后输入到 libecdsautil 的验证函数中
压缩_points.rs 中待完成的工作
-
实现
EDWARDS_D
-
实现 sqrt_ratio_i()
-
实现
is_negative
/is_odd
-
实现
conditional_negate
-
上游
EDWARDS_D
-
上游
sqrt_ratio_i()
https://github.com/serai-dex/serai/pull/87 -
上游
is_negative
/is_odd
-
上游
conditional_negate
-
等待下一个上游版本发布并去除下游实现
依赖项
~2.7–5.5MB
~117K SLoC