参考2019年2月发表的论文《Zexe: Enabling Decentralized Private Computation》,具体实现见代码库。
1. zexe中的algebra代数运算zexe\algebra\src\curves
中,对bls12_377
、bls12_381
、edwards_bls12
、edwards_sw6
、jubjub
、mnt6
、sw6
等共7条曲线做了实现,同时对bls12_377
、bls12_381
和sw6
做了bench测试。
FixedBaseMSM
运算
zexe/algebra/src/msm/fixed_base.rs
中有: 1)get_mul_window_size
根据多项式的阶
d
d
d(即num_scalars
)来决定窗口的大小。
pub fn get_mul_window_size(num_scalars: usize) -> usize {
if num_scalars < 32 {
3
} else {
(f64::from(num_scalars as u32)).ln().ceil() as usize
}
}
2)get_window_table
返回的为一个二维数组,列数为:2^{window}
,行数为outerc=(scalar_size + window - 1) / window
,其中的scalar_size
为曲线的MODULUS_BITS
。其中最后一列,除了前last_in_window
个外,之后的均为零值。
[
0
g
2
g
3
g
4
g
.
.
.
(
2
w
i
n
d
o
w
−
1
)
g
0
(
2
w
i
n
d
o
w
)
g
2
∗
(
2
w
i
n
d
o
w
)
g
3
∗
(
2
w
i
n
d
o
w
)
g
4
∗
(
2
w
i
n
d
o
w
)
g
.
.
.
(
2
2
∗
w
i
n
d
o
w
−
1
)
g
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0
(
2
(
o
u
t
e
r
c
−
1
)
∗
w
i
n
d
o
w
)
g
2
∗
(
2
(
o
u
t
e
r
c
−
1
)
∗
w
i
n
d
o
w
)
g
.
.
.
(
l
a
s
t
_
i
n
_
w
i
n
d
o
w
−
1
)
∗
(
2
(
o
u
t
e
r
c
−
1
)
∗
w
i
n
d
o
w
)
g
0
0
]
\begin{bmatrix} 0& g & 2g & 3g & 4g & ... & (2^{window}-1)g\\ 0& (2^{window})g & 2*(2^{window})g & 3*(2^{window})g & 4*(2^{window})g & ... & (2^{2*window}-1)g \\ ... & ... & ... & ... & ... & ... & ...\\ 0 & (2^{(outerc-1)*window})g & 2*(2^{(outerc-1)*window})g & ... & (last\_in\_window-1)*(2^{(outerc-1)*window})g & 0 & 0 \end{bmatrix}
⎣⎢⎢⎡00...0g(2window)g...(2(outerc−1)∗window)g2g2∗(2window)g...2∗(2(outerc−1)∗window)g3g3∗(2window)g......4g4∗(2window)g...(last_in_window−1)∗(2(outerc−1)∗window)g.........0(2window−1)g(22∗window−1)g...0⎦⎥⎥⎤
pub fn get_window_table(
scalar_size: usize,
window: usize,
g: T,
) -> Vec {
let in_window = 1
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?