@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,228 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP4/FP2 arithmetic
|
3
|
+
;;
|
4
|
+
;; squareCycloFp12BN254:
|
5
|
+
;; in: (a1 + a2·w) ∈ GΦ6(p²), where ai ∈ Fp6
|
6
|
+
;; out: (c1 + c2·w) = (a1 + a2·w)² ∈ GΦ6(p²)
|
7
|
+
;;
|
8
|
+
;; NOTE: The output is not guaranteed to be in GΦ6(p²), if the input isn't.
|
9
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
10
|
+
|
11
|
+
VAR GLOBAL squareCycloFp12BN254_a11_x
|
12
|
+
VAR GLOBAL squareCycloFp12BN254_a11_y
|
13
|
+
VAR GLOBAL squareCycloFp12BN254_a12_x
|
14
|
+
VAR GLOBAL squareCycloFp12BN254_a12_y
|
15
|
+
VAR GLOBAL squareCycloFp12BN254_a13_x
|
16
|
+
VAR GLOBAL squareCycloFp12BN254_a13_y
|
17
|
+
VAR GLOBAL squareCycloFp12BN254_a21_x
|
18
|
+
VAR GLOBAL squareCycloFp12BN254_a21_y
|
19
|
+
VAR GLOBAL squareCycloFp12BN254_a22_x
|
20
|
+
VAR GLOBAL squareCycloFp12BN254_a22_y
|
21
|
+
VAR GLOBAL squareCycloFp12BN254_a23_x
|
22
|
+
VAR GLOBAL squareCycloFp12BN254_a23_y
|
23
|
+
VAR GLOBAL squareCycloFp12BN254_c11_x
|
24
|
+
VAR GLOBAL squareCycloFp12BN254_c11_y
|
25
|
+
VAR GLOBAL squareCycloFp12BN254_c12_x
|
26
|
+
VAR GLOBAL squareCycloFp12BN254_c12_y
|
27
|
+
VAR GLOBAL squareCycloFp12BN254_c13_x
|
28
|
+
VAR GLOBAL squareCycloFp12BN254_c13_y
|
29
|
+
VAR GLOBAL squareCycloFp12BN254_c21_x
|
30
|
+
VAR GLOBAL squareCycloFp12BN254_c21_y
|
31
|
+
VAR GLOBAL squareCycloFp12BN254_c22_x
|
32
|
+
VAR GLOBAL squareCycloFp12BN254_c22_y
|
33
|
+
VAR GLOBAL squareCycloFp12BN254_c23_x
|
34
|
+
VAR GLOBAL squareCycloFp12BN254_c23_y
|
35
|
+
|
36
|
+
VAR GLOBAL squareCycloFp12BN254_t11_x
|
37
|
+
VAR GLOBAL squareCycloFp12BN254_t11_y
|
38
|
+
VAR GLOBAL squareCycloFp12BN254_t22_x
|
39
|
+
VAR GLOBAL squareCycloFp12BN254_t22_y
|
40
|
+
VAR GLOBAL squareCycloFp12BN254_t23_x
|
41
|
+
VAR GLOBAL squareCycloFp12BN254_t23_y
|
42
|
+
VAR GLOBAL squareCycloFp12BN254_t12_x
|
43
|
+
VAR GLOBAL squareCycloFp12BN254_t12_y
|
44
|
+
VAR GLOBAL squareCycloFp12BN254_t13_x
|
45
|
+
VAR GLOBAL squareCycloFp12BN254_t13_y
|
46
|
+
VAR GLOBAL squareCycloFp12BN254_aux_x
|
47
|
+
VAR GLOBAL squareCycloFp12BN254_aux_y
|
48
|
+
VAR GLOBAL squareCycloFp12BN254_t21_x
|
49
|
+
VAR GLOBAL squareCycloFp12BN254_t21_y
|
50
|
+
|
51
|
+
VAR GLOBAL squareCycloFp12BN254_RR
|
52
|
+
|
53
|
+
squareCycloFp12BN254:
|
54
|
+
RR :MSTORE(squareCycloFp12BN254_RR)
|
55
|
+
|
56
|
+
; 1] [t11,t22] = (a11 + a22·V)²
|
57
|
+
$ => A :MLOAD(squareCycloFp12BN254_a11_x)
|
58
|
+
$ => B :MLOAD(squareCycloFp12BN254_a11_y)
|
59
|
+
$ => C :MLOAD(squareCycloFp12BN254_a22_x)
|
60
|
+
$ => D :MLOAD(squareCycloFp12BN254_a22_y)
|
61
|
+
A :MSTORE(squareFp4BN254_a1_x)
|
62
|
+
B :MSTORE(squareFp4BN254_a1_y)
|
63
|
+
C :MSTORE(squareFp4BN254_a2_x)
|
64
|
+
D :MSTORE(squareFp4BN254_a2_y), CALL(squareFp4BN254)
|
65
|
+
$ => A :MLOAD(squareFp4BN254_c1_x)
|
66
|
+
$ => B :MLOAD(squareFp4BN254_c1_y)
|
67
|
+
$ => C :MLOAD(squareFp4BN254_c2_x)
|
68
|
+
$ => D :MLOAD(squareFp4BN254_c2_y)
|
69
|
+
A :MSTORE(squareCycloFp12BN254_t11_x)
|
70
|
+
B :MSTORE(squareCycloFp12BN254_t11_y)
|
71
|
+
C :MSTORE(squareCycloFp12BN254_t22_x)
|
72
|
+
D :MSTORE(squareCycloFp12BN254_t22_y)
|
73
|
+
|
74
|
+
; 2] [t23,t12] = (a21 + a13·V)²
|
75
|
+
$ => A :MLOAD(squareCycloFp12BN254_a21_x)
|
76
|
+
$ => B :MLOAD(squareCycloFp12BN254_a21_y)
|
77
|
+
$ => C :MLOAD(squareCycloFp12BN254_a13_x)
|
78
|
+
$ => D :MLOAD(squareCycloFp12BN254_a13_y)
|
79
|
+
A :MSTORE(squareFp4BN254_a1_x)
|
80
|
+
B :MSTORE(squareFp4BN254_a1_y)
|
81
|
+
C :MSTORE(squareFp4BN254_a2_x)
|
82
|
+
D :MSTORE(squareFp4BN254_a2_y), CALL(squareFp4BN254)
|
83
|
+
$ => A :MLOAD(squareFp4BN254_c1_x)
|
84
|
+
$ => B :MLOAD(squareFp4BN254_c1_y)
|
85
|
+
$ => C :MLOAD(squareFp4BN254_c2_x)
|
86
|
+
$ => D :MLOAD(squareFp4BN254_c2_y)
|
87
|
+
A :MSTORE(squareCycloFp12BN254_t23_x)
|
88
|
+
B :MSTORE(squareCycloFp12BN254_t23_y)
|
89
|
+
C :MSTORE(squareCycloFp12BN254_t12_x)
|
90
|
+
D :MSTORE(squareCycloFp12BN254_t12_y)
|
91
|
+
|
92
|
+
; 3] [t13,aux] = (a12 + a23·V)²
|
93
|
+
$ => A :MLOAD(squareCycloFp12BN254_a12_x)
|
94
|
+
$ => B :MLOAD(squareCycloFp12BN254_a12_y)
|
95
|
+
$ => C :MLOAD(squareCycloFp12BN254_a23_x)
|
96
|
+
$ => D :MLOAD(squareCycloFp12BN254_a23_y)
|
97
|
+
A :MSTORE(squareFp4BN254_a1_x)
|
98
|
+
B :MSTORE(squareFp4BN254_a1_y)
|
99
|
+
C :MSTORE(squareFp4BN254_a2_x)
|
100
|
+
D :MSTORE(squareFp4BN254_a2_y), CALL(squareFp4BN254)
|
101
|
+
$ => A :MLOAD(squareFp4BN254_c1_x)
|
102
|
+
$ => B :MLOAD(squareFp4BN254_c1_y)
|
103
|
+
$ => C :MLOAD(squareFp4BN254_c2_x)
|
104
|
+
$ => D :MLOAD(squareFp4BN254_c2_y)
|
105
|
+
A :MSTORE(squareCycloFp12BN254_t13_x)
|
106
|
+
B :MSTORE(squareCycloFp12BN254_t13_y)
|
107
|
+
C :MSTORE(squareCycloFp12BN254_aux_x)
|
108
|
+
D :MSTORE(squareCycloFp12BN254_aux_y)
|
109
|
+
|
110
|
+
; 4] t21 = aux·(9+u)
|
111
|
+
$ => A :MLOAD(squareCycloFp12BN254_aux_x)
|
112
|
+
$ => B :MLOAD(squareCycloFp12BN254_aux_y)
|
113
|
+
9n => C
|
114
|
+
1n => D :CALL(mulFp2BN254)
|
115
|
+
E :MSTORE(squareCycloFp12BN254_t21_x)
|
116
|
+
C :MSTORE(squareCycloFp12BN254_t21_y)
|
117
|
+
|
118
|
+
; 5] c11 = -2·a11 + 3·t11
|
119
|
+
%BN254_P - 2n => A
|
120
|
+
$ => C :MLOAD(squareCycloFp12BN254_a11_x)
|
121
|
+
$ => D :MLOAD(squareCycloFp12BN254_a11_y), CALL(escalarMulFp2BN254)
|
122
|
+
E :MSTORE(squareCycloFp12BN254_a11_x)
|
123
|
+
C :MSTORE(squareCycloFp12BN254_a11_y)
|
124
|
+
|
125
|
+
3n => A
|
126
|
+
$ => C :MLOAD(squareCycloFp12BN254_t11_x)
|
127
|
+
$ => D :MLOAD(squareCycloFp12BN254_t11_y), CALL(escalarMulFp2BN254)
|
128
|
+
|
129
|
+
E => A
|
130
|
+
C => B
|
131
|
+
$ => C :MLOAD(squareCycloFp12BN254_a11_x)
|
132
|
+
$ => D :MLOAD(squareCycloFp12BN254_a11_y), CALL(addFp2BN254)
|
133
|
+
E :MSTORE(squareCycloFp12BN254_c11_x)
|
134
|
+
C :MSTORE(squareCycloFp12BN254_c11_y)
|
135
|
+
|
136
|
+
; 6] c12 = -2·a12 + 3·t23
|
137
|
+
%BN254_P - 2n => A
|
138
|
+
$ => C :MLOAD(squareCycloFp12BN254_a12_x)
|
139
|
+
$ => D :MLOAD(squareCycloFp12BN254_a12_y), CALL(escalarMulFp2BN254)
|
140
|
+
E :MSTORE(squareCycloFp12BN254_a12_x)
|
141
|
+
C :MSTORE(squareCycloFp12BN254_a12_y)
|
142
|
+
|
143
|
+
3n => A
|
144
|
+
$ => C :MLOAD(squareCycloFp12BN254_t23_x)
|
145
|
+
$ => D :MLOAD(squareCycloFp12BN254_t23_y), CALL(escalarMulFp2BN254)
|
146
|
+
|
147
|
+
E => A
|
148
|
+
C => B
|
149
|
+
$ => C :MLOAD(squareCycloFp12BN254_a12_x)
|
150
|
+
$ => D :MLOAD(squareCycloFp12BN254_a12_y), CALL(addFp2BN254)
|
151
|
+
E :MSTORE(squareCycloFp12BN254_c12_x)
|
152
|
+
C :MSTORE(squareCycloFp12BN254_c12_y)
|
153
|
+
|
154
|
+
; 7] c13 = -2·a13 + 3·t13
|
155
|
+
%BN254_P - 2n => A
|
156
|
+
$ => C :MLOAD(squareCycloFp12BN254_a13_x)
|
157
|
+
$ => D :MLOAD(squareCycloFp12BN254_a13_y), CALL(escalarMulFp2BN254)
|
158
|
+
E :MSTORE(squareCycloFp12BN254_a13_x)
|
159
|
+
C :MSTORE(squareCycloFp12BN254_a13_y)
|
160
|
+
|
161
|
+
3n => A
|
162
|
+
$ => C :MLOAD(squareCycloFp12BN254_t13_x)
|
163
|
+
$ => D :MLOAD(squareCycloFp12BN254_t13_y), CALL(escalarMulFp2BN254)
|
164
|
+
|
165
|
+
E => A
|
166
|
+
C => B
|
167
|
+
$ => C :MLOAD(squareCycloFp12BN254_a13_x)
|
168
|
+
$ => D :MLOAD(squareCycloFp12BN254_a13_y), CALL(addFp2BN254)
|
169
|
+
E :MSTORE(squareCycloFp12BN254_c13_x)
|
170
|
+
C :MSTORE(squareCycloFp12BN254_c13_y)
|
171
|
+
|
172
|
+
; 8] c21 = 2·a21 + 3·t21
|
173
|
+
2n => A
|
174
|
+
$ => C :MLOAD(squareCycloFp12BN254_a21_x)
|
175
|
+
$ => D :MLOAD(squareCycloFp12BN254_a21_y), CALL(escalarMulFp2BN254)
|
176
|
+
E :MSTORE(squareCycloFp12BN254_a21_x)
|
177
|
+
C :MSTORE(squareCycloFp12BN254_a21_y)
|
178
|
+
|
179
|
+
3n => A
|
180
|
+
$ => C :MLOAD(squareCycloFp12BN254_t21_x)
|
181
|
+
$ => D :MLOAD(squareCycloFp12BN254_t21_y), CALL(escalarMulFp2BN254)
|
182
|
+
|
183
|
+
E => A
|
184
|
+
C => B
|
185
|
+
$ => C :MLOAD(squareCycloFp12BN254_a21_x)
|
186
|
+
$ => D :MLOAD(squareCycloFp12BN254_a21_y), CALL(addFp2BN254)
|
187
|
+
E :MSTORE(squareCycloFp12BN254_c21_x)
|
188
|
+
C :MSTORE(squareCycloFp12BN254_c21_y)
|
189
|
+
|
190
|
+
; 9] c22 = 2·a22 + 3·t22
|
191
|
+
2n => A
|
192
|
+
$ => C :MLOAD(squareCycloFp12BN254_a22_x)
|
193
|
+
$ => D :MLOAD(squareCycloFp12BN254_a22_y), CALL(escalarMulFp2BN254)
|
194
|
+
E :MSTORE(squareCycloFp12BN254_a22_x)
|
195
|
+
C :MSTORE(squareCycloFp12BN254_a22_y)
|
196
|
+
|
197
|
+
3n => A
|
198
|
+
$ => C :MLOAD(squareCycloFp12BN254_t22_x)
|
199
|
+
$ => D :MLOAD(squareCycloFp12BN254_t22_y), CALL(escalarMulFp2BN254)
|
200
|
+
|
201
|
+
E => A
|
202
|
+
C => B
|
203
|
+
$ => C :MLOAD(squareCycloFp12BN254_a22_x)
|
204
|
+
$ => D :MLOAD(squareCycloFp12BN254_a22_y), CALL(addFp2BN254)
|
205
|
+
E :MSTORE(squareCycloFp12BN254_c22_x)
|
206
|
+
C :MSTORE(squareCycloFp12BN254_c22_y)
|
207
|
+
|
208
|
+
; 9] c23 = 2·a23 + 3·t12
|
209
|
+
2n => A
|
210
|
+
$ => C :MLOAD(squareCycloFp12BN254_a23_x)
|
211
|
+
$ => D :MLOAD(squareCycloFp12BN254_a23_y), CALL(escalarMulFp2BN254)
|
212
|
+
E :MSTORE(squareCycloFp12BN254_a23_x)
|
213
|
+
C :MSTORE(squareCycloFp12BN254_a23_y)
|
214
|
+
|
215
|
+
3n => A
|
216
|
+
$ => C :MLOAD(squareCycloFp12BN254_t12_x)
|
217
|
+
$ => D :MLOAD(squareCycloFp12BN254_t12_y), CALL(escalarMulFp2BN254)
|
218
|
+
|
219
|
+
E => A
|
220
|
+
C => B
|
221
|
+
$ => C :MLOAD(squareCycloFp12BN254_a23_x)
|
222
|
+
$ => D :MLOAD(squareCycloFp12BN254_a23_y), CALL(addFp2BN254)
|
223
|
+
E :MSTORE(squareCycloFp12BN254_c23_x)
|
224
|
+
C :MSTORE(squareCycloFp12BN254_c23_y)
|
225
|
+
|
226
|
+
|
227
|
+
$ => RR :MLOAD(squareCycloFp12BN254_RR)
|
228
|
+
:RETURN
|
@@ -0,0 +1,64 @@
|
|
1
|
+
;;
|
2
|
+
;; parameter of BN254 x = 4965661367192848881, which can be expressed in (little-endian) binary as:
|
3
|
+
;; 100011111001000010010110010100100010110101001001100101110010001
|
4
|
+
;;
|
5
|
+
|
6
|
+
xBinDecompBN254:
|
7
|
+
1 => B :RETURN
|
8
|
+
0 => B :RETURN
|
9
|
+
0 => B :RETURN
|
10
|
+
0 => B :RETURN
|
11
|
+
1 => B :RETURN
|
12
|
+
0 => B :RETURN
|
13
|
+
0 => B :RETURN
|
14
|
+
1 => B :RETURN
|
15
|
+
1 => B :RETURN
|
16
|
+
1 => B :RETURN
|
17
|
+
0 => B :RETURN
|
18
|
+
1 => B :RETURN
|
19
|
+
0 => B :RETURN
|
20
|
+
0 => B :RETURN
|
21
|
+
1 => B :RETURN
|
22
|
+
1 => B :RETURN
|
23
|
+
0 => B :RETURN
|
24
|
+
0 => B :RETURN
|
25
|
+
1 => B :RETURN
|
26
|
+
0 => B :RETURN
|
27
|
+
0 => B :RETURN
|
28
|
+
1 => B :RETURN
|
29
|
+
0 => B :RETURN
|
30
|
+
1 => B :RETURN
|
31
|
+
0 => B :RETURN
|
32
|
+
1 => B :RETURN
|
33
|
+
1 => B :RETURN
|
34
|
+
0 => B :RETURN
|
35
|
+
1 => B :RETURN
|
36
|
+
0 => B :RETURN
|
37
|
+
0 => B :RETURN
|
38
|
+
0 => B :RETURN
|
39
|
+
1 => B :RETURN
|
40
|
+
0 => B :RETURN
|
41
|
+
0 => B :RETURN
|
42
|
+
1 => B :RETURN
|
43
|
+
0 => B :RETURN
|
44
|
+
1 => B :RETURN
|
45
|
+
0 => B :RETURN
|
46
|
+
0 => B :RETURN
|
47
|
+
1 => B :RETURN
|
48
|
+
1 => B :RETURN
|
49
|
+
0 => B :RETURN
|
50
|
+
1 => B :RETURN
|
51
|
+
0 => B :RETURN
|
52
|
+
0 => B :RETURN
|
53
|
+
1 => B :RETURN
|
54
|
+
0 => B :RETURN
|
55
|
+
0 => B :RETURN
|
56
|
+
0 => B :RETURN
|
57
|
+
0 => B :RETURN
|
58
|
+
1 => B :RETURN
|
59
|
+
0 => B :RETURN
|
60
|
+
0 => B :RETURN
|
61
|
+
1 => B :RETURN
|
62
|
+
1 => B :RETURN
|
63
|
+
1 => B :RETURN
|
64
|
+
1 => B :RETURN
|
@@ -0,0 +1,80 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP2 arithmetic
|
3
|
+
;;
|
4
|
+
;; frob2Fp12BN254:
|
5
|
+
;; in: (a1 + a2·w) = ((a11 + a12v + a13v²) + (a21 + a22v + a23v²)) ∈ Fp12, where ai ∈ Fp6 and aij ∈ Fp2
|
6
|
+
;; out: (a1 + a2·w)ᵖ˙ᵖ = (c1 + c2·w) ∈ Fp12, where:
|
7
|
+
;; - c1 = a11 + a12·γ22·v + a13·γ24·v²
|
8
|
+
;; - c2 = a21·γ21 + a22·γ23·v + a23·γ25·v²
|
9
|
+
;;
|
10
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
11
|
+
|
12
|
+
VAR GLOBAL frob2Fp12BN254_a11_x
|
13
|
+
VAR GLOBAL frob2Fp12BN254_a11_y
|
14
|
+
VAR GLOBAL frob2Fp12BN254_a12_x
|
15
|
+
VAR GLOBAL frob2Fp12BN254_a12_y
|
16
|
+
VAR GLOBAL frob2Fp12BN254_a13_x
|
17
|
+
VAR GLOBAL frob2Fp12BN254_a13_y
|
18
|
+
VAR GLOBAL frob2Fp12BN254_a21_x
|
19
|
+
VAR GLOBAL frob2Fp12BN254_a21_y
|
20
|
+
VAR GLOBAL frob2Fp12BN254_a22_x
|
21
|
+
VAR GLOBAL frob2Fp12BN254_a22_y
|
22
|
+
VAR GLOBAL frob2Fp12BN254_a23_x
|
23
|
+
VAR GLOBAL frob2Fp12BN254_a23_y
|
24
|
+
VAR GLOBAL frob2Fp12BN254_c11_x
|
25
|
+
VAR GLOBAL frob2Fp12BN254_c11_y
|
26
|
+
VAR GLOBAL frob2Fp12BN254_c12_x
|
27
|
+
VAR GLOBAL frob2Fp12BN254_c12_y
|
28
|
+
VAR GLOBAL frob2Fp12BN254_c13_x
|
29
|
+
VAR GLOBAL frob2Fp12BN254_c13_y
|
30
|
+
VAR GLOBAL frob2Fp12BN254_c21_x
|
31
|
+
VAR GLOBAL frob2Fp12BN254_c21_y
|
32
|
+
VAR GLOBAL frob2Fp12BN254_c22_x
|
33
|
+
VAR GLOBAL frob2Fp12BN254_c22_y
|
34
|
+
VAR GLOBAL frob2Fp12BN254_c23_x
|
35
|
+
VAR GLOBAL frob2Fp12BN254_c23_y
|
36
|
+
|
37
|
+
VAR GLOBAL frob2Fp12BN254_RR
|
38
|
+
|
39
|
+
frob2Fp12BN254:
|
40
|
+
RR :MSTORE(frob2Fp12BN254_RR)
|
41
|
+
|
42
|
+
; 1] c1 = a11 + a12·γ22·v + a13·γ24·v²
|
43
|
+
$ => A :MLOAD(frob2Fp12BN254_a11_x)
|
44
|
+
$ => B :MLOAD(frob2Fp12BN254_a11_y)
|
45
|
+
A :MSTORE(frob2Fp12BN254_c11_x)
|
46
|
+
B :MSTORE(frob2Fp12BN254_c11_y)
|
47
|
+
|
48
|
+
%FROBENIUS_GAMMA22 => A
|
49
|
+
$ => C :MLOAD(frob2Fp12BN254_a12_x)
|
50
|
+
$ => D :MLOAD(frob2Fp12BN254_a12_y), CALL(escalarMulFp2BN254)
|
51
|
+
E :MSTORE(frob2Fp12BN254_c12_x)
|
52
|
+
C :MSTORE(frob2Fp12BN254_c12_y)
|
53
|
+
|
54
|
+
%FROBENIUS_GAMMA24 => A
|
55
|
+
$ => C :MLOAD(frob2Fp12BN254_a13_x)
|
56
|
+
$ => D :MLOAD(frob2Fp12BN254_a13_y), CALL(escalarMulFp2BN254)
|
57
|
+
E :MSTORE(frob2Fp12BN254_c13_x)
|
58
|
+
C :MSTORE(frob2Fp12BN254_c13_y)
|
59
|
+
|
60
|
+
; 2] c2 = a21·γ21 + a22·γ23·v + a23·γ25·v²
|
61
|
+
%FROBENIUS_GAMMA21 => A
|
62
|
+
$ => C :MLOAD(frob2Fp12BN254_a21_x)
|
63
|
+
$ => D :MLOAD(frob2Fp12BN254_a21_y), CALL(escalarMulFp2BN254)
|
64
|
+
E :MSTORE(frob2Fp12BN254_c21_x)
|
65
|
+
C :MSTORE(frob2Fp12BN254_c21_y)
|
66
|
+
|
67
|
+
%FROBENIUS_GAMMA23 => A
|
68
|
+
$ => C :MLOAD(frob2Fp12BN254_a22_x)
|
69
|
+
$ => D :MLOAD(frob2Fp12BN254_a22_y), CALL(escalarMulFp2BN254)
|
70
|
+
E :MSTORE(frob2Fp12BN254_c22_x)
|
71
|
+
C :MSTORE(frob2Fp12BN254_c22_y)
|
72
|
+
|
73
|
+
%FROBENIUS_GAMMA25 => A
|
74
|
+
$ => C :MLOAD(frob2Fp12BN254_a23_x)
|
75
|
+
$ => D :MLOAD(frob2Fp12BN254_a23_y), CALL(escalarMulFp2BN254)
|
76
|
+
E :MSTORE(frob2Fp12BN254_c23_x)
|
77
|
+
C :MSTORE(frob2Fp12BN254_c23_y)
|
78
|
+
|
79
|
+
$ => RR :MLOAD(frob2Fp12BN254_RR)
|
80
|
+
:RETURN
|
@@ -0,0 +1,96 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP2 arithmetic
|
3
|
+
;;
|
4
|
+
;; frob3Fp12BN254:
|
5
|
+
;; in: (a1 + a2·w) = ((a11 + a12v + a13v²) + (a21 + a22v + a23v²)) ∈ Fp12, where ai ∈ Fp6 and aij ∈ Fp2
|
6
|
+
;; out: (a1 + a2·w)ᵖ˙ᵖ˙ᵖ = (c1 + c2·w) ∈ Fp12, where:
|
7
|
+
;; - c1 = a̅11 + a̅12·γ32·v + a̅13·γ34·v²
|
8
|
+
;; - c2 = a̅21·γ31 + a̅22·γ33·v + a̅23·γ35·v²
|
9
|
+
;;
|
10
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
11
|
+
|
12
|
+
VAR GLOBAL frob3Fp12BN254_a11_x
|
13
|
+
VAR GLOBAL frob3Fp12BN254_a11_y
|
14
|
+
VAR GLOBAL frob3Fp12BN254_a12_x
|
15
|
+
VAR GLOBAL frob3Fp12BN254_a12_y
|
16
|
+
VAR GLOBAL frob3Fp12BN254_a13_x
|
17
|
+
VAR GLOBAL frob3Fp12BN254_a13_y
|
18
|
+
VAR GLOBAL frob3Fp12BN254_a21_x
|
19
|
+
VAR GLOBAL frob3Fp12BN254_a21_y
|
20
|
+
VAR GLOBAL frob3Fp12BN254_a22_x
|
21
|
+
VAR GLOBAL frob3Fp12BN254_a22_y
|
22
|
+
VAR GLOBAL frob3Fp12BN254_a23_x
|
23
|
+
VAR GLOBAL frob3Fp12BN254_a23_y
|
24
|
+
VAR GLOBAL frob3Fp12BN254_c11_x
|
25
|
+
VAR GLOBAL frob3Fp12BN254_c11_y
|
26
|
+
VAR GLOBAL frob3Fp12BN254_c12_x
|
27
|
+
VAR GLOBAL frob3Fp12BN254_c12_y
|
28
|
+
VAR GLOBAL frob3Fp12BN254_c13_x
|
29
|
+
VAR GLOBAL frob3Fp12BN254_c13_y
|
30
|
+
VAR GLOBAL frob3Fp12BN254_c21_x
|
31
|
+
VAR GLOBAL frob3Fp12BN254_c21_y
|
32
|
+
VAR GLOBAL frob3Fp12BN254_c22_x
|
33
|
+
VAR GLOBAL frob3Fp12BN254_c22_y
|
34
|
+
VAR GLOBAL frob3Fp12BN254_c23_x
|
35
|
+
VAR GLOBAL frob3Fp12BN254_c23_y
|
36
|
+
|
37
|
+
VAR GLOBAL frob3Fp12BN254_RR
|
38
|
+
|
39
|
+
frob3Fp12BN254:
|
40
|
+
RR :MSTORE(frob3Fp12BN254_RR)
|
41
|
+
|
42
|
+
; 1] c1 = a̅11 + a̅12·γ32·v + a̅13·γ34·v²
|
43
|
+
$ => A :MLOAD(frob3Fp12BN254_a11_x)
|
44
|
+
A :MSTORE(frob3Fp12BN254_c11_x)
|
45
|
+
%BN254_P => A
|
46
|
+
$ => B :MLOAD(frob3Fp12BN254_a11_y)
|
47
|
+
$ :SUB, MSTORE(frob3Fp12BN254_c11_y)
|
48
|
+
|
49
|
+
%BN254_P => A
|
50
|
+
$ => B :MLOAD(frob3Fp12BN254_a12_y)
|
51
|
+
$ => B :SUB
|
52
|
+
$ => A :MLOAD(frob3Fp12BN254_a12_x)
|
53
|
+
%FROBENIUS_GAMMA321 => C
|
54
|
+
%FROBENIUS_GAMMA322 => D :CALL(mulFp2BN254)
|
55
|
+
E :MSTORE(frob3Fp12BN254_c12_x)
|
56
|
+
C :MSTORE(frob3Fp12BN254_c12_y)
|
57
|
+
|
58
|
+
%BN254_P => A
|
59
|
+
$ => B :MLOAD(frob3Fp12BN254_a13_y)
|
60
|
+
$ => B :SUB
|
61
|
+
$ => A :MLOAD(frob3Fp12BN254_a13_x)
|
62
|
+
%FROBENIUS_GAMMA341 => C
|
63
|
+
%FROBENIUS_GAMMA342 => D :CALL(mulFp2BN254)
|
64
|
+
E :MSTORE(frob3Fp12BN254_c13_x)
|
65
|
+
C :MSTORE(frob3Fp12BN254_c13_y)
|
66
|
+
|
67
|
+
; 2] c2 = a̅21·γ11 + a̅22·γ13·v + a̅23·γ15·v²
|
68
|
+
%BN254_P => A
|
69
|
+
$ => B :MLOAD(frob3Fp12BN254_a21_y)
|
70
|
+
$ => B :SUB
|
71
|
+
$ => A :MLOAD(frob3Fp12BN254_a21_x)
|
72
|
+
%FROBENIUS_GAMMA311 => C
|
73
|
+
%FROBENIUS_GAMMA312 => D :CALL(mulFp2BN254)
|
74
|
+
E :MSTORE(frob3Fp12BN254_c21_x)
|
75
|
+
C :MSTORE(frob3Fp12BN254_c21_y)
|
76
|
+
|
77
|
+
%BN254_P => A
|
78
|
+
$ => B :MLOAD(frob3Fp12BN254_a22_y)
|
79
|
+
$ => B :SUB
|
80
|
+
$ => A :MLOAD(frob3Fp12BN254_a22_x)
|
81
|
+
%FROBENIUS_GAMMA331 => C
|
82
|
+
%FROBENIUS_GAMMA332 => D :CALL(mulFp2BN254)
|
83
|
+
E :MSTORE(frob3Fp12BN254_c22_x)
|
84
|
+
C :MSTORE(frob3Fp12BN254_c22_y)
|
85
|
+
|
86
|
+
%BN254_P => A
|
87
|
+
$ => B :MLOAD(frob3Fp12BN254_a23_y)
|
88
|
+
$ => B :SUB
|
89
|
+
$ => A :MLOAD(frob3Fp12BN254_a23_x)
|
90
|
+
%FROBENIUS_GAMMA351 => C
|
91
|
+
%FROBENIUS_GAMMA352 => D :CALL(mulFp2BN254)
|
92
|
+
E :MSTORE(frob3Fp12BN254_c23_x)
|
93
|
+
C :MSTORE(frob3Fp12BN254_c23_y)
|
94
|
+
|
95
|
+
$ => RR :MLOAD(frob3Fp12BN254_RR)
|
96
|
+
:RETURN
|
@@ -0,0 +1,96 @@
|
|
1
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2
|
+
;; POST: The result is in the range [0,BN254_P) because if falls back to FP2 arithmetic
|
3
|
+
;;
|
4
|
+
;; frobFp12BN254:
|
5
|
+
;; in: (a1 + a2·w) = ((a11 + a12v + a13v²) + (a21 + a22v + a23v²)·w) ∈ Fp12, where ai ∈ Fp6 and aij ∈ Fp2
|
6
|
+
;; out: (a1 + a2·w)ᵖ = (c1 + c2·w) ∈ Fp12, where:
|
7
|
+
;; - c1 = a̅11 + a̅12·γ12·v + a̅13·γ14·v²
|
8
|
+
;; - c2 = a̅21·γ11 + a̅22·γ13·v + a̅23·γ15·v²
|
9
|
+
;;
|
10
|
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
11
|
+
|
12
|
+
VAR GLOBAL frobFp12BN254_a11_x
|
13
|
+
VAR GLOBAL frobFp12BN254_a11_y
|
14
|
+
VAR GLOBAL frobFp12BN254_a12_x
|
15
|
+
VAR GLOBAL frobFp12BN254_a12_y
|
16
|
+
VAR GLOBAL frobFp12BN254_a13_x
|
17
|
+
VAR GLOBAL frobFp12BN254_a13_y
|
18
|
+
VAR GLOBAL frobFp12BN254_a21_x
|
19
|
+
VAR GLOBAL frobFp12BN254_a21_y
|
20
|
+
VAR GLOBAL frobFp12BN254_a22_x
|
21
|
+
VAR GLOBAL frobFp12BN254_a22_y
|
22
|
+
VAR GLOBAL frobFp12BN254_a23_x
|
23
|
+
VAR GLOBAL frobFp12BN254_a23_y
|
24
|
+
VAR GLOBAL frobFp12BN254_c11_x
|
25
|
+
VAR GLOBAL frobFp12BN254_c11_y
|
26
|
+
VAR GLOBAL frobFp12BN254_c12_x
|
27
|
+
VAR GLOBAL frobFp12BN254_c12_y
|
28
|
+
VAR GLOBAL frobFp12BN254_c13_x
|
29
|
+
VAR GLOBAL frobFp12BN254_c13_y
|
30
|
+
VAR GLOBAL frobFp12BN254_c21_x
|
31
|
+
VAR GLOBAL frobFp12BN254_c21_y
|
32
|
+
VAR GLOBAL frobFp12BN254_c22_x
|
33
|
+
VAR GLOBAL frobFp12BN254_c22_y
|
34
|
+
VAR GLOBAL frobFp12BN254_c23_x
|
35
|
+
VAR GLOBAL frobFp12BN254_c23_y
|
36
|
+
|
37
|
+
VAR GLOBAL frobFp12BN254_RR
|
38
|
+
|
39
|
+
frobFp12BN254:
|
40
|
+
RR :MSTORE(frobFp12BN254_RR)
|
41
|
+
|
42
|
+
; 1] c1 = a̅11 + a̅12·γ12·v + a̅13·γ14·v²
|
43
|
+
$ => A :MLOAD(frobFp12BN254_a11_x)
|
44
|
+
A :MSTORE(frobFp12BN254_c11_x)
|
45
|
+
%BN254_P => A
|
46
|
+
$ => B :MLOAD(frobFp12BN254_a11_y)
|
47
|
+
$ :SUB, MSTORE(frobFp12BN254_c11_y)
|
48
|
+
|
49
|
+
%BN254_P => A
|
50
|
+
$ => B :MLOAD(frobFp12BN254_a12_y)
|
51
|
+
$ => B :SUB
|
52
|
+
$ => A :MLOAD(frobFp12BN254_a12_x)
|
53
|
+
%FROBENIUS_GAMMA121 => C
|
54
|
+
%FROBENIUS_GAMMA122 => D :CALL(mulFp2BN254)
|
55
|
+
E :MSTORE(frobFp12BN254_c12_x)
|
56
|
+
C :MSTORE(frobFp12BN254_c12_y)
|
57
|
+
|
58
|
+
%BN254_P => A
|
59
|
+
$ => B :MLOAD(frobFp12BN254_a13_y)
|
60
|
+
$ => B :SUB
|
61
|
+
$ => A :MLOAD(frobFp12BN254_a13_x)
|
62
|
+
%FROBENIUS_GAMMA141 => C
|
63
|
+
%FROBENIUS_GAMMA142 => D :CALL(mulFp2BN254)
|
64
|
+
E :MSTORE(frobFp12BN254_c13_x)
|
65
|
+
C :MSTORE(frobFp12BN254_c13_y)
|
66
|
+
|
67
|
+
; 2] c2 = a̅21·γ11 + a̅22·γ13·v + a̅23·γ15·v²
|
68
|
+
%BN254_P => A
|
69
|
+
$ => B :MLOAD(frobFp12BN254_a21_y)
|
70
|
+
$ => B :SUB
|
71
|
+
$ => A :MLOAD(frobFp12BN254_a21_x)
|
72
|
+
%FROBENIUS_GAMMA111 => C
|
73
|
+
%FROBENIUS_GAMMA112 => D :CALL(mulFp2BN254)
|
74
|
+
E :MSTORE(frobFp12BN254_c21_x)
|
75
|
+
C :MSTORE(frobFp12BN254_c21_y)
|
76
|
+
|
77
|
+
%BN254_P => A
|
78
|
+
$ => B :MLOAD(frobFp12BN254_a22_y)
|
79
|
+
$ => B :SUB
|
80
|
+
$ => A :MLOAD(frobFp12BN254_a22_x)
|
81
|
+
%FROBENIUS_GAMMA131 => C
|
82
|
+
%FROBENIUS_GAMMA132 => D :CALL(mulFp2BN254)
|
83
|
+
E :MSTORE(frobFp12BN254_c22_x)
|
84
|
+
C :MSTORE(frobFp12BN254_c22_y)
|
85
|
+
|
86
|
+
%BN254_P => A
|
87
|
+
$ => B :MLOAD(frobFp12BN254_a23_y)
|
88
|
+
$ => B :SUB
|
89
|
+
$ => A :MLOAD(frobFp12BN254_a23_x)
|
90
|
+
%FROBENIUS_GAMMA151 => C
|
91
|
+
%FROBENIUS_GAMMA152 => D :CALL(mulFp2BN254)
|
92
|
+
E :MSTORE(frobFp12BN254_c23_x)
|
93
|
+
C :MSTORE(frobFp12BN254_c23_y)
|
94
|
+
|
95
|
+
$ => RR :MLOAD(frobFp12BN254_RR)
|
96
|
+
:RETURN
|