@aztec/accounts 0.85.0 → 0.86.0
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.
- package/artifacts/EcdsaKAccount.json +645 -645
- package/artifacts/EcdsaRAccount.json +273 -273
- package/artifacts/SchnorrAccount.json +646 -646
- package/artifacts/SchnorrSingleKeyAccount.json +62 -62
- package/package.json +6 -8
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
"noir_version": "1.0.0-beta.4+0000000000000000000000000000000000000000",
|
|
4
4
|
"name": "SchnorrSingleKeyAccount",
|
|
5
5
|
"functions": [
|
|
6
|
+
{
|
|
7
|
+
"name": "sync_notes",
|
|
8
|
+
"is_unconstrained": true,
|
|
9
|
+
"custom_attributes": [
|
|
10
|
+
"aztec::macros::functions::utility"
|
|
11
|
+
],
|
|
12
|
+
"abi": {
|
|
13
|
+
"parameters": [],
|
|
14
|
+
"return_type": null,
|
|
15
|
+
"error_types": {
|
|
16
|
+
"17843811134343075018": {
|
|
17
|
+
"error_kind": "string",
|
|
18
|
+
"string": "Stack too deep"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"bytecode": "H4sIAAAAAAAA/7WTPQ+CMBCGi2KUjzjgoD+jBAyM+LG4OLpXCkpUSAB3frqQXENtwKjAJU17FJ5736OVUB0SzDLqEAyyglmBecTtj8vhQY67hakIdfvku9i2lQZ/Peq3FGBKw/Ax4w/UfzwFzr6o+bwXVndWDo1b66g+H0P5Z/9vSP+LD5418GpAXnmew/oS5Nt74t+Oz8c5SNnXTR1EgnIxdK5CSd0lcZ4SP99QmgZZJhJGDWTUQlU56pVE8YG26fmRdgrSLEpikSZ/Sav6yu6lXLyr8eA57hCOizHTMAb+BDV3X+b2+feXkKuCJ+bT+1Nn6BAztEhI1oRS2yeGwK+CP38vlizs4eEFAAA=",
|
|
23
|
+
"debug_symbols": "rZLNisMgFIXfxbUL/732VcpQTGKKICaYZGAIefcxxcyEprSbbC5e+Th86JlR46rpfvOx7QZ0uc4odLUdfRfzNi8YVcmH4O+3/TUi66D8wQ+9jes6jDaN6EKJoBwjF5vHWbOc0frg1k0t+MBrUIUGIv5YzV+gksmCSkn+YwUsXxhRcYYNcL3ZSPPeRnBTUKHgYCNPsQGx2Rh4b6PI9jaKqYONOsPGMFZow+UHGyAF1eTpp5a8ftvkbRVcqVg7xXrXuPGnd0/l61NXu2ZKbq3hroF5XilgxnNsjv4F",
|
|
24
|
+
"brillig_names": [
|
|
25
|
+
"sync_notes"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
6
28
|
{
|
|
7
29
|
"name": "verify_private_authwit",
|
|
8
30
|
"is_unconstrained": false,
|
|
@@ -1600,8 +1622,8 @@
|
|
|
1600
1622
|
}
|
|
1601
1623
|
}
|
|
1602
1624
|
},
|
|
1603
|
-
"bytecode": "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",
|
|
1604
|
-
"debug_symbols": "
|
|
1625
|
+
"bytecode": "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",
|
|
1626
|
+
"debug_symbols": "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",
|
|
1605
1627
|
"brillig_names": [
|
|
1606
1628
|
"get_auth_witness",
|
|
1607
1629
|
"decompose_hint",
|
|
@@ -1611,7 +1633,7 @@
|
|
|
1611
1633
|
"directive_invert",
|
|
1612
1634
|
"directive_integer_quotient"
|
|
1613
1635
|
],
|
|
1614
|
-
"verification_key": "
|
|
1636
|
+
"verification_key": "AAAAAAAEAAAAAAAAAAAAEgAAAAAAAAAQAAAAAAAAVgkAAAAA//////////8ABn3bwQ+y0vOjnZkjz2LZwk0tu9G4aL9jQJkwmNOzPwssvAp+ay6FaLKY6hHfvR/KwRXrP3r/KJAQDRX9hfL0dwEbtW5LfurzvVxnMrHIHsMpW1MsO7VZ6x8Jzg2GZNRtL7O1XJUrk0SL9L1CXJGKm3ZQL83BMVoj/G68pqIXlMwwKPGYIYGtgk9E6sy9k3Avm26aJTncSMncF6GPILU1MQsz+6FtcgHnOdoutdv/L27Gjxw9GPdTpLchFImJcY81HgxV8S9LghQSDGcoBozNeaCZaHxNkpdZnvKXkiPTLkArfL1oQq8J8derlk2VskAn5pIbLblRTAwl3M8noot8jiPLWnYxGCZupyeQ0k2krAjNQJI/Wz3f9CVX6BAVg3SeKT79MGMU50az3WdXLMmm5FrFvvGKaaLRteAToNaHIqgclT9DSQjDooybfvwzIlT7eRifPeXZZzq1vjeBHH/dFRHd73RQXBn9TDeogSDS23DE5A+krbq4Cdg7lMWVpxuuIuSmLVifXcWOAD4X0sKeZqqcjXq3WBuYEO2nPlPhfd8OP4PTyf+mJHwLpRXOLm9SrLCVbfb6d5ltuCSwof5icA1Wu+8Ucnj9wFf5ozbZhNCgAIDNjzS6DjdUbBAmZcj+KR+74Lf28oI9VGnPmBoe8R8+rthyYCYhHS7g+D4y5FMktf5eJlEiSct7vyhbrV6C0cRBJm99K6TQ/Kpy2hGNoh6lM636uddyJ8nNOTI9I27rlWcXnIOsowa7tt7rT8aJLPEHYPP9XHfwjubgEXMpFCXIcvCHdq+8pEJ5FvfN7M8JVnhT6mfVdkGMnrAkDltXO9Rn/L3qFbTFUij+6x9WBxSTzjng82Fpzx9PDa3uf3M3FoZTrY9j4mAn0DrO7DLHB343Uw8OcTYZEbtTcrZeFj20Jws/F26IF5MtsRLOMKwR2sHe4izXIbOhwlAeTJXmV7oaouWl9Z2O1at1JMFzAQUE4QlEqE7Ztan+JduFgO+JSvnZjORe2P8D9bqPlME7HfWKf0zqTShDD09yQw2Hv+h1T+PCDLbvfFKtQvU4pdsKfT4OAkUDvRsvO03KkY/tWgA/zcH2P9+RhmmEjVLm8hrP29pg7ocfjkGADu/NVWUEJXhtCA0EJ8P7KKhaz+T+GtHpKUm05AOzXknXhH9FCOqTq8znVFvLcjsiWjrjQUUrIW3bLff+fzsLvnK7bzlWK+gr17yRqELAbzRblB2ZPRdEP/89yFH1Yqgw+OVD+ZQn/Kgj8xsZu+YBFYc1t5PjI2ktumyU4uw8mlhBL0ARQWyTzx9q3m/8qOwoX+DZn38j3DtrPOI937IgS0QD90WuW5GTZlgiLRzaz0GO/iiTIRfoBrjMdsTkNWmcamL+MK4yVBGQNtSZAUCtU9HLSmsPGGmmulSD1+dDPUM7ki9Ju+bJi4InR/aSWfgcJNTT4I8qMdyUa4KXDQjHtUhIrvBE4nsAjgMBGB3Gub7VAN3fnRKUB5aHMrOy+lJtjubAgQw71P6VB/vZo+xX03XDkSKdD7CUAIdCJ2l0QLpd0IfC1+UglQf9kmuafr48fpm70I0MV8KK4jtPDs1uV0zGp2WZIeSuJIr1Okz2VVh6OOlsWhAvrCOJgBeDSXbJjszI38s7cvKGn3m/qx7hE8lfcFbgHVfjup9WlQCyhVJOR4JgS8kuOxqZilc2mxpPpBLct2cjoKus38zB1/EtLrhq8FY77S+bdkYV3BwEtDBo9XS1OBkqh8hvEoR/MbIsJB4tU51yJl9r+SHD+OyJZB28rrQTAmveVeDzc7qE9oi0FkB1jxCBfjLELqgu0BByKfBE9g4K4RQzcKWCklt8D0paLSrBakPDEsIa1UBTydDQYe7xWQqFAZ4SUmmTEsvV7GojsoSps1J80uv/YrJFoEqrJY+SG7oabknwumZkPosy/QkOALXu5yM2Qww/632muLV+FVEAs04Agrxa7YGagbs2dExNYSyA/JGiaaqqqXXITI5Y1gATrqO8wIQextlLKF8b6765aeDyx4VicNxf2ixdOZ3MAtnwRl70srEW1LiGJTRPJnF4KpM3Kq02lTCuS3XCK9smXwxwU27AL3yb5M4Zwp0m6YOZQtcpIBQf69qwfkwgwyeAek97I9nMHIZe+ZMJmToznoy4xkjQfDTdy070RSeDDL+dbgtvqmCd29WBf10QvE/YEMeB17I5pHoIY2FobtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJ2fA5Wa7LlOBymgvADlTZwg7C8Ppm73VPNQmV4KkdpoJ+eV6//PhraWZmum2YDVateD+shv5yOZBnvdDZyX4uQDENyb3W2/aDeIs4ODfq2vMegX/lalrKJQkxfczZw2WL5tuC04sAZaN5cMkgqp9HQoJ1xeOyTuteFj5bmTwtI0dWKphxkrVIgQ9ecSAIhnlW6GXUa3+bDYyTT+2wtoJiS18GKk8Pa5YgJ+q7saoanj0s7xh8Z1ucGk1m79H5/kH"
|
|
1615
1637
|
},
|
|
1616
1638
|
{
|
|
1617
1639
|
"name": "entrypoint",
|
|
@@ -3369,8 +3391,8 @@
|
|
|
3369
3391
|
}
|
|
3370
3392
|
}
|
|
3371
3393
|
},
|
|
3372
|
-
"bytecode": "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",
|
|
3373
|
-
"debug_symbols": "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7HusSw30TkRooHciQgO9ExEa6J2IzEDfY11qoHciQgO9ExEa6J2IrBPxPdalBnonIjTQOxGhgd6JCA30TkS4CnsnIjPQ91iXGuidiNBA70SEBnonIjSQ3ECZgd6JCA30TkRooHcisk7E91iXGuidiMxA32NdaqB3IkIDvRORrcK+x7rUQHIDZQZ6JyI00DsRoYHeiQgN9E5EaKB3IjIDfY91qYHeicg6Ed9jXWqgdyJCA8kNlBnonYjQQO9EhKuwdyJCA70TERronYjMQN9jXWqgdyJCA70TERronYjQQHIDZQZ6JyLrRHyPdamB3okIDfRORGigdyIiA2PwTdZly/DJQe9FpA56MyJ10LsRqYPkDgod9H5E6qA3JFIHvSOROugtidRB70mEPYlvty520HsSqYPek0gd9J5E6iC5g7K12PdcFzvoPYnUQe9JpA56TyJ10HsSoYO+8brYQe9JpA56TyJ10HsSYU/im6+LHfSeROqg9yRSB70nkTroPYl0LfaeROigb8EudtB7EqmD3pNIHfSeROoguYNCB70nkTroPYnUQe9JhD2Jb8UudtB7EqGDvhm72EHvSaQOek8iXIt9P3axg+QOCh30nkTqoPckUge9J5E66D2J1EHvSYQO+rbsYge9JxH2JL4xu9hB70mkDpI7KHTQexKpg96TSNdi70mkDnpPInXQexKhg75Bu9hB70mkDnpPInXQexKpg+QOCh30nkTYk/g27WIHvSeROug9idRB70mEDvpW7dK12PdqFzvoPYnUQe9JpA6SOyh00HsSqYPek0gd9J5E6qD3JFIHvScR9iS+abvYQe9JpA56TyJ10HsSqYPkDsrWYt+5Xeyg9yRSB70nkTroPYnUQe9JhA769u1iB70nkTroPYnUQe9JhD2Jb+EudtB7EqmD3pNIHfSeROqg9yTStdh7EpmD0fdxFzvoPYnUQe9JpA56TyJ1kNxBoYPek0gd9J5E6qD3JLKeJPo+7mIHvScROuj7uIsd9J5E6qD3JMK12PdxFztI7qDQQe9JpA56TyJ10HsSqYPek0gd9J5E6KDv4y520HsSYU/i+7iLHfSeROoguYNCB70nkTroPYl0LfaeRHoPek8iddB7EqGDvo+72EHvSaQOek8iXIt9H3fxPUjuoNBB70mkDnpPInXQexKpg96TSNdi70mEDvo+7mIHvSeR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",
|
|
3394
|
+
"bytecode": "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",
|
|
3395
|
+
"debug_symbols": "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iQgNJDdQtAr7HutSA70TERronYjQQO9EhAZ6JyIz0PdYlxronYjQQO9EhAZ6JyLrRHyPdamB3okIDfRORGigdyJCA70TEa7C3onIDPQ91qUGeiciNNA7EaGB3okIDSQ3UGagdyJCA70TERronYisE/E91qUGeiciM9D3WJca6J2I0EDvRGSrsO+xLjWQ3ECZgd6JCA30TkRooHciQgO9ExEa6J2IzEDfY11qoHcisk7E91iXGuidiNBAcgNlBnonIjTQOxHhKuydiNBA70SEBnonIjPQ91iXGuidiNBA70SEBnonIjSQ3ECZgd6JyDoR32NdaqB3IkIDvRMRGuidiMjAsPgm67Jl+OSg9yJSB70ZkTro3YjUQXIHhQ56PyJ10BsSqYPekUgd9JZE6qD3JMKexLdbFzvoPYnUQe9JpA56TyJ1kNxB2Vrse66LHfSeROqg9yRSB70nkTroPYnQQd94Xeyg9yRSB70nkTroPYmwJ/HN18UOek8iddB7EqmD3pNIHfSeRLoWe08idNC3YBc76D2J1EHvSaQOek8idZDcQaGD3pNIHfSeROqg9yTCnsS3Yhc76D2J0EHfjF3soPckUge9JxGuxb4fu9hBcgeFDnpPInXQexKpg96TSB30nkTqoPckQgd9W3axg96TCHsS35hd7KD3JFIHyR0UOug9idRB70mka7H3JFIHvSeROug9idBB36Bd7KD3JFIHvSeROug9idRBcgeFDnpPIuxJfJt2sYPek0gd9J5E6qD3JEIHfat26Vrse7WLHfSeROqg9yRSB8kdFDroPYnUQe9JpA56TyJ10HsSqYPekwh7Et+0Xeyg9yRSB70nkTroPYnUQXIHZWux79wudtB7EqmD3pNIHfSeROqg9yRCB337drGD3pNIHfSeROqg9yTCnsS3cBc76D2J1EHvSaQOek8iddB7Eula7D2JzMHg+7iLHfSeROqg9yRSB70nkTpI7qDQQe9JpA56TyJ10HsSWU8SfB93sYPekwgd9H3cxQ56TyJ10HsS4Vrs+7iLHSR3UOig9yRSB70nkTroPYnUQe9JpA56TyJ00PdxFzvoPYmwJ/F93MUOek8idZDcQaGD3pNIHfSeRLoWe08ivQe9J5E66D2J0EHfx13soPckUge9JxGuxb6Pu/geJHdQ6KD3JFIHvSeROug9idRB70mka7H3JEIH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",
|
|
3374
3396
|
"brillig_names": [
|
|
3375
3397
|
"get_auth_witness",
|
|
3376
3398
|
"decompose_hint",
|
|
@@ -3384,29 +3406,7 @@
|
|
|
3384
3406
|
"directive_invert",
|
|
3385
3407
|
"directive_integer_quotient"
|
|
3386
3408
|
],
|
|
3387
|
-
"verification_key": "
|
|
3388
|
-
},
|
|
3389
|
-
{
|
|
3390
|
-
"name": "sync_notes",
|
|
3391
|
-
"is_unconstrained": true,
|
|
3392
|
-
"custom_attributes": [
|
|
3393
|
-
"aztec::macros::functions::utility"
|
|
3394
|
-
],
|
|
3395
|
-
"abi": {
|
|
3396
|
-
"parameters": [],
|
|
3397
|
-
"return_type": null,
|
|
3398
|
-
"error_types": {
|
|
3399
|
-
"17843811134343075018": {
|
|
3400
|
-
"error_kind": "string",
|
|
3401
|
-
"string": "Stack too deep"
|
|
3402
|
-
}
|
|
3403
|
-
}
|
|
3404
|
-
},
|
|
3405
|
-
"bytecode": "H4sIAAAAAAAA/7WTPQ+CMBCGi2KUjzjgoD+jBAyM+LG4OLpXCkpUSAB3frqQXENtwKjAJU17FJ5736OVUB0SzDLqEAyyglmBecTtj8vhQY67hakIdfvku9i2lQZ/Peq3FGBKw/Ax4w/UfzwFzr6o+bwXVndWDo1b66g+H0P5Z/9vSP+LD5418GpAXnmew/oS5Nt74t+Oz8c5SNnXTR1EgnIxdK5CSd0lcZ4SP99QmgZZJhJGDWTUQlU56pVE8YG26fmRdgrSLEpikSZ/Sav6yu6lXLyr8eA57hCOizHTMAb+BDV3X+b2+feXkKuCJ+bT+1Nn6BAztEhI1oRS2yeGwK+CP38vlizs4eEFAAA=",
|
|
3406
|
-
"debug_symbols": "rZLdCoMgGIbvxeMOzN/P3coYw8qGIBZWgxHd+2zYFmu0k07ETx5eHvUdUWWK4Xa1vm46dDqPyDWl7m3j4zROGSqCdc7erutjhOclpy++a7Wfx67XoUenHLMcMmR89dpLGTNq68w8iSnb8BJEogGzNyvpD5QTnlDO8SeWwXTJUM6OsAEqFxuu9m0YVQllAjY2/BAbYIuNgn0bgZe3EURsbMQRNoqQRCvK/9gATqjEXz81xfGug9WFM6li9eDLVeP6R2u+yteGpjTVEMxcw1UD43qOdyA0xsboJw==",
|
|
3407
|
-
"brillig_names": [
|
|
3408
|
-
"sync_notes"
|
|
3409
|
-
]
|
|
3409
|
+
"verification_key": "AAAAAAAEAAAAAAAAAAAAEgAAAAAAAAAQAAAAAAAAVgkAAAAA//////////8AG3ZK31wRI8WatBjwIvWhyncVWNZ5KS9FwSKBq3JZt2Mp2VLMD10Fd8Nvo63XoSuia0VeXqdsK1Zd6iVtHWCJcQ9fwc6tJ35rXbe1LYMjqKyh/XvaXFi43BPbBaMpzns/B98ojIGsLIqounGIgEZX4g0qlsjrIHoWY/fF9aeAXHYnsiwfH0COQyktQO/hgVPRmdYWdmHpmDTR9t9WjUmZBCnata2Mbmn0ix7+o4sT8Vf49umHxrZnbLiqUxfuUH6dIKG9Ai8cLuvhaLY6O3ucwqdiVzC8VsaxRjoRxFJCWpUey4g7FOuoctNdUjjtEXFrV52Ol71sR0Ff9+/0VxOZTArHfjlxsuLSwfRuHSNgqPl2RAk2cZGHhxZ8z5z28eQVGAkpvUj6P24uzls0MHJpCGqpdNTcveMvRuE4h88bTMAWT1DE2cXjhtAY4zBTnx2dwzb62FVg+cyAGduB+7TEGxqls8x4FCIi+KIGCoDz4OfbzgeasYcRMLJDtni/1qqtIuSmLVifXcWOAD4X0sKeZqqcjXq3WBuYEO2nPlPhfd8OP4PTyf+mJHwLpRXOLm9SrLCVbfb6d5ltuCSwof5icA1Wu+8Ucnj9wFf5ozbZhNCgAIDNjzS6DjdUbBAmZcj+KR+74Lf28oI9VGnPmBoe8R8+rthyYCYhHS7g+D4y5FMYyA2riuODa27/294IVDiTuI5tzWJJzD+WWdIgFX5BtCBrLJD/YBpVCi+wyd3njGSWc1X38+i41JWrgf4Aqz1/L95z/eRAUgHjfEHATVfcgbkFaDIZSLLWpht5zJUsDHMmraU4Itq7IiZJdTCoqFdzeGz0OYfgLfwYqnUQx+h1aRSTzjng82Fpzx9PDa3uf3M3FoZTrY9j4mAn0DrO7DLHB343Uw8OcTYZEbtTcrZeFj20Jws/F26IF5MtsRLOMKwaX8l88TKtutO1HGuKewPS05U635hkXpNvxdhjUvVF5gDmcLsFmgx+0rOm4DOJDugDTgJbziLZAW12+qS2bhJ1EZj7i+9RpDFN8+apFZJsZ/OAvngZG0wXFG1SNKEupH0O5Zup84R7cNKCnrsRRFJTtGwIWSRMXxWDPSF2tnlfigS+m6M6YVHaogKTmxzo9uN7hsFy7MZgxalIfnrXb6JaL/d1li6TOl0vBBrtYJz32bLGw3NKgESR5ZQvYFbKGCYTf+IDdRr0LTKNpSlrF15mCk4icIU7fLSeJGrSpVBRShjYnpYqhA9VBPVWjlViY6eOJYPMPTIZsCttgQhm8D41BD7rYI/WwToFe9qna2NutQk1Gs7nPAwqJvqb03Kze0YgRiyqedC7jPtNe7Fl2QR3crKgKlaTPra1HZttJvzFpRnmu1sEuShvVbTvzoSKG75P3fiy/K68FJp0P7QdokxrIbq948815x+lPQOcJqVTtRMo/jKvi8hChYviQTvn+VYn/QAjMq4KbntZmQNKhd9B/ZFwPLyHc5STPN+/1E3+gwMcYAUTqaD530TRu0zNOzyItzljk8Fq1hCLRZjQw8/DK7dFLWobEoxvB7BQhLsGtVHVfRdRqTQcas1lvuATDN8NQH78z/2cJrrYUq+eUpUQF28odaGz1JdXrvkU2YH3VwuATBLo5GEPN4J5aJb8wvfWithlb7nO4/PYQcgjdmjbDGu+f+fGE26ynmMZ4+EfKhW8VC3wJNhOJq6gmR+KE0Anzf93GZSawiodKx0RY76AN4Gm2GGP/SS024mgVvS3uyvz7lo1vEgstPuh4ZEtgI5EigsBcDM9huOpzu94Z/0iJrnGsu5a1HMoBW5x3VnM7eb7BTlEh5Rros+xo/cRtXMYJVcAJpHABSxE2Bhu6vI9oLCP/OpgA3EAnYspiu/AJAqFAZ4SUmmTEsvV7GojsoSps1J80uv/YrJFoEqrJY+SG7oabknwumZkPosy/QkOALXu5yM2Qww/632muLV+FVEAs04Agrxa7YGagbs2dExNYSyA/JGiaaqqqXXITI5Y1gATrqO8wIQextlLKF8b6765aeDyx4VicNxf2ixdOZ3MAtnwRl70srEW1LiGJTRPJnF4KpM3Kq02lTCuS3XCK9smXwxwU27AL3yb5M4Zwp0m6YOZQtcpIBQf69qwfkwgwyeAek97I9nMHIZe+ZMJmToznoy4xkjQfDTdy070RSeDDL+dbgtvqmCd29WBf10QvE/YEMeB17I5pHoIY2FobtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHgh9NcehFEEAIn4hKNo49HbYOWkBTbJUPoQpGpDE8LYAg0IgaBEQ0zTTwL2bO4Wo0oWDo9fPWb3Cg/z/BJvLtwDENyb3W2/aDeIs4ODfq2vMegX/lalrKJQkxfczZw2WL5tuC04sAZaN5cMkgqp9HQoJ1xeOyTuteFj5bmTwtI0dWKphxkrVIgQ9ecSAIhnlW6GXUa3+bDYyTT+2wtoJiS18GKk8Pa5YgJ+q7saoanj0s7xh8Z1ucGk1m79H5/kH"
|
|
3410
3410
|
},
|
|
3411
3411
|
{
|
|
3412
3412
|
"name": "public_dispatch",
|
|
@@ -3443,6 +3443,33 @@
|
|
|
3443
3443
|
"globals": {},
|
|
3444
3444
|
"structs": {
|
|
3445
3445
|
"functions": [
|
|
3446
|
+
{
|
|
3447
|
+
"fields": [
|
|
3448
|
+
{
|
|
3449
|
+
"name": "parameters",
|
|
3450
|
+
"type": {
|
|
3451
|
+
"fields": [
|
|
3452
|
+
{
|
|
3453
|
+
"name": "inner_hash",
|
|
3454
|
+
"type": {
|
|
3455
|
+
"kind": "field"
|
|
3456
|
+
}
|
|
3457
|
+
}
|
|
3458
|
+
],
|
|
3459
|
+
"kind": "struct",
|
|
3460
|
+
"path": "SchnorrSingleKeyAccount::verify_private_authwit_parameters"
|
|
3461
|
+
}
|
|
3462
|
+
},
|
|
3463
|
+
{
|
|
3464
|
+
"name": "return_type",
|
|
3465
|
+
"type": {
|
|
3466
|
+
"kind": "field"
|
|
3467
|
+
}
|
|
3468
|
+
}
|
|
3469
|
+
],
|
|
3470
|
+
"kind": "struct",
|
|
3471
|
+
"path": "SchnorrSingleKeyAccount::verify_private_authwit_abi"
|
|
3472
|
+
},
|
|
3446
3473
|
{
|
|
3447
3474
|
"fields": [
|
|
3448
3475
|
{
|
|
@@ -3625,33 +3652,6 @@
|
|
|
3625
3652
|
],
|
|
3626
3653
|
"kind": "struct",
|
|
3627
3654
|
"path": "SchnorrSingleKeyAccount::entrypoint_abi"
|
|
3628
|
-
},
|
|
3629
|
-
{
|
|
3630
|
-
"fields": [
|
|
3631
|
-
{
|
|
3632
|
-
"name": "parameters",
|
|
3633
|
-
"type": {
|
|
3634
|
-
"fields": [
|
|
3635
|
-
{
|
|
3636
|
-
"name": "inner_hash",
|
|
3637
|
-
"type": {
|
|
3638
|
-
"kind": "field"
|
|
3639
|
-
}
|
|
3640
|
-
}
|
|
3641
|
-
],
|
|
3642
|
-
"kind": "struct",
|
|
3643
|
-
"path": "SchnorrSingleKeyAccount::verify_private_authwit_parameters"
|
|
3644
|
-
}
|
|
3645
|
-
},
|
|
3646
|
-
{
|
|
3647
|
-
"name": "return_type",
|
|
3648
|
-
"type": {
|
|
3649
|
-
"kind": "field"
|
|
3650
|
-
}
|
|
3651
|
-
}
|
|
3652
|
-
],
|
|
3653
|
-
"kind": "struct",
|
|
3654
|
-
"path": "SchnorrSingleKeyAccount::verify_private_authwit_abi"
|
|
3655
3655
|
}
|
|
3656
3656
|
]
|
|
3657
3657
|
}
|
|
@@ -3659,7 +3659,7 @@
|
|
|
3659
3659
|
"file_map": {
|
|
3660
3660
|
"106": {
|
|
3661
3661
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/functions/utils.nr",
|
|
3662
|
-
"source": "use crate::macros::{\n functions::{abi_export::create_fn_abi_export, call_interface_stubs::stub_fn, stub_registry},\n notes::NOTES,\n utils::{\n add_to_hasher, fn_has_noinitcheck, get_fn_visibility, is_fn_contract_library_method,\n is_fn_initializer, is_fn_internal, is_fn_private, is_fn_public, is_fn_test, is_fn_utility,\n is_fn_view, modify_fn_body, module_has_initializer, module_has_storage,\n },\n};\nuse protocol_types::meta::generate_serialize_to_fields;\nuse std::meta::type_of;\n\npub(crate) comptime fn transform_private(f: FunctionDefinition) -> Quoted {\n let fn_abi = create_fn_abi_export(f);\n let fn_stub = stub_fn(f);\n stub_registry::register(f.module(), fn_stub);\n\n // If a function is further modified as unconstrained, we throw an error\n if f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[private] but marked as unconstrained, remove unconstrained keyword\",\n );\n }\n\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to the\n // Private Kernel Circuit.\n // First we change the function signature so that it also receives `PrivateContextInputs`, which contain information\n // about the execution context (e.g. the caller).\n let original_params = f.parameters();\n f.set_parameters(&[(\n quote { inputs },\n quote { crate::context::inputs::private_context_inputs::PrivateContextInputs }.as_type(),\n )]\n .append(original_params));\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n // TODO: Optimize args_hasher for small number of arguments\n let args_hasher_name = quote { args_hasher };\n let args_hasher = original_params.fold(\n quote {\n let mut $args_hasher_name = dep::aztec::hash::ArgsHasher::new();\n },\n |args_hasher, param: (Quoted, Type)| {\n let (name, typ) = param;\n let appended_arg = add_to_hasher(args_hasher_name, name, typ);\n quote {\n $args_hasher\n $appended_arg\n }\n },\n );\n\n let context_creation = quote {\n let mut context = dep::aztec::context::private_context::PrivateContext::new(inputs, dep::aztec::protocol_types::traits::Hash::hash($args_hasher_name));\n };\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_internal(f) {\n create_internal_check(f)\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n create_view_check(f)\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n (create_assert_correct_initializer_args(f), create_mark_as_initialized(f))\n } else {\n (quote {}, quote {})\n };\n\n let storage_init = if module_has_storage {\n quote {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n #[allow(unused_variables)]\n let storage = Storage::init(&mut context);\n }\n } else {\n quote {}\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n create_init_check(f)\n } else {\n quote {}\n };\n\n // All private functions perform message discovery, since they may need to access notes. This is slightly\n // inefficient and could be improved by only doing it once we actually attempt to read any.\n let message_discovery_call = if NOTES.len() > 0 {\n create_message_discovery_call()\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is passed to a second args hasher which the context receives.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment =\n quote { let $return_value_var_name: $return_value_type = $return_value; };\n let return_hasher_name = quote { return_hasher };\n let return_value_into_hasher =\n add_to_hasher(return_hasher_name, return_value_var_name, return_value_type);\n\n body = body_without_return;\n\n quote {\n let mut $return_hasher_name = dep::aztec::hash::ArgsHasher::new();\n $return_value_assignment\n $return_value_into_hasher\n context.set_return_hash($return_hasher_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(\n quote { let $unused_return_value_name = $last_body_expr; }.as_expr().unwrap(),\n );\n }\n quote {}\n };\n\n let context_finish = quote { context.finish() };\n\n let to_prepend = quote {\n $args_hasher\n $context_creation\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $storage_init\n $message_discovery_call\n };\n\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $context_finish\n };\n let modified_body = modify_fn_body(body, to_prepend, to_append);\n f.set_body(modified_body);\n f.set_return_type(\n quote { dep::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs }\n .as_type(),\n );\n f.set_return_data();\n\n fn_abi\n}\n\npub(crate) comptime fn transform_public(f: FunctionDefinition) -> Quoted {\n let fn_abi = create_fn_abi_export(f);\n let fn_stub = stub_fn(f);\n stub_registry::register(f.module(), fn_stub);\n\n // If a function is further modified as unconstrained, we throw an error\n if f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[public] but marked as unconstrained, remove unconstrained keyword\",\n );\n }\n\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Public functions undergo a lot of transformations from their Aztec.nr form.\n let original_params = f.parameters();\n let args_len = original_params\n .map(|(name, typ): (Quoted, Type)| {\n generate_serialize_to_fields(name, typ, &[], false).0.len()\n })\n .fold(0, |acc: u32, val: u32| acc + val);\n\n // Unlike in the private case, in public the `context` does not need to receive the hash of the original params.\n let context_creation = quote {\n let mut context = dep::aztec::context::public_context::PublicContext::new(|| {\n // We start from 1 because we skip the selector for the dispatch function.\n let serialized_args : [Field; $args_len] = dep::aztec::context::public_context::calldata_copy(1, $args_len);\n dep::aztec::hash::hash_args_array(serialized_args)\n });\n };\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_internal(f) {\n create_internal_check(f)\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n create_view_check(f)\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n (create_assert_correct_initializer_args(f), create_mark_as_initialized(f))\n } else {\n (quote {}, quote {})\n };\n\n let storage_init = if module_has_storage {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n quote {\n #[allow(unused_variables)]\n let storage = Storage::init(&mut context);\n }\n } else {\n quote {}\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !fn_has_noinitcheck(f) & !is_fn_initializer(f) {\n create_init_check(f)\n } else {\n quote {}\n };\n\n let to_prepend = quote {\n $context_creation\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $storage_init\n };\n\n let to_append = quote {\n $mark_as_initialized\n };\n\n let body = f.body().as_block().unwrap();\n let modified_body = modify_fn_body(body, to_prepend, to_append);\n f.set_body(modified_body);\n\n // All public functions are automatically made unconstrained, even if they were not marked as such. This is because\n // instead of compiling into a circuit, they will compile to bytecode that will be later transpiled into AVM\n // bytecode.\n f.set_unconstrained(true);\n f.set_return_public(true);\n\n fn_abi\n}\n\npub(crate) comptime fn transform_utility(f: FunctionDefinition) {\n // Check if function is marked as unconstrained\n if !f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[utility] but not marked as unconstrained, add unconstrained keyword\",\n );\n }\n\n // Create utility context\n let context_creation =\n quote { let mut context = dep::aztec::context::utility_context::UtilityContext::new(); };\n let module_has_storage = module_has_storage(f.module());\n\n // Initialize Storage if module has storage\n let storage_init = if module_has_storage {\n quote {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n #[allow(unused_variables)]\n let storage = Storage::init(context);\n }\n } else {\n quote {}\n };\n\n // All utility functions perform message discovery, since they may need to access private notes that would be\n // found during this process. This is slightly inefficient and could be improved by only doing it once we actually\n // attempt to read any.\n let message_discovery_call = if NOTES.len() > 0 {\n create_message_discovery_call()\n } else {\n quote {}\n };\n\n // Inject context creation, storage initialization, and message discovery call at the beginning of the function\n // body.\n let to_prepend = quote {\n $context_creation\n $storage_init\n $message_discovery_call\n };\n let body = f.body().as_block().unwrap();\n let modified_body = modify_fn_body(body, to_prepend, quote {});\n f.set_body(modified_body);\n\n f.set_return_public(true);\n}\n\ncomptime fn create_internal_check(f: FunctionDefinition) -> Quoted {\n let name = f.name();\n let assertion_message = f\"Function {name} can only be called internally\";\n quote { assert(context.msg_sender() == context.this_address(), $assertion_message); }\n}\n\ncomptime fn create_view_check(f: FunctionDefinition) -> Quoted {\n let name = f.name();\n let assertion_message = f\"Function {name} can only be called statically\";\n if is_fn_private(f) {\n // Here `context` is of type context::PrivateContext\n quote { assert(context.inputs.call_context.is_static_call == true, $assertion_message); }\n } else {\n // Here `context` is of type context::PublicContext\n quote { assert(context.is_static_call(), $assertion_message); }\n }\n}\n\ncomptime fn create_assert_correct_initializer_args(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_{fn_visibility}(context);\"\n .quoted_contents()\n}\n\ncomptime fn create_mark_as_initialized(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::mark_as_initialized_{fn_visibility}(&mut context);\"\n .quoted_contents()\n}\n\ncomptime fn create_init_check(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::assert_is_initialized_{fn_visibility}(&mut context);\"\n .quoted_contents()\n}\n\n/// Injects a call to `aztec::messages::discovery::discover_new_messages`, causing for new notes to be added to PXE and made\n/// available for the current execution.\npub(crate) comptime fn create_message_discovery_call() -> Quoted {\n quote {\n /// Safety: message discovery returns nothing and is performed solely for its side-effects. It is therefore\n /// always safe to call.\n unsafe {\n dep::aztec::messages::discovery::discover_new_messages(\n context.this_address(),\n _compute_note_hash_and_nullifier,\n );\n };\n }\n}\n\n/// Checks if each function in the module is marked with either #[private], #[public], #[utility],\n/// #[contract_library_method], or #[test]. Non-macroified functions are not allowed in contracts.\npub(crate) comptime fn check_each_fn_macroified(m: Module) {\n for f in m.functions() {\n let name = f.name();\n if !is_fn_private(f)\n & !is_fn_public(f)\n & !is_fn_utility(f)\n & !is_fn_contract_library_method(f)\n & !is_fn_test(f) {\n panic(\n f\"Function {name} must be marked as either #[private], #[public], #[utility], #[contract_library_method], or #[test]\",\n );\n }\n }\n}\n"
|
|
3662
|
+
"source": "use crate::macros::{\n functions::{abi_export::create_fn_abi_export, call_interface_stubs::stub_fn, stub_registry},\n notes::NOTES,\n utils::{\n add_to_hasher, fn_has_noinitcheck, get_fn_visibility, is_fn_contract_library_method,\n is_fn_initializer, is_fn_internal, is_fn_private, is_fn_public, is_fn_test, is_fn_utility,\n is_fn_view, modify_fn_body, module_has_initializer, module_has_storage,\n },\n};\nuse protocol_types::meta::generate_serialize_to_fields;\nuse std::meta::type_of;\n\npub(crate) comptime fn transform_private(f: FunctionDefinition) -> Quoted {\n let fn_abi = create_fn_abi_export(f);\n let fn_stub = stub_fn(f);\n stub_registry::register(f.module(), fn_stub);\n\n // If a function is further modified as unconstrained, we throw an error\n if f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[private] but marked as unconstrained, remove unconstrained keyword\",\n );\n }\n\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Private functions undergo a lot of transformations from their Aztec.nr form into a circuit that can be fed to the\n // Private Kernel Circuit.\n // First we change the function signature so that it also receives `PrivateContextInputs`, which contain information\n // about the execution context (e.g. the caller).\n let original_params = f.parameters();\n f.set_parameters(&[(\n quote { inputs },\n quote { crate::context::inputs::private_context_inputs::PrivateContextInputs }.as_type(),\n )]\n .append(original_params));\n\n let mut body = f.body().as_block().unwrap();\n\n // The original params are hashed and passed to the `context` object, so that the kernel can verify we've received\n // the correct values.\n // TODO: Optimize args_hasher for small number of arguments\n let args_hasher_name = quote { args_hasher };\n let args_hasher = original_params.fold(\n quote {\n let mut $args_hasher_name = dep::aztec::hash::ArgsHasher::new();\n },\n |args_hasher, param: (Quoted, Type)| {\n let (name, typ) = param;\n let appended_arg = add_to_hasher(args_hasher_name, name, typ);\n quote {\n $args_hasher\n $appended_arg\n }\n },\n );\n\n let context_creation = quote {\n let mut context = dep::aztec::context::private_context::PrivateContext::new(inputs, dep::aztec::protocol_types::traits::Hash::hash($args_hasher_name));\n };\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_internal(f) {\n create_internal_check(f)\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n create_view_check(f)\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n (create_assert_correct_initializer_args(f), create_mark_as_initialized(f))\n } else {\n (quote {}, quote {})\n };\n\n let storage_init = if module_has_storage {\n quote {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n #[allow(unused_variables)]\n let storage = Storage::init(&mut context);\n }\n } else {\n quote {}\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !is_fn_initializer(f) & !fn_has_noinitcheck(f) {\n create_init_check(f)\n } else {\n quote {}\n };\n\n // All private functions perform message discovery, since they may need to access notes. This is slightly\n // inefficient and could be improved by only doing it once we actually attempt to read any.\n let message_discovery_call = if NOTES.len() > 0 {\n create_message_discovery_call()\n } else {\n quote {}\n };\n\n // Finally, we need to change the return type to be `PrivateCircuitPublicInputs`, which is what the Private Kernel\n // circuit expects.\n let return_value_var_name = quote { macro__returned__values };\n\n let return_value_type = f.return_type();\n let return_value = if body.len() == 0 {\n quote {}\n } else if return_value_type != type_of(()) {\n // The original return value is passed to a second args hasher which the context receives.\n let (body_without_return, last_body_expr) = body.pop_back();\n let return_value = last_body_expr.quoted();\n let return_value_assignment =\n quote { let $return_value_var_name: $return_value_type = $return_value; };\n let return_hasher_name = quote { return_hasher };\n let return_value_into_hasher =\n add_to_hasher(return_hasher_name, return_value_var_name, return_value_type);\n\n body = body_without_return;\n\n quote {\n let mut $return_hasher_name = dep::aztec::hash::ArgsHasher::new();\n $return_value_assignment\n $return_value_into_hasher\n context.set_return_hash($return_hasher_name);\n }\n } else {\n let (body_without_return, last_body_expr) = body.pop_back();\n if !last_body_expr.has_semicolon()\n & last_body_expr.as_for().is_none()\n & last_body_expr.as_assert().is_none()\n & last_body_expr.as_for_range().is_none()\n & last_body_expr.as_assert_eq().is_none()\n & last_body_expr.as_let().is_none() {\n let unused_return_value_name = f\"_{return_value_var_name}\".quoted_contents();\n body = body_without_return.push_back(\n quote { let $unused_return_value_name = $last_body_expr; }.as_expr().unwrap(),\n );\n }\n quote {}\n };\n\n let context_finish = quote { context.finish() };\n\n let to_prepend = quote {\n $args_hasher\n $context_creation\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $storage_init\n $message_discovery_call\n };\n\n let to_append = quote {\n $return_value\n $mark_as_initialized\n $context_finish\n };\n let modified_body = modify_fn_body(body, to_prepend, to_append);\n f.set_body(modified_body);\n f.set_return_type(\n quote { dep::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs }\n .as_type(),\n );\n f.set_return_data();\n\n fn_abi\n}\n\npub(crate) comptime fn transform_public(f: FunctionDefinition) -> Quoted {\n let fn_abi = create_fn_abi_export(f);\n let fn_stub = stub_fn(f);\n stub_registry::register(f.module(), fn_stub);\n\n // If a function is further modified as unconstrained, we throw an error\n if f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[public] but marked as unconstrained, remove unconstrained keyword\",\n );\n }\n\n let module_has_initializer = module_has_initializer(f.module());\n let module_has_storage = module_has_storage(f.module());\n\n // Public functions undergo a lot of transformations from their Aztec.nr form.\n let original_params = f.parameters();\n let args_len = original_params\n .map(|(name, typ): (Quoted, Type)| {\n generate_serialize_to_fields(name, typ, false).0.len()\n })\n .fold(0, |acc: u32, val: u32| acc + val);\n\n // Unlike in the private case, in public the `context` does not need to receive the hash of the original params.\n let context_creation = quote {\n let mut context = dep::aztec::context::public_context::PublicContext::new(|| {\n // We start from 1 because we skip the selector for the dispatch function.\n let serialized_args : [Field; $args_len] = dep::aztec::context::public_context::calldata_copy(1, $args_len);\n dep::aztec::hash::hash_args_array(serialized_args)\n });\n };\n\n // Modifications introduced by the different marker attributes.\n let internal_check = if is_fn_internal(f) {\n create_internal_check(f)\n } else {\n quote {}\n };\n\n let view_check = if is_fn_view(f) {\n create_view_check(f)\n } else {\n quote {}\n };\n\n let (assert_initializer, mark_as_initialized) = if is_fn_initializer(f) {\n (create_assert_correct_initializer_args(f), create_mark_as_initialized(f))\n } else {\n (quote {}, quote {})\n };\n\n let storage_init = if module_has_storage {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n quote {\n #[allow(unused_variables)]\n let storage = Storage::init(&mut context);\n }\n } else {\n quote {}\n };\n\n // Initialization checks are not included in contracts that don't have initializers.\n let init_check = if module_has_initializer & !fn_has_noinitcheck(f) & !is_fn_initializer(f) {\n create_init_check(f)\n } else {\n quote {}\n };\n\n let to_prepend = quote {\n $context_creation\n $assert_initializer\n $init_check\n $internal_check\n $view_check\n $storage_init\n };\n\n let to_append = quote {\n $mark_as_initialized\n };\n\n let body = f.body().as_block().unwrap();\n let modified_body = modify_fn_body(body, to_prepend, to_append);\n f.set_body(modified_body);\n\n // All public functions are automatically made unconstrained, even if they were not marked as such. This is because\n // instead of compiling into a circuit, they will compile to bytecode that will be later transpiled into AVM\n // bytecode.\n f.set_unconstrained(true);\n f.set_return_public(true);\n\n fn_abi\n}\n\npub(crate) comptime fn transform_utility(f: FunctionDefinition) {\n // Check if function is marked as unconstrained\n if !f.is_unconstrained() {\n let name = f.name();\n panic(\n f\"Function {name} is annotated with #[utility] but not marked as unconstrained, add unconstrained keyword\",\n );\n }\n\n // Create utility context\n let context_creation =\n quote { let mut context = dep::aztec::context::utility_context::UtilityContext::new(); };\n let module_has_storage = module_has_storage(f.module());\n\n // Initialize Storage if module has storage\n let storage_init = if module_has_storage {\n quote {\n // Some functions don't access storage, but it'd be quite difficult to only inject this variable if it is\n // referenced. We instead ignore 'unused variable' warnings for it.\n #[allow(unused_variables)]\n let storage = Storage::init(context);\n }\n } else {\n quote {}\n };\n\n // All utility functions perform message discovery, since they may need to access private notes that would be\n // found during this process. This is slightly inefficient and could be improved by only doing it once we actually\n // attempt to read any.\n let message_discovery_call = if NOTES.len() > 0 {\n create_message_discovery_call()\n } else {\n quote {}\n };\n\n // Inject context creation, storage initialization, and message discovery call at the beginning of the function\n // body.\n let to_prepend = quote {\n $context_creation\n $storage_init\n $message_discovery_call\n };\n let body = f.body().as_block().unwrap();\n let modified_body = modify_fn_body(body, to_prepend, quote {});\n f.set_body(modified_body);\n\n f.set_return_public(true);\n}\n\ncomptime fn create_internal_check(f: FunctionDefinition) -> Quoted {\n let name = f.name();\n let assertion_message = f\"Function {name} can only be called internally\";\n quote { assert(context.msg_sender() == context.this_address(), $assertion_message); }\n}\n\ncomptime fn create_view_check(f: FunctionDefinition) -> Quoted {\n let name = f.name();\n let assertion_message = f\"Function {name} can only be called statically\";\n if is_fn_private(f) {\n // Here `context` is of type context::PrivateContext\n quote { assert(context.inputs.call_context.is_static_call == true, $assertion_message); }\n } else {\n // Here `context` is of type context::PublicContext\n quote { assert(context.is_static_call(), $assertion_message); }\n }\n}\n\ncomptime fn create_assert_correct_initializer_args(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::assert_initialization_matches_address_preimage_{fn_visibility}(context);\"\n .quoted_contents()\n}\n\ncomptime fn create_mark_as_initialized(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::mark_as_initialized_{fn_visibility}(&mut context);\"\n .quoted_contents()\n}\n\ncomptime fn create_init_check(f: FunctionDefinition) -> Quoted {\n let fn_visibility = get_fn_visibility(f);\n f\"dep::aztec::macros::functions::initialization_utils::assert_is_initialized_{fn_visibility}(&mut context);\"\n .quoted_contents()\n}\n\n/// Injects a call to `aztec::messages::discovery::discover_new_messages`, causing for new notes to be added to PXE and made\n/// available for the current execution.\npub(crate) comptime fn create_message_discovery_call() -> Quoted {\n quote {\n /// Safety: message discovery returns nothing and is performed solely for its side-effects. It is therefore\n /// always safe to call.\n unsafe {\n dep::aztec::messages::discovery::discover_new_messages(\n context.this_address(),\n _compute_note_hash_and_nullifier,\n );\n };\n }\n}\n\n/// Checks if each function in the module is marked with either #[private], #[public], #[utility],\n/// #[contract_library_method], or #[test]. Non-macroified functions are not allowed in contracts.\npub(crate) comptime fn check_each_fn_macroified(m: Module) {\n for f in m.functions() {\n let name = f.name();\n if !is_fn_private(f)\n & !is_fn_public(f)\n & !is_fn_utility(f)\n & !is_fn_contract_library_method(f)\n & !is_fn_test(f) {\n panic(\n f\"Function {name} must be marked as either #[private], #[public], #[utility], #[contract_library_method], or #[test]\",\n );\n }\n }\n}\n"
|
|
3663
3663
|
},
|
|
3664
3664
|
"145": {
|
|
3665
3665
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
|
|
@@ -3701,9 +3701,9 @@
|
|
|
3701
3701
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
|
|
3702
3702
|
"source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must not be larger than the number\n/// of elements past `offset`.\n///\n/// Examples:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n///\n/// let bar: [Field; 5] = subarray([1, 2, 3, 4, 5], 2); // fails - we can't return 5 elements since only 3 remain\n/// ```\npub fn subarray<T, let SRC_LEN: u32, let DST_LEN: u32>(\n src: [T; SRC_LEN],\n offset: u32,\n) -> [T; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"DST_LEN too large for offset\");\n\n let mut dst: [T; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail_with = \"DST_LEN too large for offset\")]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
|
|
3703
3703
|
},
|
|
3704
|
-
"
|
|
3705
|
-
"path": "
|
|
3706
|
-
"source": "use
|
|
3704
|
+
"210": {
|
|
3705
|
+
"path": "/home/aztec-dev/nargo/github.com/noir-lang/poseidon/v0.1.0/src/poseidon2.nr",
|
|
3706
|
+
"source": "use std::default::Default;\nuse std::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
|
|
3707
3707
|
},
|
|
3708
3708
|
"272": {
|
|
3709
3709
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
|
|
@@ -3715,7 +3715,7 @@
|
|
|
3715
3715
|
},
|
|
3716
3716
|
"290": {
|
|
3717
3717
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
|
|
3718
|
-
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n contract_class_log::ContractClassLog,\n function_selector::FunctionSelector,\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::{OrderedValue, scoped::Scoped},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH, TWO_POW_64,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n poseidon2::Poseidon2Sponge,\n traits::{FromField, Hash, ToField},\n utils::{\n arrays::{array_concat, unsafe_padded_array_length},\n field::{field_from_bytes, field_from_bytes_32_trunc},\n },\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_contract_class_log_field(\n contract_address: AztecAddress,\n first_field: Field,\n) -> Field {\n poseidon2_hash([contract_address.to_field(), first_field])\n}\n\npub fn silo_contract_class_log(contract_class_log: ContractClassLog) -> ContractClassLog {\n if contract_class_log.contract_address.is_zero() {\n contract_class_log\n } else {\n let mut log = contract_class_log;\n log.log.fields[0] = compute_siloed_contract_class_log_field(\n contract_class_log.contract_address,\n log.log.fields[0],\n );\n log\n }\n}\n\npub fn compute_contract_class_log_hash(contract_class_log: ContractClassLog) -> Field {\n let array = contract_class_log.log.fields;\n // Safety: The below length is constrained in the base rollup.\n let length = unsafe { unsafe_padded_array_length(array) };\n if length == 0 {\n 0\n } else {\n poseidon2_hash(array)\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: [u8; 160] = std::mem::zeroed();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..5 {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes[32 * i + j] = item_bytes[j];\n }\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a u128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n// Performs a fixed length hash with a subarray of the given input.\n// Useful for SpongeBlob in which we aborb M things and want to check it vs a hash of M elts of an N-len array.\n// Using stdlib poseidon, this will always absorb an extra 1 as a 'variable' hash, and not match spongeblob.squeeze()\n// or any ts implementation. Also checks that any remaining elts not hashed are empty.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, false);\n sponge.squeeze()\n}\n\n// NB the below is the same as std::hash::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, true);\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if in_len != N {\n sponge.absorb(1);\n }\n sponge.squeeze()\n}\n\n// The below fn reduces gates of a conditional poseidon2 hash by approx 3x (thank you ~* Giant Brain Dev @IlyasRidhuan *~ for the idea)\n// Why? Because when we call stdlib poseidon, we call absorb for each item. When absorbing is conditional, it seems the compiler does not know\n// what cache_size will be when calling absorb, so it assigns the permutation gates for /each i/ rather than /every 3rd i/, which is actually required.\n// The below code forces the compiler to:\n// - absorb normally up to 2 times to set cache_size to 1\n// - absorb in chunks of 3 to ensure perm. only happens every 3rd absorb\n// - absorb normally up to 2 times to add any remaining values to the hash\n// In fixed len hashes, the compiler is able to tell that it will only need to perform the permutation every 3 absorbs.\n// NB: it also replaces unnecessary range checks (i < thing) with a bit check (&= i != thing), which alone reduces the gates of a var. hash by half.\n\n#[no_predicates]\nfn poseidon2_absorb_chunks<let N: u32>(\n input: [Field; N],\n in_len: u32,\n variable: bool,\n) -> Poseidon2Sponge {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n // Even though shift is always 1 here, if we input in_len = 0 we get an underflow\n // since we cannot isolate computation branches. The below is just to avoid that.\n let shift = if in_len == 0 { 0 } else { 1 };\n if in_len != 0 {\n // cache_size = 0, init absorb\n sponge.cache[0] = input[0];\n sponge.cache_size = 1;\n // shift = num elts already added to make cache_size 1 = 1 for a fresh sponge\n // M = max_chunks = (N - 1 - (N - 1) % 3) / 3: (must be written as a fn of N to compile)\n // max_remainder = (N - 1) % 3;\n // max_chunks = (N - 1 - max_remainder) / 3;\n sponge = poseidon2_absorb_chunks_loop::<N, (N - 1 - (N - 1) % 3) / 3>(\n sponge,\n input,\n in_len,\n variable,\n shift,\n );\n }\n sponge\n}\n\n// NB: If it's not required to check that the non-absorbed elts of 'input' are 0s, set skip_0_check=true\n#[no_predicates]\npub fn poseidon2_absorb_chunks_existing_sponge<let N: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n skip_0_check: bool,\n) -> Poseidon2Sponge {\n let mut sponge = in_sponge;\n // 'shift' is to account for already added inputs\n let mut shift = 0;\n // 'stop' is to avoid an underflow when inputting in_len = 0\n let mut stop = false;\n for i in 0..3 {\n if shift == in_len {\n stop = true;\n }\n if (sponge.cache_size != 1) & (!stop) {\n sponge.absorb(input[i]);\n shift += 1;\n }\n }\n sponge = if stop {\n sponge\n } else {\n // max_chunks = (N - (N % 3)) / 3;\n poseidon2_absorb_chunks_loop::<N, (N - (N % 3)) / 3>(\n sponge,\n input,\n in_len,\n skip_0_check,\n shift,\n )\n };\n sponge\n}\n\n// The below is the loop to absorb elts into a poseidon sponge in chunks of 3\n// shift - the num of elts already absorbed to ensure the sponge's cache_size = 1\n// M - the max number of chunks required to absorb N things (must be comptime to compile)\n// NB: The 0 checks ('Found non-zero field...') are messy, but having a separate loop over N to check\n// for 0s costs 3N gates. Current approach is approx 2N gates.\n#[no_predicates]\nfn poseidon2_absorb_chunks_loop<let N: u32, let M: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n variable: bool,\n shift: u32,\n) -> Poseidon2Sponge {\n assert(in_len <= N, \"Given in_len to absorb is larger than the input array len\");\n // When we have an existing sponge, we may have a shift of 0, and the final 'k+2' below = N\n // The below avoids an overflow\n let skip_last = 3 * M == N;\n // Writing in_sponge: &mut does not compile\n let mut sponge = in_sponge;\n let mut should_add = true;\n // The num of things left over after absorbing in 3s\n let remainder = (in_len - shift) % 3;\n // The num of chunks of 3 to absorb (maximum M)\n let chunks = (in_len - shift - remainder) / 3;\n for i in 0..M {\n // Now we loop through cache size = 1 -> 3\n should_add &= i != chunks;\n // This is the index at the start of the chunk (for readability)\n let k = 3 * i + shift;\n if should_add {\n // cache_size = 1, 2 => just assign\n sponge.cache[1] = input[k];\n sponge.cache[2] = input[k + 1];\n // cache_size = 3 => duplex + perm\n for j in 0..3 {\n sponge.state[j] += sponge.cache[j];\n }\n sponge.state = std::hash::poseidon2_permutation(sponge.state, 4);\n sponge.cache[0] = input[k + 2];\n // cache_size is now 1 again, repeat loop\n } else if (!variable) & (i != chunks) {\n // if we are hashing a fixed len array which is a subarray, we check the remaining elts are 0\n // NB: we don't check at i == chunks, because that chunk contains elts to be absorbed or checked below\n let last_0 = if (i == M - 1) & (skip_last) {\n 0\n } else {\n input[k + 2]\n };\n let all_0 = (input[k] == 0) & (input[k + 1] == 0) & (last_0 == 0);\n assert(all_0, \"Found non-zero field after breakpoint\");\n }\n }\n // we have 'remainder' num of items left to absorb\n should_add = true;\n // below is to avoid overflows (i.e. if inlen is close to N)\n let mut should_check = !variable;\n for i in 0..3 {\n should_add &= i != remainder;\n should_check &= in_len - remainder + i != N;\n if should_add {\n // we want to absorb the final 'remainder' items\n sponge.absorb(input[in_len - remainder + i]);\n } else if should_check {\n assert(input[in_len - remainder + i] == 0, \"Found non-zero field after breakpoint\");\n }\n }\n sponge\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = std::hash::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = std::hash::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn existing_sponge_poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n // absorb 250 of the 501 things\n let empty_sponge = Poseidon2Sponge::new((in_len as Field) * TWO_POW_64);\n let first_sponge = poseidon2_absorb_chunks_existing_sponge(empty_sponge, input, 250, true);\n // now absorb the final 251 (since they are all 3s, im being lazy and not making a new array)\n let mut final_sponge = poseidon2_absorb_chunks_existing_sponge(first_sponge, input, 251, true);\n let fixed_len_hash = Poseidon2Sponge::hash(fixed_input, fixed_input.len());\n assert(final_sponge.squeeze() == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_empty_inputs() {\n let in_len = 0;\n let mut input: [Field; 4096] = [0; 4096];\n let mut constructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(constructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == constructed_empty_sponge.squeeze());\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
3718
|
+
"source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n contract_class_log::ContractClassLog,\n function_selector::FunctionSelector,\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::{OrderedValue, scoped::Scoped},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH, TWO_POW_64,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n poseidon2::Poseidon2Sponge,\n traits::{FromField, Hash, ToField},\n utils::{\n arrays::{array_concat, unsafe_padded_array_length},\n field::{field_from_bytes, field_from_bytes_32_trunc},\n },\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_contract_class_log_field(\n contract_address: AztecAddress,\n first_field: Field,\n) -> Field {\n poseidon2_hash([contract_address.to_field(), first_field])\n}\n\npub fn silo_contract_class_log(contract_class_log: ContractClassLog) -> ContractClassLog {\n if contract_class_log.contract_address.is_zero() {\n contract_class_log\n } else {\n let mut log = contract_class_log;\n log.log.fields[0] = compute_siloed_contract_class_log_field(\n contract_class_log.contract_address,\n log.log.fields[0],\n );\n log\n }\n}\n\npub fn compute_contract_class_log_hash(contract_class_log: ContractClassLog) -> Field {\n let array = contract_class_log.log.fields;\n // Safety: The below length is constrained in the base rollup.\n let length = unsafe { unsafe_padded_array_length(array) };\n if length == 0 {\n 0\n } else {\n poseidon2_hash(array)\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: [u8; 160] = std::mem::zeroed();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..5 {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes[32 * i + j] = item_bytes[j];\n }\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a u128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n// Performs a fixed length hash with a subarray of the given input.\n// Useful for SpongeBlob in which we aborb M things and want to check it vs a hash of M elts of an N-len array.\n// Using stdlib poseidon, this will always absorb an extra 1 as a 'variable' hash, and not match spongeblob.squeeze()\n// or any ts implementation. Also checks that any remaining elts not hashed are empty.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, false);\n sponge.squeeze()\n}\n\n// NB the below is the same as poseidon::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, true);\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if in_len != N {\n sponge.absorb(1);\n }\n sponge.squeeze()\n}\n\n// The below fn reduces gates of a conditional poseidon2 hash by approx 3x (thank you ~* Giant Brain Dev @IlyasRidhuan *~ for the idea)\n// Why? Because when we call stdlib poseidon, we call absorb for each item. When absorbing is conditional, it seems the compiler does not know\n// what cache_size will be when calling absorb, so it assigns the permutation gates for /each i/ rather than /every 3rd i/, which is actually required.\n// The below code forces the compiler to:\n// - absorb normally up to 2 times to set cache_size to 1\n// - absorb in chunks of 3 to ensure perm. only happens every 3rd absorb\n// - absorb normally up to 2 times to add any remaining values to the hash\n// In fixed len hashes, the compiler is able to tell that it will only need to perform the permutation every 3 absorbs.\n// NB: it also replaces unnecessary range checks (i < thing) with a bit check (&= i != thing), which alone reduces the gates of a var. hash by half.\n\n#[no_predicates]\nfn poseidon2_absorb_chunks<let N: u32>(\n input: [Field; N],\n in_len: u32,\n variable: bool,\n) -> Poseidon2Sponge {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n // Even though shift is always 1 here, if we input in_len = 0 we get an underflow\n // since we cannot isolate computation branches. The below is just to avoid that.\n let shift = if in_len == 0 { 0 } else { 1 };\n if in_len != 0 {\n // cache_size = 0, init absorb\n sponge.cache[0] = input[0];\n sponge.cache_size = 1;\n // shift = num elts already added to make cache_size 1 = 1 for a fresh sponge\n // M = max_chunks = (N - 1 - (N - 1) % 3) / 3: (must be written as a fn of N to compile)\n // max_remainder = (N - 1) % 3;\n // max_chunks = (N - 1 - max_remainder) / 3;\n sponge = poseidon2_absorb_chunks_loop::<N, (N - 1 - (N - 1) % 3) / 3>(\n sponge,\n input,\n in_len,\n variable,\n shift,\n );\n }\n sponge\n}\n\n// NB: If it's not required to check that the non-absorbed elts of 'input' are 0s, set skip_0_check=true\n#[no_predicates]\npub fn poseidon2_absorb_chunks_existing_sponge<let N: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n skip_0_check: bool,\n) -> Poseidon2Sponge {\n let mut sponge = in_sponge;\n // 'shift' is to account for already added inputs\n let mut shift = 0;\n // 'stop' is to avoid an underflow when inputting in_len = 0\n let mut stop = false;\n for i in 0..3 {\n if shift == in_len {\n stop = true;\n }\n if (sponge.cache_size != 1) & (!stop) {\n sponge.absorb(input[i]);\n shift += 1;\n }\n }\n sponge = if stop {\n sponge\n } else {\n // max_chunks = (N - (N % 3)) / 3;\n poseidon2_absorb_chunks_loop::<N, (N - (N % 3)) / 3>(\n sponge,\n input,\n in_len,\n skip_0_check,\n shift,\n )\n };\n sponge\n}\n\n// The below is the loop to absorb elts into a poseidon sponge in chunks of 3\n// shift - the num of elts already absorbed to ensure the sponge's cache_size = 1\n// M - the max number of chunks required to absorb N things (must be comptime to compile)\n// NB: The 0 checks ('Found non-zero field...') are messy, but having a separate loop over N to check\n// for 0s costs 3N gates. Current approach is approx 2N gates.\n#[no_predicates]\nfn poseidon2_absorb_chunks_loop<let N: u32, let M: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n variable: bool,\n shift: u32,\n) -> Poseidon2Sponge {\n assert(in_len <= N, \"Given in_len to absorb is larger than the input array len\");\n // When we have an existing sponge, we may have a shift of 0, and the final 'k+2' below = N\n // The below avoids an overflow\n let skip_last = 3 * M == N;\n // Writing in_sponge: &mut does not compile\n let mut sponge = in_sponge;\n let mut should_add = true;\n // The num of things left over after absorbing in 3s\n let remainder = (in_len - shift) % 3;\n // The num of chunks of 3 to absorb (maximum M)\n let chunks = (in_len - shift - remainder) / 3;\n for i in 0..M {\n // Now we loop through cache size = 1 -> 3\n should_add &= i != chunks;\n // This is the index at the start of the chunk (for readability)\n let k = 3 * i + shift;\n if should_add {\n // cache_size = 1, 2 => just assign\n sponge.cache[1] = input[k];\n sponge.cache[2] = input[k + 1];\n // cache_size = 3 => duplex + perm\n for j in 0..3 {\n sponge.state[j] += sponge.cache[j];\n }\n sponge.state = std::hash::poseidon2_permutation(sponge.state, 4);\n sponge.cache[0] = input[k + 2];\n // cache_size is now 1 again, repeat loop\n } else if (!variable) & (i != chunks) {\n // if we are hashing a fixed len array which is a subarray, we check the remaining elts are 0\n // NB: we don't check at i == chunks, because that chunk contains elts to be absorbed or checked below\n let last_0 = if (i == M - 1) & (skip_last) {\n 0\n } else {\n input[k + 2]\n };\n let all_0 = (input[k] == 0) & (input[k + 1] == 0) & (last_0 == 0);\n assert(all_0, \"Found non-zero field after breakpoint\");\n }\n }\n // we have 'remainder' num of items left to absorb\n should_add = true;\n // below is to avoid overflows (i.e. if inlen is close to N)\n let mut should_check = !variable;\n for i in 0..3 {\n should_add &= i != remainder;\n should_check &= in_len - remainder + i != N;\n if should_add {\n // we want to absorb the final 'remainder' items\n sponge.absorb(input[in_len - remainder + i]);\n } else if should_check {\n assert(input[in_len - remainder + i] == 0, \"Found non-zero field after breakpoint\");\n }\n }\n sponge\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn existing_sponge_poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n // absorb 250 of the 501 things\n let empty_sponge = Poseidon2Sponge::new((in_len as Field) * TWO_POW_64);\n let first_sponge = poseidon2_absorb_chunks_existing_sponge(empty_sponge, input, 250, true);\n // now absorb the final 251 (since they are all 3s, im being lazy and not making a new array)\n let mut final_sponge = poseidon2_absorb_chunks_existing_sponge(first_sponge, input, 251, true);\n let fixed_len_hash = Poseidon2Sponge::hash(fixed_input, fixed_input.len());\n assert(final_sponge.squeeze() == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_empty_inputs() {\n let in_len = 0;\n let mut input: [Field; 4096] = [0; 4096];\n let mut constructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(constructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == constructed_empty_sponge.squeeze());\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
|
|
3719
3719
|
},
|
|
3720
3720
|
"307": {
|
|
3721
3721
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
|
|
@@ -3723,13 +3723,13 @@
|
|
|
3723
3723
|
},
|
|
3724
3724
|
"316": {
|
|
3725
3725
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
|
|
3726
|
-
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize
|
|
3726
|
+
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse std::default::Default;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field,\n ))\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field,\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: serialized[0],\n y: serialized[1],\n is_infinite: serialized[2] as bool,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: serialized[3],\n y: serialized[4],\n is_infinite: serialized[5] as bool,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: serialized[6],\n y: serialized[7],\n is_infinite: serialized[8] as bool,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: serialized[9],\n y: serialized[10],\n is_infinite: serialized[11] as bool,\n },\n },\n }\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash =\n 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n let test_data_default_hash = 0x1d3bf1fb93ae0e9cda83b203dd91c3bfb492a9aecf30ec90e1057eced0f0e62d;\n\n assert(actual.to_field() == test_data_default_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"
|
|
3727
3727
|
},
|
|
3728
3728
|
"365": {
|
|
3729
3729
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
|
|
3730
3730
|
"source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; K];\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"
|
|
3731
3731
|
},
|
|
3732
|
-
"
|
|
3732
|
+
"376": {
|
|
3733
3733
|
"path": "/home/aztec-dev/nargo/github.com/noir-lang/schnorr/v0.1.1/src/lib.nr",
|
|
3734
3734
|
"source": "use std::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul};\nuse std::hash::{blake2s, pedersen_hash};\n\npub fn verify_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) -> bool {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n // pub_key is on Grumpkin curve\n let mut is_ok = (public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17)\n & (!public_key.is_infinite);\n\n if ((sig_s.lo != 0) | (sig_s.hi != 0)) & ((sig_e.lo != 0) | (sig_e.hi != 0)) {\n let (r_is_infinite, result) =\n calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n is_ok &= !r_is_infinite;\n for i in 0..32 {\n is_ok &= result[i] == signature[32 + i];\n }\n } else {\n is_ok = false;\n }\n is_ok\n}\n\npub fn assert_valid_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n\n // assert pub_key is on Grumpkin curve\n assert(public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17);\n assert(public_key.is_infinite == false);\n // assert signature is not null\n assert((sig_s.lo != 0) | (sig_s.hi != 0));\n assert((sig_e.lo != 0) | (sig_e.hi != 0));\n\n let (r_is_infinite, result) = calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n assert(!r_is_infinite);\n for i in 0..32 {\n assert(result[i] == signature[32 + i]);\n }\n}\n\nfn calculate_signature_challenge<let N: u32>(\n public_key: EmbeddedCurvePoint,\n sig_s: EmbeddedCurveScalar,\n sig_e: EmbeddedCurveScalar,\n message: [u8; N],\n) -> (bool, [u8; 32]) {\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let r = multi_scalar_mul([g1, public_key], [sig_s, sig_e]);\n // compare the _hashes_ rather than field elements modulo r\n let pedersen_hash = pedersen_hash([r.x, public_key.x, public_key.y]);\n let pde: [u8; 32] = pedersen_hash.to_be_bytes();\n\n let mut hash_input = [0; N + 32];\n for i in 0..32 {\n hash_input[i] = pde[i];\n }\n for i in 0..N {\n hash_input[32 + i] = message[i];\n }\n\n let result = blake2s(hash_input);\n (r.is_infinite, result)\n}\n\n//Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\nfn scalar_from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v: Field = 1;\n let mut lo: Field = 0;\n let mut hi: Field = 0;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = EmbeddedCurveScalar::new(lo, hi);\n sig_s\n}\n\nmod test {\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n use super::verify_signature;\n\n #[test]\n fn test_zero_signature() {\n let public_key: EmbeddedCurvePoint = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let signature: [u8; 64] = [0; 64];\n let message: [u8; _] = [2; 64]; // every message\n let verified = verify_signature(public_key, signature, message);\n assert(!verified);\n }\n\n #[test]\n fn smoke_test() {\n let message: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let pub_key_x: Field = 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a;\n let pub_key_y: Field = 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197;\n let signature: [u8; 64] = [\n 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76,\n 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, 27, 237, 155, 84, 39, 84,\n 247, 27, 22, 8, 176, 230, 24, 115, 145, 220, 254, 122, 135, 179, 171, 4, 214, 202, 64,\n 199, 19, 84, 239, 138, 124, 12,\n ];\n\n let pub_key = EmbeddedCurvePoint { x: pub_key_x, y: pub_key_y, is_infinite: false };\n let valid_signature = verify_signature(pub_key, signature, message);\n assert(valid_signature);\n super::assert_valid_signature(pub_key, signature, message);\n }\n\n}\n\nmod bench {\n use super::{assert_valid_signature, verify_signature};\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n #[export]\n pub fn bench_verify_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) -> bool {\n verify_signature(public_key, signature, message)\n }\n\n #[export]\n pub fn bench_assert_valid_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) {\n assert_valid_signature(public_key, signature, message)\n }\n}\n"
|
|
3735
3735
|
},
|