@aztec/accounts 0.75.0 → 0.76.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.
@@ -1,167 +1,8 @@
1
1
  {
2
2
  "transpiled": true,
3
- "noir_version": "1.0.0-beta.1+4144a8dce4789d85",
3
+ "noir_version": "1.0.0-beta.1+3f8376928465907d",
4
4
  "name": "EcdsaRAccount",
5
5
  "functions": [
6
- {
7
- "name": "process_log",
8
- "is_unconstrained": true,
9
- "custom_attributes": [],
10
- "abi": {
11
- "error_types": {
12
- "16761564377371454734": {
13
- "error_kind": "string",
14
- "string": "Array index out of bounds"
15
- },
16
- "16954218183513903507": {
17
- "error_kind": "string",
18
- "string": "Attempted to read past end of BoundedVec"
19
- },
20
- "17843811134343075018": {
21
- "error_kind": "string",
22
- "string": "Stack too deep"
23
- },
24
- "2920182694213909827": {
25
- "error_kind": "string",
26
- "string": "attempt to subtract with overflow"
27
- },
28
- "5019202896831570965": {
29
- "error_kind": "string",
30
- "string": "attempt to add with overflow"
31
- },
32
- "6753155520859132764": {
33
- "error_kind": "string",
34
- "string": "Failed to deliver note"
35
- },
36
- "8270195893599566439": {
37
- "error_kind": "string",
38
- "string": "Invalid public keys hint for address"
39
- },
40
- "8861757336002045335": {
41
- "error_kind": "fmtstring",
42
- "item_types": [
43
- {
44
- "kind": "integer",
45
- "sign": "unsigned",
46
- "width": 32
47
- },
48
- {
49
- "kind": "integer",
50
- "sign": "unsigned",
51
- "width": 32
52
- },
53
- {
54
- "kind": "field"
55
- }
56
- ],
57
- "length": 99
58
- },
59
- "9862881900111276825": {
60
- "error_kind": "fmtstring",
61
- "item_types": [
62
- {
63
- "kind": "field"
64
- }
65
- ],
66
- "length": 35
67
- }
68
- },
69
- "parameters": [
70
- {
71
- "name": "log_plaintext",
72
- "type": {
73
- "fields": [
74
- {
75
- "name": "storage",
76
- "type": {
77
- "kind": "array",
78
- "length": 18,
79
- "type": {
80
- "kind": "field"
81
- }
82
- }
83
- },
84
- {
85
- "name": "len",
86
- "type": {
87
- "kind": "integer",
88
- "sign": "unsigned",
89
- "width": 32
90
- }
91
- }
92
- ],
93
- "kind": "struct",
94
- "path": "std::collections::bounded_vec::BoundedVec"
95
- },
96
- "visibility": "private"
97
- },
98
- {
99
- "name": "tx_hash",
100
- "type": {
101
- "kind": "field"
102
- },
103
- "visibility": "private"
104
- },
105
- {
106
- "name": "unique_note_hashes_in_tx",
107
- "type": {
108
- "fields": [
109
- {
110
- "name": "storage",
111
- "type": {
112
- "kind": "array",
113
- "length": 64,
114
- "type": {
115
- "kind": "field"
116
- }
117
- }
118
- },
119
- {
120
- "name": "len",
121
- "type": {
122
- "kind": "integer",
123
- "sign": "unsigned",
124
- "width": 32
125
- }
126
- }
127
- ],
128
- "kind": "struct",
129
- "path": "std::collections::bounded_vec::BoundedVec"
130
- },
131
- "visibility": "private"
132
- },
133
- {
134
- "name": "first_nullifier_in_tx",
135
- "type": {
136
- "kind": "field"
137
- },
138
- "visibility": "private"
139
- },
140
- {
141
- "name": "recipient",
142
- "type": {
143
- "fields": [
144
- {
145
- "name": "inner",
146
- "type": {
147
- "kind": "field"
148
- }
149
- }
150
- ],
151
- "kind": "struct",
152
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
153
- },
154
- "visibility": "private"
155
- }
156
- ],
157
- "return_type": null
158
- },
159
- "bytecode": "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",
160
- "debug_symbols": "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",
161
- "brillig_names": [
162
- "process_log"
163
- ]
164
- },
165
6
  {
166
7
  "name": "entrypoint",
167
8
  "is_unconstrained": false,
@@ -1972,7 +1813,7 @@
1972
1813
  }
1973
1814
  },
1974
1815
  "bytecode": "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",
1975
- "debug_symbols": "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S1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3L2H19iWs3r6E1duXsHr7ElZvX8Lq7UtYvX0Jq7cvYfX2JazevoTV25ewevsSVm9fwurtS1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3L2H19iWs3r6E1dunWL19itXbp1i9fYrV26cOaldWrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7D6u0zrN4+w+rtM6zePnNQu7Jh9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fYfX2GVZvn2H19hlWb59h9fYZVm+fHd7btxzh3NJZ9uD6J2tx/tvFWrytF/vy4uIc5CY0Bw2PF38VmlmEFg6h+fBOx9OEehahgUVoZBEqLEITi1BlEUpCRtmRkFF2LGTkWcjIs5CRZyEjz0JGh3d1nyaUhYw8Cxl5FjLyLGTkWcgosJBRYCGjwEJGgYWMDndWOE0oCxkFFjIKLGQUWMgosJBRZCGjiExGFuSWhgWVp9yRYaeVOzK/tHIX6NxLueUe/XPuyJTRyh0ZHFq5I7NAK3fk8t7KHbliN/YZQS7CrdwHrquCXVer812w62o994HrqgxcV2XguioD11UZuK7KwHU1DVxX08B1NQ38vpoGfl893Npnx30mDVxX08B1NQ1cV9PAdTVh19Vq7opdV+u5Y9fVeu4Dv6/qwHX1cHOmPXPHrqv13LHraj137Lpaz33guqoD11UbuK7awHXVBq6rNvA58OH2WnvmPvD7qg38vmoD11XDrqv13Ac+B84DnwPngc+B88B1NQ9cVw83SNsz94Hrah64ruaBz4HzwO+reeD31TLw+2oZuK6Wgf++WgY+Bz7c4m7P3Ac+By4D11Vop71W7gPXVWg/vHruBdrirpX7uOfABdqIrpX7uO+rxWHX1Xru49bVAm3q1sp93HPgAm291sp93HPgAm2Q1thnoD3PWrkPXFehnclauQ9cV6H9w1q5j/u+WqBdvlq5j/u+WqC9uBp1Fdpeq5X7uOfABdoEq5X7uOfABdqqqrHPQLtPtXIfuK5Ce0S1ch+4rkI7OTVyhzZnauU+8PsquN9SPfeB6yq431I994HPgcH9luq5D3wOPLDfUgH3W6rmDu63VM994Lo6sN9SGdhvqQzst1QG9lsqA/stFXC/pWpdBfdbquc+8DnwwH5LZWC/pQLut1TdZ8D9luq5D1xXB/ZbKgP7LZWB/ZbKwH5LZWC/pTKw31IB91uq1lVwv6V67gOfAw/st1QG9lsq4H5L9X1m4Lo6sN9SGdhvqQzst1QG9lsqA/stlYH9lsrAfksF3G+pWlfB/ZbquQ98Djyw31IZ2G+pgPstVfcZcL+leu4D19WB/ZbKwH5LZWC/pTKw31IZ2G+pDOy3VMD9lqp1FdxvqZ77wOfAA/stlYH9lgq431J1nwH3W6rnPnBdHdhvqQzst1QG9lvybmDDpSX5cd9Yl+THfWVdkh+3ti7JYxfXRvLjngYvyY97HLwkP+558JL8uAV2SX7kCjuw9dKS/MgVdmDzpSX5cU+Fl+SxK2wj+XHfX5fkx32BXZIfucKCWzA1kh/3bNi7gU2YluTHPR1ekh+5woL7MDWSH7nCDuzEtCQ/coUd2ItpSX7kd9iB3Zi8G9iOaUl+5AoLbsjUSH7kU+KBLZmW5Ec+JQY3ZWrsNiNX2IFtmZbkR66wAxszLcmPfEo8sDXTkvzI77ADmzMtyY9cYcHtmRrJj3xKPLBB05L8yKfE4BZN9d0G3KOpkfzIFXZgl6Yl+ZEr7MA+TUvyI7/DDuzUtCQ/8jssuFdTvcKCmzU1kh/5lHhgu6Yl+ZFPicENm+q7DbhjUyP5kSvswJ5NS/IjV9iBXZu8G9i2aUl+5HfYgY2bluRHrrDg1k2N5Ec+JR7YvGlJfuRTYnD7psZuM3KFHdjAaUl+5Ao7sIXTkvzIp8QDmzgtyY/8DjuwjdOS/MgVFtzIqZH8yKfEA1s5LcmPfEoMbuZU323A3ZwayY9cYQf2c1qSH7nCDuzotCQ/8jvsyJ5OfmRPJw/u6VStsB7c06mR/MCnxN5hV9hG8gOfEntwT6fGbjNwhfUjezr5kT2d/MieTn5kTyc/sqeTH9nTyY/s6eTBPZ3qFRbc06mR/MCnxH5kTyc/sqeTB/d0qu824J5OjeRHrrAjezr5kT2d/MieTn5kTyc/sqeTH9nTyYN7OtUrLLinUyP5kU+JR/Z08iN7OnlwT6f6bgPu6dRIfuQKO7Knkx/Z08mP7OnkR/Z08iN7OvmRPZ08uKdTvcKCezo1kh/5lHhkTyc/sqeTB/d0auw2I1fYkT2d/MieTn5kTyc/sqeTH9nTyY/s6eRH9nTy4J5O9QoL7unUSH7kU+KRPZ38yJ5OHtzTqb7bgHs6NZIfucKO7OnkR/Z08iN7OvmRPZ38yJ5OfmRPJw/u6VSvsOCeTo3kRz4lHtnTyY/s6eTBPZ0au83IFXZkTyc/sqeTH9nTyY/s6eRH9nTyI3s6+ZE9nTy4p1O9woJ7OjWSH/mUeGRPJz+yp5MH93Sq7zbgnk6N5EeusCN7OvmRPZ38yJ5OfmRPJz+yp5Mf2dPJg3s6VStsAPd0aiQ/8ClxGNnTKYzs6RTcwBU2gHs6NZIfuMKGkT2dwsieTmFkT6cwsqdTGNnTKYzs6RTAPZ3qFRbc06mR/MCnxGFkT6cwsqdTAPd0auw2I1fYkT2dwsieTmFkT6cwsqdTGNnTKYzs6RRG9nQK4J5O9QoL7unUSH7kU+KRPZ3CyJ5OAdzTqb7bjOzpFMA9nRrJj/wOC+7p1Eh+5Ao7sqdTAPd0qo88uKdTI/mRKyy4p1Mj+ZErLLinU323Afd0aiQ/8jssuKdTI3noCish3ZKXYM/JH11hc/S35POXK6qfnH28fXKOd6VR5MXVUeX2nKIW+e7qr1oPt4A6U6sn0hqItEYirUKkNRFpVSKtRqQ1E2mdiJtyuiFiLA95vL46W3Tfrs6WXoyMTkRZO4/MREz2uZFJa9Y5ZWtc7UXWxbf8t6YXIzkR8Z08khPx5M6rVa6R2RiZiVj15NU3EQmfPJITcfbOq3UiKt95ZGgZXly4jYxE/zwydjH8xpwxWoZvjszF5DvVMqNl8t1HUq7VurFaaRm+OTIXk++1+miZfPeRvBh+a7Ve5/AbI5NpGb71dpMvht+aM7QM3xyZi8l3qmWH283OO5IXw2+tVlqGb47MxeR7rT5aJt99JC+G31it5TqH3xoZWoZvvd2Ui+G35sz1XZetkZGrlu1Ty8r13Zi9RvJi+K3Ven3XZWtkLibfa/XRMvnOIxndxfCvV2t01zn81sjQMnzj7Sa6i+G35oxcI7MxMheT71XLru/G7DWSF8Nvrdbruy5bI3Mx+U6rz9My+e4jeTH8xmr11zn81sjQMnzr7ebwH9kYZ85c33XZGpmLyfeqZdd3Y/YayYvht1br9V2XjZEJF5PvtPrC5TOz10heDL+1Wq9z+K2Rkevt5vXbTbgYfmvOXN912RqZi8n3qmXXd2P2GsmL4TdWa7y+67I1MheT77T64uUzs9dIXgy/tVrlGpmNkaFl+NbbTbwYfmvOXN912RqZi8n3qmXXd2N2Gkm5GH5jtcr1XZetkbmYfK/Vd/nM7DWScq3WjdV6ncNvjQwtw7febmQehl+k3j5anLnG1cXL7dcWS3CltS85sdtALv9d3IuRnIf5zx7JeZj/5JGc6Jcxzx7Jed4Rzh7Jed4pzh7Jed4pzh5JuUZyp5Gc5x0kBXfLIwUtL7TO81bR1jrPe0Jb6zwk39Y6D2s3tU70C6ZtrfPwalvrPETZ1joP87W1CpFWIm6a6NcxU/S3j07RtMXPFnTVaDG0eTuoX3k7lBfntxP9Pub5YzkR950+lhNx5aFjac9jOdGvdr57LJvnExP9zuf5YzkRd58+lhNx/eljKddY7jaWE72XfHIsY7mnLdr6poX36tZvLnmV8GIsed97PjuWFtM6lqavxpL3vWf/seR979l/LHnfe3Yfy4l+6fT8seR979l/LHnfe/YfS973nv3HUmjHUm39cDMXX4wN73tMe2x430tyvI9NTi+6TSb6XdUU8+0FNYlvng1k72X9cJ9enA1M9Eup+4/NTO8BO4/NRL9+uv/YzMTpe4/NTNy999jMxNF7j41cY7M5NjNx8d5jMxMX7z02Fxdvjw0vFwe5f3gwaVyvxd0S1+Lv33z5cqOni5fPvo17Dg/HH8vFH6POS9znjbpM9CuoI40671vCmaPO+/5x5qjzvtmcOepyjfoJo877NnbmqPO+55056rxvkGeO+vVuesaoX++mJ4z6RL8GPNKoX++mZ4z69W56xqhf76ZnjLpco37CqF/vpmeM+vVuesaoX++mZ4z69W56xqhf76YnjPpEv4o90qhf76ZnjPr1bnrGqF/vpmeMulyjfsKoX++mZ4z69W56xqhf76ZnjPr1bnrGqF/vpieM+kS/9j7SqF/vpmeM+vVuesaoX++mZ4y6XKN+wqhf76ZnjPr1bnrGqF/vpmeM+vVuesaoX++mJ4y6XO+mZ4z69W56xqhf76ZnjPr1bnrGqMs16ieM+vVuesaoH/5uujqARhfS4yd/5PPWt7aPW+zwimJh9d0xKXXJPsY1n6j3p6v51cP1sj5cn+5phOS+ZV9Gzj65obP3B2cvYbVZFs317H1Jcf3Rj5Ie8rdXG0MIudwuD6GE/Hj5h9pApTZSqRUqtQlYbXA+3373Prj48AOGa/qK/bDK+tFFHzzo1vTt4PTtnr49/Obr6/RV3Hq1angx+nns9Aty+mbFrVfnB5i9pa9u7PT92OmHsdOPY6cvY6d/dNkKKwb46L8rWx/52NBlVPPQEHP4jzD79VAleHP1T47Op/VUIt2T//oW+Hy1utswRo33YfTh1dWlpFvWpTwc7nSyrA39Bm1+6OzD0NlTveHu8cO7A6lFfsPdXy34C/HOasG5ZWe1yJizv9rCpDY7KrXIfy1oA3tGPv4Pzkpe08/fj/4LNsrplohme9D6TSoyGe0sVXikYp/67yoVGYh2lopMQ5+VWtbDey3BnqRin/jsKhWZg/aVWpAhaGep2AS0q9SZaKkhdSZaakgVHqkz0VJD6ky01JDKQ0uFh5YKDS0lR0NLydHQUnI0tJQcDS0lJzxSaWgpORpaSo6GlpKjoaXkeGjJ89CS56Elz0NLnoeW9vjloFGk8tCS56Elz0NLnoeWPA8tBR5aCjy0FHhoKfDQ0h6/ZTGK1KloabUf0ZKepU5FS3WpU9FSXepUtFSXOhUtVaXGqWipLnUqWqpLnYqW6lKnoqW6VOGRykNLkYeWIg8tRR5aijy0JDy0JDy0JDy0JDy0tIff7yhSeWhJeGhJeGhJeGhJeGgp8dAStIfwzlJ5aAnaPXhnqcIjlYeWoD2Gd5bKQ0uJh5YSDy0pDy0pDy0pDy0pDy0d7uF8olQeWlIeWoJ2zd5ZKg8tKQ8tGQ8tGQ8tGQ8tQft27yxVeKTy0BK0XffOUnloCdqoe2epPLQEbdG9s1QeWprKy7shlYeWpvLybkjloaWpvLwbUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6VhpZ0Li/vulQaWtK5vLzrUmloSZ3wSKWhJZ3Ly7sulYaWdC4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWuLx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/l8fJWHi9v5fHyVh4vb+Xx8lYeL2/j8fI2Hi9v4/HyNh4vb3PCI5WGlozHy9t4vLyNx8vbeLy8jcfL23i8vI3Hy9t4vLyNx8vbeLy8jcfL23i8vO1wL2+7SzUtdalfjIPWq1WDf5T6kX4ZOv3DPbc/l75KuKdvsTHRclonWjb/40Q73HP7RKmBR2rkkSo8UhOPVOWRajxSsalmV6nYBPQ5qWXlJS3hiVXjTLTUkDoTLTWkzkRLDakz0VJDqvBInYmWGlJnoqWG1JloqSF1JlpqSOWhJeGhJeGhJeGhJeGhpcM9t0+UykNLwkNLwkNLwkNLwkNLiYeWEg8tJR5aSjy0dLjn9olSeWgp8dBS4qGlxENLiYeWlIeWlIeWlIeWlIeWDvfcPlEqDy0pDy0pDy0pDy0pDy0ZDy0ZDy0ZDy0ZDy0d7rl9olQeWjIeWjIeWjIeWrKpaKnakZinoqW61KloqS4VmpaW9eXWq7O3R6kf6UMTUDt9GTt9aFJppw9NH+30oYminT40JbTTh678zfQLdDVvpw9dodvpj111y9hV93CP5Z3TH7vqlrGrbhm76paxq24ZuupmN3TVzW7oqpvd0FU3u6GrbnZDV93shq662Q1ddbMbuupmN3TVzW7squvHrrp+7Krrx666fuyqe7jn687pj111/dhV149ddbE9VNvpj111sT1U2+mPXXWxvU7b6Y9ddbE9Sdvpj111sb1D2+mPXXWxPT7b6Y9ddbG9ONvpj111sT0z2+mPXXWxvS3b6Y9ddbE9KNvpj111sb0i2+mPXXWxPR3b6Y9ddbG9F9vpj111sT0S2+mPXXWxvQzb6Y9ddbE9B9vpj111sb0B2+mPXXWxPfza6Y9ddbG99trpj111sT3x2umPXXWxveva6dP0DOe5/OjqUoftGf5I/+BqHly6JRScaT39XPLt4uKD1Z9Tdvrt2uVcY700qH4TGoGFVi7+SF5GTj6NnPweFd/imnxJ9eSL6K2KlCRan/LLktb1k+P9k/3y3x/Z71Dws7PbxcvfuRqbU4rrc0p6X4VqrzZWL/62sS5X35dsct+yz0NnX0bOfg+PtE9lr+GhUKV69r6kWG5Xl5QayySEXG6Xh1C+/4X2D7WeSm2gUhup1Aqw2uCWbXGttrH45/QTdPpW8pp+/n70X+yx1R8Kznt4oI0i1XikZh6phUZqRqahz0qtOtvljIxCO0tF5qCdpSJD0M5ShUfqTLTUkDoTLTWkzkRLDakz0VJD6ky0VJdaeGip8NBS4aGlwkNLe3jijSKVh5YKDy0VHloqPLRUaGipOBpaKo6GloqjoaXiaGipOOGRSkNLxdHQUnE0tFQcDS0Vx0NLnoeWPA8teR5a8jy0tIcH5ShSeWjJ89CS56Elz0NLnoeWAg8tBR5aCjy0FHhoaQ/v0FGk8tBS4KGlwENLgYeWAg8tRR5aijy0FHloKfLQ0h6er6NI5aGlyENLkYeWIg8tRR5aEh5aEh5aEh5aEh5a2sOrdxSpPLQkPLQkPLQkPLQkPLSUeGgp8dBS4qGlxENLe3gsjyKVh5YSDy0lHlpKPLSUeGhJeWhJeWhJeWhJeWhpD2/qUaTy0JLy0JLy0JLy0JLy0BK0V/fOUnloCdqle2epPLQE7s+9q1QeWprKy7shlYeWpvLybkjloSUeL+/C4+VdeLy8C4+Xd+Hx8i48Xt6Fx8u78Hh5Fx4v78Lj5V14vLwLj5d34fHyLjxe3oXHy7vweHkXHi/vwuPlXXi8vAuNl3dwNF7ei1QWWlqkstDSInUqWpL1Nx1LepYqPFKnoqW61KloqS51KlqqS52KlupSp6KlqtS5vLzrUqeipbrUqWipLpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQaWvJzeXnXpdLQkp/Ly7sulYaWvBMeqTS05Hm8vD2Pl7fn8fL2PF7ensfL2/N4eXseL2/P4+Xteby8PY+Xt+fx8vY8Xt6ex8vb83h5ex4vb8/j5e15vLw9j5e35/Hy9jxe3p7Hy9vzeHl7Hi9vz+Pl7Xm8vD2Pl7fn8fL2PF7ensfL2/N4eXseL2/P4+Xteby8PY+Xt+fx8vY8Xt6ex8vb83h5ex4vb8/j5e15vLw9j5e35/Hy9jxe3p7Hy9vzeHl7Hi9vz+Pl7Xm8vD2Pl7fn8fL2PF7ensfL2/N4eXseL2/P4+Xteby8PY+Xt+fx8vY8Xt6ex8vb83h5ex4vb8/j5e15vLw9j5e35/Hy9jxe3p7Hy9vzeHl7Hi9vz+Pl7Xm8vD2Pl7fn8fL2h3t5l7vUolqXuhwcuHQfmOAfpX6kH8ZOP0Knr/IwLS02JlpO60TL5p8mmvBITTxSlUeq8UjNPFILjdTDPbffKbWslVVLeKKagk01u0rFJqBdpc5ESw2pwiN1JlpqSJ2JlhpSZ6KlhtSZaKkhdSZaqkoNjoaWgqOhpeBoaCk4GloKTnik0tBScDS0FBwNLQVHQ0vB8dCS56Elz0NLnoeWPA8tHe65faJUHlryPLTkeWjJ89CS56GlwENLgYeWAg8tBR5aOtxz+0SpPLQUeGgp8NBS4KGlwENLkYeWIg8tRR5aijy0dLjn9olSeWgp8tBS5KGlyENLkYeWhIeWhIeWhIeWhIeWDvfcPlEqDy0JDy0JDy0JDy0JDy0lHlpKPLSUeGgp8dDS4Z7bJ0rloaXEQ0uJh5YSDy0lHlpSHlpSHlpSHlpSHlo63HP7rVJrHmZBp6KlulRoWjIr7na1ZW+PUj/ShyagdvrQVNNOH5pUmukbNH2004cminb60JTQTh+68rfTh67m7fShK3Q7/bGrro1ddW3sqmtjV908dtXF9jdupz921cX2N26nP3bVxfYhbqc/dtXF9gtupz921cX29W2mj+3V205/7KqL7anbTn/sqovtfdtOf+yqi+1R205/7KqL7SXbTn/oqhuxPV/b6Q9ddSO2N2s7/aGrbnRDV92I7YvaTn/oqhux/Uvb6Q9ddSO2z2gzfWzv0Hb6Y1ddbI/PdvpjV11sL852+mNXXWzPzHb6Y1ddbG/LdvpjV11sD8p2+mNXXWyvyHb6Y1ddbE/HdvpjV11s78V2+mNXXWyPxHb6Y1ddbC/DdvpjV11sz8F2+mNXXWxvwHb6Y1ddbA+/dvpjV11sr712+mNXXWxPvHb6Y1ddbO+6dvpjV11sj7l2+jtUXQuy3kNKI30Jt65qL5rvF+cXFwdn5ZZHcDnkx/SfL6/39sY9fONGkWo8UjOP1EIjdQ/fuFGkeh6pgUdq5JEqPFJ5aCnx0FLioaXEQ0uJh5aUh5aUh5aUh5aUh5b28I0bRSoPLSkPLSkPLSkPLSkPLRkPLRkPLRkPLRkPLe3hyzeKVB5aMh5aMh5aMh5aMh5ayjy0lHloKfPQUuahpT38FEeRykNLmYeWMg8tZR5ayjy0VHhoqfDQUuGhpcJDS3v4YI4ilYeWCg8tFR5aKjy0VGhoSRwNLYmjoSVxNLQkjoaWxAmPVBpaEkdDS+JoaEkcDS2J46Elz0NLnoeWPA8teR5a2sN3dhSpPLTkeWjJ89CS56Elz0NLgYeWAg8tBR5aCjy0tIdf8ChSeWgp8NBS4KGlwENLgYeWIg8tRR5aijy0FHloaQ+f51Gk8tBS5KGlyENLkYeWIg8tCQ8t7eGNbRZXqSXVpaoXf0vHp/snh+S+JXS023WK64NK6u8XW1f2cejsZejsj/6BCb07daumeva+pFhuV5f0kP/LVRtCLrfLQyjfL/IPtUql1qjUZiq1hUltclRqPZXaMI9aXa65ldvg07PWCKw1OJ91ZeRY/HP6Ap3+5xA/pxXxs/kfET8hc9HOUpGhaGepyES0s1RkHNpZKjIL7StVkUFoZ6nIFPTp8yS3ckEJT+dJioxAO0vFJqBdpQqP1JloqSF1JlpqSJ2JlhpSZ6KlhtSZaKku1WaipYZUHloyHloyHlraw9R6FKk8tGQ8tGQ8tGQ8tGQ8tJR5aCnz0FLmoaXMQ0t7mFqPIpWHljIPLWUeWso8tJR5aKnw0FLhoaXCQ0uFh5b2MLUeRSoPLRUeWio8tFR4aKnQ0FJyNLSUHA0tJUdDS8nR0FJywiOVhpaSo6Gl5GhoKTkaWkqOh5Y8Dy15HlryPLTkeWhpD1PrUaTy0JLnoSXPQ0ueh5Y8Dy0FHloKPLQUeGgp8NDSHqbWo0jloaXAQ0uBh5YCDy0FHlqKPLQUeWgp8tBS5KGlPUytR5HKQ0uRh5YiDy1FHlqKPLQkPLQkPLQkPLQkPLR0uBH3iVJ5aAnasntnqTy0BG3WvbNUHlqCtuneWSoPLUEbdO8slYeWpvLybkjloaWpvLwbUnloaSov74ZUHlqaysu7IZWHlni8vBOPl3fi8fJOPF7eicfLO/F4eSceL+/E4+WdeLy8E4+Xd+Lx8k48Xt6Jx8s78Xh5Jx4v78Tj5Z14vLwTj5d34vHyTjxe3onHyzvxeHknHi/vxOPlnXi8vBOPl3fi8fJOc3l5y/pTsyU9SZ3Ly7sudSpaqkudipbqUqeipbpU4ZE6FS3VpU5FS3WpU9FSXepUtFSXSkNLOpeXd10qDS3pXF7edak0tKROeKTS0JLO5eVdl0pDSzqXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLfF4eSuPl7fyeHkrj5e38nh5K4+Xt/J4eSuPl7fyeHkrj5e38Xh5G4+Xt/F4eRuPl7c54ZFKQ0vG4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbYd7eZe71KJal+pVXLoPTPCPUr+mf7g/987pe+j0VR6mpcXGRMtpnWjZ/I8T7XDP7ROlRh6pwiM18UhVHqnGIzXzSMWmmj2lZmwC+pzUsvKSlvDEqnkmWmpInYmWGlJnoqWGVOGROhMtNaTOREsNqTPRUkPqTLTUkDoTLdWlFh5aKjy0VHhoqfDQ0uGe2ydK5aGlwkNLhYeWCg8tFRpayo6GlrKjoaXsaGgpOxpayk54pNLQUnY0tJQdDS1lR0NL2fHQkuehJc9DS56HljwPLR3uuX2iVB5a8jy05HloyfPQkuehpcBDS4GHlgIPLQUeWjrcc/tEqTy0FHhoKfDQUuChpcBDS5GHliIPLUUeWoo8tHS45/aJUnloKfLQUuShpchDS5GHloSHloSHloSHloSHlg733D5RKg8tCQ8tCQ8tCQ8tCQ8tJR5aSjy0lHhoKfHQ0uGe2ydK5aGlxENLiYeWEg8tJR5aUh5aUh5a0qloqeb4mnUqWqpLFR6p0LRkVtztasveHqV+pA9NQO30oammnT40qbTTh6aPZvrYHtbt9KEpoZ0+dOVvpw9dzdvpQ1fodvpjV11sn+d2+mNXXWw/5nb6Y1ddbN/kdvpjV11sf+N2+mNXXWwf4nb6Y1ddbL/gdvpjV11sX992+mNXXWz/3Xb6Y1ddbJ/cdvpjV11sP9t2+mNXXWzf2Xb6Y1ddbH/YdvpDV92C7ePaTn/oqluw/Vbb6Q9ddYsbuuoWbK/TdvpDV92C7UnaTn/oqluwvUOb6WP7gbbTH7vqYvt2ttMfu+pi+2u20x+76mL7YLbTH7vqYvtVttMfu+pi+0q20x+76mL7P7bTH7vqYvs0ttMfu+pi+ym20x+76mL7HrbTH7vqYvsTttMfu+pi+wi20x+76mL7/bXTH7vqYvvytdMfu+pi++e10x+76mL73LXTH7vqzuVHV+suLXP50dWlQlfzmtSP9I+u5ineRtMn9fX01Yu/Df1y9XpxSO5b9jp09jZ09keXcg0PUzk1Jn5JsazLJD3k/3KNhy9f2fp2efhyNvC8TgqT2sMt3s5V66nUBiq1kUqtUKlN86jV5ZpbuQ0+PWtVYK3B+ay3R+Vi8c/pG3T6VvKafv5+pr14VDmtLwTZ/I8vBAmZi3aWigxF+0pVZCLaWSoyDu0sFZmFdpaKDEI7S5WJpFZ9CIsiI9DOUrEJaFepM9FSQ+pMtNSQOhMt1aXaTLTUkDoTLTWkzkRLDakz0VJDqvBI5aEl46El46El46El46GlzENLmYeWMg8tZR5aOtwK8USpPLSUeWgp89BS5qGlzENLhYeWCg8tFR5aKjy0dLiF5YlSeWip8NBS4aGlwkNLhYWWonMstLRIZaGlRSoLLS1SWWhpkSo8UlloaZHKQkuLVBZaWqSy0NIilYeWPA8teR5a8jy05Hlo6XDL2BOl8tCS56Elz0NLnoeWPA8tBR5aCjy0FHhoKfDQ0uFWvydK5aGlwENLgYeWAg8tBR5aijy0FHloKfLQUuShpcMtmk+UykNLkYeWIg8tRR5aijy0JDy0JDy0JDy0JDy0dLgF9olSeWhJeGhJeGgJ2rV7Z6k8tATt172zVB5agnbq3lkqDy1Be3TvLJWHlsD9uXeVykNLU3l5N6Ty0NJUXt4NqTy0NJWXd0MqDy3ReHkvUnloicbLe5HKQ0s0Xt6LVB5aovHyXqTy0BKNl/cilYeWaLy8F6k8tETj5b1I5aElGi/vRSoPLdF4eS9SeWiJxst7kcpDSzRe3otUHlqi8fJepPLQEo2X9yKVh5ZovLwXqTy0NJeXt6w/NVvSs9SpaKkuVXikTkVLdalT0VJd6lS0VJc6FS3VpU5FSzWpfi4v77rUqWipLpWGlvxcXt51qcIjlYaW/Fxe3nWpNLTk5/LyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aGkuL++6VB5amsvLuy6Vh5bm8vKuS+Whpbm8vOtSeWhpLi/vulQeWprLy7sulYeW5vLyrkvloaW5vLzrUnloaS4v77pUHlqay8u7LpWHluby8q5L5aGluby861J5aInHy9vzeHl7Hi9vz+Pl7Xm8vD2Pl7fn8fL2PF7egcfLO/B4eQceL+/A4+UdnPBIpaGlwOPlHXi8vAOPl3fg8fIOPF7egcfLO/B4eQceL+/A4+UdeLy8A4+Xd+Dx8g48Xt6Bx8s78Hh5Bx4v78Dj5R14vLwDj5d34PHyDjxe3oHHyzvweHkHHi/vwOPlHXi8vAOPl3fg8fIOPF7egcfLO/B4eQceL+/A4+UdeLy8A4+Xd+Dx8g48Xt6Bx8s78Hh5Bx4v78Dj5R14vLwDj5d34PHyDjxe3oHHyzvweHkHHi/vwOPlHXi8vAOPl3fg8fIOPF7egcfLO/B4eQceL+/A4+UdeLy8A4+Xd+Dx8g48Xt6Bx8s78Hh5Bx4v78Dj5R14vLzD4V7e5S61qNalehWX7gMT/KPUj/Tj2OkLdPoqD9PSYmOi5bROtGz+aaIlHqnKI9V4pGYeqYVG6uGe2ydK9TxSsalmV6nYBPQ5qWXlJS3hiVUP99w+UepMtNSQOhMtNaTOREsNqTPRUkPqTLRUl1pmoqWG1JloqSF1JlpqSOWhpcM9t0+UykNLhYeWCg8tFR5aKjS0FB0NLUVHQ0vR0dBSdDS0FJ3wSKWhpehoaCk6GlqKjoaWouOhJc9DS56HljwPLXkeWjrcc/tEqTy05HloyfPQkuehJc9DS4GHlgIPLQUeWgo8tHS45/aJUnloKfDQUuChpcBDS4GHliIPLUUeWoo8tBR5aOlwz+0TpfLQUuShpchDS5GHliIPLQkPLQkPLQkPLQkPLR3uuX2iVB5aEh5aEh5aEh5aEh5aSjy0lHhoKfHQUuKhpcM9t0+UykNLiYeWEg8tJR5aSjy0pDy0pDy0pDy0pDy0dLjn9olSp6KlmuNr1KloqS51KlqqS4WmJbPibldb9vYo9SN9aAJqpm/QVNNOH5pU2ulD00c7fWiiaKcvY6cPXfnb6UNX83b60BW6nf7YVRfb57mZPrZ3czv9sasutsdyO/2xqy62F3I7/bGrLrZncTv9sasutrdwO/2xqy62B3A7/bGrLrZXbzv9sasutqduO/2xqy629207/bGrLrZHbTv9oauuYHvJttMfuuoKtudrO/2hq664oauuYPutttMfuuoKti9qO/2hq65g+5c208f2JG2nP3bVxfYObac/dtXF9vhspz921cX24mynP3bVxfbMbKc/dtXF9rZspz921cX2oGynP3bVxfaKbKc/dtXF9nRspz921cX2XmynP3bVxfZIbKc/dtXF9jJspz921cX2HGynP3bVxfYGbKc/dtXF9vBrpz921cX22munP3bVxfbEa6c/dtXF9q5rp0/TMyxz+dHVpQ7bM/yR/tHVPMXbaPqkvp6+evG3oV+uXi8OyX3Lvoyc/eFOcPtmf3Qp1/AwlVNj4pcUy7pM0kP+L9d4CLncLg+hhPy0Tg73dztXbaRSK1RqE5VapVJrVGrzPGp1ueZWboNPz1oLsNbgfNbbo3Kx+Kf0D7dx+1z6VvKafv5+pr14VDmtLwTZ/I8vBIrMRTtLRYainaUiE9HOUoVHKjIL7SwVGYR2lopMQZ+VWvUhFEVGoJ2lYhPQnlJtJlpqSJ2JlhpSZ6KlhtSZaKkhVXikzkRLDakz0VJDKg8tGQ8tGQ8tZR5ayjy0lHloKfPQ0uE2hCdK5aGlzENLmYeWMg8tZR5aKjy0VHhoqfDQUuGhpcPtI0+UykNLhYeWCg8tFR5aKjS0lBwNLSVHQ0vJ0dBScjS0lJzwSKWhpeRoaCk5GlpKjoaWkuOhJc9DS56HljwPLXkeWjrcrvVEqTy05HloyfPQkuehJc9DS4GHlgIPLQUeWgo8tHS4ze6JUnloKfDQUuChpcBDS4GHliIPLUUeWoo8tBR5aOlwe+QTpfLQUuShpchDS5GHliIPLQkPLQkPLQkPLQkPLR1ua32iVB5aEh5aEh5aEh5aEh5aSjy0BO3avbNUHlqC9uveWarwSOWhJWib7p2l8tAStEH3zlJ5aGkqL++GVB5amsrLuyGVh5am8vJuSOWhpam8vBtSeWiJx8s78Xh5Jx4v78Tj5Z14vLwTj5d34vHyTjxe3onHyzvxeHknHi/vxOPlnXi8vBOPl3fi8fJOPF7eicfLO/F4eSceL+/E4+WdeLy8E4+Xd+Lx8k48Xt6Jx8s78Xh5Jx4v7zSXl7esPzVb0rPUqWipLnUqWqpLnYqW6lKnoqWaVJ3Ly7sudSpaqkudipbqUqeipbpU4ZFKQ0s6l5d3XSoNLelcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQ0lxe3nWpPLQ0l5d3XSoPLc3l5V2XykNLc3l516Xy0NJcXt51qTy0NJeXd10qDy3N5eVdl8pDS3N5edel8tDSXF7edak8tDSXl3ddKg8tzeXlXZfKQ0tzeXnXpfLQEo+Xt/J4eSuPl7fyeHkbj5e38Xh5G4+Xt/F4eZsTHqk0tGQ8Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3sbj5W08Xt7G4+VtPF7exuPlbTxe3na4l3e5Sy2qdalexaX7wAT/KPUj/TB2+hE6fZWHaWmxMdFyWidaNv800YRHauKRqjxSjUdq5pFaaKQe7rl9olRsqtlVKjYBfU5qWXlJS3hi1TwTLTWkCo/UmWipIXUmWmpInYmWGlJnoqWG1JloqS61zERLDakz0VJDKg8tFR5aOtxz+0SpPLRUeGip8NBS4aGlQkNL2dHQUnY0tJQdDS1lR0NL2QmPVBpayo6GlrKjoaXsaGgpOx5a8jy05HloyfPQkuehpcM9t0+UykNLnoeWPA8teR5a8jy0FHhoKfDQUuChpcBDS4d7bp8olYeWAg8tBR5aCjy0FHhoKfLQUuShpchDS5GHlg733D5RKg8tRR5aijy0FHloKfLQkvDQkvDQkvDQkvDQ0uGe2ydK5aEl4aEl4aEl4aEl4aGlxENLiYeWEg8tJR5aOtxz+0SpPLSUeGgp8dBS4qGlxENLykNLykNLykNLykNLh3tuf0qqWXG3qy17e5T6kT40AbXTh6aadvrQpNJOH5o+2ulDE0UzfYOmhHb60JW/nT50NW+nD12h2+mPXXWxfZ7b6Y9ddbH9mNvpj111sX2Tm+ljeyG30x+76mJ7FrfTH7vqYnsLt9Mfu+piewC30x+76mJ79bbTH7vqYnvqttMfu+pie9+20x+76mJ71LbTH7vqYnvJttMfu+pie7620x+66hZsb9Z2+kNX3YLtodpOf+iqW9zQVbdg+5e20x+66hZsn9F2+kNX3YLtB9pMH9vjs53+2FUX24uznf7YVRfbM7Od/thVF9vbsp3+2FUX24Oynf7YVRfbK7Kd/thVF9vTsZ3+2FUX23uxnf7YVRfbI7Gd/thVF9vLsJ3+2FUX23Ownf7YVRfbG7Cd/thVF9vDr53+2FUX22uvnf7YVRfbE6+d/thVF9u7rp3+DlV3ed//dnFwztfTz1r028XZ4r1dNLzMP0tYrxaTxtUx3S6W4B6ufXFpMF9uOX+fxutR1HUQS2pc7NZP9k7z48UfAx6uAT92wOM14McOuPzuAQ/Op3XApbEjqk+3p7PcIz1uca/22nvyy5NaL/aSv2WfDs4+5Nt+rqGUevYh5LI+1bC8bz/v5zp2+jZ2+nns9MvQ6e9gjHdW+ss//vT3X3799Zf/+o9f//bnP/7zl7/99R9fgt2X//MaGUzspsuk3FP1r8tB9t8ujg8FLPkvI/e6Qu74+fLmz09v/nx98+fbmz8/v/nzy3s///W63vHz/Zs//83rN715/aY3r9/05vWb3rx+06fX75eg3BNUOoLU9QT5nqDQExR7gqQnKPUEaU9Qz4zQnhmhPTPCemaE9cwI65kR1jMjrGdGWM+MsJ4ZYT0zwnpmhPXMiNwzI3LPjMg9M+J1r7+lcIP15T/1KUh6glJPkPYEWU9Q7gkqHUGvu4RbQb4nKPQE9cyI0jMjSs+MKD0z4nV/oane3jKX/4xPQbknqHQE+dctbM0o3xUVuqJiV5R0RaWuKO2Ksq6o3BXVNTd819zwG3PD3U6jrcTYIPPvrk7h+R7hgHvEA+4hB9wjHXAPPeAe9vvvkSTc/iqbJN3/MvPlLwWv/yji17+KBO++u/5rTnmPnCzecspSGjndF58+/JnG5/CRT8HKJziwfPzR+YjX24yTlPRpBoUAl1GEy0jgMkpwGSlcRgaXUYbLqKBlFB1cRnB7doTbsyPcnh3h9uwIt2dHuD07wu3ZEW7Pjm/es7/cQ9wB9/AH3GOPnTKbX++Rn9/BJB5wDzngHmnve9jzPfSAe9gB99hjVyiy3qOkF8+jvP8eyR1wjx3WuaZ4+1OOJgutc5Ni6/cxy8NMj5I+MgpwGUW4jHbYcdT59Uu0LsSnmaF7PIcoq+qozytV4wH3kAPuscPurHL/pSx5+LLgeg894B52wD3yzveI6fke5f33MHfAPfbYnUXvO4/LjZ1H19Kq+YFuv52QWgDLJ4LlI2D5JLB8FCwfA8sng+VTsPLJDiwfsP05g+3PGWx/zmD7cwbbnzPY/pzt+DcvWdunl1fnpzevnOEyKmgZFQeXkYfLKMBlBHfKUQQuowSXkcJlZHAZZbiMDt+zg1t7YoMT+zGj4BxcRh4uowCXUYTLSOAySnAZKVxGBpdRRsvIn7AfrS9Hy3/G54xOWGv5PkYPTVtrRsevNR9vnx2WP8M8Z6RwGRlcRhkuo4KWUXBwGXm4jMKpGdnznh0iXEYCl9EJe3ZYq4iPz3UtKFxGBpdRhsuooGUUHVxGHi6jAJfR8Xt2WL8JtVSM8pyRwGWU4DJSuIwMLqMMl1FBy0gcXEYeLqMAl9EJ+5HGNaMX7yJywlrL9zHK8pzR8Wst3ittTM/knxxcRh4uowCXUYTLSOAySnAZ6akZ6fOenQwuowyX0Rl79lpFYniua+rgMvJwGQW4jCJcRgKXUYLLSOEyMriMMlxGcHu2we3ZBrdnG9yebXB7tr15z/56j3TAPfSAe9gB98gH3KO8/x67dNWkfLta9cEvfb3HHjuO+fUeFlv+fKq5rFf7+JxRgMsowmUkcBkluIwULiN7b0Zf75EPuEd5/z126VVp3cMfcI9wwD322J8ac3eXno/WPdIB99AD7mEH3CMfcI/y9nvEXfobWvfwB9wjHHCPeMA95IB7pAPuoQfcww64Rz7gHgesc3/AOvcHrHN/wDr3B6xzf8A69wesc3/AOvcHrHN/wDr3B6zzcMA6Dwes83DAOg8HrPNwwDoPB6zzcMA6Dwes83DAOg8HrPN4wDqPB6zzeMA6jwes83jAOo8HrPN4wDqPB6zzeMA6jwesczlgncsB61wOWOdywDqXA9a5HLDO5YB1LgesczlgncsB6zwdsM7TAes8HbDO0wHrPB2wztMB6zwdsM7TAes8HbDO0wHrXA9Y53rAOtcD1rkesM71gHWuB6xzPWCd6wHrXA9Y53rAOrcD1rkdsM7tgHVuB6xzO2Cd2wHr3A5Y53bAOrcD1uBv+f6efnePr1G+Kyp0RcWuKOmKSl1R2hVlXVG5K6r0RJWuuVG65kbpmhula26UrrlRuuZG6ZobpWtulK65UXrmhjjXFeW7okJXVOyKkq6o1BWlXVHWFZW7orrmhu+aG75rbviuueG75obvmhu+a274rrnhu+aG75obvmtuhK65EbrmRuiaG6FrboSuuRG65kbomhuha26ErrkRuuZG7JobsWtuxK65EbvmRuyaG7FrbsSuuRG75kbsmhuxa25I19yQrrkhXXNDuuaGdM0N6Zob0jU3pGtuSNfckK65kbrmRuqaG6lrbqSuuZG65kbqmhupa26krrmRuuZG6pob2jU3tGtuaNfc0K65oV1zQ7vmhnbNDe2aG9o1N7RrbljX3LCuuWFdc8O65oZ1zQ3rmhvWNTesa25Y19ywrrnRdS4qXeei0nUuKl3notJ1Lipd56LSdS4qXeei0nUuKl3notJ1Lipd56LSdS4qXeei8hvORVP4V/3vDT5H+Xa1z3L/Bb/kP26R3n8Lff8t7P23yO+/RXn3LdJvOCX+3bfw779FeP8t4vtvIe+/RXr/LfT9t7D33yK//xbvX93+/avbv391+/ev7hN+bqVucZxO+LmVUGTNqJTnjCJcRgKXUYLL6ATr/my3jKJzzxkZXEYZLqOCltEJP7fSysjDZRTgMjphz64a5aczfm6lkVGCy0jhMjK4jNB+AiKd8XMr9YzO+LmVRkYeLqMAlxHcni1we7bA7dkn/CRN/QeE0wk/SeNduGXk3dPPZKQTfpKmlZGHyyjAZXTCz9CXdM8oP2ckcBkluIwULiODyyjDZVTQMjrhJ2nqP0OfTvhJmlZGAS6jCJeRwGWU4DJSuIwMLqMMl1FBy8jg9myD27MNbs9+/ZUgLe72lqfF3+nclxe3yEFufwzKQcPjxV/vIG+/Q3r7HfTtd7C33yG//Q7lzXfQ118c2vUO/pN3+BoUeoJiT5C9fQDy2+/w9mni3z5NvH/7HcLb7xDffgd5+x1SxyLy2hP02ZX3h+Uf/sulr7+e4Z2/RXoX71/F8a+quLnbIJgPj5f+4cuvE7734+33f3y8fenIpPz48XmHj7+dJJrGHz++/P6PX51SrNgPH//6+wn7fbz/3R+/LJrb8pEfH+3rbw588uNv5zg56Y8fH3//x9vt0ebnwZEdP778MO+Xf4QvF75+wGK3QU0P3jmatp9ZNSJ8OiJ+OkI+HZE+F7H8I3658HXvRDK9DXV6XKVR5MvNXrdOtIJ8T1DoCYo9QdITlHqCtCfIeoJyT1DPjPDOdUX5rqjQFRW7oqQrKnVFaVfU65mR7XaQkMp3X/r6FpW7okpP1Gu+b0b5ZpRPz1Gvx7CEskal5zF87YKiyxHMjRZDfI567YLSjPJdUaEr6rWue1lQKfkp6nUVbUb5rqjQFfX6XSg5W4/aQnmOkq6o1BWlXVHWjIryFPX6C1O6/DH1fvD4vL5ef6mpGRW7oqQrKnVFbYxhWWeUuud9I/muqJe6zIX1DeoRateo1xmquPVe4p+jcldU6Yl6/QddtfWLxGrlefa+/qNrMyp0RcWuKOmKSl1R2hVlPVG28bzSOntNn/cN2zhR0rTOXvdcU0y6olLPStnwJWhFWVdU7ooqPVEbvgStKN8VFbqiYldU136Yu+ZG7pobuWtulOZ+mF/M+eK7okJXVOyKer2Wc0xrVHqusBt/OMoW16isP0aFjT8GtaJ8V1Toino9hlnLPcqeo6QrKnVFaVeUdUXlrqjSE7X115P1uHL5z+fn5Vv1S0tOz1HSFZW6orQryrqicldU6YnaePNtRW38FW79ysMrcggbb7513gghdkVJV1TqitKuKOuJev3VmuXFUdbTd/HPO314/QWY3xD3+m9oElTXuGDPK/o17/2GOOuMy51xpS/uNff9hjjfGRc642JnnGzEra/sX+Ke9/+cOuO0M84643JnXOmIW/4lX67eWIRO1j+HLf9dnhahxb4w6QtLfWHaF2Z9YbkvrHSFbSz2ZtjrtZ7K+j3C5b/16cxmY6k3w2JfmPSFpY0wc/ew/BymfWGvn5u6fHsNWI6s3NMu9vplb7k05HuYPOHN67e9dljoC4t9YbIRltM9rDxtYK//ztkO074w6wvLfWGlK2zjL56/IW5rnpSyxgX/4m9voTMudsZtTZX7olvivl90LzyVlveS9T7Le0NpXS/314Hlv1/87ccl0LwUNC8DzSuD5lUw8/IONC8PmlcAzSuelJeVh7ye/4bkd9vv/T0v/1z/fDroPnrQfeyg++SD7lOOuU9wB93HH3Sfrf0mPfCgvoiLnXHSGZc647Qzzjrjcmdc6YuLrjPOd8Z1zpfYOV82voCtIep9HSR9jkudcdoZZ51xuS9ONp57lPv+EF9871J8Z9zGeMb72apGe+YG2dCX/P09Lr3427WUvrjkOuN8Z1zojIudcdIZlzrjtDNuYz0ktXucPfNc2povD/Msfddi/Kru7dj9tfFdtDMzUgeXkYfLKMBlFOEyEriMElxGG6tf/f00fjmyftrHNv78pZrCPe7F/rfxhyxdius9TsJzXOqM084464zLnXGlL27jz1ntON8ZFzrjNnYH1cf58sxXWTrjUmecdsZtzBdzd/638Pyd7o2/XbfjSl/c1p/RmnG+My50xsXOuI35YvIQl573s62/pTXjtDPOOuO25kt8jHvxXdnSFRe2/p7WjPOdcaEzLnbGSWfc1ny5n+cu20R+jtPOOOuMy51xW/NFH+Oe6nvY+ntIM853xoXOuNgZJ51xqTNuY77kBz7LITzHWWdc7owrfXFb583ZPca9+Mal74wLnXGxM04641JnnHbGbfFuvnNP/qHL8cV5fLSwcmC0+PxdxK3z40/fR8r9PvriW83lmPtsnU/vfh9/0H3CQfeJB91HDrpPOug+utN9NN/v8+K7sdHeoOfVffJB9ynH3EfcQffZaz8o699FYn7+1mWQcNB94kH3kYPukw66jx50HzvoPvmg++y0H2R3X6fZP79HJfcGPa/u4w+6TzjoPvGg++y0H+To7/eR5/06pYPuowfdxw66Tz7oPuWY+6g76D7+oPvstB/k9LBO0/M5iMY36Hl1HznoPumg++hB97GuvwcGzZ1xpS/OXGec74wLnXGxM04641JnnHbGdc4X65wv1jlftv7e2fhe2Favrsb798NVnH+Ok8641BmnnXHWGZc740pf3NbfO5txvjMudMZ1zpfSOV9K33yJG3//aHkPxI2/f7Tj+rwAou/zAojBdcb5zrjQGRc746QzLnXGaWdcnxdADLkzrvTFRdcZ5zvjQkfc8q/05erXN01ltX5/ADsfP/yo9Wvga7eXeNsr8oMLo4/fMv18iHw+JH0+RD8fYp8PeTkP82p4myU/hZRPh7w+ba6H+M+HhM+HxM+HyOdD0udD9PMh9vmQ108/r9/ELOW7kOc3rrhaBy1/Criv5hi/fnx568e/PrPc7+P9ez8+vPfj43s/Xt778em9H687fnyOTx9v7/34/N6Pf7lqy/rbIiXaj/vI69PCeoj/fEj4fEj8fIh8PiR9PkQ/HfL6KKIekj8f8vLph/XrnuGxOfBjwrz+bnc9xH8+JHw+JH4+RD4fkj4f8vLpLzx8CylPq/L1QUY9JH8+pHw65PXJRT3Efz4kfDJk+Zd9ufL1THuwWXAPpwfL2972VGvExI4Y6YhJHTHaEWMdMbkjpnw+5vWUa8R0zIPSMQ9KxzwoHfOgdMyD0jEPSsc8KB3z4PUX/8v9+MU5+TFmw0WrFeR7gkJPUOwJkp6g9Nmg5V/5y6UbB2157cbz5btTg4/TlvI19HV5LW79EeLycFL65SeL//Cv5Z//949//+WPf/r1L/9Ygr78f//nr3/+5y9/++u3f/7z//337f/zp7//8uuvv/zXf/z33//257/85//8/S//8evf/vzl//eT+/Z//l2D+1nF/+Hr75H9e7L0c8rp64B8+WfWn1P58v/8+q19XSqyiq0/1fj1mph/lnj/Bbhv/0u+fYSUn5OsP3f25X8Jkn9e/qr37Y5qP5vdLg7R/Rxiut0vLOcuYcntX9+cOL/ebvnforpbvkvybo0u+efo4i06Oln+qeuZ2Ee2y/9W1tOur/+TuZ9tveXyEcuTXmvf13uUn79m+/Vi7+xn78P68D9urD9Hvz7Uj/8pLfdeHtbywP4/",
1816
+ "debug_symbols": "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",
1976
1817
  "brillig_names": [
1977
1818
  "get_note_internal",
1978
1819
  "decompose_hint",
@@ -3642,7 +3483,7 @@
3642
3483
  }
3643
3484
  },
