@zkasm/zkevm-rom 0.0.1-security → 6.0.1
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.
Potentially problematic release.
This version of @zkasm/zkevm-rom might be problematic. Click here for more details.
- package/.eslintrc.js +33 -0
- package/.github/CODEOWNERS +14 -0
- package/.github/ISSUE_TEMPLATE/bug.yml +38 -0
- package/.github/ISSUE_TEMPLATE/feature.yml +26 -0
- package/.github/ISSUE_TEMPLATE/question.yml +26 -0
- package/.github/workflows/main.yaml +40 -0
- package/LICENSE +636 -0
- package/README.md +23 -5
- package/audits/Hexens_Polygon_zkEVM_PUBLIC_27.02.23.pdf +0 -0
- package/audits/Polygon-zkEVM-Public-v1.1-verichains-19-03-2024.pdf +0 -0
- package/audits/zkEVM-ROM-upgrade-1-Spearbit-30-May.pdf +0 -0
- package/audits/zkEVM-ROM-upgrade-2-Spearbit-21-August.pdf +0 -0
- package/audits/zkEVM-engagement-1-Spearbit-27-March.pdf +0 -0
- package/audits/zkEVM-engagement-2-Spearbit-27-March.pdf +0 -0
- package/audits/zkEVM-engagement-3-Spearbit-6-April.pdf +0 -0
- package/counters/README.md +45 -0
- package/counters/counters-executor.js +80 -0
- package/counters/countersConstants.zkasm +370 -0
- package/counters/endIncludes.zkasm +18 -0
- package/counters/initIncludes.zkasm +2 -0
- package/counters/tests/MLOAD32.zkasm +27 -0
- package/counters/tests/MLOADX.zkasm +30 -0
- package/counters/tests/MSTORE32.zkasm +32 -0
- package/counters/tests/MSTOREX.zkasm +36 -0
- package/counters/tests/SHLarith.zkasm +28 -0
- package/counters/tests/SHLarithBit.zkasm +28 -0
- package/counters/tests/SHRarith.zkasm +28 -0
- package/counters/tests/SHRarithBit.zkasm +28 -0
- package/counters/tests/abs.zkasm +29 -0
- package/counters/tests/addBatchHashByteByByte.zkasm +31 -0
- package/counters/tests/computeGasSendCall.zkasm +30 -0
- package/counters/tests/divArith.zkasm +27 -0
- package/counters/tests/expAD.zkasm +30 -0
- package/counters/tests/getLenBits.zkasm +30 -0
- package/counters/tests/getLenBytes.zkasm +32 -0
- package/counters/tests/isEmptyAccount.zkasm +30 -0
- package/counters/tests/mulARITH.zkasm +28 -0
- package/counters/tests/offsetUtil.zkasm +29 -0
- package/counters/tests/opADDMOD.zkasm +28 -0
- package/counters/tests/opAdd.zkasm +27 -0
- package/counters/tests/opBLOCKHASH.zkasm +28 -0
- package/counters/tests/opCALL.zkasm +41 -0
- package/counters/tests/opCALLCODE.zkasm +41 -0
- package/counters/tests/opCALLDATACOPY.zkasm +28 -0
- package/counters/tests/opCALLDATALOAD.zkasm +27 -0
- package/counters/tests/opCODECOPY.zkasm +28 -0
- package/counters/tests/opCREATE.zkasm +35 -0
- package/counters/tests/opCREATE2.zkasm +35 -0
- package/counters/tests/opDELEGATECALL.zkasm +35 -0
- package/counters/tests/opDIV.zkasm +27 -0
- package/counters/tests/opEXP.zkasm +29 -0
- package/counters/tests/opEXTCODECOPY.zkasm +29 -0
- package/counters/tests/opMOD.zkasm +27 -0
- package/counters/tests/opMUL.zkasm +27 -0
- package/counters/tests/opMULMOD.zkasm +28 -0
- package/counters/tests/opRETURN.zkasm +32 -0
- package/counters/tests/opRETURNDATACOPY.zkasm +29 -0
- package/counters/tests/opREVERT.zkasm +32 -0
- package/counters/tests/opSDIV.zkasm +28 -0
- package/counters/tests/opSHA3.zkasm +28 -0
- package/counters/tests/opSIGNEXTEND.zkasm +27 -0
- package/counters/tests/opSMOD.zkasm +28 -0
- package/counters/tests/opSTATICCALL.zkasm +35 -0
- package/counters/tests/opSUB.zkasm +27 -0
- package/counters/tests/saveMem.zkasm +31 -0
- package/docs/opcode-cost-zk-counters.md +315 -0
- package/docs/usage-ecrecover.md +51 -0
- package/index.js +43 -0
- package/main/block-info.zkasm +204 -0
- package/main/constants.zkasm +145 -0
- package/main/ecrecover/addFpEc.zkasm +31 -0
- package/main/ecrecover/checkSqrtFpEc.zkasm +1558 -0
- package/main/ecrecover/constEc.zkasm +13 -0
- package/main/ecrecover/ecrecover.zkasm +280 -0
- package/main/ecrecover/invFnEc.zkasm +44 -0
- package/main/ecrecover/invFpEc.zkasm +45 -0
- package/main/ecrecover/mulFnEc.zkasm +36 -0
- package/main/ecrecover/mulFpEc.zkasm +36 -0
- package/main/ecrecover/mulPointEc.zkasm +311 -0
- package/main/ecrecover/sqFpEc.zkasm +38 -0
- package/main/ecrecover/sqrtFpEc.zkasm +70 -0
- package/main/end.zkasm +4 -0
- package/main/l2-tx-hash.zkasm +159 -0
- package/main/load-change-l2-block-utils.zkasm +11 -0
- package/main/load-change-l2-block.zkasm +28 -0
- package/main/load-tx-rlp-utils.zkasm +72 -0
- package/main/load-tx-rlp.zkasm +431 -0
- package/main/main.zkasm +237 -0
- package/main/map-opcodes.zkasm +274 -0
- package/main/modexp/array_lib/array_add_AGTB.zkasm +123 -0
- package/main/modexp/array_lib/array_add_short.zkasm +85 -0
- package/main/modexp/array_lib/array_div.zkasm +215 -0
- package/main/modexp/array_lib/array_div_long.zkasm +284 -0
- package/main/modexp/array_lib/array_div_short.zkasm +222 -0
- package/main/modexp/array_lib/array_mul.zkasm +97 -0
- package/main/modexp/array_lib/array_mul_long.zkasm +156 -0
- package/main/modexp/array_lib/array_mul_short.zkasm +127 -0
- package/main/modexp/array_lib/array_square.zkasm +246 -0
- package/main/modexp/array_lib/unused/array_add.zkasm +100 -0
- package/main/modexp/array_lib/unused/array_is_odd.zkasm +23 -0
- package/main/modexp/array_lib/unused/array_is_one.zkasm +33 -0
- package/main/modexp/array_lib/unused/array_is_zero.zkasm +34 -0
- package/main/modexp/array_lib/unused/array_sub_AGTB.zkasm +111 -0
- package/main/modexp/array_lib/unused/array_unshift.zkasm +37 -0
- package/main/modexp/array_lib/utils/array_compare.zkasm +82 -0
- package/main/modexp/array_lib/utils/array_trim.zkasm +49 -0
- package/main/modexp/constants.zkasm +5 -0
- package/main/modexp/modexp.zkasm +296 -0
- package/main/modexp/modexp_utils.zkasm +230 -0
- package/main/opcodes/arithmetic.zkasm +357 -0
- package/main/opcodes/block.zkasm +163 -0
- package/main/opcodes/calldata-returndata-code.zkasm +619 -0
- package/main/opcodes/comparison.zkasm +446 -0
- package/main/opcodes/context-information.zkasm +169 -0
- package/main/opcodes/create-terminate-context.zkasm +1011 -0
- package/main/opcodes/crypto.zkasm +96 -0
- package/main/opcodes/flow-control.zkasm +126 -0
- package/main/opcodes/logs.zkasm +193 -0
- package/main/opcodes/stack-operations.zkasm +658 -0
- package/main/opcodes/storage-memory.zkasm +313 -0
- package/main/pairings/BN254/addPointBN254.zkasm +245 -0
- package/main/pairings/BN254/ecAdd.zkasm +312 -0
- package/main/pairings/BN254/ecMul.zkasm +159 -0
- package/main/pairings/BN254/escalarMulBN254.zkasm +155 -0
- package/main/pairings/BN254/lineDiffPointsBN254.zkasm +83 -0
- package/main/pairings/BN254/lineSamePointsBN254.zkasm +96 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/compressFp12BN254.zkasm +49 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/decompressFp12BN254.zkasm +236 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/expByXCompCycloFp12BN254.zkasm +444 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCompCycloFp12BN254.zkasm +212 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/squareCycloFp12BN254.zkasm +228 -0
- package/main/pairings/FP12BN254/CYCLOFP12BN254/xBinDecompBN254.zkasm +64 -0
- package/main/pairings/FP12BN254/frob2Fp12BN254.zkasm +80 -0
- package/main/pairings/FP12BN254/frob3Fp12BN254.zkasm +96 -0
- package/main/pairings/FP12BN254/frobFp12BN254.zkasm +96 -0
- package/main/pairings/FP12BN254/inverseFp12BN254.zkasm +289 -0
- package/main/pairings/FP12BN254/mulFp12BN254.zkasm +408 -0
- package/main/pairings/FP12BN254/sparseMulAFp12BN254.zkasm +296 -0
- package/main/pairings/FP12BN254/sparseMulBFp12BN254.zkasm +291 -0
- package/main/pairings/FP12BN254/squareFp12BN254.zkasm +376 -0
- package/main/pairings/FP2BN254/addFp2BN254.zkasm +19 -0
- package/main/pairings/FP2BN254/escalarMulFp2BN254.zkasm +20 -0
- package/main/pairings/FP2BN254/invFp2BN254.zkasm +66 -0
- package/main/pairings/FP2BN254/mulFp2BN254.zkasm +19 -0
- package/main/pairings/FP2BN254/squareFp2BN254.zkasm +21 -0
- package/main/pairings/FP2BN254/subFp2BN254.zkasm +19 -0
- package/main/pairings/FP4BN254/squareFp4BN254.zkasm +76 -0
- package/main/pairings/FP6BN254/addFp6BN254.zkasm +59 -0
- package/main/pairings/FP6BN254/escalarMulFp6BN254.zkasm +51 -0
- package/main/pairings/FP6BN254/inverseFp6BN254.zkasm +208 -0
- package/main/pairings/FP6BN254/mulFp6BN254.zkasm +201 -0
- package/main/pairings/FP6BN254/sparseMulAFp6BN254.zkasm +65 -0
- package/main/pairings/FP6BN254/sparseMulBFp6BN254.zkasm +134 -0
- package/main/pairings/FP6BN254/sparseMulCFp6BN254.zkasm +128 -0
- package/main/pairings/FP6BN254/squareFp6BN254.zkasm +147 -0
- package/main/pairings/FP6BN254/subFp6BN254.zkasm +59 -0
- package/main/pairings/FPBN254/addFpBN254.zkasm +29 -0
- package/main/pairings/FPBN254/invFpBN254.zkasm +55 -0
- package/main/pairings/FPBN254/mulFpBN254.zkasm +29 -0
- package/main/pairings/FPBN254/reduceFpBN254.zkasm +25 -0
- package/main/pairings/FPBN254/squareFpBN254.zkasm +31 -0
- package/main/pairings/FPBN254/subFpBN254.zkasm +36 -0
- package/main/pairings/FRBN254/reduceFrBN254.zkasm +25 -0
- package/main/pairings/constants.zkasm +62 -0
- package/main/pairings/ecPairing.zkasm +244 -0
- package/main/pairings/finalExpBN254.zkasm +2095 -0
- package/main/pairings/halfPairingBN254.zkasm +428 -0
- package/main/pairings/loopLengthBN254.zkasm +75 -0
- package/main/pairings/millerLoopBN254.zkasm +741 -0
- package/main/pairings/pairingBN254.zkasm +481 -0
- package/main/pairings/unused/addFp12BN254.zkasm +130 -0
- package/main/pairings/unused/expByXCycloFp12BN254.zkasm +411 -0
- package/main/pairings/unused/expFp12BN254.zkasm +333 -0
- package/main/pairings/unused/subFp12BN254.zkasm +130 -0
- package/main/pairings/unused/xPseudoBinDecompBN254.zkasm +68 -0
- package/main/pairings/utilsTests/expCycloFp12BN254.zkasm +334 -0
- package/main/precompiled/end.zkasm +42 -0
- package/main/precompiled/identity.zkasm +99 -0
- package/main/precompiled/pre-ecAdd.zkasm +84 -0
- package/main/precompiled/pre-ecMul.zkasm +82 -0
- package/main/precompiled/pre-ecPairing.zkasm +72 -0
- package/main/precompiled/pre-ecrecover.zkasm +71 -0
- package/main/precompiled/pre-modexp.zkasm +367 -0
- package/main/precompiled/pre-sha2-256.zkasm +125 -0
- package/main/precompiled/revert-precompiled.zkasm +25 -0
- package/main/precompiled/selector.zkasm +77 -0
- package/main/process-change-l2-block.zkasm +147 -0
- package/main/process-tx.zkasm +587 -0
- package/main/tables/2-exp.zkasm +260 -0
- package/main/touched.zkasm +118 -0
- package/main/utils.zkasm +2335 -0
- package/main/vars.zkasm +117 -0
- package/package.json +62 -3
- package/test/bytes-length.zkasm +39 -0
- package/test/ecrecover.zkasm +538 -0
- package/test/lt4-test.zkasm +38 -0
- package/test/mstorex.zkasm +191 -0
- package/test/opcalldatacopy.ignore.zkasm +331 -0
- package/test/performance/read-push.zkasm +71 -0
- package/test/read-push.zkasm +304 -0
- package/test/testArrayArith.zkasm +1099 -0
- package/test/testArrayUtils.zkasm +335 -0
- package/test/testCycloFp12ArithBN254.zkasm +548 -0
- package/test/testEcAdd.zkasm +252 -0
- package/test/testEcMul.zkasm +231 -0
- package/test/testEcPairing.zkasm +436 -0
- package/test/testFinalExpBn254.zkasm +139 -0
- package/test/testFp12ArithBN254.zkasm +692 -0
- package/test/testFp2ArithBN254.zkasm +185 -0
- package/test/testFp4ArithBN254.zkasm +128 -0
- package/test/testFp6ArithBN254.zkasm +260 -0
- package/test/testFpArithBN254.zkasm +159 -0
- package/test/testFrArithBN254.zkasm +113 -0
- package/test/testHalfPairingBN254.zkasm +285 -0
- package/test/testModExp.zkasm +586 -0
- package/test/testModExpReturn.zkasm +81 -0
- package/test/testPairingBN254.zkasm +463 -0
- package/test/testPointArithBN254.zkasm +270 -0
- package/test/testSHA256.zkasm +27 -0
- package/test/touched-assert.zkasm +59 -0
- package/test/utils-expAD.zkasm +48 -0
- package/test/utils-getLenBytes.zkasm +36 -0
- package/tools/audit-tools/registry-op-checker.js +71 -0
- package/tools/get-not-used-labels.js +31 -0
- package/tools/helpers/helpers.js +47 -0
- package/tools/modexp-utils/README.md +5 -0
- package/tools/modexp-utils/modexp-test-gen.js +168 -0
- package/tools/modexp-utils/modexp-test-int.sage +37 -0
- package/tools/parallel-testing/checker.sh +6 -0
- package/tools/parallel-testing/gen-parallel-tests.js +78 -0
- package/tools/parallel-testing/parallel-tests-sample/sample.test.js +136 -0
- package/tools/run-tests-zkasm.js +83 -0
@@ -0,0 +1,296 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP6 arithmetic
|
3
|
+
;;
|
4
|
+
;; sparseMulAFp12BN254:
|
5
|
+
;; in: (a1 + a2·w),(b1 + b2·w) ∈ Fp12, where ai ∈ Fp6, b1 = b12·v and b2 = b22·v + b23·v², with b12,b22,b23 ∈ Fp2
|
6
|
+
;; out: (a1 + a2·w)·(b1 + b2·w) = (c1 + c2·w) ∈ Fp12, where:
|
7
|
+
;; - c1 = a1·b1 + a2·b2·v
|
8
|
+
;; - c2 = (a1+a2)·[(b12+b22)·v + b23·v²] - a1·b1 - a2·b2
|
9
|
+
;;
|
10
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
11
|
+
|
12
|
+
VAR GLOBAL sparseMulAFp12BN254_a11_x
|
13
|
+
VAR GLOBAL sparseMulAFp12BN254_a11_y
|
14
|
+
VAR GLOBAL sparseMulAFp12BN254_a12_x
|
15
|
+
VAR GLOBAL sparseMulAFp12BN254_a12_y
|
16
|
+
VAR GLOBAL sparseMulAFp12BN254_a13_x
|
17
|
+
VAR GLOBAL sparseMulAFp12BN254_a13_y
|
18
|
+
VAR GLOBAL sparseMulAFp12BN254_a21_x
|
19
|
+
VAR GLOBAL sparseMulAFp12BN254_a21_y
|
20
|
+
VAR GLOBAL sparseMulAFp12BN254_a22_x
|
21
|
+
VAR GLOBAL sparseMulAFp12BN254_a22_y
|
22
|
+
VAR GLOBAL sparseMulAFp12BN254_a23_x
|
23
|
+
VAR GLOBAL sparseMulAFp12BN254_a23_y
|
24
|
+
|
25
|
+
VAR GLOBAL sparseMulAFp12BN254_b12_x
|
26
|
+
VAR GLOBAL sparseMulAFp12BN254_b12_y
|
27
|
+
VAR GLOBAL sparseMulAFp12BN254_b22_x
|
28
|
+
VAR GLOBAL sparseMulAFp12BN254_b22_y
|
29
|
+
VAR GLOBAL sparseMulAFp12BN254_b23_x
|
30
|
+
VAR GLOBAL sparseMulAFp12BN254_b23_y
|
31
|
+
|
32
|
+
VAR GLOBAL sparseMulAFp12BN254_c11_x
|
33
|
+
VAR GLOBAL sparseMulAFp12BN254_c11_y
|
34
|
+
VAR GLOBAL sparseMulAFp12BN254_c12_x
|
35
|
+
VAR GLOBAL sparseMulAFp12BN254_c12_y
|
36
|
+
VAR GLOBAL sparseMulAFp12BN254_c13_x
|
37
|
+
VAR GLOBAL sparseMulAFp12BN254_c13_y
|
38
|
+
VAR GLOBAL sparseMulAFp12BN254_c21_x
|
39
|
+
VAR GLOBAL sparseMulAFp12BN254_c21_y
|
40
|
+
VAR GLOBAL sparseMulAFp12BN254_c22_x
|
41
|
+
VAR GLOBAL sparseMulAFp12BN254_c22_y
|
42
|
+
VAR GLOBAL sparseMulAFp12BN254_c23_x
|
43
|
+
VAR GLOBAL sparseMulAFp12BN254_c23_y
|
44
|
+
|
45
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul1_x
|
46
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul1_y
|
47
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul2_x
|
48
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul2_y
|
49
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul3_x
|
50
|
+
VAR GLOBAL sparseMulAFp12BN254_a1b1mul3_y
|
51
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul1_x
|
52
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul1_y
|
53
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul2_x
|
54
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul2_y
|
55
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul3_x
|
56
|
+
VAR GLOBAL sparseMulAFp12BN254_a2b2mul3_y
|
57
|
+
|
58
|
+
VAR GLOBAL sparseMulAFp12BN254_aux2_x
|
59
|
+
VAR GLOBAL sparseMulAFp12BN254_aux2_y
|
60
|
+
|
61
|
+
VAR GLOBAL sparseMulAFp12BN254_RR
|
62
|
+
|
63
|
+
sparseMulAFp12BN254:
|
64
|
+
RR :MSTORE(sparseMulAFp12BN254_RR)
|
65
|
+
|
66
|
+
; 1] a1·b1, a2·b2
|
67
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a11_x)
|
68
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a11_y)
|
69
|
+
A :MSTORE(sparseMulAFp6BN254_a1_x)
|
70
|
+
B :MSTORE(sparseMulAFp6BN254_a1_y)
|
71
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a12_x)
|
72
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a12_y)
|
73
|
+
A :MSTORE(sparseMulAFp6BN254_a2_x)
|
74
|
+
B :MSTORE(sparseMulAFp6BN254_a2_y)
|
75
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a13_x)
|
76
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a13_y)
|
77
|
+
A :MSTORE(sparseMulAFp6BN254_a3_x)
|
78
|
+
B :MSTORE(sparseMulAFp6BN254_a3_y)
|
79
|
+
$ => A :MLOAD(sparseMulAFp12BN254_b12_x)
|
80
|
+
$ => B :MLOAD(sparseMulAFp12BN254_b12_y)
|
81
|
+
A :MSTORE(sparseMulAFp6BN254_b2_x)
|
82
|
+
B :MSTORE(sparseMulAFp6BN254_b2_y), CALL(sparseMulAFp6BN254)
|
83
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c1_x)
|
84
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c1_y)
|
85
|
+
A :MSTORE(sparseMulAFp12BN254_a1b1mul1_x)
|
86
|
+
B :MSTORE(sparseMulAFp12BN254_a1b1mul1_y)
|
87
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c2_x)
|
88
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c2_y)
|
89
|
+
A :MSTORE(sparseMulAFp12BN254_a1b1mul2_x)
|
90
|
+
B :MSTORE(sparseMulAFp12BN254_a1b1mul2_y)
|
91
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c3_x)
|
92
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c3_y)
|
93
|
+
A :MSTORE(sparseMulAFp12BN254_a1b1mul3_x)
|
94
|
+
B :MSTORE(sparseMulAFp12BN254_a1b1mul3_y)
|
95
|
+
|
96
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a21_x)
|
97
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a21_y)
|
98
|
+
A :MSTORE(sparseMulBFp6BN254_a1_x)
|
99
|
+
B :MSTORE(sparseMulBFp6BN254_a1_y)
|
100
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a22_x)
|
101
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a22_y)
|
102
|
+
A :MSTORE(sparseMulBFp6BN254_a2_x)
|
103
|
+
B :MSTORE(sparseMulBFp6BN254_a2_y)
|
104
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a23_x)
|
105
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a23_y)
|
106
|
+
A :MSTORE(sparseMulBFp6BN254_a3_x)
|
107
|
+
B :MSTORE(sparseMulBFp6BN254_a3_y)
|
108
|
+
$ => A :MLOAD(sparseMulAFp12BN254_b22_x)
|
109
|
+
$ => B :MLOAD(sparseMulAFp12BN254_b22_y)
|
110
|
+
A :MSTORE(sparseMulBFp6BN254_b2_x)
|
111
|
+
B :MSTORE(sparseMulBFp6BN254_b2_y)
|
112
|
+
$ => A :MLOAD(sparseMulAFp12BN254_b23_x)
|
113
|
+
$ => B :MLOAD(sparseMulAFp12BN254_b23_y)
|
114
|
+
A :MSTORE(sparseMulBFp6BN254_b3_x)
|
115
|
+
B :MSTORE(sparseMulBFp6BN254_b3_y), CALL(sparseMulBFp6BN254)
|
116
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c1_x)
|
117
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c1_y)
|
118
|
+
A :MSTORE(sparseMulAFp12BN254_a2b2mul1_x)
|
119
|
+
B :MSTORE(sparseMulAFp12BN254_a2b2mul1_y)
|
120
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c2_x)
|
121
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c2_y)
|
122
|
+
A :MSTORE(sparseMulAFp12BN254_a2b2mul2_x)
|
123
|
+
B :MSTORE(sparseMulAFp12BN254_a2b2mul2_y)
|
124
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c3_x)
|
125
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c3_y)
|
126
|
+
A :MSTORE(sparseMulAFp12BN254_a2b2mul3_x)
|
127
|
+
B :MSTORE(sparseMulAFp12BN254_a2b2mul3_y)
|
128
|
+
|
129
|
+
; 2] c1 = a1·b1 + a2·b2·v
|
130
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul1_x)
|
131
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul1_y)
|
132
|
+
A :MSTORE(sparseMulAFp6BN254_a1_x)
|
133
|
+
B :MSTORE(sparseMulAFp6BN254_a1_y)
|
134
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul2_x)
|
135
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul2_y)
|
136
|
+
A :MSTORE(sparseMulAFp6BN254_a2_x)
|
137
|
+
B :MSTORE(sparseMulAFp6BN254_a2_y)
|
138
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul3_x)
|
139
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul3_y)
|
140
|
+
A :MSTORE(sparseMulAFp6BN254_a3_x)
|
141
|
+
B :MSTORE(sparseMulAFp6BN254_a3_y)
|
142
|
+
1n :MSTORE(sparseMulAFp6BN254_b2_x)
|
143
|
+
0n :MSTORE(sparseMulAFp6BN254_b2_y), CALL(sparseMulAFp6BN254)
|
144
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c1_x)
|
145
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c1_y)
|
146
|
+
A :MSTORE(addFp6BN254_a1_x)
|
147
|
+
B :MSTORE(addFp6BN254_a1_y)
|
148
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c2_x)
|
149
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c2_y)
|
150
|
+
A :MSTORE(addFp6BN254_a2_x)
|
151
|
+
B :MSTORE(addFp6BN254_a2_y)
|
152
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c3_x)
|
153
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c3_y)
|
154
|
+
A :MSTORE(addFp6BN254_a3_x)
|
155
|
+
B :MSTORE(addFp6BN254_a3_y)
|
156
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul1_x)
|
157
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul1_y)
|
158
|
+
A :MSTORE(addFp6BN254_b1_x)
|
159
|
+
B :MSTORE(addFp6BN254_b1_y)
|
160
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul2_x)
|
161
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul2_y)
|
162
|
+
A :MSTORE(addFp6BN254_b2_x)
|
163
|
+
B :MSTORE(addFp6BN254_b2_y)
|
164
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul3_x)
|
165
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul3_y)
|
166
|
+
A :MSTORE(addFp6BN254_b3_x)
|
167
|
+
B :MSTORE(addFp6BN254_b3_y), CALL(addFp6BN254)
|
168
|
+
$ => A :MLOAD(addFp6BN254_c1_x)
|
169
|
+
$ => B :MLOAD(addFp6BN254_c1_y)
|
170
|
+
A :MSTORE(sparseMulAFp12BN254_c11_x)
|
171
|
+
B :MSTORE(sparseMulAFp12BN254_c11_y)
|
172
|
+
$ => A :MLOAD(addFp6BN254_c2_x)
|
173
|
+
$ => B :MLOAD(addFp6BN254_c2_y)
|
174
|
+
A :MSTORE(sparseMulAFp12BN254_c12_x)
|
175
|
+
B :MSTORE(sparseMulAFp12BN254_c12_y)
|
176
|
+
$ => A :MLOAD(addFp6BN254_c3_x)
|
177
|
+
$ => B :MLOAD(addFp6BN254_c3_y)
|
178
|
+
A :MSTORE(sparseMulAFp12BN254_c13_x)
|
179
|
+
B :MSTORE(sparseMulAFp12BN254_c13_y)
|
180
|
+
|
181
|
+
; 3] aux = (b12+b22)·v + b23·v²
|
182
|
+
$ => A :MLOAD(sparseMulAFp12BN254_b12_x)
|
183
|
+
$ => B :MLOAD(sparseMulAFp12BN254_b12_y)
|
184
|
+
$ => C :MLOAD(sparseMulAFp12BN254_b22_x)
|
185
|
+
$ => D :MLOAD(sparseMulAFp12BN254_b22_y), CALL(addFp2BN254)
|
186
|
+
E :MSTORE(sparseMulAFp12BN254_aux2_x)
|
187
|
+
C :MSTORE(sparseMulAFp12BN254_aux2_y)
|
188
|
+
|
189
|
+
; 4] c2 = (a1+a2)·aux - a1·b1 - a2·b2
|
190
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a11_x)
|
191
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a11_y)
|
192
|
+
A :MSTORE(addFp6BN254_a1_x)
|
193
|
+
B :MSTORE(addFp6BN254_a1_y)
|
194
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a12_x)
|
195
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a12_y)
|
196
|
+
A :MSTORE(addFp6BN254_a2_x)
|
197
|
+
B :MSTORE(addFp6BN254_a2_y)
|
198
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a13_x)
|
199
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a13_y)
|
200
|
+
A :MSTORE(addFp6BN254_a3_x)
|
201
|
+
B :MSTORE(addFp6BN254_a3_y)
|
202
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a21_x)
|
203
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a21_y)
|
204
|
+
A :MSTORE(addFp6BN254_b1_x)
|
205
|
+
B :MSTORE(addFp6BN254_b1_y)
|
206
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a22_x)
|
207
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a22_y)
|
208
|
+
A :MSTORE(addFp6BN254_b2_x)
|
209
|
+
B :MSTORE(addFp6BN254_b2_y)
|
210
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a23_x)
|
211
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a23_y)
|
212
|
+
A :MSTORE(addFp6BN254_b3_x)
|
213
|
+
B :MSTORE(addFp6BN254_b3_y), CALL(addFp6BN254)
|
214
|
+
$ => A :MLOAD(addFp6BN254_c1_x)
|
215
|
+
$ => B :MLOAD(addFp6BN254_c1_y)
|
216
|
+
A :MSTORE(sparseMulBFp6BN254_a1_x)
|
217
|
+
B :MSTORE(sparseMulBFp6BN254_a1_y)
|
218
|
+
$ => A :MLOAD(addFp6BN254_c2_x)
|
219
|
+
$ => B :MLOAD(addFp6BN254_c2_y)
|
220
|
+
A :MSTORE(sparseMulBFp6BN254_a2_x)
|
221
|
+
B :MSTORE(sparseMulBFp6BN254_a2_y)
|
222
|
+
$ => A :MLOAD(addFp6BN254_c3_x)
|
223
|
+
$ => B :MLOAD(addFp6BN254_c3_y)
|
224
|
+
A :MSTORE(sparseMulBFp6BN254_a3_x)
|
225
|
+
B :MSTORE(sparseMulBFp6BN254_a3_y)
|
226
|
+
$ => A :MLOAD(sparseMulAFp12BN254_aux2_x)
|
227
|
+
$ => B :MLOAD(sparseMulAFp12BN254_aux2_y)
|
228
|
+
A :MSTORE(sparseMulBFp6BN254_b2_x)
|
229
|
+
B :MSTORE(sparseMulBFp6BN254_b2_y)
|
230
|
+
$ => A :MLOAD(sparseMulAFp12BN254_b23_x)
|
231
|
+
$ => B :MLOAD(sparseMulAFp12BN254_b23_y)
|
232
|
+
A :MSTORE(sparseMulBFp6BN254_b3_x)
|
233
|
+
B :MSTORE(sparseMulBFp6BN254_b3_y), CALL(sparseMulBFp6BN254)
|
234
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c1_x)
|
235
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c1_y)
|
236
|
+
A :MSTORE(subFp6BN254_a1_x)
|
237
|
+
B :MSTORE(subFp6BN254_a1_y)
|
238
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c2_x)
|
239
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c2_y)
|
240
|
+
A :MSTORE(subFp6BN254_a2_x)
|
241
|
+
B :MSTORE(subFp6BN254_a2_y)
|
242
|
+
$ => A :MLOAD(sparseMulBFp6BN254_c3_x)
|
243
|
+
$ => B :MLOAD(sparseMulBFp6BN254_c3_y)
|
244
|
+
A :MSTORE(subFp6BN254_a3_x)
|
245
|
+
B :MSTORE(subFp6BN254_a3_y)
|
246
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul1_x)
|
247
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul1_y)
|
248
|
+
A :MSTORE(subFp6BN254_b1_x)
|
249
|
+
B :MSTORE(subFp6BN254_b1_y)
|
250
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul2_x)
|
251
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul2_y)
|
252
|
+
A :MSTORE(subFp6BN254_b2_x)
|
253
|
+
B :MSTORE(subFp6BN254_b2_y)
|
254
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a1b1mul3_x)
|
255
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a1b1mul3_y)
|
256
|
+
A :MSTORE(subFp6BN254_b3_x)
|
257
|
+
B :MSTORE(subFp6BN254_b3_y), CALL(subFp6BN254)
|
258
|
+
$ => A :MLOAD(subFp6BN254_c1_x)
|
259
|
+
$ => B :MLOAD(subFp6BN254_c1_y)
|
260
|
+
A :MSTORE(subFp6BN254_a1_x)
|
261
|
+
B :MSTORE(subFp6BN254_a1_y)
|
262
|
+
$ => A :MLOAD(subFp6BN254_c2_x)
|
263
|
+
$ => B :MLOAD(subFp6BN254_c2_y)
|
264
|
+
A :MSTORE(subFp6BN254_a2_x)
|
265
|
+
B :MSTORE(subFp6BN254_a2_y)
|
266
|
+
$ => A :MLOAD(subFp6BN254_c3_x)
|
267
|
+
$ => B :MLOAD(subFp6BN254_c3_y)
|
268
|
+
A :MSTORE(subFp6BN254_a3_x)
|
269
|
+
B :MSTORE(subFp6BN254_a3_y)
|
270
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul1_x)
|
271
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul1_y)
|
272
|
+
A :MSTORE(subFp6BN254_b1_x)
|
273
|
+
B :MSTORE(subFp6BN254_b1_y)
|
274
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul2_x)
|
275
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul2_y)
|
276
|
+
A :MSTORE(subFp6BN254_b2_x)
|
277
|
+
B :MSTORE(subFp6BN254_b2_y)
|
278
|
+
$ => A :MLOAD(sparseMulAFp12BN254_a2b2mul3_x)
|
279
|
+
$ => B :MLOAD(sparseMulAFp12BN254_a2b2mul3_y)
|
280
|
+
A :MSTORE(subFp6BN254_b3_x)
|
281
|
+
B :MSTORE(subFp6BN254_b3_y), CALL(subFp6BN254)
|
282
|
+
$ => A :MLOAD(subFp6BN254_c1_x)
|
283
|
+
$ => B :MLOAD(subFp6BN254_c1_y)
|
284
|
+
A :MSTORE(sparseMulAFp12BN254_c21_x)
|
285
|
+
B :MSTORE(sparseMulAFp12BN254_c21_y)
|
286
|
+
$ => A :MLOAD(subFp6BN254_c2_x)
|
287
|
+
$ => B :MLOAD(subFp6BN254_c2_y)
|
288
|
+
A :MSTORE(sparseMulAFp12BN254_c22_x)
|
289
|
+
B :MSTORE(sparseMulAFp12BN254_c22_y)
|
290
|
+
$ => A :MLOAD(subFp6BN254_c3_x)
|
291
|
+
$ => B :MLOAD(subFp6BN254_c3_y)
|
292
|
+
A :MSTORE(sparseMulAFp12BN254_c23_x)
|
293
|
+
B :MSTORE(sparseMulAFp12BN254_c23_y)
|
294
|
+
|
295
|
+
$ => RR :MLOAD(sparseMulAFp12BN254_RR)
|
296
|
+
:RETURN
|
@@ -0,0 +1,291 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP6 arithmetic
|
3
|
+
;;
|
4
|
+
;; sparseMulBFp12BN254:
|
5
|
+
;; in: (a1 + a2·w),(b1 + b2·w) ∈ Fp12, where ai ∈ Fp6, b1 = b11 + b13·v² and b2 = b22·v, with b11,b13,b22 ∈ Fp2
|
6
|
+
;; out: (a1 + a2·w)·(b1 + b2·w) = (c1 + c2·w) ∈ Fp12, where:
|
7
|
+
;; - c1 = a1·b1 + a2·b2·v
|
8
|
+
;; - c2 = (a1+a2)·(b11 + b22·v + b13·v²) - a1·b1 - a2·b2
|
9
|
+
;;
|
10
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
11
|
+
|
12
|
+
VAR GLOBAL sparseMulBFp12BN254_a11_x
|
13
|
+
VAR GLOBAL sparseMulBFp12BN254_a11_y
|
14
|
+
VAR GLOBAL sparseMulBFp12BN254_a12_x
|
15
|
+
VAR GLOBAL sparseMulBFp12BN254_a12_y
|
16
|
+
VAR GLOBAL sparseMulBFp12BN254_a13_x
|
17
|
+
VAR GLOBAL sparseMulBFp12BN254_a13_y
|
18
|
+
VAR GLOBAL sparseMulBFp12BN254_a21_x
|
19
|
+
VAR GLOBAL sparseMulBFp12BN254_a21_y
|
20
|
+
VAR GLOBAL sparseMulBFp12BN254_a22_x
|
21
|
+
VAR GLOBAL sparseMulBFp12BN254_a22_y
|
22
|
+
VAR GLOBAL sparseMulBFp12BN254_a23_x
|
23
|
+
VAR GLOBAL sparseMulBFp12BN254_a23_y
|
24
|
+
|
25
|
+
VAR GLOBAL sparseMulBFp12BN254_b11_x
|
26
|
+
VAR GLOBAL sparseMulBFp12BN254_b11_y
|
27
|
+
VAR GLOBAL sparseMulBFp12BN254_b13_x
|
28
|
+
VAR GLOBAL sparseMulBFp12BN254_b13_y
|
29
|
+
VAR GLOBAL sparseMulBFp12BN254_b22_x
|
30
|
+
VAR GLOBAL sparseMulBFp12BN254_b22_y
|
31
|
+
|
32
|
+
VAR GLOBAL sparseMulBFp12BN254_c11_x
|
33
|
+
VAR GLOBAL sparseMulBFp12BN254_c11_y
|
34
|
+
VAR GLOBAL sparseMulBFp12BN254_c12_x
|
35
|
+
VAR GLOBAL sparseMulBFp12BN254_c12_y
|
36
|
+
VAR GLOBAL sparseMulBFp12BN254_c13_x
|
37
|
+
VAR GLOBAL sparseMulBFp12BN254_c13_y
|
38
|
+
VAR GLOBAL sparseMulBFp12BN254_c21_x
|
39
|
+
VAR GLOBAL sparseMulBFp12BN254_c21_y
|
40
|
+
VAR GLOBAL sparseMulBFp12BN254_c22_x
|
41
|
+
VAR GLOBAL sparseMulBFp12BN254_c22_y
|
42
|
+
VAR GLOBAL sparseMulBFp12BN254_c23_x
|
43
|
+
VAR GLOBAL sparseMulBFp12BN254_c23_y
|
44
|
+
|
45
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul1_x
|
46
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul1_y
|
47
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul2_x
|
48
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul2_y
|
49
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul3_x
|
50
|
+
VAR GLOBAL sparseMulBFp12BN254_a1b1mul3_y
|
51
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul1_x
|
52
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul1_y
|
53
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul2_x
|
54
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul2_y
|
55
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul3_x
|
56
|
+
VAR GLOBAL sparseMulBFp12BN254_a2b2mul3_y
|
57
|
+
|
58
|
+
VAR GLOBAL sparseMulBFp12BN254_RR
|
59
|
+
|
60
|
+
sparseMulBFp12BN254:
|
61
|
+
RR :MSTORE(sparseMulBFp12BN254_RR)
|
62
|
+
|
63
|
+
; 1] a1·b1, a2·b2
|
64
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a11_x)
|
65
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a11_y)
|
66
|
+
A :MSTORE(sparseMulCFp6BN254_a1_x)
|
67
|
+
B :MSTORE(sparseMulCFp6BN254_a1_y)
|
68
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a12_x)
|
69
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a12_y)
|
70
|
+
A :MSTORE(sparseMulCFp6BN254_a2_x)
|
71
|
+
B :MSTORE(sparseMulCFp6BN254_a2_y)
|
72
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a13_x)
|
73
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a13_y)
|
74
|
+
A :MSTORE(sparseMulCFp6BN254_a3_x)
|
75
|
+
B :MSTORE(sparseMulCFp6BN254_a3_y)
|
76
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b11_x)
|
77
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b11_y)
|
78
|
+
A :MSTORE(sparseMulCFp6BN254_b1_x)
|
79
|
+
B :MSTORE(sparseMulCFp6BN254_b1_y)
|
80
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b13_x)
|
81
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b13_y)
|
82
|
+
A :MSTORE(sparseMulCFp6BN254_b3_x)
|
83
|
+
B :MSTORE(sparseMulCFp6BN254_b3_y), CALL(sparseMulCFp6BN254)
|
84
|
+
$ => A :MLOAD(sparseMulCFp6BN254_c1_x)
|
85
|
+
$ => B :MLOAD(sparseMulCFp6BN254_c1_y)
|
86
|
+
A :MSTORE(sparseMulBFp12BN254_a1b1mul1_x)
|
87
|
+
B :MSTORE(sparseMulBFp12BN254_a1b1mul1_y)
|
88
|
+
$ => A :MLOAD(sparseMulCFp6BN254_c2_x)
|
89
|
+
$ => B :MLOAD(sparseMulCFp6BN254_c2_y)
|
90
|
+
A :MSTORE(sparseMulBFp12BN254_a1b1mul2_x)
|
91
|
+
B :MSTORE(sparseMulBFp12BN254_a1b1mul2_y)
|
92
|
+
$ => A :MLOAD(sparseMulCFp6BN254_c3_x)
|
93
|
+
$ => B :MLOAD(sparseMulCFp6BN254_c3_y)
|
94
|
+
A :MSTORE(sparseMulBFp12BN254_a1b1mul3_x)
|
95
|
+
B :MSTORE(sparseMulBFp12BN254_a1b1mul3_y)
|
96
|
+
|
97
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a21_x)
|
98
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a21_y)
|
99
|
+
A :MSTORE(sparseMulAFp6BN254_a1_x)
|
100
|
+
B :MSTORE(sparseMulAFp6BN254_a1_y)
|
101
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a22_x)
|
102
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a22_y)
|
103
|
+
A :MSTORE(sparseMulAFp6BN254_a2_x)
|
104
|
+
B :MSTORE(sparseMulAFp6BN254_a2_y)
|
105
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a23_x)
|
106
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a23_y)
|
107
|
+
A :MSTORE(sparseMulAFp6BN254_a3_x)
|
108
|
+
B :MSTORE(sparseMulAFp6BN254_a3_y)
|
109
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b22_x)
|
110
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b22_y)
|
111
|
+
A :MSTORE(sparseMulAFp6BN254_b2_x)
|
112
|
+
B :MSTORE(sparseMulAFp6BN254_b2_y), CALL(sparseMulAFp6BN254)
|
113
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c1_x)
|
114
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c1_y)
|
115
|
+
A :MSTORE(sparseMulBFp12BN254_a2b2mul1_x)
|
116
|
+
B :MSTORE(sparseMulBFp12BN254_a2b2mul1_y)
|
117
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c2_x)
|
118
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c2_y)
|
119
|
+
A :MSTORE(sparseMulBFp12BN254_a2b2mul2_x)
|
120
|
+
B :MSTORE(sparseMulBFp12BN254_a2b2mul2_y)
|
121
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c3_x)
|
122
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c3_y)
|
123
|
+
A :MSTORE(sparseMulBFp12BN254_a2b2mul3_x)
|
124
|
+
B :MSTORE(sparseMulBFp12BN254_a2b2mul3_y)
|
125
|
+
|
126
|
+
; 2] c1 = a1·b1 + a2·b2·v
|
127
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul1_x)
|
128
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul1_y)
|
129
|
+
A :MSTORE(sparseMulAFp6BN254_a1_x)
|
130
|
+
B :MSTORE(sparseMulAFp6BN254_a1_y)
|
131
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul2_x)
|
132
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul2_y)
|
133
|
+
A :MSTORE(sparseMulAFp6BN254_a2_x)
|
134
|
+
B :MSTORE(sparseMulAFp6BN254_a2_y)
|
135
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul3_x)
|
136
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul3_y)
|
137
|
+
A :MSTORE(sparseMulAFp6BN254_a3_x)
|
138
|
+
B :MSTORE(sparseMulAFp6BN254_a3_y)
|
139
|
+
1n :MSTORE(sparseMulAFp6BN254_b2_x)
|
140
|
+
0n :MSTORE(sparseMulAFp6BN254_b2_y), CALL(sparseMulAFp6BN254)
|
141
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c1_x)
|
142
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c1_y)
|
143
|
+
A :MSTORE(addFp6BN254_a1_x)
|
144
|
+
B :MSTORE(addFp6BN254_a1_y)
|
145
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c2_x)
|
146
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c2_y)
|
147
|
+
A :MSTORE(addFp6BN254_a2_x)
|
148
|
+
B :MSTORE(addFp6BN254_a2_y)
|
149
|
+
$ => A :MLOAD(sparseMulAFp6BN254_c3_x)
|
150
|
+
$ => B :MLOAD(sparseMulAFp6BN254_c3_y)
|
151
|
+
A :MSTORE(addFp6BN254_a3_x)
|
152
|
+
B :MSTORE(addFp6BN254_a3_y)
|
153
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul1_x)
|
154
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul1_y)
|
155
|
+
A :MSTORE(addFp6BN254_b1_x)
|
156
|
+
B :MSTORE(addFp6BN254_b1_y)
|
157
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul2_x)
|
158
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul2_y)
|
159
|
+
A :MSTORE(addFp6BN254_b2_x)
|
160
|
+
B :MSTORE(addFp6BN254_b2_y)
|
161
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul3_x)
|
162
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul3_y)
|
163
|
+
A :MSTORE(addFp6BN254_b3_x)
|
164
|
+
B :MSTORE(addFp6BN254_b3_y), CALL(addFp6BN254)
|
165
|
+
$ => A :MLOAD(addFp6BN254_c1_x)
|
166
|
+
$ => B :MLOAD(addFp6BN254_c1_y)
|
167
|
+
A :MSTORE(sparseMulBFp12BN254_c11_x)
|
168
|
+
B :MSTORE(sparseMulBFp12BN254_c11_y)
|
169
|
+
$ => A :MLOAD(addFp6BN254_c2_x)
|
170
|
+
$ => B :MLOAD(addFp6BN254_c2_y)
|
171
|
+
A :MSTORE(sparseMulBFp12BN254_c12_x)
|
172
|
+
B :MSTORE(sparseMulBFp12BN254_c12_y)
|
173
|
+
$ => A :MLOAD(addFp6BN254_c3_x)
|
174
|
+
$ => B :MLOAD(addFp6BN254_c3_y)
|
175
|
+
A :MSTORE(sparseMulBFp12BN254_c13_x)
|
176
|
+
B :MSTORE(sparseMulBFp12BN254_c13_y)
|
177
|
+
|
178
|
+
; aux = b11 + b22·v + b13·v²
|
179
|
+
|
180
|
+
; 3] c2 = (a1+a2)·aux - a1·b1 - a2·b2
|
181
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a11_x)
|
182
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a11_y)
|
183
|
+
A :MSTORE(addFp6BN254_a1_x)
|
184
|
+
B :MSTORE(addFp6BN254_a1_y)
|
185
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a12_x)
|
186
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a12_y)
|
187
|
+
A :MSTORE(addFp6BN254_a2_x)
|
188
|
+
B :MSTORE(addFp6BN254_a2_y)
|
189
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a13_x)
|
190
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a13_y)
|
191
|
+
A :MSTORE(addFp6BN254_a3_x)
|
192
|
+
B :MSTORE(addFp6BN254_a3_y)
|
193
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a21_x)
|
194
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a21_y)
|
195
|
+
A :MSTORE(addFp6BN254_b1_x)
|
196
|
+
B :MSTORE(addFp6BN254_b1_y)
|
197
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a22_x)
|
198
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a22_y)
|
199
|
+
A :MSTORE(addFp6BN254_b2_x)
|
200
|
+
B :MSTORE(addFp6BN254_b2_y)
|
201
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a23_x)
|
202
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a23_y)
|
203
|
+
A :MSTORE(addFp6BN254_b3_x)
|
204
|
+
B :MSTORE(addFp6BN254_b3_y), CALL(addFp6BN254)
|
205
|
+
$ => A :MLOAD(addFp6BN254_c1_x)
|
206
|
+
$ => B :MLOAD(addFp6BN254_c1_y)
|
207
|
+
A :MSTORE(mulFp6BN254_a1_x)
|
208
|
+
B :MSTORE(mulFp6BN254_a1_y)
|
209
|
+
$ => A :MLOAD(addFp6BN254_c2_x)
|
210
|
+
$ => B :MLOAD(addFp6BN254_c2_y)
|
211
|
+
A :MSTORE(mulFp6BN254_a2_x)
|
212
|
+
B :MSTORE(mulFp6BN254_a2_y)
|
213
|
+
$ => A :MLOAD(addFp6BN254_c3_x)
|
214
|
+
$ => B :MLOAD(addFp6BN254_c3_y)
|
215
|
+
A :MSTORE(mulFp6BN254_a3_x)
|
216
|
+
B :MSTORE(mulFp6BN254_a3_y)
|
217
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b11_x)
|
218
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b11_y)
|
219
|
+
A :MSTORE(mulFp6BN254_b1_x)
|
220
|
+
B :MSTORE(mulFp6BN254_b1_y)
|
221
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b22_x)
|
222
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b22_y)
|
223
|
+
A :MSTORE(mulFp6BN254_b2_x)
|
224
|
+
B :MSTORE(mulFp6BN254_b2_y)
|
225
|
+
$ => A :MLOAD(sparseMulBFp12BN254_b13_x)
|
226
|
+
$ => B :MLOAD(sparseMulBFp12BN254_b13_y)
|
227
|
+
A :MSTORE(mulFp6BN254_b3_x)
|
228
|
+
B :MSTORE(mulFp6BN254_b3_y), CALL(mulFp6BN254)
|
229
|
+
$ => A :MLOAD(mulFp6BN254_c1_x)
|
230
|
+
$ => B :MLOAD(mulFp6BN254_c1_y)
|
231
|
+
A :MSTORE(subFp6BN254_a1_x)
|
232
|
+
B :MSTORE(subFp6BN254_a1_y)
|
233
|
+
$ => A :MLOAD(mulFp6BN254_c2_x)
|
234
|
+
$ => B :MLOAD(mulFp6BN254_c2_y)
|
235
|
+
A :MSTORE(subFp6BN254_a2_x)
|
236
|
+
B :MSTORE(subFp6BN254_a2_y)
|
237
|
+
$ => A :MLOAD(mulFp6BN254_c3_x)
|
238
|
+
$ => B :MLOAD(mulFp6BN254_c3_y)
|
239
|
+
A :MSTORE(subFp6BN254_a3_x)
|
240
|
+
B :MSTORE(subFp6BN254_a3_y)
|
241
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul1_x)
|
242
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul1_y)
|
243
|
+
A :MSTORE(subFp6BN254_b1_x)
|
244
|
+
B :MSTORE(subFp6BN254_b1_y)
|
245
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul2_x)
|
246
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul2_y)
|
247
|
+
A :MSTORE(subFp6BN254_b2_x)
|
248
|
+
B :MSTORE(subFp6BN254_b2_y)
|
249
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a1b1mul3_x)
|
250
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a1b1mul3_y)
|
251
|
+
A :MSTORE(subFp6BN254_b3_x)
|
252
|
+
B :MSTORE(subFp6BN254_b3_y), CALL(subFp6BN254)
|
253
|
+
$ => A :MLOAD(subFp6BN254_c1_x)
|
254
|
+
$ => B :MLOAD(subFp6BN254_c1_y)
|
255
|
+
A :MSTORE(subFp6BN254_a1_x)
|
256
|
+
B :MSTORE(subFp6BN254_a1_y)
|
257
|
+
$ => A :MLOAD(subFp6BN254_c2_x)
|
258
|
+
$ => B :MLOAD(subFp6BN254_c2_y)
|
259
|
+
A :MSTORE(subFp6BN254_a2_x)
|
260
|
+
B :MSTORE(subFp6BN254_a2_y)
|
261
|
+
$ => A :MLOAD(subFp6BN254_c3_x)
|
262
|
+
$ => B :MLOAD(subFp6BN254_c3_y)
|
263
|
+
A :MSTORE(subFp6BN254_a3_x)
|
264
|
+
B :MSTORE(subFp6BN254_a3_y)
|
265
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul1_x)
|
266
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul1_y)
|
267
|
+
A :MSTORE(subFp6BN254_b1_x)
|
268
|
+
B :MSTORE(subFp6BN254_b1_y)
|
269
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul2_x)
|
270
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul2_y)
|
271
|
+
A :MSTORE(subFp6BN254_b2_x)
|
272
|
+
B :MSTORE(subFp6BN254_b2_y)
|
273
|
+
$ => A :MLOAD(sparseMulBFp12BN254_a2b2mul3_x)
|
274
|
+
$ => B :MLOAD(sparseMulBFp12BN254_a2b2mul3_y)
|
275
|
+
A :MSTORE(subFp6BN254_b3_x)
|
276
|
+
B :MSTORE(subFp6BN254_b3_y), CALL(subFp6BN254)
|
277
|
+
$ => A :MLOAD(subFp6BN254_c1_x)
|
278
|
+
$ => B :MLOAD(subFp6BN254_c1_y)
|
279
|
+
A :MSTORE(sparseMulBFp12BN254_c21_x)
|
280
|
+
B :MSTORE(sparseMulBFp12BN254_c21_y)
|
281
|
+
$ => A :MLOAD(subFp6BN254_c2_x)
|
282
|
+
$ => B :MLOAD(subFp6BN254_c2_y)
|
283
|
+
A :MSTORE(sparseMulBFp12BN254_c22_x)
|
284
|
+
B :MSTORE(sparseMulBFp12BN254_c22_y)
|
285
|
+
$ => A :MLOAD(subFp6BN254_c3_x)
|
286
|
+
$ => B :MLOAD(subFp6BN254_c3_y)
|
287
|
+
A :MSTORE(sparseMulBFp12BN254_c23_x)
|
288
|
+
B :MSTORE(sparseMulBFp12BN254_c23_y)
|
289
|
+
|
290
|
+
$ => RR :MLOAD(sparseMulBFp12BN254_RR)
|
291
|
+
:RETURN
|