@solarity/zkit 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
/* AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT. */
|
|
4
|
+
|
|
2
5
|
pragma solidity >=0.7.0 <0.9.0;
|
|
3
6
|
|
|
4
7
|
contract <%=verifier_id%> {
|
|
5
|
-
/// @dev
|
|
8
|
+
/// @dev base field size
|
|
6
9
|
uint256 public constant BASE_FIELD_SIZE =
|
|
7
10
|
21888242871839275222246405745257275088696311157297823662689037894645226208583;
|
|
8
11
|
|
|
9
|
-
/// @dev
|
|
12
|
+
/// @dev verification key data
|
|
10
13
|
uint256 public constant ALPHA_X =
|
|
11
14
|
<%=vk_alpha_1[0]%>;
|
|
12
15
|
uint256 public constant ALPHA_Y =
|
|
@@ -42,75 +45,66 @@ contract <%=verifier_id%> {
|
|
|
42
45
|
<%=IC[i][1]%>;
|
|
43
46
|
<% } -%>
|
|
44
47
|
|
|
45
|
-
/// @dev
|
|
46
|
-
uint16 public constant
|
|
47
|
-
uint16 public constant
|
|
48
|
-
uint16 public constant P_LAST_MEM = 896;
|
|
48
|
+
/// @dev memory pointer sizes
|
|
49
|
+
uint16 public constant P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE = 128;
|
|
50
|
+
uint16 public constant P_TOTAL_SIZE = 896;
|
|
49
51
|
|
|
50
52
|
function verifyProof(
|
|
51
|
-
uint256[2] memory
|
|
52
|
-
uint256[2][2] memory
|
|
53
|
-
uint256[2] memory
|
|
54
|
-
uint256[<%=IC.length-1%>] memory
|
|
55
|
-
) public view returns (bool) {
|
|
53
|
+
uint256[2] memory pointA_,
|
|
54
|
+
uint256[2][2] memory pointB_,
|
|
55
|
+
uint256[2] memory pointC_,
|
|
56
|
+
uint256[<%=IC.length-1%>] memory publicSignals_
|
|
57
|
+
) public view returns (bool verified_) {
|
|
56
58
|
assembly {
|
|
57
|
-
function checkField(
|
|
58
|
-
|
|
59
|
-
mstore(0, 0)
|
|
60
|
-
return(0, 0x20)
|
|
61
|
-
}
|
|
59
|
+
function checkField(signal_) -> res_ {
|
|
60
|
+
res_ := lt(signal_, BASE_FIELD_SIZE)
|
|
62
61
|
}
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let success
|
|
67
|
-
let mIn := mload(0x40)
|
|
63
|
+
function g1MulAdd(pR_, x_, y_, s_) -> res_ {
|
|
64
|
+
let pointer_ := mload(64) // free pointer
|
|
68
65
|
|
|
69
|
-
mstore(
|
|
70
|
-
mstore(add(
|
|
71
|
-
mstore(add(
|
|
66
|
+
mstore(pointer_, x_)
|
|
67
|
+
mstore(add(pointer_, 32), y_)
|
|
68
|
+
mstore(add(pointer_, 64), s_)
|
|
72
69
|
|
|
73
|
-
|
|
70
|
+
res_ := staticcall(sub(gas(), 2000), 7, pointer_, 96, pointer_, 64) // ecMul
|
|
71
|
+
res_ := and(res_, gt(returndatasize(), 0)) // check that multiplication succeeded
|
|
74
72
|
|
|
75
|
-
if iszero(
|
|
76
|
-
|
|
77
|
-
return(0, 0x20)
|
|
73
|
+
if iszero(res_) {
|
|
74
|
+
leave
|
|
78
75
|
}
|
|
79
76
|
|
|
80
|
-
mstore(add(
|
|
81
|
-
mstore(add(
|
|
77
|
+
mstore(add(pointer_, 64), mload(pR_))
|
|
78
|
+
mstore(add(pointer_, 96), mload(add(pR_, 32)))
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if iszero(success) {
|
|
86
|
-
mstore(0, 0)
|
|
87
|
-
return(0, 0x20)
|
|
88
|
-
}
|
|
80
|
+
res_ := staticcall(sub(gas(), 2000), 6, pointer_, 128, pR_, 64) // ecAdd
|
|
81
|
+
res_ := and(res_, gt(returndatasize(), 0)) // check that addition succeeded
|
|
89
82
|
}
|
|
90
83
|
|
|
91
|
-
function checkPairing(
|
|
92
|
-
let pPairing_ := add(
|
|
93
|
-
let pVk_ := add(pMem, P_VK)
|
|
84
|
+
function checkPairing(pA_, pB_, pC_, pubSignals_, pointer_) -> res_ {
|
|
85
|
+
let pPairing_ := add(pointer_, P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE)
|
|
94
86
|
|
|
95
|
-
mstore(
|
|
96
|
-
mstore(add(
|
|
87
|
+
mstore(pointer_, IC0_X)
|
|
88
|
+
mstore(add(pointer_, 32), IC0_Y)
|
|
97
89
|
|
|
98
|
-
/// @dev
|
|
99
|
-
<% for (let i = 1; i <= nPublic; i++) { %>
|
|
90
|
+
/// @dev compute the linear combination of public signals
|
|
91
|
+
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i-1)*32%>)))) {
|
|
92
|
+
leave
|
|
93
|
+
}
|
|
100
94
|
<% } -%>
|
|
101
95
|
|
|
102
96
|
/// @dev -A
|
|
103
|
-
mstore(pPairing_, mload(
|
|
97
|
+
mstore(pPairing_, mload(pA_))
|
|
104
98
|
mstore(
|
|
105
99
|
add(pPairing_, 32),
|
|
106
|
-
mod(sub(BASE_FIELD_SIZE, mload(add(
|
|
100
|
+
mod(sub(BASE_FIELD_SIZE, mload(add(pA_, 32))), BASE_FIELD_SIZE)
|
|
107
101
|
)
|
|
108
102
|
|
|
109
103
|
/// @dev B
|
|
110
|
-
mstore(add(pPairing_, 64), mload(mload(
|
|
111
|
-
mstore(add(pPairing_, 96), mload(add(mload(
|
|
112
|
-
mstore(add(pPairing_, 128), mload(mload(add(
|
|
113
|
-
mstore(add(pPairing_, 160), mload(add(mload(add(
|
|
104
|
+
mstore(add(pPairing_, 64), mload(mload(pB_)))
|
|
105
|
+
mstore(add(pPairing_, 96), mload(add(mload(pB_), 32)))
|
|
106
|
+
mstore(add(pPairing_, 128), mload(mload(add(pB_, 32))))
|
|
107
|
+
mstore(add(pPairing_, 160), mload(add(mload(add(pB_, 32)), 32)))
|
|
114
108
|
|
|
115
109
|
/// @dev alpha1
|
|
116
110
|
mstore(add(pPairing_, 192), ALPHA_X)
|
|
@@ -122,9 +116,9 @@ contract <%=verifier_id%> {
|
|
|
122
116
|
mstore(add(pPairing_, 320), BETA_Y1)
|
|
123
117
|
mstore(add(pPairing_, 352), BETA_Y2)
|
|
124
118
|
|
|
125
|
-
/// @dev
|
|
126
|
-
mstore(add(pPairing_, 384), mload(
|
|
127
|
-
mstore(add(pPairing_, 416), mload(add(
|
|
119
|
+
/// @dev public signals
|
|
120
|
+
mstore(add(pPairing_, 384), mload(pointer_))
|
|
121
|
+
mstore(add(pPairing_, 416), mload(add(pointer_, 32)))
|
|
128
122
|
|
|
129
123
|
/// @dev gamma2
|
|
130
124
|
mstore(add(pPairing_, 448), GAMMA_X1)
|
|
@@ -133,8 +127,8 @@ contract <%=verifier_id%> {
|
|
|
133
127
|
mstore(add(pPairing_, 544), GAMMA_Y2)
|
|
134
128
|
|
|
135
129
|
/// @dev C
|
|
136
|
-
mstore(add(pPairing_, 576), mload(
|
|
137
|
-
mstore(add(pPairing_, 608), mload(add(
|
|
130
|
+
mstore(add(pPairing_, 576), mload(pC_))
|
|
131
|
+
mstore(add(pPairing_, 608), mload(add(pC_, 32)))
|
|
138
132
|
|
|
139
133
|
/// @dev delta2
|
|
140
134
|
mstore(add(pPairing_, 640), DELTA_X1)
|
|
@@ -142,23 +136,22 @@ contract <%=verifier_id%> {
|
|
|
142
136
|
mstore(add(pPairing_, 704), DELTA_Y1)
|
|
143
137
|
mstore(add(pPairing_, 736), DELTA_Y2)
|
|
144
138
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
isOk := and(success_, mload(pPairing_))
|
|
139
|
+
res_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 32) // ecPairing
|
|
140
|
+
res_ := and(res_, mload(pPairing_)) // check that pairing succeeded
|
|
148
141
|
}
|
|
149
142
|
|
|
150
|
-
let
|
|
151
|
-
mstore(
|
|
143
|
+
let pointer_ := mload(64) // free pointer
|
|
144
|
+
mstore(64, add(pointer_, P_TOTAL_SIZE))
|
|
152
145
|
|
|
153
|
-
/// @dev
|
|
154
|
-
|
|
146
|
+
/// @dev check that all public signals are in F
|
|
147
|
+
verified_ := 1
|
|
148
|
+
<% for (let i = 0; i < IC.length; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i*32%>))))
|
|
155
149
|
<% } -%>
|
|
156
150
|
|
|
157
|
-
/// @dev
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return(0, 0x20)
|
|
151
|
+
/// @dev check pairings
|
|
152
|
+
if not(iszero(verified_)) {
|
|
153
|
+
verified_ := checkPairing(pointA_, pointB_, pointC_, publicSignals_, pointer_)
|
|
154
|
+
}
|
|
162
155
|
}
|
|
163
156
|
}
|
|
164
157
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
/* AUTOGENERATED FILE BY HARDHAT-ZKIT. DO NOT EDIT. */
|
|
4
|
+
|
|
2
5
|
pragma solidity >=0.7.0 <0.9.0;
|
|
3
6
|
|
|
4
7
|
contract <%=verifier_id%> {
|
|
5
|
-
/// @dev
|
|
8
|
+
/// @dev base field size
|
|
6
9
|
uint256 public constant BASE_FIELD_SIZE =
|
|
7
10
|
21888242871839275222246405745257275088696311157297823662689037894645226208583;
|
|
8
11
|
|
|
9
|
-
/// @dev
|
|
12
|
+
/// @dev verification key data
|
|
10
13
|
uint256 public constant ALPHA_X =
|
|
11
14
|
<%=vk_alpha_1[0]%>;
|
|
12
15
|
uint256 public constant ALPHA_Y =
|
|
@@ -42,75 +45,66 @@ contract <%=verifier_id%> {
|
|
|
42
45
|
<%=IC[i][1]%>;
|
|
43
46
|
<% } -%>
|
|
44
47
|
|
|
45
|
-
/// @dev
|
|
46
|
-
uint16 public constant
|
|
47
|
-
uint16 public constant
|
|
48
|
-
uint16 public constant P_LAST_MEM = 896;
|
|
48
|
+
/// @dev memory pointer sizes
|
|
49
|
+
uint16 public constant P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE = 128;
|
|
50
|
+
uint16 public constant P_TOTAL_SIZE = 896;
|
|
49
51
|
|
|
50
52
|
function verifyProof(
|
|
51
|
-
uint256[2] memory
|
|
52
|
-
uint256[2][2] memory
|
|
53
|
-
uint256[2] memory
|
|
54
|
-
uint256[<%=IC.length-1%>] memory
|
|
55
|
-
) public view returns (bool) {
|
|
53
|
+
uint256[2] memory pointA_,
|
|
54
|
+
uint256[2][2] memory pointB_,
|
|
55
|
+
uint256[2] memory pointC_,
|
|
56
|
+
uint256[<%=IC.length-1%>] memory publicSignals_
|
|
57
|
+
) public view returns (bool verified_) {
|
|
56
58
|
assembly {
|
|
57
|
-
function checkField(
|
|
58
|
-
|
|
59
|
-
mstore(0, 0)
|
|
60
|
-
return(0, 0x20)
|
|
61
|
-
}
|
|
59
|
+
function checkField(signal_) -> res_ {
|
|
60
|
+
res_ := lt(signal_, BASE_FIELD_SIZE)
|
|
62
61
|
}
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let success
|
|
67
|
-
let mIn := mload(0x40)
|
|
63
|
+
function g1MulAdd(pR_, x_, y_, s_) -> res_ {
|
|
64
|
+
let pointer_ := mload(64) // free pointer
|
|
68
65
|
|
|
69
|
-
mstore(
|
|
70
|
-
mstore(add(
|
|
71
|
-
mstore(add(
|
|
66
|
+
mstore(pointer_, x_)
|
|
67
|
+
mstore(add(pointer_, 32), y_)
|
|
68
|
+
mstore(add(pointer_, 64), s_)
|
|
72
69
|
|
|
73
|
-
|
|
70
|
+
res_ := staticcall(sub(gas(), 2000), 7, pointer_, 96, pointer_, 64) // ecMul
|
|
71
|
+
res_ := and(res_, gt(returndatasize(), 0)) // check that multiplication succeeded
|
|
74
72
|
|
|
75
|
-
if iszero(
|
|
76
|
-
|
|
77
|
-
return(0, 0x20)
|
|
73
|
+
if iszero(res_) {
|
|
74
|
+
leave
|
|
78
75
|
}
|
|
79
76
|
|
|
80
|
-
mstore(add(
|
|
81
|
-
mstore(add(
|
|
77
|
+
mstore(add(pointer_, 64), mload(pR_))
|
|
78
|
+
mstore(add(pointer_, 96), mload(add(pR_, 32)))
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if iszero(success) {
|
|
86
|
-
mstore(0, 0)
|
|
87
|
-
return(0, 0x20)
|
|
88
|
-
}
|
|
80
|
+
res_ := staticcall(sub(gas(), 2000), 6, pointer_, 128, pR_, 64) // ecAdd
|
|
81
|
+
res_ := and(res_, gt(returndatasize(), 0)) // check that addition succeeded
|
|
89
82
|
}
|
|
90
83
|
|
|
91
|
-
function checkPairing(
|
|
92
|
-
let pPairing_ := add(
|
|
93
|
-
let pVk_ := add(pMem, P_VK)
|
|
84
|
+
function checkPairing(pA_, pB_, pC_, pubSignals_, pointer_) -> res_ {
|
|
85
|
+
let pPairing_ := add(pointer_, P_PUBLIC_SIGNALS_ACCUMULATOR_SIZE)
|
|
94
86
|
|
|
95
|
-
mstore(
|
|
96
|
-
mstore(add(
|
|
87
|
+
mstore(pointer_, IC0_X)
|
|
88
|
+
mstore(add(pointer_, 32), IC0_Y)
|
|
97
89
|
|
|
98
|
-
/// @dev
|
|
99
|
-
<% for (let i = 1; i <= nPublic; i++) { %>
|
|
90
|
+
/// @dev compute the linear combination of public signals
|
|
91
|
+
<% for (let i = 1; i <= nPublic; i++) { %>if iszero(g1MulAdd(pointer_, IC<%=i%>_X, IC<%=i%>_Y, mload(add(pubSignals_, <%=(i-1)*32%>)))) {
|
|
92
|
+
leave
|
|
93
|
+
}
|
|
100
94
|
<% } -%>
|
|
101
95
|
|
|
102
96
|
/// @dev -A
|
|
103
|
-
mstore(pPairing_, mload(
|
|
97
|
+
mstore(pPairing_, mload(pA_))
|
|
104
98
|
mstore(
|
|
105
99
|
add(pPairing_, 32),
|
|
106
|
-
mod(sub(BASE_FIELD_SIZE, mload(add(
|
|
100
|
+
mod(sub(BASE_FIELD_SIZE, mload(add(pA_, 32))), BASE_FIELD_SIZE)
|
|
107
101
|
)
|
|
108
102
|
|
|
109
103
|
/// @dev B
|
|
110
|
-
mstore(add(pPairing_, 64), mload(mload(
|
|
111
|
-
mstore(add(pPairing_, 96), mload(add(mload(
|
|
112
|
-
mstore(add(pPairing_, 128), mload(mload(add(
|
|
113
|
-
mstore(add(pPairing_, 160), mload(add(mload(add(
|
|
104
|
+
mstore(add(pPairing_, 64), mload(mload(pB_)))
|
|
105
|
+
mstore(add(pPairing_, 96), mload(add(mload(pB_), 32)))
|
|
106
|
+
mstore(add(pPairing_, 128), mload(mload(add(pB_, 32))))
|
|
107
|
+
mstore(add(pPairing_, 160), mload(add(mload(add(pB_, 32)), 32)))
|
|
114
108
|
|
|
115
109
|
/// @dev alpha1
|
|
116
110
|
mstore(add(pPairing_, 192), ALPHA_X)
|
|
@@ -122,9 +116,9 @@ contract <%=verifier_id%> {
|
|
|
122
116
|
mstore(add(pPairing_, 320), BETA_Y1)
|
|
123
117
|
mstore(add(pPairing_, 352), BETA_Y2)
|
|
124
118
|
|
|
125
|
-
/// @dev
|
|
126
|
-
mstore(add(pPairing_, 384), mload(
|
|
127
|
-
mstore(add(pPairing_, 416), mload(add(
|
|
119
|
+
/// @dev public signals
|
|
120
|
+
mstore(add(pPairing_, 384), mload(pointer_))
|
|
121
|
+
mstore(add(pPairing_, 416), mload(add(pointer_, 32)))
|
|
128
122
|
|
|
129
123
|
/// @dev gamma2
|
|
130
124
|
mstore(add(pPairing_, 448), GAMMA_X1)
|
|
@@ -133,8 +127,8 @@ contract <%=verifier_id%> {
|
|
|
133
127
|
mstore(add(pPairing_, 544), GAMMA_Y2)
|
|
134
128
|
|
|
135
129
|
/// @dev C
|
|
136
|
-
mstore(add(pPairing_, 576), mload(
|
|
137
|
-
mstore(add(pPairing_, 608), mload(add(
|
|
130
|
+
mstore(add(pPairing_, 576), mload(pC_))
|
|
131
|
+
mstore(add(pPairing_, 608), mload(add(pC_, 32)))
|
|
138
132
|
|
|
139
133
|
/// @dev delta2
|
|
140
134
|
mstore(add(pPairing_, 640), DELTA_X1)
|
|
@@ -142,23 +136,22 @@ contract <%=verifier_id%> {
|
|
|
142
136
|
mstore(add(pPairing_, 704), DELTA_Y1)
|
|
143
137
|
mstore(add(pPairing_, 736), DELTA_Y2)
|
|
144
138
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
isOk := and(success_, mload(pPairing_))
|
|
139
|
+
res_ := staticcall(sub(gas(), 2000), 8, pPairing_, 768, pPairing_, 32) // ecPairing
|
|
140
|
+
res_ := and(res_, mload(pPairing_)) // check that pairing succeeded
|
|
148
141
|
}
|
|
149
142
|
|
|
150
|
-
let
|
|
151
|
-
mstore(
|
|
143
|
+
let pointer_ := mload(64) // free pointer
|
|
144
|
+
mstore(64, add(pointer_, P_TOTAL_SIZE))
|
|
152
145
|
|
|
153
|
-
/// @dev
|
|
154
|
-
|
|
146
|
+
/// @dev check that all public signals are in F
|
|
147
|
+
verified_ := 1
|
|
148
|
+
<% for (let i = 0; i < IC.length; i++) { %>verified_ := and(verified_, checkField(mload(add(publicSignals_, <%=i*32%>))))
|
|
155
149
|
<% } -%>
|
|
156
150
|
|
|
157
|
-
/// @dev
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return(0, 0x20)
|
|
151
|
+
/// @dev check pairings
|
|
152
|
+
if not(iszero(verified_)) {
|
|
153
|
+
verified_ := checkPairing(pointA_, pointB_, pointC_, publicSignals_, pointer_)
|
|
154
|
+
}
|
|
162
155
|
}
|
|
163
156
|
}
|
|
164
157
|
}
|