3644
3485
  "bytecode": "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",
3645
- "debug_symbols": "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",
3486
+ "debug_symbols": "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",
3646
3487
  "brillig_names": [
3647
3488
  "get_note_internal",
3648
3489
  "decompose_hint",
@@ -3657,24 +3498,58 @@
3657
3498
  "verification_key": "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"
3658
3499
  },
3659
3500
  {
3660
- "name": "compute_note_hash_and_optionally_a_nullifier",
3501
+ "name": "sync_notes",
3661
3502
  "is_unconstrained": true,
3662
3503
  "custom_attributes": [],
3663
3504
  "abi": {
3664
3505
  "error_types": {
3665
- "11091894166229312484": {
3666
- "error_kind": "fmtstring",
3667
- "item_types": [],
3668
- "length": 20
3506
+ "17843811134343075018": {
3507
+ "error_kind": "string",
3508
+ "string": "Stack too deep"
3509
+ }
3510
+ },
3511
+ "parameters": [],
3512
+ "return_type": null
3513
+ },
3514
+ "bytecode": "H4sIAAAAAAAA/7WTyw7CIBBFqcUo0sTEx39MU0y7dOHafyCtLHVRN+766dZkJkyI0QVwEzJMgMNcHoXwKjBKESGCHDEqjAs2Xs7tjDnEqVbBvin5HRijvvhLWH+jkFnk4QPxM50/rJBzmTyfe6F913PTrF8J/z5y+af7y+l//8OzRq9bzCvh/8P4uvfXx/M2ij/SbJGc0ptoOwAqvkT+EvmhJBvn8w+Yb4Svj6KMqNO1tnaNdfZkh8H0dhfwP+KH/QbzqHp4zgQAAA==",
3515
+ "debug_symbols": "bY/RCoMwDEX/Jc99aLrppr8iQ6pGKZRWah0M8d8Xxybd5sslN5xcchfoqJmH2rjeT1BWC1jf6mi8Y7esAppgrDVDna5BboKnFz+N2m12ijpEKDG7CCDX8ZRnfN8bS1DmahX/qESpPrBEVew4nq/HfIE7r1B+8beV7V0HoxtL7+f72bVJl/gY6afWGHxL3RxoK5h0Y60wE0pyLEc/AQ==",
3516
+ "brillig_names": [
3517
+ "sync_notes"
3518
+ ]
3519
+ },
3520
+ {
3521
+ "name": "constructor",
3522
+ "is_unconstrained": false,
3523
+ "custom_attributes": [
3524
+ "private",
3525
+ "initializer"
3526
+ ],
3527
+ "abi": {
3528
+ "error_types": {
3529
+ "14514982005979867414": {
3530
+ "error_kind": "string",
3531
+ "string": "attempt to bit-shift with overflow"
3669
3532
  },
3670
3533
  "16761564377371454734": {
3671
3534
  "error_kind": "string",
3672
3535
  "string": "Array index out of bounds"
3673
3536
  },
3537
+ "17618083556256589634": {
3538
+ "error_kind": "string",
3539
+ "string": "Initialization hash does not match"
3540
+ },
3674
3541
  "17843811134343075018": {
3675
3542
  "error_kind": "string",
3676
3543
  "string": "Stack too deep"
3677
3544
  },
3545
+ "2233873454491509486": {
3546
+ "error_kind": "string",
3547
+ "string": "Initializer address is not the contract deployer"
3548
+ },
3549
+ "2709101749560550278": {
3550
+ "error_kind": "string",
3551
+ "string": "Cannot serialize point at infinity as bytes."
3552
+ },
3678
3553
  "2920182694213909827": {
3679
3554
  "error_kind": "string",
3680
3555
  "string": "attempt to subtract with overflow"
@@ -3683,162 +3558,22 @@
3683
3558
  "error_kind": "string",
3684
3559
  "string": "attempt to add with overflow"
3685
3560
  },
3686
- "8270195893599566439": {
3561
+ "6485997221020871071": {
3687
3562
  "error_kind": "string",
3688
- "string": "Invalid public keys hint for address"
3563
+ "string": "call to assert_max_bit_size"
3564
+ },
3565
+ "7233212735005103307": {
3566
+ "error_kind": "string",
3567
+ "string": "attempt to multiply with overflow"
3689
3568
  }
3690
3569
  },
3691
3570
  "parameters": [
3692
3571
  {
3693
- "name": "contract_address",
3572
+ "name": "inputs",
3694
3573
  "type": {
3695
3574
  "fields": [
3696
3575
  {
3697
- "name": "inner",
3698
- "type": {
3699
- "kind": "field"
3700
- }
3701
- }
3702
- ],
3703
- "kind": "struct",
3704
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
3705
- },
3706
- "visibility": "private"
3707
- },
3708
- {
3709
- "name": "nonce",
3710
- "type": {
3711
- "kind": "field"
3712
- },
3713
- "visibility": "private"
3714
- },
3715
- {
3716
- "name": "storage_slot",
3717
- "type": {
3718
- "kind": "field"
3719
- },
3720
- "visibility": "private"
3721
- },
3722
- {
3723
- "name": "note_type_id",
3724
- "type": {
3725
- "kind": "field"
3726
- },
3727
- "visibility": "private"
3728
- },
3729
- {
3730
- "name": "compute_nullifier",
3731
- "type": {
3732
- "kind": "boolean"
3733
- },
3734
- "visibility": "private"
3735
- },
3736
- {
3737
- "name": "packed_note_content",
3738
- "type": {
3739
- "kind": "array",
3740
- "length": 5,
3741
- "type": {
3742
- "kind": "field"
3743
- }
3744
- },
3745
- "visibility": "private"
3746
- }
3747
- ],
3748
- "return_type": {
3749
- "abi_type": {
3750
- "kind": "array",
3751
- "length": 4,
3752
- "type": {
3753
- "kind": "field"
3754
- }
3755
- },
3756
- "visibility": "public"
3757
- }
3758
- },
3759
- "bytecode": "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",
3760
- "debug_symbols": "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",
3761
- "brillig_names": [
3762
- "compute_note_hash_and_optionally_a_nullifier"
3763
- ]
3764
- },
3765
- {
3766
- "name": "sync_notes",
3767
- "is_unconstrained": true,
3768
- "custom_attributes": [],
3769
- "abi": {
3770
- "error_types": {
3771
- "17843811134343075018": {
3772
- "error_kind": "string",
3773
- "string": "Stack too deep"
3774
- }
3775
- },
3776
- "parameters": [],
3777
- "return_type": null
3778
- },
3779
- "bytecode": "H4sIAAAAAAAA/7WTyw7CIBBFqcUo0sTEx39MU0y7dOHafyCtLHVRN+766dZkJkyI0QVwEzJMgMNcHoXwKjBKESGCHDEqjAs2Xs7tjDnEqVbBvin5HRijvvhLWH+jkFnk4QPxM50/rJBzmTyfe6F913PTrF8J/z5y+af7y+l//8OzRq9bzCvh/8P4uvfXx/M2ij/SbJGc0ptoOwAqvkT+EvmhJBvn8w+Yb4Svj6KMqNO1tnaNdfZkh8H0dhfwP+KH/QbzqHp4zgQAAA==",
3780
- "debug_symbols": "bY/RCoMwDEX/Jc99aLrppr8iQ6pGKZRWah0M8d8Xxybd5sslN5xcchfoqJmH2rjeT1BWC1jf6mi8Y7esAppgrDVDna5BboKnFz+N2m12ijpEKDG7CCDX8ZRnfN8bS1DmahX/qESpPrBEVew4nq/HfIE7r1B+8beV7V0HoxtL7+f72bVJl/gY6afWGHxL3RxoK5h0Y60wE0pyLEc/AQ==",
3781
- "brillig_names": [
3782
- "sync_notes"
3783
- ]
3784
- },
3785
- {
3786
- "name": "constructor",
3787
- "is_unconstrained": false,
3788
- "custom_attributes": [
3789
- "private",
3790
- "initializer"
3791
- ],
3792
- "abi": {
3793
- "error_types": {
3794
- "14514982005979867414": {
3795
- "error_kind": "string",
3796
- "string": "attempt to bit-shift with overflow"
3797
- },
3798
- "16761564377371454734": {
3799
- "error_kind": "string",
3800
- "string": "Array index out of bounds"
3801
- },
3802
- "17618083556256589634": {
3803
- "error_kind": "string",
3804
- "string": "Initialization hash does not match"
3805
- },
3806
- "17843811134343075018": {
3807
- "error_kind": "string",
3808
- "string": "Stack too deep"
3809
- },
3810
- "2233873454491509486": {
3811
- "error_kind": "string",
3812
- "string": "Initializer address is not the contract deployer"
3813
- },
3814
- "2709101749560550278": {
3815
- "error_kind": "string",
3816
- "string": "Cannot serialize point at infinity as bytes."
3817
- },
3818
- "2920182694213909827": {
3819
- "error_kind": "string",
3820
- "string": "attempt to subtract with overflow"
3821
- },
3822
- "5019202896831570965": {
3823
- "error_kind": "string",
3824
- "string": "attempt to add with overflow"
3825
- },
3826
- "6485997221020871071": {
3827
- "error_kind": "string",
3828
- "string": "call to assert_max_bit_size"
3829
- },
3830
- "7233212735005103307": {
3831
- "error_kind": "string",
3832
- "string": "attempt to multiply with overflow"
3833
- }
3834
- },
3835
- "parameters": [
3836
- {
3837
- "name": "inputs",
3838
- "type": {
3839
- "fields": [
3840
- {
3841
- "name": "call_context",
3576
+ "name": "call_context",
3842
3577
  "type": {
3843
3578
  "fields": [
3844
3579
  {
@@ -5447,7 +5182,7 @@
5447
5182
  }
5448
5183
  },
5449
5184
  "bytecode": "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",
5450
- "debug_symbols": "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",
5185
+ "debug_symbols": "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",
5451
5186
  "brillig_names": [
5452
5187
  "get_contract_instance_internal",
5453
5188
  "decompose_hint",
@@ -5467,6 +5202,271 @@
5467
5202
  "directive_to_radix"
5468
5203
  ],
5469
5204
  "verification_key": "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"
5205
+ },
5206
+ {
5207
+ "name": "compute_note_hash_and_optionally_a_nullifier",
5208
+ "is_unconstrained": true,
5209
+ "custom_attributes": [],
5210
+ "abi": {
5211
+ "error_types": {
5212
+ "11091894166229312484": {
5213
+ "error_kind": "fmtstring",
5214
+ "item_types": [],
5215
+ "length": 20
5216
+ },
5217
+ "16761564377371454734": {
5218
+ "error_kind": "string",
5219
+ "string": "Array index out of bounds"
5220
+ },
5221
+ "17843811134343075018": {
5222
+ "error_kind": "string",
5223
+ "string": "Stack too deep"
5224
+ },
5225
+ "2920182694213909827": {
5226
+ "error_kind": "string",
5227
+ "string": "attempt to subtract with overflow"
5228
+ },
5229
+ "5019202896831570965": {
5230
+ "error_kind": "string",
5231
+ "string": "attempt to add with overflow"
5232
+ },
5233
+ "8270195893599566439": {
5234
+ "error_kind": "string",
5235
+ "string": "Invalid public keys hint for address"
5236
+ }
5237
+ },
5238
+ "parameters": [
5239
+ {
5240
+ "name": "contract_address",
5241
+ "type": {
5242
+ "fields": [
5243
+ {
5244
+ "name": "inner",
5245
+ "type": {
5246
+ "kind": "field"
5247
+ }
5248
+ }
5249
+ ],
5250
+ "kind": "struct",
5251
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
5252
+ },
5253
+ "visibility": "private"
5254
+ },
5255
+ {
5256
+ "name": "nonce",
5257
+ "type": {
5258
+ "kind": "field"
5259
+ },
5260
+ "visibility": "private"
5261
+ },
5262
+ {
5263
+ "name": "storage_slot",
5264
+ "type": {
5265
+ "kind": "field"
5266
+ },
5267
+ "visibility": "private"
5268
+ },
5269
+ {
5270
+ "name": "note_type_id",
5271
+ "type": {
5272
+ "kind": "field"
5273
+ },
5274
+ "visibility": "private"
5275
+ },
5276
+ {
5277
+ "name": "compute_nullifier",
5278
+ "type": {
5279
+ "kind": "boolean"
5280
+ },
5281
+ "visibility": "private"
5282
+ },
5283
+ {
5284
+ "name": "packed_note_content",
5285
+ "type": {
5286
+ "kind": "array",
5287
+ "length": 5,
5288
+ "type": {
5289
+ "kind": "field"
5290
+ }
5291
+ },
5292
+ "visibility": "private"
5293
+ }
5294
+ ],
5295
+ "return_type": {
5296
+ "abi_type": {
5297
+ "kind": "array",
5298
+ "length": 4,
5299
+ "type": {
5300
+ "kind": "field"
5301
+ }
5302
+ },
5303
+ "visibility": "public"
5304
+ }
5305
+ },
5306
+ "bytecode": "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",
5307
+ "debug_symbols": "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",
5308
+ "brillig_names": [
5309
+ "compute_note_hash_and_optionally_a_nullifier"
5310
+ ]
5311
+ },
5312
+ {
5313
+ "name": "process_log",
5314
+ "is_unconstrained": true,
5315
+ "custom_attributes": [],
5316
+ "abi": {
5317
+ "error_types": {
5318
+ "16761564377371454734": {
5319
+ "error_kind": "string",
5320
+ "string": "Array index out of bounds"
5321
+ },
5322
+ "16954218183513903507": {
5323
+ "error_kind": "string",
5324
+ "string": "Attempted to read past end of BoundedVec"
5325
+ },
5326
+ "17843811134343075018": {
5327
+ "error_kind": "string",
5328
+ "string": "Stack too deep"
5329
+ },
5330
+ "2920182694213909827": {
5331
+ "error_kind": "string",
5332
+ "string": "attempt to subtract with overflow"
5333
+ },
5334
+ "5019202896831570965": {
5335
+ "error_kind": "string",
5336
+ "string": "attempt to add with overflow"
5337
+ },
5338
+ "6753155520859132764": {
5339
+ "error_kind": "string",
5340
+ "string": "Failed to deliver note"
5341
+ },
5342
+ "8270195893599566439": {
5343
+ "error_kind": "string",
5344
+ "string": "Invalid public keys hint for address"
5345
+ },
5346
+ "8861757336002045335": {
5347
+ "error_kind": "fmtstring",
5348
+ "item_types": [
5349
+ {
5350
+ "kind": "integer",
5351
+ "sign": "unsigned",
5352
+ "width": 32
5353
+ },
5354
+ {
5355
+ "kind": "integer",
5356
+ "sign": "unsigned",
5357
+ "width": 32
5358
+ },
5359
+ {
5360
+ "kind": "field"
5361
+ }
5362
+ ],
5363
+ "length": 99
5364
+ },
5365
+ "9862881900111276825": {
5366
+ "error_kind": "fmtstring",
5367
+ "item_types": [
5368
+ {
5369
+ "kind": "field"
5370
+ }
5371
+ ],
5372
+ "length": 35
5373
+ }
5374
+ },
5375
+ "parameters": [
5376
+ {
5377
+ "name": "log_plaintext",
5378
+ "type": {
5379
+ "fields": [
5380
+ {
5381
+ "name": "storage",
5382
+ "type": {
5383
+ "kind": "array",
5384
+ "length": 18,
5385
+ "type": {
5386
+ "kind": "field"
5387
+ }
5388
+ }
5389
+ },
5390
+ {
5391
+ "name": "len",
5392
+ "type": {
5393
+ "kind": "integer",
5394
+ "sign": "unsigned",
5395
+ "width": 32
5396
+ }
5397
+ }
5398
+ ],
5399
+ "kind": "struct",
5400
+ "path": "std::collections::bounded_vec::BoundedVec"
5401
+ },
5402
+ "visibility": "private"
5403
+ },
5404
+ {
5405
+ "name": "tx_hash",
5406
+ "type": {
5407
+ "kind": "field"
5408
+ },
5409
+ "visibility": "private"
5410
+ },
5411
+ {
5412
+ "name": "unique_note_hashes_in_tx",
5413
+ "type": {
5414
+ "fields": [
5415
+ {
5416
+ "name": "storage",
5417
+ "type": {
5418
+ "kind": "array",
5419
+ "length": 64,
5420
+ "type": {
5421
+ "kind": "field"
5422
+ }
5423
+ }
5424
+ },
5425
+ {
5426
+ "name": "len",
5427
+ "type": {
5428
+ "kind": "integer",
5429
+ "sign": "unsigned",
5430
+ "width": 32
5431
+ }
5432
+ }
5433
+ ],
5434
+ "kind": "struct",
5435
+ "path": "std::collections::bounded_vec::BoundedVec"
5436
+ },
5437
+ "visibility": "private"
5438
+ },
5439
+ {
5440
+ "name": "first_nullifier_in_tx",
5441
+ "type": {
5442
+ "kind": "field"
5443
+ },
5444
+ "visibility": "private"
5445
+ },
5446
+ {
5447
+ "name": "recipient",
5448
+ "type": {
5449
+ "fields": [
5450
+ {
5451
+ "name": "inner",
5452
+ "type": {
5453
+ "kind": "field"
5454
+ }
5455
+ }
5456
+ ],
5457
+ "kind": "struct",
5458
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
5459
+ },
5460
+ "visibility": "private"
5461
+ }
5462
+ ],
5463
+ "return_type": null
5464
+ },
5465
+ "bytecode": "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",
5466
+ "debug_symbols": "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",
5467
+ "brillig_names": [
5468
+ "process_log"
5469
+ ]
5470
5470
  }
5471
5471
  ],
5472
5472
  "outputs": {
@@ -5785,6 +5785,33 @@
5785
5785
  "kind": "struct",
5786
5786
  "path": "EcdsaRAccount::entrypoint_abi"
5787
5787
  },
5788
+ {
5789
+ "fields": [
5790
+ {
5791
+ "name": "parameters",
5792
+ "type": {
5793
+ "fields": [
5794
+ {
5795
+ "name": "inner_hash",
5796
+ "type": {
5797
+ "kind": "field"
5798
+ }
5799
+ }
5800
+ ],
5801
+ "kind": "struct",
5802
+ "path": "EcdsaRAccount::verify_private_authwit_parameters"
5803
+ }
5804
+ },
5805
+ {
5806
+ "name": "return_type",
5807
+ "type": {
5808
+ "kind": "field"
5809
+ }
5810
+ }
5811
+ ],
5812
+ "kind": "struct",
5813
+ "path": "EcdsaRAccount::verify_private_authwit_abi"
5814
+ },
5788
5815
  {
5789
5816
  "fields": [
5790
5817
  {
@@ -5823,33 +5850,6 @@
5823
5850
  ],
5824
5851
  "kind": "struct",
5825
5852
  "path": "EcdsaRAccount::constructor_abi"
5826
- },
5827
- {
5828
- "fields": [
5829
- {
5830
- "name": "parameters",
5831
- "type": {
5832
- "fields": [
5833
- {
5834
- "name": "inner_hash",
5835
- "type": {
5836
- "kind": "field"
5837
- }
5838
- }
5839
- ],
5840
- "kind": "struct",
5841
- "path": "EcdsaRAccount::verify_private_authwit_parameters"
5842
- }
5843
- },
5844
- {
5845
- "name": "return_type",
5846
- "type": {
5847
- "kind": "field"
5848
- }
5849
- }
5850
- ],
5851
- "kind": "struct",
5852
- "path": "EcdsaRAccount::verify_private_authwit_abi"
5853
5853
  }
5854
5854
  ]
5855
5855
  }
@@ -5943,19 +5943,19 @@
5943
5943
  "path": "std/field/bn254.nr",
5944
5944
  "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\nglobal TWO_POW_64: Field = 0x10000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(mut x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 64 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low_lower_64 = (x as u64) as Field;\n x = (x - low_lower_64) / TWO_POW_64;\n let low_upper_64 = (x as u64) as Field;\n\n let high = (x - low_upper_64) / TWO_POW_64;\n let low = low_upper_64 * TWO_POW_64 + low_lower_64;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n /// Safety: borrow is enforced to be boolean due to its type.\n /// if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n /// if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n /// Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n /// Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n /// Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n /// Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"
5945
5945
  },
5946
- "182": {
5946
+ "183": {
5947
5947
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
5948
5948
  "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"
5949
5949
  },
5950
- "183": {
5950
+ "184": {
5951
5951
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/array/subbvec.nr",
5952
5952
  "source": "use crate::utils::array;\n\n/// Returns `DST_MAX_LEN` elements from a source BoundedVec, starting at `offset`. `offset` must not be larger than the\n/// original length, and `DST_LEN` must not be larger than the total number of elements past `offset` (including the\n/// zeroed elements past `len()`).\n///\n/// Only elements at the beginning of the vector can be removed: it is not possible to also remove elements at the end\n/// of the vector by passing a value for `DST_LEN` that is smaller than `len() - offset`.\n///\n/// Examples:\n/// ```\n/// let foo = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n/// assert_eq(subbvec(foo, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n///\n/// let bar: BoundedVec<_, 1> = subbvec(foo, 2); // fails - we can't return just 1 element since 3 remain\n/// let baz: BoundedVec<_, 10> = subbvec(foo, 3); // fails - we can't return 10 elements since only 7 remain\n/// ```\npub fn subbvec<T, let SRC_MAX_LEN: u32, let DST_MAX_LEN: u32>(\n vec: BoundedVec<T, SRC_MAX_LEN>,\n offset: u32,\n) -> BoundedVec<T, DST_MAX_LEN> {\n // from_parts_unchecked does not verify that the elements past len are zeroed, but that is not an issue in our case\n // because we're constructing the new storage array as a subarray of the original one (which should have zeroed\n // storage past len), guaranteeing correctness. This is because `subarray` does not allow extending arrays past\n // their original length.\n BoundedVec::from_parts_unchecked(array::subarray(vec.storage(), offset), vec.len() - offset)\n}\n\nmod test {\n use super::subbvec;\n\n #[test]\n unconstrained fn subbvec_empty() {\n let bvec = BoundedVec::<Field, 0>::from_array([]);\n assert_eq(subbvec(bvec, 0), bvec);\n }\n\n #[test]\n unconstrained fn subbvec_complete() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n assert_eq(subbvec(bvec, 0), bvec);\n\n let smaller_capacity = BoundedVec::<_, 5>::from_array([1, 2, 3, 4, 5]);\n assert_eq(subbvec(bvec, 0), smaller_capacity);\n }\n\n #[test]\n unconstrained fn subbvec_partial() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n assert_eq(subbvec(bvec, 2), BoundedVec::<_, 8>::from_array([3, 4, 5]));\n assert_eq(subbvec(bvec, 2), BoundedVec::<_, 3>::from_array([3, 4, 5]));\n }\n\n #[test]\n unconstrained fn subbvec_into_empty() {\n let bvec: BoundedVec<_, 10> = BoundedVec::from_array([1, 2, 3, 4, 5]);\n assert_eq(subbvec(bvec, 5), BoundedVec::<_, 5>::from_array([]));\n }\n\n #[test(should_fail)]\n unconstrained fn subbvec_offset_past_len() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n let _: BoundedVec<_, 1> = subbvec(bvec, 6);\n }\n\n #[test(should_fail)]\n unconstrained fn subbvec_insufficient_dst_len() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n // We're not providing enough space to hold all of the items inside the original BoundedVec. subbvec can cause\n // for the capacity to reduce, but not the length (other than by len - offset).\n let _: BoundedVec<_, 1> = subbvec(bvec, 2);\n }\n\n #[test(should_fail_with = \"DST_LEN too large for offset\")]\n unconstrained fn subbvec_dst_len_causes_enlarge() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n // subbvec does not supprt capacity increases\n let _: BoundedVec<_, 11> = subbvec(bvec, 0);\n }\n\n #[test(should_fail_with = \"DST_LEN too large for offset\")]\n unconstrained fn subbvec_dst_len_too_large_for_offset() {\n let bvec = BoundedVec::<_, 10>::from_array([1, 2, 3, 4, 5]);\n\n // This effectively requests a capacity increase, since there'd be just one element plus the 5 empty slots,\n // which is less than 7.\n let _: BoundedVec<_, 7> = subbvec(bvec, 4);\n }\n}\n"
5953
5953
  },
5954
- "184": {
5954
+ "185": {
5955
5955
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/bytes.nr",
5956
5956
  "source": "use crate::oracle::random::random;\n\n/// Converts the input bytes into an array of fields. A Field is ~254 bits meaning that each field can store 31 whole bytes.\n///\n/// The input bytes are chunked into chunks of 31 bytes. Each 31-byte chunk is viewed as big-endian, and is converted into a Field. If the last chunk\n/// is less than 31 bytes long, then only the relevant bytes are considered.\n/// For example, [1, 10, 3] is encoded as [1 * 256^2 + 10 * 256 + 3]\n/// Note: ceil(N / 31) = (N + 30) / 31\npub fn be_bytes_31_to_fields<let N: u32>(bytes: [u8; N]) -> [Field; (N + 30) / 31] {\n let mut fields = [0; (N + 30) / 31];\n\n // There are N / 31 whole fields that can be populated.\n for i in 0..N / 31 {\n let mut field = 0;\n for j in 0..31 {\n // Shift the existing value left by 8 bits and add the new byte\n field = field * 256 + bytes[i * 31 + j] as Field;\n }\n fields[i] = field;\n }\n\n // Note: if 31 divides N, then this loop does not execute.\n // ceil(N/31) - floor(N/31) = 1, unless 31 divides N, in which case it's 0.\n for _ in 0..((N + 30) / 31) - (N / 31) {\n let mut final_field = 0;\n let final_field_idx = fields.len() - 1;\n let final_offset = final_field_idx * 31;\n // N - ((N / 31) * 31) = N - floor(N/31) * 31 = the number of bytes to go in the final field.\n for j in 0..N - ((N / 31) * 31) {\n // Shift the existing value left by 8 bits and add the new byte\n final_field = final_field * 256 + bytes[final_offset + j] as Field;\n }\n\n fields[final_field_idx] = final_field;\n }\n\n fields\n}\n\npub fn le_bytes_31_to_fields<let N: u32>(bytes: [u8; N]) -> [Field; (N + 30) / 31] {\n let mut fields = [0; (N + 30) / 31];\n\n // There are N / 31 whole fields that can be populated.\n for i in 0..N / 31 {\n let mut field = 0;\n for j in 0..31 {\n let k = 31 - j - 1; // iterate in reverse.\n // Shift the existing value left by 8 bits and add the new byte\n field = field * 256 + bytes[i * 31 + k] as Field;\n }\n fields[i] = field;\n }\n\n // Note: if 31 divides N, then this loop does not execute.\n // ceil(N/31) - floor(N/31) = 1, unless 31 divides N, in which case it's 0.\n for _ in 0..((N + 30) / 31) - (N / 31) {\n let mut final_field = 0;\n let final_field_idx = fields.len() - 1;\n let final_offset = final_field_idx * 31;\n // N - ((N / 31) * 31) = N - floor(N/31) * 31 = the number of bytes to go in the final field.\n for j in 0..N - ((N / 31) * 31) {\n let k = (N - ((N / 31) * 31)) - j - 1; // iterate in reverse.\n // Shift the existing value left by 8 bits and add the new byte\n final_field = final_field * 256 + bytes[final_offset + k] as Field;\n }\n fields[final_field_idx] = final_field;\n }\n\n fields\n}\n\n/// Converts an input array of fields into a single array of bytes.\n/// Each input field must contain only 31 bytes (this is constrained to be so).\n/// Each field is converted into 31 big-endian bytes, and the resulting 31-byte\n/// chunks are concatenated back together in the order of the original fields.\n///\n/// It appears that the original author of this function wants to give the caller some control\n/// over the number of bytes that are returned: the final field can be mapped to fewer than 31 bytes,\n/// based on the caller's choice of M.\n/// Given the input is N fields, and each field (except the last) is mapped to 31 bytes,\n/// we definitely need M > (N - 1) * 31 to cover those first (N - 1) fields. Hence the static assertion.\n/// TODO: this is the same as the \"le\" version of this function, save for the `field.to_be_bytes()` calls. I tried passing the conversion function in as a parameter, to reduce code duplication, but couldn't get it to work.\npub fn fields_to_be_bytes_31<let N: u32, let M: u32>(fields: [Field; N]) -> [u8; M] {\n let mut bytes = [0; M];\n\n std::static_assert(M > (N - 1) * 31, \"Not enough output bytes specified\");\n // We make this assertion to keep the logic simpler:\n std::static_assert(N * 31 >= M, \"Too many output bytes specified.\");\n\n for i in 0..N - 1 {\n let field = fields[i];\n\n // We expect that the field contains at most 31 bytes of information.\n field.assert_max_bit_size::<248>();\n\n // Now we can safely convert the field to 31 bytes.\n let field_as_bytes: [u8; 31] = field.to_be_bytes();\n\n for j in 0..31 {\n bytes[i * 31 + j] = field_as_bytes[j];\n }\n }\n\n let final_field = fields[N - 1];\n final_field.assert_max_bit_size::<8 * (M - ((N - 1) * 31))>();\n\n let final_field_as_bytes: [u8; M - ((N - 1) * 31)] = final_field.to_be_bytes();\n\n let start_index = (N - 1) * 31;\n for j in 0..M - ((N - 1) * 31) {\n bytes[start_index + j] = final_field_as_bytes[j];\n }\n\n bytes\n}\n\n/// Converts an input array of fields into a single array of bytes.\n/// Each input field must contain only 31 bytes (this is constrained to be so).\n/// Each field is converted into 31 little-endian bytes, and the resulting 31-byte\n/// chunks are concatenated back together in the order of the original fields. You'll\n/// end up with quite a strange ordering of bytes if you use this particular function.\npub fn fields_to_le_bytes_31<let N: u32, let M: u32>(fields: [Field; N]) -> [u8; M] {\n let mut bytes = [0; M];\n\n std::static_assert(M > (N - 1) * 31, \"Not enough output bytes specified\");\n // We make this assertion to keep the logic simpler:\n std::static_assert(N * 31 >= M, \"Too many output bytes specified.\");\n\n for i in 0..N - 1 {\n let field = fields[i];\n\n // We expect that the field contains at most 31 bytes of information.\n field.assert_max_bit_size::<248>();\n\n // Now we can safely convert the field to 31 bytes.\n let field_as_bytes: [u8; 31] = field.to_le_bytes();\n\n for j in 0..31 {\n bytes[i * 31 + j] = field_as_bytes[j];\n }\n }\n\n let final_field = fields[N - 1];\n final_field.assert_max_bit_size::<8 * (M - ((N - 1) * 31))>();\n\n let final_field_as_bytes: [u8; M - ((N - 1) * 31)] = final_field.to_le_bytes();\n\n let start_index = (N - 1) * 31;\n for j in 0..M - ((N - 1) * 31) {\n bytes[start_index + j] = final_field_as_bytes[j];\n }\n\n bytes\n}\n\n/// Converts an input array of fields into a single array of bytes.\n/// Each field is converted to a 32-byte big-endian array.\n/// Since a field is ~254 bits, you'll end up with a subtle 2-bit \"gap\" at the big end,\n/// every 32 bytes. Be careful that such a gap doesn't leak information!\npub fn fields_to_be_bytes_32<let N: u32>(fields: [Field; N]) -> [u8; 32 * N] {\n let mut bytes = [0; 32 * N];\n\n for i in 0..N {\n let field = fields[i];\n let field_as_bytes: [u8; 32] = field.to_be_bytes();\n\n for j in 0..32 {\n bytes[i * 32 + j] = field_as_bytes[j];\n }\n }\n\n bytes\n}\n\nunconstrained fn byte_to_bits(byte: u8) -> [u1; 8] {\n let mut mut_byte = byte;\n let mut bits: [u1; 8] = [0; 8];\n for i in 0..8 {\n bits[i] = (mut_byte & 1) as u1;\n mut_byte >>= 1;\n }\n bits\n}\n\n/// Returns as many random bytes as specified through N.\npub unconstrained fn get_random_bytes<let N: u32>() -> [u8; N] {\n let mut bytes = [0; N];\n let mut idx = 32;\n let mut randomness = [0; 32];\n for i in 0..N {\n if idx == 32 {\n randomness = random().to_be_bytes();\n idx = 1; // Skip the first byte as it's always 0.\n }\n bytes[i] = randomness[idx];\n idx += 1;\n }\n bytes\n}\n\n/// Returns as many random bits as specified through N.\nunconstrained fn get_random_bits<let N: u32>() -> [u1; N] {\n // Note: (N + 7) / 8 = ceil(N / 8)\n let bytes = get_random_bytes::<(N + 7) / 8>();\n let mut bits: [u1; N] = [0; N];\n for i in 0..bytes.len() - 1 {\n let mut byte = bytes[i];\n for j in 0..8 {\n let bit_idx = i * 8 + j;\n bits[bit_idx] = (byte & 1) as u1;\n byte >>= 1;\n }\n }\n\n // N - ((N / 8) * 8) = N - floor(N/8) * 8 = the number of bits remaining.\n let byte_idx = bytes.len() - 1;\n let mut byte = bytes[byte_idx];\n for j in 0..N - ((N / 8) * 8) {\n let bit_idx = (byte_idx) * 8 + j;\n bits[bit_idx] = (byte & 1) as u1;\n byte >>= 1;\n }\n\n bits\n}\n\n/// Returns random bits, in chunks, according to the provided numeric generics.\nunconstrained fn get_chunks_of_random_bits<let NUM_CHUNKS: u32, let NUM_BITS: u32>() -> [[u1; NUM_BITS]; NUM_CHUNKS] {\n let random_bits = get_random_bits::<NUM_CHUNKS * NUM_BITS>();\n let mut chunks: [[u1; NUM_BITS]; NUM_CHUNKS] = [[0; NUM_BITS]; NUM_CHUNKS];\n for i in 0..NUM_CHUNKS {\n let mut chunk: [u1; NUM_BITS] = [0; NUM_BITS];\n for j in 0..NUM_BITS {\n chunk[j] = random_bits[i * NUM_BITS + j];\n }\n chunks[i] = chunk;\n }\n chunks\n}\n\n/**\n * Helper fn for be/le_bytes_to_padded_fields() fns.\n */\nfn pad_31_byte_fields_with_random_bits<let N: u32>(input: [Field; N]) -> [Field; N] {\n /// Safety: we can't constrain whether or not the returned bits are actually random;\n /// we can only rely on it being in the caller's best interest.\n let chunks_of_random_bits = unsafe { get_chunks_of_random_bits::<((N + 30) / 31), 6>() };\n let mut fields = input;\n // We push the random bits to the \"big end\" of each field\n let TWO_POW_248 = 0x100000000000000000000000000000000000000000000000000000000000000;\n for i in 0..fields.len() {\n let mut shift = TWO_POW_248;\n for j in 0..5 {\n fields[i] += shift * chunks_of_random_bits[i][j] as Field;\n shift *= 2;\n }\n\n // This might overflow the field modulus, so we need to be careful.\n // By this point, shift = 2 ^ 253, so will populate the 254th bit (counting from 1)\n let field_with_254th_bit = fields[i] + shift * chunks_of_random_bits[i][6 - 1] as Field;\n\n // Expensive comparison (one for each field), but it's important -- if we want to hide that we were\n // working with bytes -- that we include the 254th random bit when it fits.\n fields[i] = if (fields[i].lt(field_with_254th_bit)) {\n field_with_254th_bit\n } else {\n fields[i]\n };\n }\n fields\n}\n\n/**\n * The above functions be_bytes_31_to_fields and le_bytes_31_to_fields have a privacy-leakage problem:\n * they result in fields which are all 248-bits instead of 254-bits.\n * That means if the above functions are used to convert a ciphertext from bytes to\n * fields, it leaks (with very high probability) to all observers of the log that the\n * ciphertext was created with a \"bit twiddly\" encryption scheme like AES.\n * This reduces privacy sets for all apps.\n *\n * This function seeks to \"pad\" those remaining 6 bits with randomness, so that all\n * encrypted logs look even more similar (full fields of 254-bits of random-looking\n * information). Of course, this adds some extra constraints, unfortunately.\n */\npub fn le_bytes_to_padded_fields<let N: u32>(input: [u8; N]) -> [Field; (N + 30) / 31] {\n let mut fields = le_bytes_31_to_fields(input);\n pad_31_byte_fields_with_random_bits(fields)\n}\n\npub fn be_bytes_to_padded_fields<let N: u32>(input: [u8; N]) -> [Field; (N + 30) / 31] {\n let mut fields = be_bytes_31_to_fields(input);\n pad_31_byte_fields_with_random_bits(fields)\n}\n\nmod test {\n use crate::utils::bytes::{\n be_bytes_31_to_fields, fields_to_be_bytes_31, fields_to_le_bytes_31, le_bytes_31_to_fields,\n };\n\n // BE BYTES\n\n #[test]\n fn test_be_bytes_31_to_1_field() {\n let input = [\n 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,\n ];\n let output = be_bytes_31_to_fields(input);\n\n assert_eq(output[0], 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f);\n }\n\n #[test]\n fn test_1_field_to_be_bytes_31() {\n let input = [0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f];\n let output: [u8; 31] = fields_to_be_bytes_31(input);\n\n assert_eq(\n output,\n [\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 26, 27, 28, 29, 30, 31,\n ],\n );\n }\n\n #[test]\n fn test_3_small_fields_to_be_bytes_31() {\n let input = [1, 2, 3];\n let output: [u8; 93] = fields_to_be_bytes_31(input);\n\n // Each field should occupy 31 bytes with the non-zero value being placed in the last one.\n assert_eq(\n output,\n [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 3,\n ],\n );\n }\n\n #[test]\n fn test_3_small_fields_to_fewer_be_bytes() {\n let input = [1, 2, 3];\n let output: [u8; 63] = fields_to_be_bytes_31(input);\n println(f\"output: {output}\");\n\n // First 2 fields should occupy 31 bytes with the non-zero value being placed in the last one while the last\n // field should occupy 1 byte. There is not information destruction here because the last field fits into\n // 1 byte.\n assert_eq(\n output,\n [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 2, 3,\n ],\n );\n }\n\n #[test]\n fn test_be_bytes_31_to_2_fields() {\n let input = [\n 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,\n 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n ];\n let output = be_bytes_31_to_fields(input);\n\n assert_eq(output[0], 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f);\n assert_eq(output[1], 0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b);\n }\n\n #[test]\n fn test_2_fields_to_be_bytes_31() {\n let input = [\n 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f,\n 0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b,\n ];\n let output: [u8; 62] = fields_to_be_bytes_31(input);\n\n assert_eq(\n output,\n [\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,\n 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n ],\n );\n }\n\n #[test]\n fn test_large_random_be_bytes_31_input_to_fields_and_back(input: [u8; 128]) {\n let output = be_bytes_31_to_fields(input);\n let input_back: [u8; 128] = fields_to_be_bytes_31(output);\n\n assert_eq(input, input_back);\n }\n\n // I need to get an array of random values lower than 2^248 on input and since there is no u248 type and modulo\n // operation is not supported on a Field (to do field % 2^248), I will take multiple smaller values and combine\n // them to get a value lower than 2^248.\n #[test]\n fn test_large_random_input_to_be_bytes_31_and_back(\n input1: [u64; 5],\n input2: [u64; 5],\n input3: [u64; 5],\n input4: [u32; 5],\n input5: [u16; 5],\n input6: [u8; 5],\n ) {\n let mut input = [0; 5];\n for i in 0..5 {\n input[i] = (input1[i] as Field * 2.pow_32(184))\n + (input2[i] as Field * 2.pow_32(120))\n + (input3[i] as Field * 2.pow_32(56))\n + (input4[i] as Field * 2.pow_32(24))\n + (input5[i] as Field * 2.pow_32(8))\n + input6[i] as Field;\n }\n\n let output: [u8; 155] = fields_to_be_bytes_31(input);\n let input_back = be_bytes_31_to_fields(output);\n\n assert_eq(input, input_back);\n }\n\n #[test(should_fail_with = \"call to assert_max_bit_size\")]\n fn test_too_few_destination_be_bytes() {\n // We should get an error here because first field gets converted to 31 bytes and the second field needs\n // at least 2 bytes but we provide it with 1.\n let input = [1, 256];\n let _ignored_result: [u8; 32] = fields_to_be_bytes_31(input);\n }\n\n #[test(should_fail_with = \"call to assert_max_bit_size\")]\n fn test_fields_to_be_bytes_31_value_too_large() {\n let input = [2.pow_32(248)]; // this number is 1 bit larger than 31 bytes.\n let _ignored_result: [u8; 31] = fields_to_be_bytes_31(input);\n }\n\n #[test]\n fn test_fields_to_be_bytes_31_max_value() {\n let input = [2.pow_32(248) - 1];\n let result: [u8; 31] = fields_to_be_bytes_31(input);\n\n // We check that all the bytes were set to max value (255)\n for i in 0..31 {\n assert_eq(result[i], 255);\n }\n }\n\n // LE BYTES\n\n #[test]\n fn test_le_bytes_31_to_1_field() {\n let input = [\n 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10,\n 9, 8, 7, 6, 5, 4, 3, 2, 1,\n ];\n let output = le_bytes_31_to_fields(input);\n\n assert_eq(output[0], 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f);\n }\n\n #[test]\n fn test_1_field_to_le_bytes_31() {\n let input = [0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f];\n let output: [u8; 31] = fields_to_le_bytes_31(input);\n\n assert_eq(\n output,\n [\n 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11,\n 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,\n ],\n );\n }\n\n #[test]\n fn test_3_small_fields_to_le_bytes_31() {\n let input = [1, 2, 3];\n let output: [u8; 93] = fields_to_le_bytes_31(input);\n\n // Each field should occupy 31 bytes with the non-zero value being placed in the last one.\n assert_eq(\n output,\n [\n 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n );\n }\n\n #[test]\n fn test_3_small_fields_to_fewer_le_bytes() {\n let input = [1, 2, 3];\n let output: [u8; 63] = fields_to_le_bytes_31(input);\n\n // First 2 fields should occupy 31 bytes with the non-zero value being placed in the last one while the last\n // field should occupy 1 byte. There is not information destruction here because the last field fits into\n // 1 byte.\n assert_eq(\n output,\n [\n 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 3,\n ],\n );\n }\n\n #[test]\n fn test_le_bytes_31_to_2_fields() {\n let input = [\n 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38,\n 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16,\n 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,\n ];\n let output = le_bytes_31_to_fields(input);\n\n assert_eq(output[0], 0x1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b);\n assert_eq(output[1], 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c);\n }\n\n #[test]\n fn test_2_fields_to_le_bytes_31() {\n let input = [\n 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f,\n 0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b,\n ];\n let output: [u8; 62] = fields_to_le_bytes_31(input);\n\n assert_eq(\n output,\n [\n 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11,\n 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47,\n 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 0, 0, 0,\n ],\n );\n }\n\n #[test]\n fn test_large_random_le_bytes_input_to_fields_and_back(input: [u8; 128]) {\n let output = le_bytes_31_to_fields(input);\n let input_back: [u8; 128] = fields_to_le_bytes_31(output);\n\n assert_eq(input, input_back);\n }\n\n // I need to get an array of random values lower than 2^248 on input and since there is no u248 type and modulo\n // operation is not supported on a Field (to do field % 2^248), I will take multiple smaller values and combine\n // them to get a value lower than 2^248.\n #[test]\n fn test_large_random_input_to_le_bytes_and_back(\n input1: [u64; 5],\n input2: [u64; 5],\n input3: [u64; 5],\n input4: [u32; 5],\n input5: [u16; 5],\n input6: [u8; 5],\n ) {\n let mut input = [0; 5];\n for i in 0..5 {\n input[i] = (input1[i] as Field * 2.pow_32(184))\n + (input2[i] as Field * 2.pow_32(120))\n + (input3[i] as Field * 2.pow_32(56))\n + (input4[i] as Field * 2.pow_32(24))\n + (input5[i] as Field * 2.pow_32(8))\n + input6[i] as Field;\n }\n\n let output: [u8; 155] = fields_to_le_bytes_31(input);\n let input_back = le_bytes_31_to_fields(output);\n\n assert_eq(input, input_back);\n }\n\n #[test(should_fail_with = \"call to assert_max_bit_size\")]\n fn test_too_few_destination_le_bytes() {\n // We should get an error here because first field gets converted to 31 bytes and the second field needs\n // at least 2 bytes but we provide it with 1.\n let input = [1, 256];\n let _ignored_result: [u8; 32] = fields_to_le_bytes_31(input);\n }\n\n #[test(should_fail_with = \"call to assert_max_bit_size\")]\n fn test_fields_to_le_bytes_31_value_too_large() {\n let input = [2.pow_32(248)];\n let _ignored_result: [u8; 31] = fields_to_le_bytes_31(input);\n }\n\n #[test]\n fn test_fields_to_le_bytes_31_max_value() {\n let input = [2.pow_32(248) - 1];\n let result: [u8; 31] = fields_to_le_bytes_31(input);\n\n // We check that all the bytes were set to max value (255)\n for i in 0..31 {\n assert_eq(result[i], 255);\n }\n }\n}\n"
5957
5957
  },
5958
- "188": {
5958
+ "189": {
5959
5959
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/point.nr",
5960
5960
  "source": "use crate::utils::field::sqrt;\nuse dep::protocol_types::point::Point;\n\n// I am storing the modulus minus 1 divided by 2 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field =\n 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a point to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(p: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!p.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = p.x.to_be_bytes();\n\n if get_sign_of_point(p) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\n/**\n * Returns: true if p.y <= MOD_DIV_2, else false.\n */\npub fn get_sign_of_point(p: Point) -> bool {\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n !BN254_FR_MODULUS_DIV_2.lt(p.y)\n}\n\npub fn point_from_x_coord(x: Field) -> Point {\n // y ^ 2 = x ^ 3 - 17\n let rhs = x * x * x - 17;\n let y = sqrt(rhs).unwrap();\n Point { x, y, is_infinite: false }\n}\n\nmod test {\n use crate::utils::point::point_to_bytes;\n use dep::protocol_types::point::Point;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122,\n 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115,\n ];\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false,\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169,\n 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181,\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"
5961
5961
  },
@@ -5967,19 +5967,19 @@
5967
5967
  "path": "std/hash/mod.nr",
5968
5968
  "source": "pub mod poseidon;\npub mod poseidon2;\npub mod keccak;\npub mod sha256;\npub mod sha512;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\nuse crate::uint128::U128;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars)[0]\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n /// Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher<H>\nwhere\n H: Hasher,\n{\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
5969
5969
  },
5970
- "243": {
5970
+ "244": {
5971
5971
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr",
5972
5972
  "source": "use crate::{point::Point, traits::{Deserialize, Empty, Serialize}};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\npub struct KeyValidationRequest {\n pub pk_m: Point,\n pub sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [self.pk_m.x, self.pk_m.y, self.pk_m.is_infinite as Field, self.sk_app]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool },\n sk_app: fields[3],\n }\n }\n}\n"
5973
5973
  },
5974
- "250": {
5974
+ "251": {
5975
5975
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
5976
5976
  "source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, ToPoint, TpkM},\n traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::{\n embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n ops::Add,\n};\n\n// Aztec address\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\n/// We implement the Packable trait for AztecAddress because it can be stored in contract's storage (and there\n/// the implementation of Packable is required).\nimpl Packable<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn pack(self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n self.serialize()\n }\n\n fn unpack(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n Self::deserialize(fields)\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
5977
5977
  },
5978
- "253": {
5978
+ "254": {
5979
5979
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
5980
5980
  "source": "use crate::{\n address::{aztec_address::AztecAddress, salted_initialization_hash::SaltedInitializationHash},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize, ToField},\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n pub inner: Field,\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress,\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer),\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n ) -> Self {\n PartialAddress::from_field(poseidon2_hash_with_separator(\n [contract_class_id.to_field(), salted_initialization_hash.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
5981
5981
  },
5982
- "255": {
5982
+ "256": {
5983
5983
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr",
5984
5984
  "source": "use crate::{\n address::aztec_address::AztecAddress, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField,\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n pub inner: Field,\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(poseidon2_hash_with_separator(\n [salt, initialization_hash, deployer.to_field()],\n GENERATOR_INDEX__PARTIAL_ADDRESS,\n ))\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"
5985
5985
  },
@@ -5987,19 +5987,19 @@
5987
5987
  "path": "std/hash/poseidon2.nr",
5988
5988
  "source": "use crate::default::Default;\nuse crate::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 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::hash::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"
5989
5989
  },
5990
- "260": {
5990
+ "261": {
5991
5991
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
5992
5992
  "source": "use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress},\n constants::CONTRACT_INSTANCE_LENGTH,\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, FromField, Hash, Serialize, ToField},\n};\n\npub struct ContractInstance {\n pub salt: Field,\n pub deployer: AztecAddress,\n pub contract_class_id: ContractClassId,\n pub initialization_hash: Field,\n pub public_keys: PublicKeys,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys.eq(other.public_keys)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n let public_keys_serialized = self.public_keys.serialize();\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n public_keys_serialized[0],\n public_keys_serialized[1],\n public_keys_serialized[2],\n public_keys_serialized[3],\n public_keys_serialized[4],\n public_keys_serialized[5],\n public_keys_serialized[6],\n public_keys_serialized[7],\n public_keys_serialized[8],\n public_keys_serialized[9],\n public_keys_serialized[10],\n public_keys_serialized[11],\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys: PublicKeys::deserialize([\n serialized[4],\n serialized[5],\n serialized[6],\n serialized[7],\n serialized[8],\n serialized[9],\n serialized[10],\n serialized[11],\n serialized[12],\n serialized[13],\n serialized[14],\n serialized[15],\n ]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n pub fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer,\n ),\n )\n }\n}\n"
5993
5993
  },
5994
- "266": {
5994
+ "267": {
5995
5995
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
5996
5996
  "source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
5997
5997
  },
5998
- "267": {
5998
+ "268": {
5999
5999
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
6000
6000
  "source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\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,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n poseidon2::Poseidon2Sponge,\n traits::{FromField, Hash, is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::{constants::TWO_POW_64, utils::{arrays::array_concat, field::field_from_bytes}};\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_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_contract_class_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_contract_class_log_hash(log_hash.contract_address, log_hash.value())\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\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\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"
6001
6001
  },
6002
- "268": {
6002
+ "269": {
6003
6003
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/indexed_tagging_secret.nr",
6004
6004
  "source": "use crate::traits::{Deserialize, Serialize, ToField};\nuse super::{address::aztec_address::AztecAddress, hash::poseidon2_hash};\nuse std::meta::derive;\n\npub global INDEXED_TAGGING_SECRET_LENGTH: u32 = 2;\n\n#[derive(Serialize, Deserialize)]\npub struct IndexedTaggingSecret {\n app_tagging_secret: Field,\n index: u32,\n}\n\nimpl IndexedTaggingSecret {\n pub fn compute_tag(self, recipient: AztecAddress) -> Field {\n poseidon2_hash(\n [self.app_tagging_secret, recipient.to_field(), self.index as Field],\n )\n }\n}\n"
6005
6005
  },
@@ -6007,35 +6007,35 @@
6007
6007
  "path": "std/hash/sha256.nr",
6008
6008
  "source": "use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: INT_BLOCK, _state: STATE) -> STATE {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n /// Safety: the msg_block is checked below in verify_msg_block\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n /// Safety: the msg_block is checked below in verify_msg_block\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n /// Safety: the msg_len is checked below in verify_msg_len\n msg_block = unsafe { attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size) };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\nmod tests {\n use super::{\n attach_len_to_msg_block, build_msg_block, byte_into_item, get_item_byte, make_item,\n set_item_byte_then_zeros, set_item_zeros,\n };\n use super::INT_BLOCK;\n use super::sha256_var;\n\n #[test]\n fn smoke_test() {\n let input = [0xbd];\n let result = [\n 0x68, 0x32, 0x57, 0x20, 0xaa, 0xbd, 0x7c, 0x82, 0xf3, 0x0f, 0x55, 0x4b, 0x31, 0x3d,\n 0x05, 0x70, 0xc9, 0x5a, 0xcc, 0xbb, 0x7d, 0xc4, 0xb5, 0xaa, 0xe1, 0x12, 0x04, 0xc0,\n 0x8f, 0xfe, 0x73, 0x2b,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n let result = [\n 91, 122, 146, 93, 52, 109, 133, 148, 171, 61, 156, 70, 189, 238, 153, 7, 222, 184, 94,\n 24, 65, 114, 192, 244, 207, 199, 87, 232, 192, 224, 171, 207,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_multiple_over_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99,\n ];\n let result = [\n 116, 90, 151, 31, 78, 22, 138, 180, 211, 189, 69, 76, 227, 200, 155, 29, 59, 123, 154,\n 60, 47, 153, 203, 129, 157, 251, 48, 2, 79, 11, 65, 47,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_just_under_block() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59,\n ];\n let result = [\n 143, 140, 76, 173, 222, 123, 102, 68, 70, 149, 207, 43, 39, 61, 34, 79, 216, 252, 213,\n 165, 74, 16, 110, 74, 29, 64, 138, 167, 30, 1, 9, 119,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_not_block_multiple() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116, 61, 117, 115, 45, 97, 115,\n 99, 105, 105, 13, 10, 109, 105, 109, 101, 45, 118, 101, 114, 115, 105, 111, 110, 58, 49,\n 46, 48, 32, 40, 77, 97, 99, 32, 79, 83, 32, 88, 32, 77, 97, 105, 108, 32, 49, 54, 46,\n 48, 32, 92, 40, 51, 55, 51, 49, 46, 53, 48, 48, 46, 50, 51, 49, 92, 41, 41, 13, 10, 115,\n 117, 98, 106, 101, 99, 116, 58, 72, 101, 108, 108, 111, 13, 10, 109, 101, 115, 115, 97,\n 103, 101, 45, 105, 100, 58, 60, 56, 70, 56, 49, 57, 68, 51, 50, 45, 66, 54, 65, 67, 45,\n 52, 56, 57, 68, 45, 57, 55, 55, 70, 45, 52, 51, 56, 66, 66, 67, 52, 67, 65, 66, 50, 55,\n 64, 109, 101, 46, 99, 111, 109, 62, 13, 10, 100, 97, 116, 101, 58, 83, 97, 116, 44, 32,\n 50, 54, 32, 65, 117, 103, 32, 50, 48, 50, 51, 32, 49, 50, 58, 50, 53, 58, 50, 50, 32,\n 43, 48, 52, 48, 48, 13, 10, 116, 111, 58, 122, 107, 101, 119, 116, 101, 115, 116, 64,\n 103, 109, 97, 105, 108, 46, 99, 111, 109, 13, 10, 100, 107, 105, 109, 45, 115, 105, 103,\n 110, 97, 116, 117, 114, 101, 58, 118, 61, 49, 59, 32, 97, 61, 114, 115, 97, 45, 115,\n 104, 97, 50, 53, 54, 59, 32, 99, 61, 114, 101, 108, 97, 120, 101, 100, 47, 114, 101,\n 108, 97, 120, 101, 100, 59, 32, 100, 61, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109,\n 59, 32, 115, 61, 49, 97, 49, 104, 97, 105, 59, 32, 116, 61, 49, 54, 57, 51, 48, 51, 56,\n 51, 51, 55, 59, 32, 98, 104, 61, 55, 120, 81, 77, 68, 117, 111, 86, 86, 85, 52, 109, 48,\n 87, 48, 87, 82, 86, 83, 114, 86, 88, 77, 101, 71, 83, 73, 65, 83, 115, 110, 117, 99, 75,\n 57, 100, 74, 115, 114, 99, 43, 118, 85, 61, 59, 32, 104, 61, 102, 114, 111, 109, 58, 67,\n 111, 110, 116, 101, 110, 116, 45, 84, 121, 112, 101, 58, 77, 105, 109, 101, 45, 86, 101,\n 114, 115, 105, 111, 110, 58, 83, 117, 98, 106, 101, 99, 116, 58, 77, 101, 115, 115, 97,\n 103, 101, 45, 73, 100, 58, 68, 97, 116, 101, 58, 116, 111, 59, 32, 98, 61,\n ];\n let result = [\n 112, 144, 73, 182, 208, 98, 9, 238, 54, 229, 61, 145, 222, 17, 72, 62, 148, 222, 186,\n 55, 192, 82, 220, 35, 66, 47, 193, 200, 22, 38, 26, 186,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn msg_big_with_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n let message_size = 297;\n assert_eq(sha256_var(input, message_size), result);\n }\n\n #[test]\n fn msg_big_no_padding() {\n let input = [\n 48, 130, 1, 37, 2, 1, 0, 48, 11, 6, 9, 96, 134, 72, 1, 101, 3, 4, 2, 1, 48, 130, 1, 17,\n 48, 37, 2, 1, 1, 4, 32, 176, 223, 31, 133, 108, 84, 158, 102, 70, 11, 165, 175, 196, 12,\n 201, 130, 25, 131, 46, 125, 156, 194, 28, 23, 55, 133, 157, 164, 135, 136, 220, 78, 48,\n 37, 2, 1, 2, 4, 32, 190, 82, 180, 235, 222, 33, 79, 50, 152, 136, 142, 35, 116, 224, 6,\n 242, 156, 141, 128, 248, 10, 61, 98, 86, 248, 45, 207, 210, 90, 232, 175, 38, 48, 37, 2,\n 1, 3, 4, 32, 0, 194, 104, 108, 237, 246, 97, 230, 116, 198, 69, 110, 26, 87, 17, 89,\n 110, 199, 108, 250, 36, 21, 39, 87, 110, 102, 250, 213, 174, 131, 171, 174, 48, 37, 2,\n 1, 11, 4, 32, 136, 155, 87, 144, 111, 15, 152, 127, 85, 25, 154, 81, 20, 58, 51, 75,\n 193, 116, 234, 0, 60, 30, 29, 30, 183, 141, 72, 247, 255, 203, 100, 124, 48, 37, 2, 1,\n 12, 4, 32, 41, 234, 106, 78, 31, 11, 114, 137, 237, 17, 92, 71, 134, 47, 62, 78, 189,\n 233, 201, 214, 53, 4, 47, 189, 201, 133, 6, 121, 34, 131, 64, 142, 48, 37, 2, 1, 13, 4,\n 32, 91, 222, 210, 193, 62, 222, 104, 82, 36, 41, 138, 253, 70, 15, 148, 208, 156, 45,\n 105, 171, 241, 195, 185, 43, 217, 162, 146, 201, 222, 89, 238, 38, 48, 37, 2, 1, 14, 4,\n 32, 76, 123, 216, 13, 51, 227, 72, 245, 59, 193, 238, 166, 103, 49, 23, 164, 171, 188,\n 194, 197, 156, 187, 249, 28, 198, 95, 69, 15, 182, 56, 54, 38,\n ];\n let result = [\n 32, 85, 108, 174, 127, 112, 178, 182, 8, 43, 134, 123, 192, 211, 131, 66, 184, 240, 212,\n 181, 240, 180, 106, 195, 24, 117, 54, 129, 19, 10, 250, 53,\n ];\n assert_eq(sha256_var(input, input.len() as u64), result);\n }\n\n #[test]\n fn same_msg_len_variable_padding() {\n let input = [\n 29, 81, 165, 84, 243, 114, 101, 37, 242, 146, 127, 99, 69, 145, 39, 72, 213, 39, 253,\n 179, 218, 37, 217, 201, 172, 93, 198, 50, 249, 70, 15, 30, 162, 112, 187, 40, 140, 9,\n 236, 53, 32, 44, 38, 163, 113, 254, 192, 197, 44, 89, 71, 130, 169, 242, 17, 211, 214,\n 72, 19, 178, 186, 168, 147, 127, 99, 101, 252, 227, 8, 147, 150, 85, 97, 158, 17, 107,\n 218, 244, 82, 113, 247, 91, 208, 214, 60, 244, 87, 137, 173, 201, 130, 18, 66, 56, 198,\n 149, 207, 189, 175, 120, 123, 224, 177, 167, 251, 159, 143, 110, 68, 183, 189, 70, 126,\n 32, 35, 164, 44, 30, 44, 12, 65, 18, 62, 239, 242, 2, 248, 104, 2, 178, 64, 28, 126, 36,\n 137, 24, 14, 116, 91, 98, 90, 159, 218, 102, 45, 11, 110, 223, 245, 184, 52, 99, 59,\n 245, 136, 175, 3, 72, 164, 146, 145, 116, 22, 66, 24, 49, 193, 121, 3, 60, 37, 41, 97,\n 3, 190, 66, 195, 225, 63, 46, 3, 118, 4, 208, 15, 1, 40, 254, 235, 151, 123, 70, 180,\n 170, 44, 172, 90, 4, 254, 53, 239, 116, 246, 67, 56, 129, 61, 22, 169, 213, 65, 27, 216,\n 116, 162, 239, 214, 207, 126, 177, 20, 100, 25, 48, 143, 84, 215, 70, 197, 53, 65, 70,\n 86, 172, 61, 62, 9, 212, 167, 169, 133, 41, 126, 213, 196, 33, 192, 238, 0, 63, 246,\n 215, 58, 128, 110, 101, 92, 3, 170, 214, 130, 149, 52, 81, 125, 118, 233, 3, 118, 193,\n 104, 207, 120, 115, 77, 253, 191, 122, 0, 107, 164, 207, 113, 81, 169, 36, 201, 228, 74,\n 134, 131, 218, 178, 35, 30, 216, 101, 2, 103, 174, 87, 95, 50, 50, 215, 157, 5, 210,\n 188, 54, 211, 78, 45, 199, 96, 121, 241, 241, 176, 226, 194, 134, 130, 89, 217, 210,\n 186, 32, 140, 39, 91, 103, 212, 26, 87, 32, 72, 144, 228, 230, 117, 99, 188, 50, 15, 69,\n 79, 179, 50, 12, 106, 86, 218, 101, 73, 142, 243, 29, 250, 122, 228, 233, 29, 255, 22,\n 121, 114, 125, 103, 41, 250, 241, 179, 126, 158, 198, 116, 209, 65, 94, 98, 228, 175,\n 169, 96, 3, 9, 233, 133, 214, 55, 161, 164, 103, 80, 85, 24, 186, 64, 167, 92, 131, 53,\n 101, 202, 47, 25, 104, 118, 155, 14, 12, 12, 25, 116, 45, 221, 249, 28, 246, 212, 200,\n 157, 167, 169, 56, 197, 181, 4, 245, 146, 1, 140, 234, 191, 212, 228, 125, 87, 81, 86,\n 119, 30, 63, 129, 143, 32, 96,\n ];\n\n // Prepare inputs of different lengths\n let mut input_511 = [0; 511];\n let mut input_512 = [0; 512]; // Next block\n let mut input_575 = [0; 575];\n let mut input_576 = [0; 576]; // Next block\n for i in 0..input.len() {\n input_511[i] = input[i];\n input_512[i] = input[i];\n input_575[i] = input[i];\n input_576[i] = input[i];\n }\n\n // Compute hashes of all inputs (with same message length)\n let fixed_length_hash = super::sha256(input);\n let var_full_length_hash = sha256_var(input, input.len() as u64);\n let var_length_hash_511 = sha256_var(input_511, input.len() as u64);\n let var_length_hash_512 = sha256_var(input_512, input.len() as u64);\n let var_length_hash_575 = sha256_var(input_575, input.len() as u64);\n let var_length_hash_576 = sha256_var(input_576, input.len() as u64);\n\n // All of the above should have produced the same hash\n assert_eq(var_full_length_hash, fixed_length_hash);\n assert_eq(var_length_hash_511, fixed_length_hash);\n assert_eq(var_length_hash_512, fixed_length_hash);\n assert_eq(var_length_hash_575, fixed_length_hash);\n assert_eq(var_length_hash_576, fixed_length_hash);\n }\n\n #[test]\n fn test_get_item_byte() {\n let fld = make_item(10, 20, 30, 40);\n assert_eq(fld, 0x0a141e28);\n assert_eq(get_item_byte(fld, 0), 10);\n assert_eq(get_item_byte(fld, 4), 10);\n assert_eq(get_item_byte(fld, 6), 30);\n }\n\n #[test]\n fn test_byte_into_item() {\n let fld = make_item(0, 20, 0, 0);\n assert_eq(byte_into_item(20, 1), fld);\n assert_eq(byte_into_item(20, 5), fld);\n }\n\n #[test]\n fn test_set_item_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 0, 0, 0);\n assert_eq(set_item_zeros(fld0, 3), fld1);\n assert_eq(set_item_zeros(fld0, 4), 0);\n assert_eq(set_item_zeros(0, 4), 0);\n }\n\n #[test]\n fn test_set_item_byte_then_zeros() {\n let fld0 = make_item(10, 20, 30, 40);\n let fld1 = make_item(10, 50, 0, 0);\n assert_eq(set_item_byte_then_zeros(fld0, 1, 50), fld1);\n }\n\n #[test]\n fn test_build_msg_block_start_0() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48,\n ];\n assert_eq(input.len(), 22);\n\n /// Safety: testing context\n let (msg_block, msg_byte_ptr) = unsafe { build_msg_block(input, input.len(), 0) };\n assert_eq(msg_byte_ptr, input.len());\n assert_eq(msg_block[0], make_item(input[0], input[1], input[2], input[3]));\n assert_eq(msg_block[1], make_item(input[4], input[5], input[6], input[7]));\n assert_eq(msg_block[5], make_item(input[20], input[21], 0, 0));\n assert_eq(msg_block[6], 0);\n }\n\n #[test]\n fn test_build_msg_block_start_1() {\n let input = [\n 102, 114, 111, 109, 58, 114, 117, 110, 110, 105, 101, 114, 46, 108, 101, 97, 103, 117,\n 101, 115, 46, 48, 106, 64, 105, 99, 108, 111, 117, 100, 46, 99, 111, 109, 13, 10, 99,\n 111, 110, 116, 101, 110, 116, 45, 116, 121, 112, 101, 58, 116, 101, 120, 116, 47, 112,\n 108, 97, 105, 110, 59, 32, 99, 104, 97, 114, 115, 101, 116,\n ];\n assert_eq(input.len(), 68);\n /// Safety: test context\n let (msg_block, msg_byte_ptr) = unsafe { build_msg_block(input, input.len(), 64) };\n assert_eq(msg_byte_ptr, 4);\n assert_eq(msg_block[0], make_item(input[64], input[65], input[66], input[67]));\n assert_eq(msg_block[1], 0);\n }\n\n #[test]\n fn test_attach_len_to_msg_block() {\n let input: INT_BLOCK = [\n 2152555847, 1397309779, 1936618851, 1262052426, 1936876331, 1985297723, 543702374,\n 1919905082, 1131376244, 1701737517, 1417244773, 978151789, 1697470053, 1920166255,\n 1849316213, 1651139939,\n ];\n /// Safety: testing context\n let msg_block = unsafe { attach_len_to_msg_block(input, 1, 448) };\n assert_eq(msg_block[0], ((1 << 7) as u32) * 256 * 256 * 256);\n assert_eq(msg_block[1], 0);\n assert_eq(msg_block[15], 3584);\n }\n}\n"
6009
6009
  },
6010
- "283": {
6010
+ "284": {
6011
6011
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/point.nr",
6012
6012
  "source": "pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{hash::poseidon2_hash, traits::{Deserialize, Empty, Hash, Packable, Serialize}};\n\npub global POINT_LENGTH: u32 = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n// TODO(#11356): use compact representation here.\nimpl Packable<POINT_LENGTH> for Point {\n fn pack(self) -> [Field; POINT_LENGTH] {\n self.serialize()\n }\n\n fn unpack(packed: [Field; POINT_LENGTH]) -> Self {\n Self::deserialize(packed)\n }\n}\n"
6013
6013
  },
6014
- "284": {
6014
+ "285": {
6015
6015
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
6016
6016
  "source": "use crate::constants::TWO_POW_64;\n\n// NB: This is a clone of noir/noir-repo/noir_stdlib/src/hash/poseidon2.nr\n// It exists as we sometimes need to perform custom absorption, but the stdlib version\n// has a private absorb() method (it's also designed to just be a hasher)\n// Can be removed when standalone noir poseidon lib exists: See noir#6679\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2Sponge {\n pub cache: [Field; 3],\n pub state: [Field; 4],\n pub cache_size: u32,\n pub squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2Sponge {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2Sponge::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2Sponge {\n let mut result =\n Poseidon2Sponge { 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 = std::hash::poseidon2_permutation(self.state, 4);\n }\n\n pub 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 pub 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 iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::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"
6017
6017
  },
6018
- "293": {
6018
+ "294": {
6019
6019
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
6020
6020
  "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"
6021
6021
  },
6022
- "330": {
6022
+ "331": {
6023
6023
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr",
6024
6024
  "source": "pub mod assert_array_appended;\npub mod assert_array_prepended;\npub mod assert_combined_array;\npub mod assert_combined_transformed_array;\npub mod assert_exposed_sorted_transformed_value_array;\npub mod assert_sorted_array;\npub mod assert_sorted_transformed_value_array;\npub mod assert_split_sorted_transformed_value_arrays;\npub mod assert_split_transformed_value_arrays;\npub mod get_sorted_result;\npub mod get_sorted_tuple;\npub mod sort_by;\npub mod sort_by_counter;\n\n// Re-exports.\npub use assert_array_appended::{\n assert_array_appended, assert_array_appended_and_scoped, assert_array_appended_reversed,\n assert_array_appended_scoped,\n};\npub use assert_array_prepended::assert_array_prepended;\npub use assert_combined_array::{assert_combined_array, combine_arrays};\npub use assert_combined_transformed_array::{\n assert_combined_transformed_array, combine_and_transform_arrays,\n};\npub use assert_exposed_sorted_transformed_value_array::{\n assert_exposed_sorted_transformed_value_array,\n get_order_hints::{get_order_hints_asc, get_order_hints_desc, OrderHint},\n};\npub use assert_sorted_array::assert_sorted_array;\npub use assert_sorted_transformed_value_array::{\n assert_sorted_transformed_value_array, assert_sorted_transformed_value_array_capped_size,\n};\npub use assert_split_sorted_transformed_value_arrays::{\n assert_split_sorted_transformed_value_arrays_asc,\n assert_split_sorted_transformed_value_arrays_desc,\n get_split_order_hints::{get_split_order_hints_asc, get_split_order_hints_desc, SplitOrderHints},\n};\npub use assert_split_transformed_value_arrays::assert_split_transformed_value_arrays;\npub use get_sorted_result::{get_sorted_result, SortedResult};\npub use sort_by_counter::{sort_by_counter_asc, sort_by_counter_desc};\n\nuse crate::traits::{Empty, is_empty};\n\npub fn subarray<let SRC_LEN: u32, let DST_LEN: u32>(\n src: [Field; SRC_LEN],\n offset: u32,\n) -> [Field; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"offset too large\");\n\n let mut dst: [Field; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\n// Helper function to convert a validated array to BoundedVec.\n// Important: Only use it for validated arrays: validate_array(array) should be true.\npub unconstrained fn array_to_bounded_vec<T, let N: u32>(array: [T; N]) -> BoundedVec<T, N>\nwhere\n T: Empty + Eq,\n{\n let len = array_length(array);\n BoundedVec::from_parts_unchecked(array, len)\n}\n\n// Helper function to find the index of the first element in an array that satisfies a given predicate. If the element\n// is not found, the function returns N as the index.\npub unconstrained fn find_index_hint<T, let N: u32, Env>(\n array: [T; N],\n find: fn[Env](T) -> bool,\n) -> u32 {\n let mut index = N;\n for i in 0..N {\n // We check `index == N` to ensure that we only update the index if we haven't found a match yet.\n if (index == N) & find(array[i]) {\n index = i;\n }\n }\n index\n}\n\n// Routine which validates that all zero values of an array form a contiguous region at the end, i.e.,\n// of the form: [*,*,*...,0,0,0,0] where any * is non-zero. Note that a full array of non-zero values is\n// valid.\npub fn validate_array<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n let mut seen_empty = false;\n let mut length = 0;\n for i in 0..N {\n if is_empty(array[i]) {\n seen_empty = true;\n } else {\n assert(seen_empty == false, \"invalid array\");\n length += 1;\n }\n }\n length\n}\n\n// Helper function to count the number of non-empty elements in a validated array.\n// Important: Only use it for validated arrays where validate_array(array) returns true,\n// which ensures that:\n// 1. All elements before the first empty element are non-empty\n// 2. All elements after and including the first empty element are empty\n// 3. The array forms a contiguous sequence of non-empty elements followed by empty elements\npub fn array_length<T, let N: u32>(array: [T; N]) -> u32\nwhere\n T: Empty + Eq,\n{\n // We get the length by checking the index of the first empty element.\n\n /// Safety: This is safe because we have validated the array (see function doc above) and the emptiness\n /// of the element and non-emptiness of the previous element is checked below.\n let length = unsafe { find_index_hint(array, |elem: T| is_empty(elem)) };\n if length != 0 {\n assert(!is_empty(array[length - 1]));\n }\n if length != N {\n assert(is_empty(array[length]));\n }\n length\n}\n\npub fn array_concat<T, let N: u32, let M: u32>(array1: [T; N], array2: [T; M]) -> [T; N + M] {\n let mut result = [array1[0]; N + M];\n for i in 1..N {\n result[i] = array1[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n}\n\npub fn array_merge<T, let N: u32>(array1: [T; N], array2: [T; N]) -> [T; N]\nwhere\n T: Empty + Eq,\n{\n let mut result: [T; N] = [T::empty(); N];\n let mut i = 0;\n for elem in array1 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n for elem in array2 {\n if !is_empty(elem) {\n result[i] = elem;\n i += 1;\n }\n }\n result\n}\n\n// Helper fn to create a subarray from a given array\npub fn array_splice<T, let N: u32, let M: u32>(array: [T; N], offset: u32) -> [T; M]\nwhere\n T: Empty,\n{\n assert(M + offset <= N, \"Subarray length larger than array length\");\n let mut result: [T; M] = [T::empty(); M];\n for i in 0..M {\n result[i] = array[offset + i];\n }\n result\n}\n\npub fn check_permutation<T, let N: u32>(\n original_array: [T; N],\n permuted_array: [T; N],\n original_indexes: [u32; N],\n)\nwhere\n T: Eq + Empty,\n{\n let mut seen_value = [false; N];\n for i in 0..N {\n let index = original_indexes[i];\n let original_value = original_array[index];\n assert(permuted_array[i].eq(original_value), \"Invalid index\");\n assert(!seen_value[index], \"Duplicated index\");\n seen_value[index] = true;\n }\n}\n\n#[test]\nfn smoke_validate_array() {\n let valid_array: [Field; 0] = [];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [0];\n assert(validate_array(valid_array) == 0);\n\n let valid_array = [3];\n assert(validate_array(valid_array) == 1);\n\n let valid_array = [1, 2, 3];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0];\n assert(validate_array(valid_array) == 3);\n\n let valid_array = [1, 2, 3, 0, 0];\n assert(validate_array(valid_array) == 3);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case0() {\n let invalid_array = [0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case1() {\n let invalid_array = [1, 0, 0, 1, 0];\n let _ = validate_array(invalid_array);\n}\n\n#[test(should_fail_with = \"invalid array\")]\nfn smoke_validate_array_invalid_case2() {\n let invalid_array = [0, 0, 0, 0, 1];\n let _ = validate_array(invalid_array);\n}\n\n#[test]\nfn test_empty_array_length() {\n assert_eq(array_length([0]), 0);\n assert_eq(array_length([0, 0, 0]), 0);\n}\n\n#[test]\nfn test_array_length() {\n assert_eq(array_length([123]), 1);\n assert_eq(array_length([123, 0, 0]), 1);\n assert_eq(array_length([123, 456]), 2);\n assert_eq(array_length([123, 456, 0]), 2);\n}\n\n#[test]\nfn test_array_length_invalid_arrays() {\n // Result can be misleading (but correct) for invalid arrays.\n assert_eq(array_length([0, 0, 123]), 0);\n assert_eq(array_length([0, 123, 0]), 0);\n assert_eq(array_length([0, 123, 456]), 0);\n assert_eq(array_length([123, 0, 456]), 1);\n}\n\n#[test]\nunconstrained fn find_index_greater_than_min() {\n let values = [10, 20, 30, 40];\n let min = 22;\n let index = find_index_hint(values, |v: Field| min.lt(v));\n assert_eq(index, 2);\n}\n\n#[test]\nunconstrained fn find_index_not_found() {\n let values = [10, 20, 30, 40];\n let min = 100;\n let index = find_index_hint(values, |v: Field| min.lt(v));\n assert_eq(index, 4);\n}\n\n#[test]\nfn test_array_concat() {\n let array0 = [1, 2, 3];\n let array1 = [4, 5];\n let concatenated = array_concat(array0, array1);\n assert_eq(concatenated, [1, 2, 3, 4, 5]);\n}\n\n#[test]\nfn check_permutation_basic_test() {\n let original_array = [1, 2, 3];\n let permuted_array = [3, 1, 2];\n let indexes = [2, 0, 1];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Duplicated index\")]\nfn check_permutation_duplicated_index() {\n let original_array = [0, 1, 0];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 0];\n check_permutation(original_array, permuted_array, indexes);\n}\n\n#[test(should_fail_with = \"Invalid index\")]\nfn check_permutation_invalid_index() {\n let original_array = [0, 1, 2];\n let permuted_array = [1, 0, 0];\n let indexes = [1, 0, 2];\n check_permutation(original_array, permuted_array, indexes);\n}\n"
6025
6025
  },
6026
- "333": {
6026
+ "334": {
6027
6027
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
6028
6028
  "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"
6029
6029
  },
6030
- "338": {
6030
+ "339": {
6031
6031
  "path": "/root/nargo/github.com/noir-lang/ec/v0.1.2/src/lib.nr",
6032
6032
  "source": "// Elliptic curve implementation\n// Overview\n// ========\n// The following three elliptic curve representations are admissible:\npub mod tecurve; // Twisted Edwards curves\npub mod swcurve; // Elliptic curves in Short Weierstrass form\npub mod montcurve; // Montgomery curves\npub mod consts; // Commonly used curve presets\n//\n// Note that Twisted Edwards and Montgomery curves are (birationally) equivalent, so that\n// they may be freely converted between one another, whereas Short Weierstrass curves are\n// more general. Diagramatically:\n//\n// tecurve == montcurve `subset` swcurve\n//\n// Each module is further divided into two submodules, 'affine' and 'curvegroup', depending\n// on the preferred coordinate representation. Affine coordinates are none other than the usual\n// two-dimensional Cartesian coordinates used in the definitions of these curves, whereas\n// 'CurveGroup' coordinates (terminology borrowed from Arkworks, whose conventions we try\n// to follow) are special coordinate systems with respect to which the group operations may be\n// implemented more efficiently, usually by means of an appropriate choice of projective coordinates.\n//\n// In each of these submodules, there is a Point struct and a Curve struct, the former\n// representing a point in the coordinate system and the latter a curve configuration.\n//\n// Points\n// ======\n// Points may be instantiated using the associated function `new`, which takes coordinates\n// as its arguments. For instance,\n//\n// `let p = swcurve::Point::new(1,1);`\n//\n// The additive identity may be constructed by a call to the associated function `zero` of no\n// arguments:\n//\n// `let zero = swcurve::Point::zero();`\n//\n// Points may be tested for equality by calling the method `eq`:\n//\n// `let pred = p.eq(zero);`\n//\n// There is also the method `is_zero` to explicitly check whether a point is the additive identity:\n//\n// `constrain pred == p.is_zero();`\n//\n// Points may be negated by calling the `negate` method and converted to CurveGroup (or affine)\n// coordinates by calling the `into_group` (resp. `into_affine`) method on them. Finally,\n// Points may be freely mapped between their respective Twisted Edwards and Montgomery\n// representations by calling the `into_montcurve` or `into_tecurve` methods. For mappings\n// between Twisted Edwards/Montgomery curves and Short Weierstrass curves, see the Curve section\n// below, as the underlying mappings are those of curves rather than ambient spaces.\n// As a rule, Points in affine (or CurveGroup) coordinates are mapped to Points in affine\n// (resp. CurveGroup) coordinates.\n//\n// Curves\n// ======\n// A curve configuration (Curve) is completely determined by the Field coefficients of its defining\n// equation (a and b in the case of swcurve, a and d in the case of tecurve, and j and k in\n// the case of montcurve) together with a generator (`gen`) in the corresponding coordinate system.\n// For example, the Baby Jubjub curve configuration as defined in ERC-2494 may be instantiated as a Twisted\n// Edwards curve in affine coordinates as follows:\n//\n// `let bjj_affine = tecurve::Curve::new(168700, 168696, tecurve::Point::new(995203441582195749578291179787384436505546430278305826713579947235728471134,5472060717959818805561601436314318772137091100104008585924551046643952123905));`\n//\n// The `contains` method may be used to check whether a Point lies on a given curve:\n//\n// `constrain bjj_affine.contains(tecurve::Point::zero());`\n//\n// The elliptic curve group's addition operation is exposed as the `add` method, e.g.\n//\n// `let p = bjj_affine.add(bjj_affine.gen, bjj_affine.gen);`\n//\n// subtraction as the `subtract` method, e.g.\n//\n// `constrain tecurve::Point::zero().eq(bjj_affine.subtract(bjj_affine.gen, bjj_affine.gen));`\n//\n// scalar multiplication as the `mul` method, where the scalar is assumed to be a Field* element, e.g.\n//\n// `constrain tecurve::Point::zero().eq(bjj_affine.mul(2, tecurve::Point::zero());`\n//\n// There is a scalar multiplication method (`bit_mul`) provided where the scalar input is expected to be\n// an array of bits (little-endian convention), as well as a multi-scalar multiplication method** (`msm`)\n// which takes an array of Field elements and an array of elliptic curve points as arguments, both assumed\n// to be of the same length.\n//\n// Curve configurations may be converted between different coordinate representations by calling the `into_group`\n// and `into_affine` methods on them, e.g.\n//\n// `let bjj_curvegroup = bjj_affine.into_group();`\n//\n// Curve configurations may also be converted between different curve representations by calling the `into_swcurve`,\n// `into_montcurve` and `into_tecurve` methods subject to the relation between the curve representations mentioned\n// above. Note that it is possible to map Points from a Twisted Edwards/Montgomery curve to the corresponding\n// Short Weierstrass representation and back, and the methods to do so are exposed as `map_into_swcurve` and\n// `map_from_swcurve`, which each take one argument, the point to be mapped.\n//\n// Curve maps\n// ==========\n// There are a few different ways of mapping Field elements to elliptic curves. Here we provide the simplified\n// Shallue-van de Woestijne-Ulas and Elligator 2 methods, the former being applicable to all curve types\n// provided above subject to the constraint that the coefficients of the corresponding Short Weierstrass curve satisfies\n// a*b != 0 and the latter being applicable to Montgomery and Twisted Edwards curves subject to the constraint that\n// the coefficients of the corresponding Montgomery curve satisfy j*k != 0 and (j^2 - 4)/k^2 is non-square.\n//\n// The simplified Shallue-van de Woestijne-Ulas method is exposed as the method `swu_map` on the Curve configuration and\n// depends on two parameters, a Field element z != -1 for which g(x) - z is irreducible over Field and g(b/(z*a)) is\n// square, where g(x) = x^3 + a*x + b is the right-hand side of the defining equation of the corresponding Short\n// Weierstrass curve, and a Field element u to be mapped onto the curve. For example, in the case of bjj_affine above,\n// it may be determined using the scripts provided at <https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve> that z = 5.\n//\n// The Elligator 2 method is exposed as the method `elligator2_map` on the Curve configurations of Montgomery and\n// Twisted Edwards curves. Like the simplified SWU method above, it depends on a certain non-square element of Field,\n// but this element need not satisfy any further conditions, so it is included as the (Field-dependent) constant\n//`ZETA` below. Thus, the `elligator2_map` method depends only on one parameter, the Field element to be mapped onto\n// the curve.\n//\n// For details on all of the above in the context of hashing to elliptic curves, see <https://datatracker.ietf.org/doc/id/draft-irtf-cfrg-hash-to-curve-06.html>.\n//\n//\n// *TODO: Replace Field with Bigint.\n// **TODO: Support arrays of structs to make this work.\n// Field-dependent constant ZETA = a non-square element of Field\n// Required for Elligator 2 map\n// TODO: Replace with built-in constant.\nglobal ZETA: Field = 5;\n// Field-dependent constants for Tonelli-Shanks algorithm (see sqrt function below)\n// TODO: Possibly make this built-in.\nglobal C1: u32 = 28;\nglobal C3: Field = 40770029410420498293352137776570907027550720424234931066070132305055;\nglobal C5: Field = 19103219067921713944291392827692070036145651957329286315305642004821462161904;\n// Higher-order version of scalar multiplication\n// TODO: Make this work so that the submodules' bit_mul may be defined in terms of it.\n//fn bit_mul<T,N>(add: fn(T,T) -> T, e: T, bits: [u1; N], p: T) -> T {\n// let mut out = e;\n// let n = bits.len();\n//\n// for i in 0..n {\n// out = add(\n// add(out, out),\n// if(bits[n - i - 1] == 0) {e} else {p});\n// }\n//\n// out\n//}\n// TODO: Make this built-in.\npub fn safe_inverse(x: Field) -> Field {\n if x == 0 {\n 0\n } else {\n 1 / x\n }\n}\n// Boolean indicating whether Field element is a square, i.e. whether there exists a y in Field s.t. x = y*y.\npub fn is_square(x: Field) -> bool {\n let v = pow(x, 0 - 1 / 2);\n\n v * (v - 1) == 0\n}\n// Power function of two Field arguments of arbitrary size.\n// Adapted from std::field::pow_32.\npub fn pow(x: Field, y: Field) -> Field {\n let mut r = 1 as Field;\n let b: [u1; 254] = y.to_le_bits();\n\n for i in 0..254 {\n r *= r;\n r *= (b[254 - 1 - i] as Field) * x + (1 - b[254 - 1 - i] as Field);\n }\n\n r\n}\n// Tonelli-Shanks algorithm for computing the square root of a Field element.\n// Requires C1 = max{c: 2^c divides (p-1)}, where p is the order of Field\n// as well as C3 = (C2 - 1)/2, where C2 = (p-1)/(2^c1),\n// and C5 = ZETA^C2, where ZETA is a non-square element of Field.\n// These are pre-computed above as globals.\npub fn sqrt(x: Field) -> Field {\n let mut z = pow(x, C3);\n let mut t = z * z * x;\n z *= x;\n let mut b = t;\n let mut c = C5;\n\n for i in 0..(C1 - 1) {\n for _j in 1..(C1 - i - 1) {\n b *= b;\n }\n\n z *= if b == 1 { 1 } else { c };\n\n c *= c;\n\n t *= if b == 1 { 1 } else { c };\n\n b = t;\n }\n\n z\n}\n\nmod tests {\n use crate::montcurve::affine::Point as MGaffine;\n use crate::montcurve::curvegroup::Point as MG;\n use crate::swcurve::affine::Point as SWGaffine;\n use crate::swcurve::curvegroup::Point as SWG;\n use crate::tecurve::affine::Curve as AffineCurve;\n use crate::tecurve::affine::Point as Gaffine;\n use crate::tecurve::curvegroup::Point as G;\n\n #[test]\n fn smoke_test() {\n // Tests may be checked against https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/tree/main/poc\n // Define Baby Jubjub (ERC-2494) parameters in affine representation\n let bjj_affine = AffineCurve::new(\n 168700,\n 168696,\n Gaffine::new(\n 995203441582195749578291179787384436505546430278305826713579947235728471134,\n 5472060717959818805561601436314318772137091100104008585924551046643952123905,\n ),\n );\n // Test addition\n let p1_affine = Gaffine::new(\n 17777552123799933955779906779655732241715742912184938656739573121738514868268,\n 2626589144620713026669568689430873010625803728049924121243784502389097019475,\n );\n let p2_affine = Gaffine::new(\n 16540640123574156134436876038791482806971768689494387082833631921987005038935,\n 20819045374670962167435360035096875258406992893633759881276124905556507972311,\n );\n\n let p3_affine = bjj_affine.add(p1_affine, p2_affine);\n assert(p3_affine.eq(Gaffine::new(\n 7916061937171219682591368294088513039687205273691143098332585753343424131937,\n 14035240266687799601661095864649209771790948434046947201833777492504781204499,\n )));\n // Test scalar multiplication\n let p4_affine = bjj_affine.mul(2, p1_affine);\n assert(p4_affine.eq(Gaffine::new(\n 6890855772600357754907169075114257697580319025794532037257385534741338397365,\n 4338620300185947561074059802482547481416142213883829469920100239455078257889,\n )));\n assert(p4_affine.eq(bjj_affine.bit_mul([0, 1], p1_affine)));\n // Test subtraction\n let p5_affine = bjj_affine.subtract(p3_affine, p3_affine);\n assert(p5_affine.eq(Gaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_affine.contains(bjj_affine.gen)\n & bjj_affine.contains(p1_affine)\n & bjj_affine.contains(p2_affine)\n & bjj_affine.contains(p3_affine)\n & bjj_affine.contains(p4_affine)\n & bjj_affine.contains(p5_affine),\n );\n // Test CurveGroup equivalents\n let bjj = bjj_affine.into_group(); // Baby Jubjub\n let p1 = p1_affine.into_group();\n let p2 = p2_affine.into_group();\n let p3 = p3_affine.into_group();\n let p4 = p4_affine.into_group();\n let p5 = p5_affine.into_group();\n // Test addition\n assert(p3.eq(bjj.add(p1, p2)));\n // Test scalar multiplication\n assert(p4.eq(bjj.mul(2, p1)));\n assert(p4.eq(bjj.bit_mul([0, 1], p1)));\n // Test subtraction\n assert(G::zero().eq(bjj.subtract(p3, p3)));\n assert(p5.eq(G::zero()));\n // Check that these points are on the curve\n assert(\n bjj.contains(bjj.gen)\n & bjj.contains(p1)\n & bjj.contains(p2)\n & bjj.contains(p3)\n & bjj.contains(p4)\n & bjj.contains(p5),\n );\n // Test SWCurve equivalents of the above\n // First the affine representation\n let bjj_swcurve_affine = bjj_affine.into_swcurve();\n\n let p1_swcurve_affine = bjj_affine.map_into_swcurve(p1_affine);\n let p2_swcurve_affine = bjj_affine.map_into_swcurve(p2_affine);\n let p3_swcurve_affine = bjj_affine.map_into_swcurve(p3_affine);\n let p4_swcurve_affine = bjj_affine.map_into_swcurve(p4_affine);\n let p5_swcurve_affine = bjj_affine.map_into_swcurve(p5_affine);\n // Addition\n assert(p3_swcurve_affine.eq(bjj_swcurve_affine.add(p1_swcurve_affine, p2_swcurve_affine)));\n // Doubling\n assert(p4_swcurve_affine.eq(bjj_swcurve_affine.mul(2, p1_swcurve_affine)));\n assert(p4_swcurve_affine.eq(bjj_swcurve_affine.bit_mul([0, 1], p1_swcurve_affine)));\n // Subtraction\n assert(SWGaffine::zero().eq(bjj_swcurve_affine.subtract(\n p3_swcurve_affine,\n p3_swcurve_affine,\n )));\n assert(p5_swcurve_affine.eq(SWGaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_swcurve_affine.contains(bjj_swcurve_affine.gen)\n & bjj_swcurve_affine.contains(p1_swcurve_affine)\n & bjj_swcurve_affine.contains(p2_swcurve_affine)\n & bjj_swcurve_affine.contains(p3_swcurve_affine)\n & bjj_swcurve_affine.contains(p4_swcurve_affine)\n & bjj_swcurve_affine.contains(p5_swcurve_affine),\n );\n // Then the CurveGroup representation\n let bjj_swcurve = bjj.into_swcurve();\n\n let p1_swcurve = bjj.map_into_swcurve(p1);\n let p2_swcurve = bjj.map_into_swcurve(p2);\n let p3_swcurve = bjj.map_into_swcurve(p3);\n let p4_swcurve = bjj.map_into_swcurve(p4);\n let p5_swcurve = bjj.map_into_swcurve(p5);\n // Addition\n assert(p3_swcurve.eq(bjj_swcurve.add(p1_swcurve, p2_swcurve)));\n // Doubling\n assert(p4_swcurve.eq(bjj_swcurve.mul(2, p1_swcurve)));\n assert(p4_swcurve.eq(bjj_swcurve.bit_mul([0, 1], p1_swcurve)));\n // Subtraction\n assert(SWG::zero().eq(bjj_swcurve.subtract(p3_swcurve, p3_swcurve)));\n assert(p5_swcurve.eq(SWG::zero()));\n // Check that these points are on the curve\n assert(\n bjj_swcurve.contains(bjj_swcurve.gen)\n & bjj_swcurve.contains(p1_swcurve)\n & bjj_swcurve.contains(p2_swcurve)\n & bjj_swcurve.contains(p3_swcurve)\n & bjj_swcurve.contains(p4_swcurve)\n & bjj_swcurve.contains(p5_swcurve),\n );\n // Test MontCurve conversions\n // First the affine representation\n let bjj_montcurve_affine = bjj_affine.into_montcurve();\n\n let p1_montcurve_affine = p1_affine.into_montcurve();\n let p2_montcurve_affine = p2_affine.into_montcurve();\n let p3_montcurve_affine = p3_affine.into_montcurve();\n let p4_montcurve_affine = p4_affine.into_montcurve();\n let p5_montcurve_affine = p5_affine.into_montcurve();\n // Addition\n assert(p3_montcurve_affine.eq(bjj_montcurve_affine.add(\n p1_montcurve_affine,\n p2_montcurve_affine,\n )));\n // Doubling\n assert(p4_montcurve_affine.eq(bjj_montcurve_affine.mul(2, p1_montcurve_affine)));\n assert(p4_montcurve_affine.eq(bjj_montcurve_affine.bit_mul([0, 1], p1_montcurve_affine)));\n // Subtraction\n assert(MGaffine::zero().eq(bjj_montcurve_affine.subtract(\n p3_montcurve_affine,\n p3_montcurve_affine,\n )));\n assert(p5_montcurve_affine.eq(MGaffine::zero()));\n // Check that these points are on the curve\n assert(\n bjj_montcurve_affine.contains(bjj_montcurve_affine.gen)\n & bjj_montcurve_affine.contains(p1_montcurve_affine)\n & bjj_montcurve_affine.contains(p2_montcurve_affine)\n & bjj_montcurve_affine.contains(p3_montcurve_affine)\n & bjj_montcurve_affine.contains(p4_montcurve_affine)\n & bjj_montcurve_affine.contains(p5_montcurve_affine),\n );\n // Then the CurveGroup representation\n let bjj_montcurve = bjj.into_montcurve();\n\n let p1_montcurve = p1_montcurve_affine.into_group();\n let p2_montcurve = p2_montcurve_affine.into_group();\n let p3_montcurve = p3_montcurve_affine.into_group();\n let p4_montcurve = p4_montcurve_affine.into_group();\n let p5_montcurve = p5_montcurve_affine.into_group();\n // Addition\n assert(p3_montcurve.eq(bjj_montcurve.add(p1_montcurve, p2_montcurve)));\n // Doubling\n assert(p4_montcurve.eq(bjj_montcurve.mul(2, p1_montcurve)));\n assert(p4_montcurve.eq(bjj_montcurve.bit_mul([0, 1], p1_montcurve)));\n // Subtraction\n assert(MG::zero().eq(bjj_montcurve.subtract(p3_montcurve, p3_montcurve)));\n assert(p5_montcurve.eq(MG::zero()));\n // Check that these points are on the curve\n assert(\n bjj_montcurve.contains(bjj_montcurve.gen)\n & bjj_montcurve.contains(p1_montcurve)\n & bjj_montcurve.contains(p2_montcurve)\n & bjj_montcurve.contains(p3_montcurve)\n & bjj_montcurve.contains(p4_montcurve)\n & bjj_montcurve.contains(p5_montcurve),\n );\n // Elligator 2 map-to-curve\n let ell2_pt_map = bjj_affine.elligator2_map(27);\n\n assert(ell2_pt_map.eq(MGaffine::new(\n 7972459279704486422145701269802978968072470631857513331988813812334797879121,\n 8142420778878030219043334189293412482212146646099536952861607542822144507872,\n )\n .into_tecurve()));\n // SWU map-to-curve\n let swu_pt_map = bjj_affine.swu_map(5, 27);\n\n assert(swu_pt_map.eq(bjj_affine.map_from_swcurve(SWGaffine::new(\n 2162719247815120009132293839392097468339661471129795280520343931405114293888,\n 5341392251743377373758788728206293080122949448990104760111875914082289313973,\n ))));\n }\n\n}\n"
6033
6033
  },
6034
- "344": {
6034
+ "345": {
6035
6035
  "path": "/root/nargo/github.com/noir-lang/sha256/v0.1.0/src/sha256.nr",
6036
6036
  "source": "use std::hash::sha256_compression;\nuse std::runtime::is_unconstrained;\n\nmod tests;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// A message block is up to 64 bytes taken from the input.\nglobal BLOCK_SIZE: u32 = 64;\n\n// The first index in the block where the 8 byte message size will be written.\nglobal MSG_SIZE_PTR: u32 = 56;\n\n// Size of the message block when packed as 4-byte integer array.\nglobal INT_BLOCK_SIZE: u32 = 16;\n\n// A `u32` integer consists of 4 bytes.\nglobal INT_SIZE: u32 = 4;\n\n// Index of the integer in the `INT_BLOCK` where the length is written.\nglobal INT_SIZE_PTR: u32 = MSG_SIZE_PTR / INT_SIZE;\n\n// Magic numbers for bit shifting.\n// Works with actual bit shifting as well as the compiler turns them into * and /\n// but circuit execution appears to be 10% faster this way.\nglobal TWO_POW_8: u32 = 256;\nglobal TWO_POW_16: u32 = TWO_POW_8 * 256;\nglobal TWO_POW_24: u32 = TWO_POW_16 * 256;\nglobal TWO_POW_32: u64 = TWO_POW_24 as u64 * 256;\n\n// Index of a byte in a 64 byte block; ie. 0..=63\ntype BLOCK_BYTE_PTR = u32;\n\n// The foreign function to compress blocks works on 16 pieces of 4-byte integers, instead of 64 bytes.\ntype INT_BLOCK = [u32; INT_BLOCK_SIZE];\n\n// A message block is a slice of the original message of a fixed size,\n// potentially padded with zeros, with neighbouring 4 bytes packed into integers.\ntype MSG_BLOCK = INT_BLOCK;\n\n// The hash is 32 bytes.\ntype HASH = [u8; 32];\n\n// The state accumulates the blocks.\n// Its overall size is the same as the `HASH`.\ntype STATE = [u32; 8];\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> HASH\n// docs:end:sha256\n{\n digest(input)\n}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> HASH {\n sha256_var(msg, N as u64)\n}\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> HASH {\n let message_size = message_size as u32;\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n // Intermediate hash, starting with the canonical initial value\n let mut h: STATE = [\n 1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635,\n 1541459225,\n ];\n // Pointer into msg_block on a 64 byte scale\n let mut msg_byte_ptr = 0;\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if (msg_start < message_size) & (msg_byte_ptr == BLOCK_SIZE) {\n h = sha256_compression(msg_block, h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) =\n unsafe { build_msg_block(msg, message_size, msg_start) };\n\n if msg_start < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n verify_msg_block_padding(msg_block, msg_byte_ptr);\n }\n } else if msg_start < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n // If we had modulo == 0 then it means the last block was full,\n // and we can reset the pointer to zero to overwrite it.\n if msg_byte_ptr == BLOCK_SIZE {\n msg_byte_ptr = 0;\n }\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n // Here we rely on the fact that everything beyond the available input is set to 0.\n msg_block = update_block_item(\n msg_block,\n msg_byte_ptr,\n |msg_item| set_item_byte_then_zeros(msg_item, msg_byte_ptr, 1 << 7),\n );\n msg_byte_ptr = msg_byte_ptr + 1;\n let last_block = msg_block;\n\n // If we don't have room to write the size, compress the block and reset it.\n if msg_byte_ptr > MSG_SIZE_PTR {\n h = sha256_compression(msg_block, h);\n // `attach_len_to_msg_block` will zero out everything after the `msg_byte_ptr`.\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe { attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size) };\n\n if !is_unconstrained() {\n verify_msg_len(msg_block, last_block, msg_byte_ptr, message_size);\n }\n\n hash_final_block(msg_block, h)\n}\n\n// Take `BLOCK_SIZE` number of bytes from `msg` starting at `msg_start`.\n// Returns the block and the length that has been copied rather than padded with zeros.\nunconstrained fn build_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_start: u32,\n) -> (MSG_BLOCK, BLOCK_BYTE_PTR) {\n let mut msg_block: MSG_BLOCK = [0; INT_BLOCK_SIZE];\n\n // We insert `BLOCK_SIZE` bytes (or up to the end of the message)\n let block_input = if msg_start + BLOCK_SIZE > message_size {\n if message_size < msg_start {\n // This function is sometimes called with `msg_start` past the end of the message.\n // In this case we return an empty block and zero pointer to signal that the result should be ignored.\n 0\n } else {\n message_size - msg_start\n }\n } else {\n BLOCK_SIZE\n };\n\n // Figure out the number of items in the int array that we have to pack.\n // e.g. if the input is [0,1,2,3,4,5] then we need to pack it as 2 items: [0123, 4500]\n let mut int_input = block_input / INT_SIZE;\n if block_input % INT_SIZE != 0 {\n int_input = int_input + 1;\n };\n\n for i in 0..int_input {\n let mut msg_item: u32 = 0;\n // Always construct the integer as 4 bytes, even if it means going beyond the input.\n for j in 0..INT_SIZE {\n let k = i * INT_SIZE + j;\n let msg_byte = if k < block_input {\n msg[msg_start + k]\n } else {\n 0\n };\n msg_item = lshift8(msg_item, 1) + msg_byte as u32;\n }\n msg_block[i] = msg_item;\n }\n\n // Returning the index as if it was a 64 byte array.\n // We have to project it down to 16 items and bit shifting to get a byte back if we need it.\n (msg_block, block_input)\n}\n\n// Verify the block we are compressing was appropriately constructed by `build_msg_block`\n// and matches the input data. Returns the index of the first unset item.\n// If `message_size` is less than `msg_start` then this is called with the old non-empty block;\n// in that case we can skip verification, ie. no need to check that everything is zero.\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u32,\n msg_block: MSG_BLOCK,\n msg_start: u32,\n) -> BLOCK_BYTE_PTR {\n let mut msg_byte_ptr = 0;\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n // We might have to go beyond the input to pad the fields.\n if msg_end % INT_SIZE != 0 {\n msg_end = msg_end + INT_SIZE - msg_end % INT_SIZE;\n }\n\n // Reconstructed packed item.\n let mut msg_item: u32 = 0;\n\n // Inclusive at the end so that we can compare the last item.\n let mut i: u32 = 0;\n for k in msg_start..=msg_end {\n if k % INT_SIZE == 0 {\n // If we consumed some input we can compare against the block.\n if (msg_start < message_size) & (k > msg_start) {\n assert_eq(msg_block[i], msg_item as u32);\n i = i + 1;\n msg_item = 0;\n }\n }\n // Shift the accumulator\n msg_item = lshift8(msg_item, 1);\n // If we have input to consume, add it at the rightmost position.\n if k < message_size & k < msg_end {\n msg_item = msg_item + msg[k] as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\n// Verify the block we are compressing was appropriately padded with zeros by `build_msg_block`.\n// This is only relevant for the last, potentially partially filled block.\nfn verify_msg_block_padding(msg_block: MSG_BLOCK, msg_byte_ptr: BLOCK_BYTE_PTR) {\n // Check all the way to the end of the block.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_BLOCK_SIZE);\n}\n\n// Verify that a region of ints in the message block are (partially) zeroed,\n// up to an (exclusive) maximum which can either be the end of the block\n// or just where the size is to be written.\nfn verify_msg_block_zeros(\n msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n max_int_byte_ptr: u32,\n) {\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // First integer which is supposed to be (partially) zero.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n let zeros = INT_SIZE - modulo;\n let mask = if zeros == 3 {\n TWO_POW_24\n } else if zeros == 2 {\n TWO_POW_16\n } else {\n TWO_POW_8\n };\n assert_eq(msg_block[int_byte_ptr] % mask, zero);\n int_byte_ptr = int_byte_ptr + 1;\n }\n\n // Check the rest of the items.\n for i in 0..max_int_byte_ptr {\n if i >= int_byte_ptr {\n assert_eq(msg_block[i], zero);\n }\n }\n}\n\n// Verify that up to the byte pointer the two blocks are equal.\n// At the byte pointer the new block can be partially zeroed.\nfn verify_msg_block_equals_last(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n) {\n // msg_byte_ptr is the position at which they are no longer have to be the same.\n // First integer which is supposed to be (partially) zero contains that pointer.\n let mut int_byte_ptr = msg_byte_ptr / INT_SIZE;\n\n // Check partial zeros.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Reconstruct the partially zero item from the last block.\n let last_field = last_block[int_byte_ptr];\n let mut msg_item: u32 = 0;\n // Reset to where they are still equal.\n msg_byte_ptr = msg_byte_ptr - modulo;\n for i in 0..INT_SIZE {\n msg_item = lshift8(msg_item, 1);\n if i < modulo {\n msg_item = msg_item + get_item_byte(last_field, msg_byte_ptr) as u32;\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n assert_eq(msg_block[int_byte_ptr], msg_item);\n }\n\n for i in 0..INT_SIZE_PTR {\n if i < int_byte_ptr {\n assert_eq(msg_block[i], last_block[i]);\n }\n }\n}\n\n// Apply a function on the block item which the pointer indicates.\nfn update_block_item<Env>(\n mut msg_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n f: fn[Env](u32) -> u32,\n) -> MSG_BLOCK {\n let i = msg_byte_ptr / INT_SIZE;\n msg_block[i] = f(msg_block[i]);\n msg_block\n}\n\n// Set the rightmost `zeros` number of bytes to 0.\nfn set_item_zeros(item: u32, zeros: u8) -> u32 {\n lshift8(rshift8(item, zeros), zeros)\n}\n\n// Replace one byte in the item with a value, and set everything after it to zero.\nfn set_item_byte_then_zeros(msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR, msg_byte: u8) -> u32 {\n let zeros = INT_SIZE - msg_byte_ptr % INT_SIZE;\n let zeroed_item = set_item_zeros(msg_item, zeros as u8);\n let new_item = byte_into_item(msg_byte, msg_byte_ptr);\n zeroed_item + new_item\n}\n\n// Get a byte of a message item according to its overall position in the `BLOCK_SIZE` space.\nfn get_item_byte(mut msg_item: u32, msg_byte_ptr: BLOCK_BYTE_PTR) -> u8 {\n // How many times do we have to shift to the right to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n msg_item = rshift8(msg_item, shifts as u8);\n // At this point the byte we want is in the rightmost position.\n msg_item as u8\n}\n\n// Project a byte into a position in a field based on the overall block pointer.\n// For example putting 1 into pointer 5 would be 100, because overall we would\n// have [____, 0100] with indexes [0123,4567].\nfn byte_into_item(msg_byte: u8, msg_byte_ptr: BLOCK_BYTE_PTR) -> u32 {\n let mut msg_item = msg_byte as u32;\n // How many times do we have to shift to the left to get to the position we want?\n let max_shifts = INT_SIZE - 1;\n let shifts = max_shifts - msg_byte_ptr % INT_SIZE;\n lshift8(msg_item, shifts as u8)\n}\n\n// Construct a field out of 4 bytes.\nfn make_item(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 {\n let mut item = b0 as u32;\n item = lshift8(item, 1) + b1 as u32;\n item = lshift8(item, 1) + b2 as u32;\n item = lshift8(item, 1) + b3 as u32;\n item\n}\n\n// Shift by 8 bits to the left between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise multiplies by 256.\nfn lshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n if item == 0 {\n 0\n } else {\n // Brillig wouldn't shift 0<<4 without overflow.\n item << (8 * shifts)\n }\n } else {\n // We can do a for loop up to INT_SIZE or an if-else.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item * TWO_POW_8\n } else if shifts == 2 {\n item * TWO_POW_16\n } else if shifts == 3 {\n item * TWO_POW_24\n } else {\n // Doesn't make sense, but it's most likely called on 0 anyway.\n 0\n }\n }\n}\n\n// Shift by 8 bits to the right between 0 and 4 times.\n// Checks `is_unconstrained()` to just use a bitshift if we're running in an unconstrained context,\n// otherwise divides by 256.\nfn rshift8(item: u32, shifts: u8) -> u32 {\n if is_unconstrained() {\n item >> (8 * shifts)\n } else {\n // Division wouldn't work on `Field`.\n if shifts == 0 {\n item\n } else if shifts == 1 {\n item / TWO_POW_8\n } else if shifts == 2 {\n item / TWO_POW_16\n } else if shifts == 3 {\n item / TWO_POW_24\n } else {\n 0\n }\n }\n}\n\n// Zero out all bytes between the end of the message and where the length is appended,\n// then write the length into the last 8 bytes of the block.\nunconstrained fn attach_len_to_msg_block(\n mut msg_block: MSG_BLOCK,\n mut msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) -> MSG_BLOCK {\n // We assume that `msg_byte_ptr` is less than 57 because if not then it is reset to zero before calling this function.\n // In any case, fill blocks up with zeros until the last 64 bits (i.e. until msg_byte_ptr = 56).\n // There can be one item which has to be partially zeroed.\n let modulo = msg_byte_ptr % INT_SIZE;\n if modulo != 0 {\n // Index of the block in which we find the item we need to partially zero.\n let i = msg_byte_ptr / INT_SIZE;\n let zeros = INT_SIZE - modulo;\n msg_block[i] = set_item_zeros(msg_block[i], zeros as u8);\n msg_byte_ptr = msg_byte_ptr + zeros;\n }\n\n // The rest can be zeroed without bit shifting anything.\n for i in (msg_byte_ptr / INT_SIZE)..INT_SIZE_PTR {\n msg_block[i] = 0;\n }\n\n // Set the last two 4 byte ints as the first/second half of the 8 bytes of the length.\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for i in 0..=1 {\n let shift = i * 4;\n msg_block[INT_SIZE_PTR + i] = make_item(\n len_bytes[shift],\n len_bytes[shift + 1],\n len_bytes[shift + 2],\n len_bytes[shift + 3],\n );\n }\n msg_block\n}\n\n// Verify that the message length was correctly written by `attach_len_to_msg_block`,\n// and that everything between the byte pointer and the size pointer was zeroed,\n// and that everything before the byte pointer was untouched.\nfn verify_msg_len(\n msg_block: MSG_BLOCK,\n last_block: MSG_BLOCK,\n msg_byte_ptr: BLOCK_BYTE_PTR,\n message_size: u32,\n) {\n // Check zeros up to the size pointer.\n verify_msg_block_zeros(msg_block, msg_byte_ptr, INT_SIZE_PTR);\n\n // Check that up to the pointer we match the last block.\n verify_msg_block_equals_last(msg_block, last_block, msg_byte_ptr);\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let mut reconstructed_len: u64 = 0;\n for i in INT_SIZE_PTR..INT_BLOCK_SIZE {\n reconstructed_len = reconstructed_len * TWO_POW_32;\n reconstructed_len = reconstructed_len + msg_block[i] as u64;\n }\n let len = 8 * message_size as u64;\n assert_eq(reconstructed_len, len);\n}\n\n// Perform the final compression, then transform the `STATE` into `HASH`.\nfn hash_final_block(msg_block: MSG_BLOCK, mut state: STATE) -> HASH {\n let mut out_h: HASH = [0; 32]; // Digest as sequence of bytes\n // Hash final padded block\n state = sha256_compression(msg_block, state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[j] as Field).to_be_bytes();\n for k in 0..4 {\n out_h[4 * j + k] = h_bytes[k];\n }\n }\n\n out_h\n}\n\n"
6037
6037
  },
6038
- "345": {
6038
+ "346": {
6039
6039
  "path": "/build-volume/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr",
6040
6040
  "source": "use dep::aztec::prelude::{NoteHeader, NoteInterface, NullifiableNote, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::{get_nsk_app, get_public_keys},\n protocol_types::{address::AztecAddress, constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator},\n macros::notes::note_custom_interface, generators::Ga1 as Gx_1, generators::Ga2 as Gx_2,\n generators::Ga3 as Gy_1, generators::Ga4 as Gy_2, generators::Ga5 as G_owner, generators::G_slot\n};\n\nuse std::hash::from_field_unsafe;\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: u32 = 5;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[note_custom_interface]\npub struct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n owner: AztecAddress,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic packing since x and y don't fit. Pack the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = owner\n fn pack_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.owner.to_field()]\n }\n\n // Cannot use the automatic unpacking for the aforementioned reasons\n fn unpack_content(packed_content: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = packed_content[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = packed_content[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = packed_content[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = packed_content[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, owner: AztecAddress::from_field(packed_content[4]), header: NoteHeader::empty() }\n }\n\n fn get_note_type_id() -> Field {\n // randomly chosen note type id --> has to fit within 7 bits\n 76\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_note_hash(self) -> Field {\n let packed_content = self.pack_content();\n std::embedded_curve_ops::multi_scalar_mul(\n [Gx_1, Gx_2, Gy_1, Gy_2, G_owner, G_slot],\n [\n from_field_unsafe(packed_content[0]),\n from_field_unsafe(packed_content[1]),\n from_field_unsafe(packed_content[2]),\n from_field_unsafe(packed_content[3]),\n from_field_unsafe(packed_content[4]),\n from_field_unsafe(self.get_header().storage_slot)\n ]\n ).x\n }\n}\n\nimpl NullifiableNote for EcdsaPublicKeyNote {\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let owner_npk_m_hash = get_public_keys(self.owner).npk_m.hash();\n let secret = context.request_nsk_app(owner_npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n\n unconstrained fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let owner_npk_m_hash = get_public_keys(self.owner).npk_m.hash();\n let secret = get_nsk_app(owner_npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], owner: AztecAddress) -> Self {\n EcdsaPublicKeyNote { x, y, owner, header: NoteHeader::empty() }\n }\n}\n"
6041
6041
  },
@@ -6049,7 +6049,7 @@
6049
6049
  },
6050
6050
  "6": {
6051
6051
  "path": "std/cmp.nr",
6052
- "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: StructDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl<T, let N: u32> Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<let N: u32> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: StructDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl<T, let N: u32> Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"
6052
+ "source": "use crate::meta::derive_via;\n\n#[derive_via(derive_eq)]\n// docs:start:eq-trait\npub trait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\n// docs:start:derive_eq\ncomptime fn derive_eq(s: StructDefinition) -> Quoted {\n let signature = quote { fn eq(_self: Self, _other: Self) -> bool };\n let for_each_field = |name| quote { (_self.$name == _other.$name) };\n let body = |fields| {\n if s.fields_as_written().len() == 0 {\n quote { true }\n } else {\n fields\n }\n };\n crate::meta::make_trait_impl(\n s,\n quote { Eq },\n signature,\n for_each_field,\n quote { & },\n body,\n )\n}\n// docs:end:derive_eq\n\nimpl Eq for Field {\n fn eq(self, other: Field) -> bool {\n self == other\n }\n}\n\nimpl Eq for u64 {\n fn eq(self, other: u64) -> bool {\n self == other\n }\n}\nimpl Eq for u32 {\n fn eq(self, other: u32) -> bool {\n self == other\n }\n}\nimpl Eq for u16 {\n fn eq(self, other: u16) -> bool {\n self == other\n }\n}\nimpl Eq for u8 {\n fn eq(self, other: u8) -> bool {\n self == other\n }\n}\nimpl Eq for u1 {\n fn eq(self, other: u1) -> bool {\n self == other\n }\n}\n\nimpl Eq for i8 {\n fn eq(self, other: i8) -> bool {\n self == other\n }\n}\nimpl Eq for i16 {\n fn eq(self, other: i16) -> bool {\n self == other\n }\n}\nimpl Eq for i32 {\n fn eq(self, other: i32) -> bool {\n self == other\n }\n}\nimpl Eq for i64 {\n fn eq(self, other: i64) -> bool {\n self == other\n }\n}\n\nimpl Eq for () {\n fn eq(_self: Self, _other: ()) -> bool {\n true\n }\n}\nimpl Eq for bool {\n fn eq(self, other: bool) -> bool {\n self == other\n }\n}\n\nimpl<T, let N: u32> Eq for [T; N]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T]\nwhere\n T: Eq,\n{\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0..self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<let N: u32> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B)\nwhere\n A: Eq,\n B: Eq,\n{\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n{\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n{\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E)\nwhere\n A: Eq,\n B: Eq,\n C: Eq,\n D: Eq,\n E: Eq,\n{\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0)\n & self.1.eq(other.1)\n & self.2.eq(other.2)\n & self.3.eq(other.3)\n & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\npub struct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n#[derive_via(derive_ord)]\n// docs:start:ord-trait\npub trait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// docs:start:derive_ord\ncomptime fn derive_ord(s: StructDefinition) -> Quoted {\n let signature = quote { fn cmp(_self: Self, _other: Self) -> std::cmp::Ordering };\n let for_each_field = |name| quote {\n if result == std::cmp::Ordering::equal() {\n result = _self.$name.cmp(_other.$name);\n }\n };\n let body = |fields| quote {\n let mut result = std::cmp::Ordering::equal();\n $fields\n result\n };\n crate::meta::make_trait_impl(s, quote { Ord }, signature, for_each_field, quote {}, body)\n}\n// docs:end:derive_ord\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u16 {\n fn cmp(self, other: u16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i16 {\n fn cmp(self, other: i16) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl<T, let N: u32> Ord for [T; N]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T]\nwhere\n T: Ord,\n{\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0..self.len() {\n if result == Ordering::equal() {\n result = self[i].cmp(other[i]);\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B)\nwhere\n A: Ord,\n B: Ord,\n{\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n{\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n{\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E)\nwhere\n A: Ord,\n B: Ord,\n C: Ord,\n D: Ord,\n E: Ord,\n{\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v1\n } else {\n v2\n }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T\nwhere\n T: Ord,\n{\n if v1 > v2 {\n v2\n } else {\n v1\n }\n}\n\nmod cmp_tests {\n use crate::cmp::{max, min};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"
6053
6053
  },
6054
6054
  "62": {
6055
6055
  "path": "/build-volume/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr",