@aztec/accounts 0.71.0 → 0.72.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/artifacts/EcdsaKAccount.json +492 -492
  2. package/artifacts/EcdsaRAccount.json +525 -525
  3. package/artifacts/SchnorrAccount.json +634 -634
  4. package/artifacts/SchnorrSingleKeyAccount.json +132 -132
  5. package/dest/defaults/account_contract.d.ts +1 -1
  6. package/dest/defaults/account_contract.d.ts.map +1 -1
  7. package/dest/ecdsa/ecdsa_k/account_contract.d.ts +1 -1
  8. package/dest/ecdsa/ecdsa_k/account_contract.d.ts.map +1 -1
  9. package/dest/ecdsa/ecdsa_k/account_contract.js +5 -5
  10. package/dest/ecdsa/ecdsa_k/index.d.ts +2 -1
  11. package/dest/ecdsa/ecdsa_k/index.d.ts.map +1 -1
  12. package/dest/ecdsa/ecdsa_k/index.js +3 -2
  13. package/dest/ecdsa/ssh_ecdsa_r/account_contract.d.ts +1 -1
  14. package/dest/ecdsa/ssh_ecdsa_r/account_contract.js +2 -2
  15. package/dest/ecdsa/ssh_ecdsa_r/index.d.ts +2 -1
  16. package/dest/ecdsa/ssh_ecdsa_r/index.d.ts.map +1 -1
  17. package/dest/ecdsa/ssh_ecdsa_r/index.js +3 -2
  18. package/dest/schnorr/account_contract.d.ts +1 -1
  19. package/dest/schnorr/account_contract.d.ts.map +1 -1
  20. package/dest/schnorr/account_contract.js +6 -6
  21. package/dest/schnorr/index.d.ts +2 -1
  22. package/dest/schnorr/index.d.ts.map +1 -1
  23. package/dest/schnorr/index.js +3 -2
  24. package/dest/single_key/account_contract.d.ts +1 -1
  25. package/dest/single_key/account_contract.d.ts.map +1 -1
  26. package/dest/single_key/account_contract.js +4 -4
  27. package/dest/single_key/index.d.ts +2 -1
  28. package/dest/single_key/index.d.ts.map +1 -1
  29. package/dest/single_key/index.js +3 -2
  30. package/dest/testing/configuration.d.ts.map +1 -1
  31. package/dest/testing/configuration.js +21 -13
  32. package/dest/testing/create_account.d.ts.map +1 -1
  33. package/dest/testing/create_account.js +6 -5
  34. package/package.json +8 -8
  35. package/src/defaults/account_contract.ts +1 -1
  36. package/src/ecdsa/ecdsa_k/account_contract.ts +4 -4
  37. package/src/ecdsa/ecdsa_k/index.ts +8 -2
  38. package/src/ecdsa/ssh_ecdsa_r/account_contract.ts +1 -1
  39. package/src/ecdsa/ssh_ecdsa_r/index.ts +8 -2
  40. package/src/schnorr/account_contract.ts +5 -5
  41. package/src/schnorr/index.ts +3 -2
  42. package/src/single_key/account_contract.ts +4 -4
  43. package/src/single_key/index.ts +3 -2
  44. package/src/testing/configuration.ts +44 -22
  45. package/src/testing/create_account.ts +5 -4
@@ -1,174 +1,13 @@
1
1
  {
2
2
  "transpiled": true,
3
- "noir_version": "1.0.0-beta.1+2d73c1d7bc5b1db7",
3
+ "noir_version": "1.0.0-beta.1+4ca7394b2efd7aef",
4
4
  "name": "EcdsaRAccount",
5
5
  "functions": [
6
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
- {
166
- "name": "verify_private_authwit",
7
+ "name": "entrypoint",
167
8
  "is_unconstrained": false,
168
9
  "custom_attributes": [
169
- "private",
170
- "noinitcheck",
171
- "view"
10
+ "private"
172
11
  ],
173
12
  "abi": {
174
13
  "error_types": {
@@ -193,22 +32,18 @@
193
32
  "error_kind": "string",
194
33
  "string": "Stack too deep"
195
34
  },
196
- "19458536156181958": {
197
- "error_kind": "string",
198
- "string": "Function verify_private_authwit can only be called statically"
199
- },
200
35
  "2920182694213909827": {
201
36
  "error_kind": "string",
202
37
  "string": "attempt to subtract with overflow"
203
38
  },
204
- "4939791462094160055": {
205
- "error_kind": "string",
206
- "string": "Message not authorized by account"
207
- },
208
39
  "5019202896831570965": {
209
40
  "error_kind": "string",
210
41
  "string": "attempt to add with overflow"
211
42
  },
43
+ "5727012404371710682": {
44
+ "error_kind": "string",
45
+ "string": "push out of bounds"
46
+ },
212
47
  "6869395374906889440": {
213
48
  "error_kind": "string",
214
49
  "string": "Mismatch note header contract address."
@@ -701,60 +536,224 @@
701
536
  "visibility": "private"
702
537
  },
703
538
  {
704
- "name": "inner_hash",
539
+ "name": "app_payload",
705
540
  "type": {
706
- "kind": "field"
707
- },
708
- "visibility": "private"
709
- }
710
- ],
711
- "return_type": {
712
- "abi_type": {
713
- "fields": [
714
- {
715
- "name": "call_context",
716
- "type": {
717
- "fields": [
718
- {
719
- "name": "msg_sender",
720
- "type": {
721
- "fields": [
722
- {
723
- "name": "inner",
724
- "type": {
725
- "kind": "field"
726
- }
541
+ "fields": [
542
+ {
543
+ "name": "function_calls",
544
+ "type": {
545
+ "kind": "array",
546
+ "length": 4,
547
+ "type": {
548
+ "fields": [
549
+ {
550
+ "name": "args_hash",
551
+ "type": {
552
+ "kind": "field"
727
553
  }
728
- ],
729
- "kind": "struct",
730
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
731
- }
732
- },
733
- {
734
- "name": "contract_address",
735
- "type": {
736
- "fields": [
737
- {
738
- "name": "inner",
739
- "type": {
740
- "kind": "field"
741
- }
554
+ },
555
+ {
556
+ "name": "function_selector",
557
+ "type": {
558
+ "fields": [
559
+ {
560
+ "name": "inner",
561
+ "type": {
562
+ "kind": "integer",
563
+ "sign": "unsigned",
564
+ "width": 32
565
+ }
566
+ }
567
+ ],
568
+ "kind": "struct",
569
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
742
570
  }
743
- ],
744
- "kind": "struct",
745
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
746
- }
747
- },
748
- {
749
- "name": "function_selector",
750
- "type": {
751
- "fields": [
752
- {
753
- "name": "inner",
754
- "type": {
755
- "kind": "integer",
756
- "sign": "unsigned",
757
- "width": 32
571
+ },
572
+ {
573
+ "name": "target_address",
574
+ "type": {
575
+ "fields": [
576
+ {
577
+ "name": "inner",
578
+ "type": {
579
+ "kind": "field"
580
+ }
581
+ }
582
+ ],
583
+ "kind": "struct",
584
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
585
+ }
586
+ },
587
+ {
588
+ "name": "is_public",
589
+ "type": {
590
+ "kind": "boolean"
591
+ }
592
+ },
593
+ {
594
+ "name": "is_static",
595
+ "type": {
596
+ "kind": "boolean"
597
+ }
598
+ }
599
+ ],
600
+ "kind": "struct",
601
+ "path": "authwit::entrypoint::function_call::FunctionCall"
602
+ }
603
+ }
604
+ },
605
+ {
606
+ "name": "nonce",
607
+ "type": {
608
+ "kind": "field"
609
+ }
610
+ }
611
+ ],
612
+ "kind": "struct",
613
+ "path": "authwit::entrypoint::app::AppPayload"
614
+ },
615
+ "visibility": "private"
616
+ },
617
+ {
618
+ "name": "fee_payload",
619
+ "type": {
620
+ "fields": [
621
+ {
622
+ "name": "function_calls",
623
+ "type": {
624
+ "kind": "array",
625
+ "length": 2,
626
+ "type": {
627
+ "fields": [
628
+ {
629
+ "name": "args_hash",
630
+ "type": {
631
+ "kind": "field"
632
+ }
633
+ },
634
+ {
635
+ "name": "function_selector",
636
+ "type": {
637
+ "fields": [
638
+ {
639
+ "name": "inner",
640
+ "type": {
641
+ "kind": "integer",
642
+ "sign": "unsigned",
643
+ "width": 32
644
+ }
645
+ }
646
+ ],
647
+ "kind": "struct",
648
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
649
+ }
650
+ },
651
+ {
652
+ "name": "target_address",
653
+ "type": {
654
+ "fields": [
655
+ {
656
+ "name": "inner",
657
+ "type": {
658
+ "kind": "field"
659
+ }
660
+ }
661
+ ],
662
+ "kind": "struct",
663
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
664
+ }
665
+ },
666
+ {
667
+ "name": "is_public",
668
+ "type": {
669
+ "kind": "boolean"
670
+ }
671
+ },
672
+ {
673
+ "name": "is_static",
674
+ "type": {
675
+ "kind": "boolean"
676
+ }
677
+ }
678
+ ],
679
+ "kind": "struct",
680
+ "path": "authwit::entrypoint::function_call::FunctionCall"
681
+ }
682
+ }
683
+ },
684
+ {
685
+ "name": "nonce",
686
+ "type": {
687
+ "kind": "field"
688
+ }
689
+ },
690
+ {
691
+ "name": "is_fee_payer",
692
+ "type": {
693
+ "kind": "boolean"
694
+ }
695
+ }
696
+ ],
697
+ "kind": "struct",
698
+ "path": "authwit::entrypoint::fee::FeePayload"
699
+ },
700
+ "visibility": "private"
701
+ },
702
+ {
703
+ "name": "cancellable",
704
+ "type": {
705
+ "kind": "boolean"
706
+ },
707
+ "visibility": "private"
708
+ }
709
+ ],
710
+ "return_type": {
711
+ "abi_type": {
712
+ "fields": [
713
+ {
714
+ "name": "call_context",
715
+ "type": {
716
+ "fields": [
717
+ {
718
+ "name": "msg_sender",
719
+ "type": {
720
+ "fields": [
721
+ {
722
+ "name": "inner",
723
+ "type": {
724
+ "kind": "field"
725
+ }
726
+ }
727
+ ],
728
+ "kind": "struct",
729
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
730
+ }
731
+ },
732
+ {
733
+ "name": "contract_address",
734
+ "type": {
735
+ "fields": [
736
+ {
737
+ "name": "inner",
738
+ "type": {
739
+ "kind": "field"
740
+ }
741
+ }
742
+ ],
743
+ "kind": "struct",
744
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
745
+ }
746
+ },
747
+ {
748
+ "name": "function_selector",
749
+ "type": {
750
+ "fields": [
751
+ {
752
+ "name": "inner",
753
+ "type": {
754
+ "kind": "integer",
755
+ "sign": "unsigned",
756
+ "width": 32
758
757
  }
759
758
  }
760
759
  ],
@@ -1813,20 +1812,24 @@
1813
1812
  "visibility": "databus"
1814
1813
  }
1815
1814
  },
1816
- "bytecode": "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",
1817
- "debug_symbols": "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",
1815
+ "bytecode": "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",
1816
+ "debug_symbols": "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Cau3L2H19iWs3r6E1duXsHr7ElZvX8Lq7UtYvX0Jq7cvYfX2JazevoTV25ewevsSVm9fwurtS1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3L2H19iWs3r6E1duXsHr7ElZvX8Lq7UtYvX0Jq7cvYfX2JazevoTV25ewevsyVm9fxurty1i9fRmrty87qFU5Y/X2ZazevozV25exevsyVm9fxurty1i9fRmrty9j9fZlrN6+jNXbl7F6+zJWb1/G6u3LWL19Gau3L2P19mWs3r6M1duXsXr7MlZvX8bq7ctYvX0Zq7cvY/X2ZazevozV25exevsyVm9fxurty1i9fRmrty9j9fZlrN6+jNXbl7F6+zJWb1/G6u3LWL19Gau3L2P19mWs3r6M1duXsXr7MlZvX8bq7ctYvX0Zq7cvY/X2ZazevozV25exevsyVm9fxurty1i9fRmrty9j9fZlrN6+jNXbl7F6+zJWb1/G6u3LWL19Gau3L2P19mWs3r6M1duXsXr7MlZvX8bq7ctYvX0Zq7cvY/X2ZazevozV25exevsyVm9fxurty1i9fRmrty9j9fZlrN6+jNXbl7F6+zJWb1/G6u3LWL19Gau3L2P19mWs3r6M1duXsXr7MlZvX8bq7ctYvX2K1dunWL19itXbp1i9feqgVmXF6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+xertU6zePsXq7VOs3j7F6u1TrN4+7d7bp9Fd0tHsjz85+nT55Og17BdLfXBxii7/uDhFH28v/ia0sAitHEJL907HtwkVFqGeRWhgERpZhCYWoZlF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",
1818
1817
  "brillig_names": [
1819
1818
  "get_note_internal",
1820
1819
  "decompose_hint",
1821
1820
  "get_auth_witness",
1822
1821
  "build_msg_block",
1823
1822
  "attach_len_to_msg_block",
1824
- "store_in_execution_cache_oracle_wrapper",
1823
+ "enqueue_public_function_call_internal",
1824
+ "call_private_function_internal",
1825
+ "debug_log_oracle_wrapper",
1826
+ "notify_set_min_revertible_side_effect_counter_oracle_wrapper",
1827
+ "notify_created_nullifier_oracle_wrapper",
1825
1828
  "directive_invert",
1826
1829
  "directive_integer_quotient",
1827
1830
  "directive_to_radix"
1828
1831
  ],
1829
- "verification_key": "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"
1832
+ "verification_key": "AAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAADKLEBAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAAAAAAAAABlqFzI5+d7YH06UQ/2zivWCIAE7+gTiwHg5SvHqtBn4I6252vn/w15ruKenFQSCCN84wpEGWxPztKt7kZ3aTbgP4ouAcqYUW7U0JBSlPafew7JWIFxLJQwSs0GnpszfswEQ3wTV/+cY9hXVZ1hz1QSgP0CNyYz68BvsOyEiLCB+IWSZYedT/QBUwBm0C9Ou4Z0UC1Zl2D0wUIyfvxAlzZAETF99z7pinGt/egNk43K2GqfNTvvgEDbEDAToh2QOPCG51eqcpGvs9I0Ud8ndcu0ITj4Ct7NzaUkwK6G+/MYMHqwQ2jXt8dzYvMRyevqZqILXeT6ZMNSsBQr3GypeyjYJprKGVhcHl83sXqp/UZeiUtIdMibYcW+TJdo39i9Z6hhr6J/4jz7kgFlsBwtuFJ80bVGYagW4WRuOzcBy/nnbE6AVvGbSJdYOeE1KqiJGVgFcKLgtMntQV1FX3CU4ACALMeMsXTTIvdYy48KQPIL3f4QpcxwJ1x9gHQ+LEhYWEwRWu3AbWwtGO7zwxP5xkFUjk9CVM+GyAEvYTp+KU6iPA4D05rswR3a/1Psi4gmHdBVkgemj+PCR0w2xADptqrQXi1+6ZLcvOFtO15wDTn30vfLS9qc1guKe94QIguOiURAIZszrzdK3fEz7f/kdvq2Sr9pQoZLZWl3HMYyqMxGrLGjfzrGH0+dGSuHmJ7Y3qsezuklQ0Y1sTOtTe4CJBZgfDmx0vxisEJ8//1A6PY8FltNVVzwJnE+6DOmYToOA3CYcZUhYAMuXR+aqvBf+tIVukPJ6XqWF/s1ukk97kPLyI/kcPDN3wRKOg7yZYizS6WAFF88Qo25hLvZHK9CGjcIQK/fcT6JpeBDBvVHvkOlrNj+BVPhI8dl99qu/mCqEWARlIVWO8yCdrnL3rpAIs+nt7UfOapFA6eWvavyJp3OqHLiIOkysYPsd+3B+l1cnnhslS/GuyGlR8UDB2nsma7Is5IOVWZRIHvaFIXB3tpRhE6seCGca1wuDghU2DmTbnh+IdbZp6acFsWiFiEsupqdJwccch7UJ16FhTTrKJAViBty2GGkguhQ41jsCQRD2U4wmpSCLzji8W+WX4eR+vRYdrT9OeARL9hl8vT43b2eXKhxyUOWHIsuXUpyFOu2kbCQ63qqKYxzfe8JYYVDbotaKSUEvRdYe9PqKE0NyZ/neLplV8cxGg9FGo+sJWi7Bd9aYsij9j21aMc6CcXDR2/IIcS/A0i5vpElCDYwJaL8DU4jj6t4QCDwOP5ZBU8mhDTBXM6n8jIfTLg9OFjGo8EMWaWBNQ1if0JtS60ChiYGTFEsrLwuuXcvRZoUECbnDoU7udSxbF3NZ2FN4oiZVB1IrIewgVJKS3BipGPxD1L+cgnT982boJrwzlKkd8HaZNxZFyfyjOowabRgkKKbnGzpF9YxMx7gfP2f4MKlIHk99E0V6Rr+vBCWsWOyVw5PvkxgT/cLEKParoVeGRVSnpeskDjAnu8S6tlnJgmIpDi0lovcOCCUtlFjOz04ejNOMkiCOhrjFw+egzRpu48fXI8KeUDrvIqUcTUQ5JAIMxvpVIXxT28QWmSonftLMU/mViapF84MYGLDYyhrthyV/NSQpIvfUTeL7fmOr/5wxXJU/WcRJ82GWbILbZFP6E0zIwBppIF0Vlsz4PIeILBbRM16AzkGfV+Ola3V/pSmI2/6wELT+d1mJIKDVYiN5wagHAZ2x8HZZX0TNxifiD2leQxMFajx7GPTQ2uZUTJGifQuzduzpg3v+z/RoCfWALaz4+gCy8lbuhHzgp0QqmLVqhnczt19QGhN7fQHP2NuJUfxLB/MMmhuW6NUCwgUR/1tYNfM+bM5OovQsyQDRQ+PcljAQKKrcdTbI9eDrQvsasaNRrFtBnahWobyJtJQyGFL3ywB2F2gJnOHRVG/Bxdk/CjtqPTJfX89l3gZv58BueZXXAWszdW7ZGSCfTW9caTziEkHLasnPFO6c8gr5yfNxJuoDCFNT8Uqdqwc8wZO5i0exkJD8MC6mlBb31PhzCo6IGh2j1/laWo1y4KkyTsKZzI3xXCXb+TZolkF9w2vZvsiqGrP4zmYlINF3dUOwovFRwJL+L+rryj9FJMic77eXQEIOnnzonrwmT9xpaUeQlWnS6Nx8yrFsTuHBSbQKhxl7vCDtQq4E8NraFolUJHckASv9dX/hNA/z8wVI4XPFTy4NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhx/Eay0wPb/F5PLwUGNHcUsh09kb0fwvLZ/siXcYrcgD84nVoPXdzRZKSZoiiYeCJguj6hbtGo1WPr2Xw/cd0wPy7+dPPQCuqPu2l8Knkm1werJWyZMMC3IVObyLXMw3yg+39qJyUgFl/CzRC6XUt751Y/Ckgg2GUJh97Fj/vuvHViqYcZK1SIEPXnEgCIZ5Vuhl1Gt/mw2Mk0/tsLaCYktfBipPD2uWICfqu7GqGp49LO8YfGdbnBpNZu/R+f5Bw=="
1830
1833
  },
1831
1834
  {
1832
1835
  "name": "sync_notes",
@@ -3524,7 +3527,7 @@
3524
3527
  }
3525
3528
  },
3526
3529
  "bytecode": "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",
3527
- "debug_symbols": "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",
3530
+ "debug_symbols": "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",
3528
3531
  "brillig_names": [
3529
3532
  "get_contract_instance_internal",
3530
3533
  "decompose_hint",
@@ -3546,10 +3549,118 @@
3546
3549
  "verification_key": "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"
3547
3550
  },
3548
3551
  {
3549
- "name": "entrypoint",
3552
+ "name": "compute_note_hash_and_optionally_a_nullifier",
3553
+ "is_unconstrained": true,
3554
+ "custom_attributes": [],
3555
+ "abi": {
3556
+ "error_types": {
3557
+ "11091894166229312484": {
3558
+ "error_kind": "fmtstring",
3559
+ "item_types": [],
3560
+ "length": 20
3561
+ },
3562
+ "16761564377371454734": {
3563
+ "error_kind": "string",
3564
+ "string": "Array index out of bounds"
3565
+ },
3566
+ "17843811134343075018": {
3567
+ "error_kind": "string",
3568
+ "string": "Stack too deep"
3569
+ },
3570
+ "2920182694213909827": {
3571
+ "error_kind": "string",
3572
+ "string": "attempt to subtract with overflow"
3573
+ },
3574
+ "5019202896831570965": {
3575
+ "error_kind": "string",
3576
+ "string": "attempt to add with overflow"
3577
+ },
3578
+ "8270195893599566439": {
3579
+ "error_kind": "string",
3580
+ "string": "Invalid public keys hint for address"
3581
+ }
3582
+ },
3583
+ "parameters": [
3584
+ {
3585
+ "name": "contract_address",
3586
+ "type": {
3587
+ "fields": [
3588
+ {
3589
+ "name": "inner",
3590
+ "type": {
3591
+ "kind": "field"
3592
+ }
3593
+ }
3594
+ ],
3595
+ "kind": "struct",
3596
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
3597
+ },
3598
+ "visibility": "private"
3599
+ },
3600
+ {
3601
+ "name": "nonce",
3602
+ "type": {
3603
+ "kind": "field"
3604
+ },
3605
+ "visibility": "private"
3606
+ },
3607
+ {
3608
+ "name": "storage_slot",
3609
+ "type": {
3610
+ "kind": "field"
3611
+ },
3612
+ "visibility": "private"
3613
+ },
3614
+ {
3615
+ "name": "note_type_id",
3616
+ "type": {
3617
+ "kind": "field"
3618
+ },
3619
+ "visibility": "private"
3620
+ },
3621
+ {
3622
+ "name": "compute_nullifier",
3623
+ "type": {
3624
+ "kind": "boolean"
3625
+ },
3626
+ "visibility": "private"
3627
+ },
3628
+ {
3629
+ "name": "serialized_note",
3630
+ "type": {
3631
+ "kind": "array",
3632
+ "length": 5,
3633
+ "type": {
3634
+ "kind": "field"
3635
+ }
3636
+ },
3637
+ "visibility": "private"
3638
+ }
3639
+ ],
3640
+ "return_type": {
3641
+ "abi_type": {
3642
+ "kind": "array",
3643
+ "length": 4,
3644
+ "type": {
3645
+ "kind": "field"
3646
+ }
3647
+ },
3648
+ "visibility": "public"
3649
+ }
3650
+ },
3651
+ "bytecode": "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",
3652
+ "debug_symbols": "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",
3653
+ "brillig_names": [
3654
+ "compute_note_hash_and_optionally_a_nullifier"
3655
+ ]
3656
+ },
3657
+ {
3658
+ "name": "verify_private_authwit",
3550
3659
  "is_unconstrained": false,
3551
3660
  "custom_attributes": [
3552
- "private"
3661
+ "private",
3662
+ "noinitcheck",
3663
+ "view"
3553
3664
  ],
3554
3665
  "abi": {
3555
3666
  "error_types": {
@@ -3574,17 +3685,21 @@
3574
3685
  "error_kind": "string",
3575
3686
  "string": "Stack too deep"
3576
3687
  },
3688
+ "19458536156181958": {
3689
+ "error_kind": "string",
3690
+ "string": "Function verify_private_authwit can only be called statically"
3691
+ },
3577
3692
  "2920182694213909827": {
3578
3693
  "error_kind": "string",
3579
3694
  "string": "attempt to subtract with overflow"
3580
3695
  },
3581
- "5019202896831570965": {
3696
+ "4939791462094160055": {
3582
3697
  "error_kind": "string",
3583
- "string": "attempt to add with overflow"
3698
+ "string": "Message not authorized by account"
3584
3699
  },
3585
- "5727012404371710682": {
3700
+ "5019202896831570965": {
3586
3701
  "error_kind": "string",
3587
- "string": "push out of bounds"
3702
+ "string": "attempt to add with overflow"
3588
3703
  },
3589
3704
  "6869395374906889440": {
3590
3705
  "error_kind": "string",
@@ -4053,198 +4168,34 @@
4053
4168
  "path": "authwit::aztec::protocol_types::abis::gas_fees::GasFees"
4054
4169
  }
4055
4170
  }
4056
- ],
4057
- "kind": "struct",
4058
- "path": "authwit::aztec::protocol_types::abis::gas_settings::GasSettings"
4059
- }
4060
- }
4061
- ],
4062
- "kind": "struct",
4063
- "path": "authwit::aztec::protocol_types::transaction::tx_context::TxContext"
4064
- }
4065
- },
4066
- {
4067
- "name": "start_side_effect_counter",
4068
- "type": {
4069
- "kind": "integer",
4070
- "sign": "unsigned",
4071
- "width": 32
4072
- }
4073
- }
4074
- ],
4075
- "kind": "struct",
4076
- "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
4077
- },
4078
- "visibility": "private"
4079
- },
4080
- {
4081
- "name": "app_payload",
4082
- "type": {
4083
- "fields": [
4084
- {
4085
- "name": "function_calls",
4086
- "type": {
4087
- "kind": "array",
4088
- "length": 4,
4089
- "type": {
4090
- "fields": [
4091
- {
4092
- "name": "args_hash",
4093
- "type": {
4094
- "kind": "field"
4095
- }
4096
- },
4097
- {
4098
- "name": "function_selector",
4099
- "type": {
4100
- "fields": [
4101
- {
4102
- "name": "inner",
4103
- "type": {
4104
- "kind": "integer",
4105
- "sign": "unsigned",
4106
- "width": 32
4107
- }
4108
- }
4109
- ],
4110
- "kind": "struct",
4111
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
4112
- }
4113
- },
4114
- {
4115
- "name": "target_address",
4116
- "type": {
4117
- "fields": [
4118
- {
4119
- "name": "inner",
4120
- "type": {
4121
- "kind": "field"
4122
- }
4123
- }
4124
- ],
4125
- "kind": "struct",
4126
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
4127
- }
4128
- },
4129
- {
4130
- "name": "is_public",
4131
- "type": {
4132
- "kind": "boolean"
4133
- }
4134
- },
4135
- {
4136
- "name": "is_static",
4137
- "type": {
4138
- "kind": "boolean"
4139
- }
4140
- }
4141
- ],
4142
- "kind": "struct",
4143
- "path": "authwit::entrypoint::function_call::FunctionCall"
4144
- }
4145
- }
4146
- },
4147
- {
4148
- "name": "nonce",
4149
- "type": {
4150
- "kind": "field"
4151
- }
4152
- }
4153
- ],
4154
- "kind": "struct",
4155
- "path": "authwit::entrypoint::app::AppPayload"
4156
- },
4157
- "visibility": "private"
4158
- },
4159
- {
4160
- "name": "fee_payload",
4161
- "type": {
4162
- "fields": [
4163
- {
4164
- "name": "function_calls",
4165
- "type": {
4166
- "kind": "array",
4167
- "length": 2,
4168
- "type": {
4169
- "fields": [
4170
- {
4171
- "name": "args_hash",
4172
- "type": {
4173
- "kind": "field"
4174
- }
4175
- },
4176
- {
4177
- "name": "function_selector",
4178
- "type": {
4179
- "fields": [
4180
- {
4181
- "name": "inner",
4182
- "type": {
4183
- "kind": "integer",
4184
- "sign": "unsigned",
4185
- "width": 32
4186
- }
4187
- }
4188
- ],
4189
- "kind": "struct",
4190
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
4191
- }
4192
- },
4193
- {
4194
- "name": "target_address",
4195
- "type": {
4196
- "fields": [
4197
- {
4198
- "name": "inner",
4199
- "type": {
4200
- "kind": "field"
4201
- }
4202
- }
4203
- ],
4204
- "kind": "struct",
4205
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
4206
- }
4207
- },
4208
- {
4209
- "name": "is_public",
4210
- "type": {
4211
- "kind": "boolean"
4212
- }
4213
- },
4214
- {
4215
- "name": "is_static",
4216
- "type": {
4217
- "kind": "boolean"
4218
- }
4171
+ ],
4172
+ "kind": "struct",
4173
+ "path": "authwit::aztec::protocol_types::abis::gas_settings::GasSettings"
4219
4174
  }
4220
- ],
4221
- "kind": "struct",
4222
- "path": "authwit::entrypoint::function_call::FunctionCall"
4223
- }
4224
- }
4225
- },
4226
- {
4227
- "name": "nonce",
4228
- "type": {
4229
- "kind": "field"
4175
+ }
4176
+ ],
4177
+ "kind": "struct",
4178
+ "path": "authwit::aztec::protocol_types::transaction::tx_context::TxContext"
4230
4179
  }
4231
4180
  },
4232
4181
  {
4233
- "name": "is_fee_payer",
4182
+ "name": "start_side_effect_counter",
4234
4183
  "type": {
4235
- "kind": "boolean"
4184
+ "kind": "integer",
4185
+ "sign": "unsigned",
4186
+ "width": 32
4236
4187
  }
4237
4188
  }
4238
4189
  ],
4239
4190
  "kind": "struct",
4240
- "path": "authwit::entrypoint::fee::FeePayload"
4191
+ "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
4241
4192
  },
4242
4193
  "visibility": "private"
4243
4194
  },
4244
4195
  {
4245
- "name": "cancellable",
4196
+ "name": "inner_hash",
4246
4197
  "type": {
4247
- "kind": "boolean"
4198
+ "kind": "field"
4248
4199
  },
4249
4200
  "visibility": "private"
4250
4201
  }
@@ -5354,40 +5305,35 @@
5354
5305
  "visibility": "databus"
5355
5306
  }
5356
5307
  },
5357
- "bytecode": "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",
5358
- "debug_symbols": "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KnusVdljrcoea1X2WKuyx1qVPdaqHLBWZazevojV2xexevsiVm9fxOrti1i9fRGrty9i9fZFrN6+iNXbF7F6+yJWb1/E6u2LWL19Eau3L2L19kWs3r6I1dsXsXr7IlZvX8Tq7YtYvX0Rq7cvYvX2RazevojV2xexevsiVm9fxOrti1i9fRGrty9i9fZFrN6+iNXbF7F6+yJWb1/E6u2LWL19Eau3L2L19kWs3r6I1dsXsXr7IlZvX8Tq7YtYvX0Rq7cvYvX2RazevojV2xexevsiVm9fxOrti1i9fRGrty9i9fZFrN6+iNXbF7F6+yJWb1/E6u2LWL19Eau3L2L19kWs3r6I1dsXsXr7IlZvX8Tq7YtYvX0Rq7cvYvX2RazevojV2xexevsiVm9fxOrti1i9fRGrt0+wevsEq7dPsHr7BKu3TxzUqixYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fYLV2ydYvX2C1dsnWL19gtXbJ1i9fQmrty9h9fYlrN6+hNXblxzUqpywevsSVm9fwurtS1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3L2H19iWs3r6E1duXsHr7ElZvX8Lq7UtYvX0Jq7cvYfX2JazevoTV25ewevsSVm9fwurtS1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3L2H19iWs3r6E1duXsHr7ElZvX8Lq7UtYvX0Jq7cvYfX2JazevoTV25ewevsSVm9fwurtS1i9fQmrty9h9fYlrN6+hNXbl7B6+xJWb1/C6u1LWL19Cau3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",
5308
+ "bytecode": "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",
5309
+ "debug_symbols": "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",
5359
5310
  "brillig_names": [
5360
5311
  "get_note_internal",
5361
5312
  "decompose_hint",
5362
5313
  "get_auth_witness",
5363
5314
  "build_msg_block",
5364
5315
  "attach_len_to_msg_block",
5365
- "enqueue_public_function_call_internal",
5366
- "call_private_function_internal",
5367
- "debug_log_oracle_wrapper",
5368
- "notify_set_min_revertible_side_effect_counter_oracle_wrapper",
5369
- "notify_created_nullifier_oracle_wrapper",
5316
+ "store_in_execution_cache_oracle_wrapper",
5370
5317
  "directive_invert",
5371
5318
  "directive_integer_quotient",
5372
5319
  "directive_to_radix"
5373
5320
  ],
5374
- "verification_key": "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"
5321
+ "verification_key": "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"
5375
5322
  },
5376
5323
  {
5377
- "name": "compute_note_hash_and_optionally_a_nullifier",
5324
+ "name": "process_log",
5378
5325
  "is_unconstrained": true,
5379
5326
  "custom_attributes": [],
5380
5327
  "abi": {
5381
5328
  "error_types": {
5382
- "11091894166229312484": {
5383
- "error_kind": "fmtstring",
5384
- "item_types": [],
5385
- "length": 20
5386
- },
5387
5329
  "16761564377371454734": {
5388
5330
  "error_kind": "string",
5389
5331
  "string": "Array index out of bounds"
5390
5332
  },
5333
+ "16954218183513903507": {
5334
+ "error_kind": "string",
5335
+ "string": "Attempted to read past end of BoundedVec"
5336
+ },
5391
5337
  "17843811134343075018": {
5392
5338
  "error_kind": "string",
5393
5339
  "string": "Stack too deep"
@@ -5400,83 +5346,137 @@
5400
5346
  "error_kind": "string",
5401
5347
  "string": "attempt to add with overflow"
5402
5348
  },
5349
+ "6753155520859132764": {
5350
+ "error_kind": "string",
5351
+ "string": "Failed to deliver note"
5352
+ },
5403
5353
  "8270195893599566439": {
5404
5354
  "error_kind": "string",
5405
5355
  "string": "Invalid public keys hint for address"
5356
+ },
5357
+ "8861757336002045335": {
5358
+ "error_kind": "fmtstring",
5359
+ "item_types": [
5360
+ {
5361
+ "kind": "integer",
5362
+ "sign": "unsigned",
5363
+ "width": 32
5364
+ },
5365
+ {
5366
+ "kind": "integer",
5367
+ "sign": "unsigned",
5368
+ "width": 32
5369
+ },
5370
+ {
5371
+ "kind": "field"
5372
+ }
5373
+ ],
5374
+ "length": 99
5375
+ },
5376
+ "9862881900111276825": {
5377
+ "error_kind": "fmtstring",
5378
+ "item_types": [
5379
+ {
5380
+ "kind": "field"
5381
+ }
5382
+ ],
5383
+ "length": 35
5406
5384
  }
5407
5385
  },
5408
5386
  "parameters": [
5409
5387
  {
5410
- "name": "contract_address",
5388
+ "name": "log_plaintext",
5411
5389
  "type": {
5412
5390
  "fields": [
5413
5391
  {
5414
- "name": "inner",
5392
+ "name": "storage",
5415
5393
  "type": {
5416
- "kind": "field"
5394
+ "kind": "array",
5395
+ "length": 18,
5396
+ "type": {
5397
+ "kind": "field"
5398
+ }
5399
+ }
5400
+ },
5401
+ {
5402
+ "name": "len",
5403
+ "type": {
5404
+ "kind": "integer",
5405
+ "sign": "unsigned",
5406
+ "width": 32
5417
5407
  }
5418
5408
  }
5419
5409
  ],
5420
5410
  "kind": "struct",
5421
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
5411
+ "path": "std::collections::bounded_vec::BoundedVec"
5422
5412
  },
5423
5413
  "visibility": "private"
5424
5414
  },
5425
5415
  {
5426
- "name": "nonce",
5416
+ "name": "tx_hash",
5427
5417
  "type": {
5428
5418
  "kind": "field"
5429
5419
  },
5430
5420
  "visibility": "private"
5431
5421
  },
5432
5422
  {
5433
- "name": "storage_slot",
5423
+ "name": "unique_note_hashes_in_tx",
5434
5424
  "type": {
5435
- "kind": "field"
5425
+ "fields": [
5426
+ {
5427
+ "name": "storage",
5428
+ "type": {
5429
+ "kind": "array",
5430
+ "length": 64,
5431
+ "type": {
5432
+ "kind": "field"
5433
+ }
5434
+ }
5435
+ },
5436
+ {
5437
+ "name": "len",
5438
+ "type": {
5439
+ "kind": "integer",
5440
+ "sign": "unsigned",
5441
+ "width": 32
5442
+ }
5443
+ }
5444
+ ],
5445
+ "kind": "struct",
5446
+ "path": "std::collections::bounded_vec::BoundedVec"
5436
5447
  },
5437
5448
  "visibility": "private"
5438
5449
  },
5439
5450
  {
5440
- "name": "note_type_id",
5451
+ "name": "first_nullifier_in_tx",
5441
5452
  "type": {
5442
5453
  "kind": "field"
5443
5454
  },
5444
5455
  "visibility": "private"
5445
5456
  },
5446
5457
  {
5447
- "name": "compute_nullifier",
5448
- "type": {
5449
- "kind": "boolean"
5450
- },
5451
- "visibility": "private"
5452
- },
5453
- {
5454
- "name": "serialized_note",
5458
+ "name": "recipient",
5455
5459
  "type": {
5456
- "kind": "array",
5457
- "length": 5,
5458
- "type": {
5459
- "kind": "field"
5460
- }
5460
+ "fields": [
5461
+ {
5462
+ "name": "inner",
5463
+ "type": {
5464
+ "kind": "field"
5465
+ }
5466
+ }
5467
+ ],
5468
+ "kind": "struct",
5469
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
5461
5470
  },
5462
5471
  "visibility": "private"
5463
5472
  }
5464
5473
  ],
5465
- "return_type": {
5466
- "abi_type": {
5467
- "kind": "array",
5468
- "length": 4,
5469
- "type": {
5470
- "kind": "field"
5471
- }
5472
- },
5473
- "visibility": "public"
5474
- }
5474
+ "return_type": null
5475
5475
  },
5476
- "bytecode": "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",
5477
- "debug_symbols": "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",
5476
+ "bytecode": "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",
5477
+ "debug_symbols": "7V3tjuy2kX2X+9s/xKriV15lsQicxBsYMOzAcRZYBHn37ZkeqTVXnGYPpZHYOsc/jHtt1bB4zhmpeEiV/v3tbz/95V9///PPv/7Pb//89qf/+ve3X377649//Pzbr5e//fs/P3z7y+8///LLz3//8/w/fxte/uX19fp//uPHX1/++s8/fvz9j29/cj7+8O2nX/92+VPwl/j/+fmXn779Kch/flhcmgb/dmkSnS5NpUu9jJd6P0yXOpX//PcP37ytTcSHMZGY7idimt8utZAWifiVieRB3y7NLt5PJEzgBQmLRMLaRMyNiXirJJKGt0vjsKQmrkxEght/vIQ59S/4LNkJE4D2/dUv2aSussk9ZROGrrJxXWUjXWWjXWVj+2aT43jfs5ylcrXKdGdXiberr5n7p808PG3m8WkzT0+bee4580u+Y+ZqfpZ54Se7aZbmon8/yzhAzNJBzHLf560fZLzaDxrX/K5FfdrM7Wkz90+beeg5881+myPELBPELPPOs4zjT/YvjsL9q53FcaXivHO3q2MuGiipZKBcDKDLPNMAMk8HMk8BmaeCzNNA5ulB5hlA5hlB5plA5glSD2WQeiiD1EMZpB7KIPVQNpB5gtRDGaQecsOJHixm40S9W070RHeiIONE52dgxol2fSu6XDNNVN9P9DX5ru8vteS7vmnUku96ZVRLvu/ljg235KXyy+181iltn2e5xOtU+17xbDlV1/ezadOp9r3u2XSqfS99Np3q6pojxrGmMZvXBeWpahwPx3obfOVqdVMZoTpo9Q78QdKv8zSQeXqQeQaQeUaQeSaQeWaMecoAMk8HMk8BmSdIPSQGMk+QekhA6iEBqYcEpB4SkHpIQeohBamHFKQeUpB6SA1kniD1kILUQwpSDylIPaQg9ZCB1EMGUg8ZSD1kIPWQGcg8QeohA6mHDKQeMpB6yEDqIQ9SD3mQesiD1EMepB5a3UDwWeYJUg95kHrIg9RDHqQe8iD1UACphwJIPRRA6qEAUg+t7+n5JPMEqYcCSD0UQOqhAFIPBZB6KILUQxGkHoog9VAEqYfW90Z9knmC1EMRpB6KIPVQBKmHIkg9lEDqoQRSDyWQeiiB1EPru68+yTxB6qEEUg8lkHoogdRDCaQeyiD1UAaphzJIPZRB6qH13VefZJ4g9VAGqYcySD2UQeqhjFEPyYBRD8mAUQ/JgFEPyYBRD8lgIPPEqIdkwKiHZMCoh2TAqIdkAKmHHEg95EDqIQdSD4H0pxaQ/tQC0p9aQPpTC0h/agHpTy0g/akFpD+1gPSnFpD+1ALSn1pA+lMLSH9qAelPLSD9qQWkP7WA9KcWkP7UAtKfWkD6UwtIf2oB6U8tIP2pBaQ/tYD0pxaQ/tQC0p9aQPpTC0h/agHpTy0g/akFpD+1gPSnFpD+1ALSn1pA+lMLSH9qAelPLSD9qQWkP7WA9KcWkP7UAtKfWkD6UwtIf2oB6U8tIP2pBaQ/tYD0pxaQ/tQC0p9aQPpTC0h/agHpTy0g/akFpD+1gPSnFpD+1ALSn1pA+lMLSH9qAelPLSD9qQWkP7WA9KcWkP7UAtKfWkD6UwtIf2oB6U8tIP2pBaQ/tYD0pxaQ/tQC0p9aQPpTC0h/agHpTy0g/akFpD+1gPSnFpD+1ALSn1pA+lMLSH9qAelPLSD9qRWkP7WC9KdWkP7UCtKfWgcDmSdGPaQg/akVpD+1gvSnVpD+1ArSn1pB+lMrSH9qBelPrSD9qRWkP7WC9KdWkP7UCtKfWkH6UytIf2oF6U+tIP2pFaQ/tYL0p1aQ/tQK0p9aQfpTK0h/agXpT60g/akVpD+1gvSnVpD+1ArSn1pB+lMrSH9qBelPrSD9qRWkP7WC9KdWhP7Uy0vDYGMaYUh2+8GSilen8WIJt2tjuiIIUGl9MYIANdwXI2hEcCWCAHXnFyMIUNF+MYIAtfIXIwhQhX8xggD1/dciiNDJ/YsR5JpkLYJck6xFkGuStQgaEVyJINckaxEEcdlBuvwrSJd/BenyryBd/hWky7+CdPlXkC7/CtLlX0G6/CtIl38F6fKvIF3+FaTLv4J0+VeQLv8K0uVfQbr8K0iXfwXp8q8gXf4VpMu/gnT5V5Au/wrS5V9BuvwrSJd/BenyryBd/hWky7+CdPlXkC7/CtLlX0G6/CtIl38F6fKvIF3+FaTLv4J0+VeQLv8K0uVfQbr8K0iXfwXp8m8gXf4NpMu/gXT5N5Au/zYYyDwx6iED6fJvIF3+DaTLv4F0+TeQLv8G0uXfQLr8G0iXfwPp8m8gXf4NpMu/gXT5N5Au/wbS5d9AuvwbSJd/A+nybyBd/g2ky7+BdPk3kC7/BtLl30C6/BtIl38D6fJvIF3+DaTLv4F0+TeELv/LS7OOV7rbT/VviED2QLqLCGSf1buIQPZNvYsIZB/Uu4hA9jW9hwjCFw4+iQhk39G7iED2Eb2LCGRf0LuIGBH5DhHWrN8jwpr1e0RAe/3LrLfrLI1ib1eXw9jc9fLHPF2t6q8Ygnb73xRD0H7/W2KI2vF/UwxBe/5viiFo1/9NMQTt+78phkYMV2MI2vt/UwxBv0i2KYZcp6zHkOuU9RhynbIaQ4SvLXw5hlynrMcQc51ibhgxvFhXFQwt5hFDS+LfYVhIwySMeViMt589uNIUL/Oapuhu/Ihp6epBJkDcLG9JoXB1CtPXm1LIN/gkDMVZDn6cZXS3bz2p6FUpmKsxKuXzSjEqhUp5SCmYK2sq5fNKwfQPqJTPKwXTJaFSPq8UTC+ISvm8UjAdLyrl00pB+GoYlbKJUjDdSyrl80qhR0ulPKYUerRUymNKMSqFSnlIKfRoqZTHlEKPlkp5TCn0aI9VirdpimEGSFkppm682jTOwI5XMmmjnohMOp3nIRPhk704ZNIvPBGZtPRORCZdtxORaSTzPGTSuzoRmbSXTkQmHaATkUkH6ERk0gE6D5mZDlCdzDyMV/shSoXMFMK4yZJCugHyshHyijhtmr0Rp5eyN+I0PPZG3Ij4zojTOtgbca7v90aci/B9Efe7f+xR3Zi8anx39Us6u3/bzt/SCbZMJ/SVTuwrndRXOntLOd3SyalytTk/LrnNxVsi19R3//TWhqm7501dnjd1fd7U7XlT98+bes+17L2f/Zp8z2VhNfme9yKqyffsvdeS7/ojRtXke7Ztq8n37IBWk+/ZTKwmb8+cfM8WVzX5Z37Cdv3FmWryz/yE7fobK7Xku/64STX5Z37Cdv05j2ryz/yE7foDFtXkn/kJ2/UnG6rJP/MTtuuPFFSTf+YnbNdt+avJP/MTtutG9NXkn/kJ23W77mryz/yE7bqpcTX5Z37Cdt36tZr8Mz9hu26QWU3+mZ+wXbcRrCb/zE/YrputVZPv+gmbh/FFDMk+Vq522Y9nuVye7dmOp7O6bmC18VS7fnpvO9Wun/XbTrXrymDTqXbd22bjqXZddWw71a5rlG2n2nVFs+1UDWeqxWrp3rHwH04CTEpj1jJIAZhAYMrARAJTBiYRmDIwmcAUgSm/7U5gfPmldALjy++Of67Z8TmBUQJTBsYITBkYT2DKwAQCUwYmEpgyMInAlIHJBKYETBgGAlMGxhGYMjCsfD8A5oPKN0/ARA2QwBiBKQPjCUwZmEBgysBEAlMGJhGYMjCZwBSBcZDdH+P4Y2ftZL1cAYFszngPECMg7wGBbG14DxDIzoP3AIFsDHgPEMgO9/cAgewSfwcQgey0fg8QyEbo9wBhpfodIKxUvwPECMh7QFipfgcIK9XvAGGl+h0grFS/A4SV6ntAlJXqd4CwUv0OEFaq3wHCSvU7QADqkNd5ApQXr/MEqBpe5wlQDLzMs+tezFvOE+DR/TpPgCfy6zwBHrSv8zSQeQIYOK/zBKmHum5cveU8QeqhrtthbzjPrjtnbzlPkHqo637cW84TpB7qusv3lvMEqYe67h2+5TxB6qGuO5JvOU+QeqjrPudbzhOkHuq6e/rXfcl5mN5WDEOafaK2+CXnML12EOT2qoSL6Yog5BbPpggaEVyJIORxp00RhDwftSmCkAeqtkSw6w73vSBo4wwvltUSQT6L6whOWYSQlgiCPotlhqCvIOhyGH+NL3/M09Wq/ooh6NN4UwxBn8ebYgj6RN4UQ8hT0RtjCHmQelsMu/5qQScYyjDcOj4MaYkh5HHtjTEE9Qs3xRB0lbIphkYMV2PIdcp6DLlOeQBDCxOGwZYYcp2yHkOuU9ZjWFynmEz5mMRZ8rmEiw1hwkXs/sVk50N2YliwU/5GB9nphB1HdjpmR8hOx+wo2emYHSM7HbPjyU7H7ASy0zE7XHevx5Dr7vUYcn9wLYZx4L5MHUM3jJ9gvvxRlhjSD38AQzf54U7cEkP64Q9gGPyEYdIlhnwur8eQz+X1GNIP74Wd7BfsOPrhPbNDP7xnduiH98wO/fCe2TGy0zE79MN7Zod+eM/sxNXsEPBPAZ4I+L6AZwK+K+CYH/dqx/Cyt7HEkK/trMeQ20PrMeRrOw9g6G/bQ2G5xYb5obKNMeQ25XoMuU25HkNuU67HkNuU6zHk8aHVGGJ+2m1jDLlOqWMoNh3BEp+WGHKdsh5DrlPWY2g06jthJw5LdrjJ1TM73OTqmZ1IdjpmJ5GdjtnhgdiO2TEeiO2ZHR6I7ZkdrrvXY8h193oMjRiuxpD7Mg9gmG3CMC9fp0X47OdqDNW5EUN1y7NPCJ8UXY+hzxOGcXnmBOFzpV+OIZ/L6zE0Vu+dsJPykh364T2zQz+8Z3boh/fMDv3wntmhH94xO4F+eM/s0A/vmZ31DSII+KcAVwK+L+BGwPcFnK/tfApDG5bdBVG/0r0phtweWo8hX9t5BMPb9pBfbrEFvrazGkPUL8ZviiG3KddjyG3K9Rhym3I9hkYMV2PIdcp6DLlOWY8h1ynrMeQ6ZT2GXKesxjBxnbIeQ65T1mPIdcp6DLlOqWNoccLQCnsByYjhagy5TlmPIdcp32H4igpXHiVUuJYoocLVQQGVzHq/hAor+BIqmDW5s/EHBxdsiQpmlV1DxYhKARXMSriGCmZtW0MFs7atoYJZ29ZQwaxt76OSBszatoYKZm1bQ4W1bQkV1rYlVIyoFFABrW3z+CmaIGFYogJa21ZQAa1tK6iA1rYVVEBr2/uoONDatoIKaG1bQQW0tq2gglnbSpo8fvXvUSn8YJ2udv5l6O8xNGK4GkPMunlbDDGr7G0xxKzJt8UQs4LfFkPMen9TDEE/Zr0thphriW0xLK48Ugj6FpVCugHzWqUT8buIi7v1OxB9j90r4krEd0bciPjOiHsivjPigYjvjHgk4jsjnoj4zojnMuKWJ8SzEvENES9/PJyIfyHijoiHfREXIr4z4krEd0bciPjOiHsivjPigYjvjHgk4jsjnoj4zohzzbkz4vbBmjNPiEcNRHxLxB0R3xlxIeI7I65EfGfEjYjvjLgn4jsjHoj4zohjnjo1N4wYmqUKhhZ1vNri7Ee/9IYrTNHn8WoftHqCa3Djl+ncoO8zeeUH80Tr8/CDeVr2afjxmCdxn4cfzFO+z8MP5ruLz8MP5luUz8OPkZ+u+cF8+/N5+MF8s/R5+KF/0Dc/9A/65of+Qdf8BPoHx/JjNvHjh7Dkh/5B3/zQP+ibH/oHffNj5Kdrfugf9M0P/YO++aF/0Dc/9A+O5edOh5/PXf3KJt2GE7EZ6U2ciU06GWdik77HmdikS3ImNo1snohNOjBnYpN+zZnYZBe903Jfe7Mosp8fLveZ3KNyn9jjEJd7dlvE5Z59H3G5ZwdKXO6N3MNyz66cuNyzPygu9+xUiss9e6bics/urbDcZ/p6uNyzoy0u9+yti8s9u/zicm/kHpZ7dj7G5Z49mHG5j+Qelnu+6fkAmzmNU0xSY9OpjldfqJLbzx5c6WfrhF6awWFv7PDNzX7ZyQPfxOyZHb5Z2TM7fFOyZ3b45mPP7BjZ6ZgdvpnYMzt807BndtgX6lB2vA+TEVFgh15Bz+zQK+iYHUev4Fh24mSxxrxkh15Bz+zQK+iZHXoFx7KTR/TCfIIjO0Z2OmaHXkHP7NAr6IWdOXgjO/QKemaHXsGh7IToxkTSsGSHXkHH7Ai9gp7ZoVdwLDvJj4lkW7JDr6BndugV9MyOkZ0j2YnDiEd0ackOvYKe2aFX0DM79Ap6YUfCkh16BT2zQ6+gY3aUXsGx7OSxok7DsqJWegU9s0OvoGd26BUcyk6anjupUFGrkZ2O2aFX0DM79AqOZUenD5KYLNmhV9AzO/QKemaHXkEv7PjlzrXRK+iZHXoFh7KT3Zh0LvhsRq+gZ3boFfTMjpGdQ9nR8Tzb5SGzZIdeQc/s0CvomR16BceyM71znUPhuUOvoGd26BV0zI6nV9ALO3G5N+rpFfTMDr2CQ9lxgx8zcUNYOm2ebkHf/Bj56ZofOgZb82MyPlCcxVjh52Ve0xTdrSOLmJauHsJ4zEqHWf8WSaF0dRxGajTOVrwvV79yTz8Cl3u6Hbjc00vB5Z5ODSz3gT4QLvd0mXC5p4eFyz39MVzujdzDck9fD5d7+nq43NPXw+Wevh4u9/T1YLmP9PVwuaevh8s9fT1c7unr4XJv5B6We/p6uNzT18Plnr4eLvf09XC5p68Hy32ir4fLPX09XO7p6+FyT18Pl3sj98/EvUyAuFneZe5TsKmNdMg3+OTlndzCLIdRVxbdrSuBil6VQheQSnlMKfQMqZTHlEKHkUp5TCn0I6mUx5RC95JKeUgpmZ4HlTLOMk5KyWmpFK59qJTrLG+fZrrMUpZK4drnxErJk1KihopSksl09Tzv8tU6dYQ0GWbXlhTi8qgQESfzi18VyDUVFXisArlWowKPVSDXgFTgkQp0w8CDNJTgwRLkeR5K8GAJ0mKjBA+WIE83UYIHS9AoQUrwWAlyB4MSPFiC3BqhBA+WIPdGKMGDJcjNEUrwYAlyd4QSPFaCjrsjlODBEuTuCCV4sAS5O0IJHixB7o5QggdL0ChBSvBYCXJ3hBI8WILcHaEED5Ygd0cowYMlyN0RSvBgCXJ3hBI8VoLC3RFK8GAJcneEEjxYgtwdoQQPliB3RyjBgyVIX5AS/GIJit4kaH4pQa6IKcEvlmB04w+WqLqQoHJFTAkeLEGuiCnBgyXIFTEleLAEuSKmBA+WoFGClOCxEuR5QUrwYAnSF6QED5YgzwtSggdLkOcFKcGDJcjdkWMlaDJJ0Cy+k+ArQca9g84JorPeOUH0nTsniK5s5wQZCeqbIDp6nRNEv6tzgugGdU5Q0StJIYxhKSRXWTeTzv2cFT9mon4G343OTDpPRKcfSOeZ6HSk80x0Cuk8E51KOs9Ep5HOM9Hpy3R+5jvtpLMfOgPpPBOdkXSeic5EOs9EZyadJ6IzDKTzTHQ60nkmOoV0nolOJZ1notNI55nopCt0Kjo/cIU+c+afdPZDZySdZ6Izkc4z0ZlJ54nojAPpPBOdjnSeiU4hnWeik+9WHUuQDxNBYbB3BBXAtskPEEuzn13CQ1wcTwiJy7OL0xv1RupRqef7YLDU800zWOr5Dhss9ewkBEs9O/igUp/YGwiWenYdOph6kxv1vkK9qRuvNo1uTv2VTbYoOhOb9NzOxKaRzROxSWfsTGzS7DoTm/SvzsQmLakzsUmX6URsZhpHZ2KTXtCZ2KQXdCY26QU9E5t2Y/Pyz5zNwo+OYQREk9Ml9UbqUamnywRLPS0pWOrpX8FST7MLlno6Y6DUu4E2Giz19NxgqadBB0s93TxY6o3Uo1JPNw+Werp5p6U+2fTFueTjknq6ebDU082DpZ5u3nmpv6GXYlhQ7+jmwVJPNw+Werp556U+u/FH5znWI/V082CpN1KPSj3dPAjqC26eo5sHSz3dPFjq6eZ1RH2uUH/ZaB3zfuktfp967/LIjBdnS+rp5p2WerEwUR+W63qhm3de6vNEvWpcUk83D5Z6unmnpV7jMGHtZEk93bzTUm9xTNv7ofCsN1J/WupDuFFfuOHTzTst9SGO63ofXcUEiEHHrGNISxNAaP1RJ4/ohD4hdfKITmgqUieP6IQOJHXygE6UdiV18ohO6G1SJ4/ohEYodfKITuiaUieP6MSoE+rkRRx5RC9G55Y6oR9LnTyiE/qx1MkjOqEfS5286CSKn3SieakT+rHUySM6oR9LnTygE6MfC6iTK/W0WGGpp2sKSz2NUFjqjdSjUk+7EpZ6OpCw1NNUhKWePiEs9bT+Tkt9chP1yUvF+qscdfC0/qiTR3RCn5A6eUQnNBWpk0d0QgeSOnlEJ0adUCcP6ITeJnXyiE5ohFInj+iEril18ohOaLFSJ3/Uj3Z7+rHUyQM6CfRjqZNHdEI/ljr5o360O9CPpU4e0Qn9WOrkAZ1Eo07wdHKlnhYrLPV0TWGpp3GBSn2iFwFLPe0FWOpZ5sFSzzIPlnrud8NSzwoflfrMCh+Welb4Z6U+uCmR4EJcUs89wfNSP9iN+rSkntt8sNQbqUelnpbOaakXNwISxC+/Fppp6Zz3tz77G/WFMo+WDiz1fCsBlnq6eaDUy0A3b3Pqh/wR9VfI6aLtDjndq90hp2v0Ocg11CB3w3Tfd+6WiKRQ+tkSb+jdro2hCMd4rZq8u/ZKpZHKs1BJV+c0VNKlOQ2VdF1OQyVdlNNQSVfkLFQ6uhynoZLuyWmopCtzGirp9pyGSiOVh1LpZELPKlQmkxG8NHdhJQwl8Py4J2UyzK4tcejyyKFc7tPzi68ioY9EkVRFQoeKIqmKhN4XRVIVCV01iqQqEvp1FElNJEInkCKpioQeI0VSFQndS4qkKhL6ohRJVSRGkVAkNZHQcaVIqiKh40qRVEVCx5UiqYqEjitFUhUJHVeKpCYSpeNKkVRFQseVIqmKhI4rRVIVCR1XiqQqEqNIKJKaSOi4UiRVkdBxpUiqIqHjSpFURULHlSKpioSOK0VSE4nRcaVIqiKh40qRVEViFAlFcrHLJpGYX4qEqxuKRKIbf7BE1aVIuLqhSKoi4eqGIqmJxHN1Q5FURcLVDUVSFQnPk1AkVZHwPAlFUhWJUSQUSU0kPE9CkVRFwvMkFElVJHRc6yJJwU0iyUNFJOonRblZysWvtYU8Ehn97FrNpSzCiLOfkf5y7ZVIuqInIZLO5TmIDHQXT0IkHcCTEEmX7iRE0kl7EiL99PFiH2LlWjdMMLsh3eYn+rZYCUbaEWmn2wVJO/2rVbRfQaS/swGI9FY2AJG+xnoQIz2FDUDken4DELmW3gBErmM3ANEI4noQucaqg5in7V8/RHkH4vLqFIK+XZ1Cmn1J8bKle4Wc65vdIedqaHfIuXbaHHKbzoqErAXIudLaG/LEddnukHMVtzvkXPPtDjlXiLtDboR8b8i5+twdcq4+d4ecq8/dIefqc3fIufrcHPI8QR5nL6lMkGeuPneHnKvP3SHn6nN3yLn63B1yI+R7Q87V5+6Qg64+o0yQR30H+RUW0BViDRbQVVwNFtCV1n1YdABdDdVgAV2x1GABXVXUYAGt/GuwGGEpwQJaQddgYZVbhIVVbhEWVrklWBxA3XKdKEAlcp0oQG1xnaihTBTg+X+dKMAT/TpRgGf0daIAT93rRAHcoteJStf+j1qcJprzu6uv2Xf9cKxm3/UTr5p914+xavZdP5uq2Xf9wKlm3/VTpJp9148GH8ZmNZfkq48Gm1rbuKCzXU3T61y166fDxnPteul8Z67X7LteD1ez7+dJeM2HxzLZDVwulvTbtXJxJ+YXv4qEn/ulSOoi4dFXiqQqEh7WpUiqIuHxYoqkKhKjSCiSmkh4hJsiqYqErzxTJCJZJpHMWJlEwpe0KZKqSPhaOUVSFQkdV4qkJhJPx5UiqYqEjitFUhUJHVeKpCoSOq4USVUkRpFQJDWR0HGlSKoioZlGkdREwq/yflIk4msisek7jG5OZfkDjy/zmqbobseDxbR09SATIG6Wd1mA9xoB7SnBys4QvydMCR4tQaMEKcFjJciSnhI8WII8okEJHixBrlkpwYMlyOMllODBEuThFUrwWF+Q37qnBI+WIA/eUIIHS5C7I5TgwRLk7ggleLAEjRKkBI+VIHdHKMGDJcjdEUrwYAlyd4QSPFiC3B2hBI+VYKI1TQkeLEGaMieWoE2iCrPmsmVRXWY54vcy4dss5a0NcDJKhVJ5nWVy4TZLV5AKTQ5K5UGp0IygVB6UCk0DSuVBqXBxT6m8SUX8NEu1glR4RJFSeUwqmX4NpfKgVHjkj1J5UCo8mkepPCgVurWUyoNSMUqFUnlMKnRrKZU3qQz5NkspSIVuLaXyoFTo1lIqD0qFbi2l8qBU6NZSKg9JxQa6tZTKg1KhW0upPCgVurWUyoNSoVtLqTwoFaNUKJXHpEK3llJ5UCp0aymVB6VCt5ZSeUwqDtNXGaY39MKQfEUqInmc4uWP77/GcgUR03H4HIg6bVzLJY8CiJhr8Y1BxFylbgyiEcT1IGKubD4Joks3EF0BRMyaf2MQMavhjUHE3NXfGETM/e5tQRSuWDYAkSuWDUDkiuUREN0EovMFELli2QBEI4jrQeSKZQMQuWLZAESuWDYAkSuWDUDkimU9iMoVywYgcsWyAYhcsWwAIlcsG4BoBHE9iKwT6yC6YTwVcvmjFEBknfgAiDop0WnhBISyTlwPorFO3ABE1okbgMg68QEQxW4gxgKIrBM3ANEI4noQ6WxvACKd7Q1A5IplAxC5YtkARK5YHgDRxQlEKZyA8FyxbAAiVywbgMgVywYgcsWyAYhGENeDyBXLBiByxbIBiFyxbAAiVywbgMgVy3oQA1csG4DIFcsGIBomiDYD0SogBhtnGPxsgjG9QQhaJX4Kwjhu9YUUChCC1ohbQghaIW4JIWh9uCWEoNXhhhBG0NpwSwhBK8MtIQR1sj8F4ZRFCKkAIaiPvSWERgjXQsjVyWoIuTpZDSFXJ6sh5OpkNYRcnayFMHF1shpCrk5WQ8jVyWoIuTpZDaERwrUQrq4Lw9RuW4IfahAOcfzJ3qnUQLks4cc8/JyemD+/S5TSeWYa/WQd+cJMM8pM8wAzUwczUznRTO9avFlhZmowM/UwMw0wMz1RjVSZ6ZlqpPszPVGNdLfC98OJaqTKTE9UI1VmeqIaqTLTE9VIlZkazExPVCNVZnqiGqky0xPVSJWZnqhGqswUpkZyMDWSg6mRyu12LQ6j+2TR3czz8UuIvtxgth4mbWHaFmbFsDR9jOuyu1QK821hoS0stoWltrDcFFZutlcPK6uk8plNX26oVg/TtjBrC/NtYaEtLLaFpbaw3BTmh7awNpWU33pPNr13lubfni1/8VX9+KFak2F2bemO7mbfNXUyv/iaTugrndhXOqmvdHJX6ZTfsz0uHddXOtJXOtpXOtZXOn3dlUNfd+XQ11059HVXDn3dlWNfd+XY11059nVXjn3dlWNfd+XY11059nVXjn3dlWNfd+XY11059XVXTn3dlVNfd+XU11057Sxl0Vs65hfp5J3Jim78wRJVl+loX+lYX+n4vtIJfaUT+0on9ZVO7imdMAx9peP6SmfnX3QdxmtFZ7tYUzqhr3RiX+mkvtLJXaXjhr7ScX2ls3P5JVmmdAa/TEf7Ssf6Ssf3lU7oK53YVzqpr3RyV+nI0Fc6rq90+roNlo9CaJjecdY4vO9XWziwJXnM5/LH+O7q10HKBye2HsTtMYjsMYhuMIjKNIhKaRDbYxC/xyBhi0F8mgbxuTBI3GOQtMcgeYdBwiacJJkGmXU4uA2yxUzCdON1QQszicMeg7g9BpGNB7FUGGSLe9ftrT0XkisMYnsM4vcYJGw8SB4Kg8Q9Bkl7DPLp3/jXsDS0hbm2MGkL07YwawvzbWGhLSy2haW2sDaV5DaV5DaV5DaV5DaV5DaV5DaV5DaV5DaV5DaV5CaVxGFoC3NtYdIWpm1h1hbm28JCW1hsC0ttYW0qcW0qcW0qcW0qcW0qcW0qcW0qcW0qcW0qcW0qcW0qkTaVSJtKpE0l0qYSaVOJtKlE2lQibSqRNpVIm0q0TSXaphJtU0n5FUZNOr74qSnkQpi1hfm2sNAWFtvCUltYbgorv8JYDyurJKXxFVzNzhfCpC1M28KsLcy3hYW2sNgWltrCyirJkz2jORR+TT9w4qthri1M2sK0LczawnxbWGgLK6skT90QbRhiISy1heWmsDC0hbm2MGkL07Ywawsrvw49iJvCvBbCQltYbAtLbWG5KazsjNfDXFuYtIWVX5ofwvhYNOdCIczawnxbWGgLi21hqS0sN4WloS3MtYVJW1ibSlKbSlKbSlKbSlKbSlKbSlKbSnKbSnKbSnKbSnKbSnKbSnKbSnKbSnKbSnKbSnKTStIwtIW5tjBpC9O2MGsL821hoS0stoWltrA2lXzgvV7szilM34cVTljFcFs3u9lnG+LbGG6HMWSHMXSHMWyHMfwOY4Qdxog7jJF2GCN//Riyxe95sslnST4ux3A7jCE7jKE7jLHFWRa7HfazWafA6eYucY9B0h6D5B0G0S1Or9n0QtllEC0M4vYYRPYYRPcYxPYYxO8xSNhjkLjxIFb6PUl7DJJ3GMQ2+Y0PfhokxsIgm/zGh+E2SCoMInsMssVvvHfTQWUvhRWJ2R6D+D0GCXsMEvcYJO0xSN5hkE3erpkPor4wiNtjkC1+4/3t1QQfh8Igm/zG+1uL6ugKg9geg2zyG5+mW73PJU7CHoPEHQYpb0+K+nEQ0RnKL2/eXcOkLUzbwqwtzLeFhbaw2BaW2sJyU9gH7Q1DGH+p0vyNjPKLlqK3XhqmvjCI22MQ2WMQ3WMQ22MQv8cgYY9B4h6DlF9mD9PnhS+/gLp6kLzDIB+0ztt4ELfHILLHILrHILbHIH6PQcIeg8Q9BtnjN/6DXoQhT4PEmePcOEge9hjE7TGI7DGI7jGI7TGI32OQooT9ZLl7mTfqeI3J5SMKlRjXECMNMdoQYw0xviEmNMTEhpjUENOgA9egg/KhAj/1fA3Llq+5fEigEqMNMdYQ4xtiQkNMbIhJDTH58zHlTepKTIMOpEEH0qCD8uZVpedkLu9GudtCxr1fyLxFhaao2BSVmqJyS1R5i+blGPAYFbNfRrmmKGmK0qYoa4ryTVGhKSo2RaWmqNwS5Zu04Zu04Zu04Zu04Zu04Zu04Zu0UfagX56wY1SWQlRqisotUeXXcqpRReTjMN7l4+wu79JbjG+IKaJ+eRqMMZaXMbEcM04oBl3GpIaYIt4xjQ+tOGvDNsaU/eNKTHmpOFV9yZa4feDuTp+evOzALGPKC7k4YpBKudn9mFzgtOzeuOF2BmGYfXR1VFzZjqlGlX9r3SQgd9k/XEbFpqjUFJVbosoeRTWqfEd3t4MZF4tlGSVNUWXkbbgdnRgKGcamqNQUlT8fJcPwwfec5bat6odllGuKkqYobYqypijfFBWaomJTVGqKyi1RrkkbH343+3auIcsySpqitCnKmqJ8U1RoiopNUaklqrz6dnqrmFSX943y+rsaJU1R2hRlTVG+KSo0RcWmqNQUlVuitEkb2qQN/UAbFqeosLzbqDZFWVOUb4oKTVGxKSo1ReWWqA8cmkq98YFDU4uSpihtifrgqKDksT5U1Vl96ErHrC4PwamMn+2aXJcMlyHc1w8hXz+Efv0Q9vVD+K8fInz9EPHrhygfBjY3vYBm3s+HuEbllqgPmqvYlGE5qvxrZYPejZKmKG2KspaosisRdXJZTBd3sfKxqIvVPToZ3i9jUkNM/nxM+QxSJcZ93i+5RElTlDZFWVOUb4oKTVGxKSo1ReWWqA98oFpUkzZykzZykzZykzZykzZykzZy+vw9puw45ckBv2yefh/jhs//7ruyA1QZxxpifENMaIiJDRikhpjP35uda+Cn7PhUYqQhRhtiyjqYzsVfthaWMb4hJjTExIaY1BCTPx9TdoUqMTUdlGIadCANOii7QZUY3xATGmIa7gfScD+QhvuBNtwPtOF+oA060AYdaIMOtEEH+kkd/Ofyt//98feff/zLLz/98xLx8j//9etf//j5t1/f/vrH//1j/D9/+f3nX375+e9//sfvv/31p7/96/ef/vzLb399+X/fhrd//ZcLlw1VFyxesnmBydwP3l3+/Hp/v2ym2Q+Xf+WX/+Be/8PF07/8y1/yuOTy/w==",
5478
5478
  "brillig_names": [
5479
- "compute_note_hash_and_optionally_a_nullifier"
5479
+ "process_log"
5480
5480
  ]
5481
5481
  }
5482
5482
  ],
@@ -5640,45 +5640,6 @@
5640
5640
  "kind": "struct",
5641
5641
  "path": "EcdsaRAccount::verify_private_authwit_abi"
5642
5642
  },
5643
- {
5644
- "fields": [
5645
- {
5646
- "name": "parameters",
5647
- "type": {
5648
- "fields": [
5649
- {
5650
- "name": "signing_pub_key_x",
5651
- "type": {
5652
- "kind": "array",
5653
- "length": 32,
5654
- "type": {
5655
- "kind": "integer",
5656
- "sign": "unsigned",
5657
- "width": 8
5658
- }
5659
- }
5660
- },
5661
- {
5662
- "name": "signing_pub_key_y",
5663
- "type": {
5664
- "kind": "array",
5665
- "length": 32,
5666
- "type": {
5667
- "kind": "integer",
5668
- "sign": "unsigned",
5669
- "width": 8
5670
- }
5671
- }
5672
- }
5673
- ],
5674
- "kind": "struct",
5675
- "path": "EcdsaRAccount::constructor_parameters"
5676
- }
5677
- }
5678
- ],
5679
- "kind": "struct",
5680
- "path": "EcdsaRAccount::constructor_abi"
5681
- },
5682
5643
  {
5683
5644
  "fields": [
5684
5645
  {
@@ -5861,6 +5822,45 @@
5861
5822
  ],
5862
5823
  "kind": "struct",
5863
5824
  "path": "EcdsaRAccount::entrypoint_abi"
5825
+ },
5826
+ {
5827
+ "fields": [
5828
+ {
5829
+ "name": "parameters",
5830
+ "type": {
5831
+ "fields": [
5832
+ {
5833
+ "name": "signing_pub_key_x",
5834
+ "type": {
5835
+ "kind": "array",
5836
+ "length": 32,
5837
+ "type": {
5838
+ "kind": "integer",
5839
+ "sign": "unsigned",
5840
+ "width": 8
5841
+ }
5842
+ }
5843
+ },
5844
+ {
5845
+ "name": "signing_pub_key_y",
5846
+ "type": {
5847
+ "kind": "array",
5848
+ "length": 32,
5849
+ "type": {
5850
+ "kind": "integer",
5851
+ "sign": "unsigned",
5852
+ "width": 8
5853
+ }
5854
+ }
5855
+ }
5856
+ ],
5857
+ "kind": "struct",
5858
+ "path": "EcdsaRAccount::constructor_parameters"
5859
+ }
5860
+ }
5861
+ ],
5862
+ "kind": "struct",
5863
+ "path": "EcdsaRAccount::constructor_abi"
5864
5864
  }
5865
5865
  ]
5866
5866
  }
@@ -5876,7 +5876,7 @@
5876
5876
  },
5877
5877
  "108": {
5878
5878
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/macros/functions/initialization_utils.nr",
5879
- "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\nfn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
5879
+ "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::GENERATOR_INDEX__CONSTRUCTOR, hash::poseidon2_hash_with_separator,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext},\n oracle::get_contract_instance::{\n get_contract_instance, get_contract_instance_deployer_avm,\n get_contract_instance_initialization_hash_avm,\n },\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier =\n compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let deployer = get_contract_instance_deployer_avm(address).unwrap();\n let initialization_hash = get_contract_instance_initialization_hash_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (deployer.is_zero()) | (deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()),\n \"Initializer address is not the contract deployer\",\n );\n}\n\n/// This function is not only used in macros but it's also used by external people to check that an instance has been\n/// initialized with the correct constructor arguments. Don't hide this unless you implement factory functionality.\npub fn compute_initialization_hash(\n init_selector: FunctionSelector,\n init_args_hash: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR,\n )\n}\n"
5880
5880
  },
5881
5881
  "117": {
5882
5882
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/note/discovery/mod.nr",
@@ -5912,7 +5912,7 @@
5912
5912
  },
5913
5913
  "133": {
5914
5914
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/execution_cache.nr",
5915
- "source": "/// Stores values represented as slice in execution cache to be later obtained by its hash.\npub fn store(values: [Field]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call. When loading the values, however, the caller must check that the values are indeed the preimage.\n unsafe { store_in_execution_cache_oracle_wrapper(values) };\n}\n\n/// Stores values represented as array in execution cache to be later obtained by its hash.\npub fn store_array<let N: u32>(values: [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. When loading the values, however, the caller must check that the values are indeed the preimage.\n unsafe { store_array_in_execution_cache_oracle_wrapper(values) };\n}\n\npub unconstrained fn store_in_execution_cache_oracle_wrapper(values: [Field]) {\n let _ = store_in_execution_cache_oracle(values);\n}\n\npub unconstrained fn store_array_in_execution_cache_oracle_wrapper<let N: u32>(values: [Field; N]) {\n let _ = store_array_in_execution_cache_oracle(values);\n}\n\npub unconstrained fn load<let N: u32>(hash: Field) -> [Field; N] {\n load_from_execution_cache_oracle(hash)\n}\n\n#[oracle(storeInExecutionCache)]\nunconstrained fn store_in_execution_cache_oracle(_values: [Field]) -> Field {}\n\n#[oracle(storeArrayInExecutionCache)]\nunconstrained fn store_array_in_execution_cache_oracle<let N: u32>(_args: [Field; N]) -> Field {}\n\n#[oracle(loadFromExecutionCache)]\nunconstrained fn load_from_execution_cache_oracle<let N: u32>(_hash: Field) -> [Field; N] {}\n"
5915
+ "source": "/// Stores values represented as slice in execution cache to be later obtained by its hash.\npub fn store(values: [Field]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call. When loading the values, however, the caller must check that the values are indeed the preimage.\n unsafe { store_in_execution_cache_oracle_wrapper(values) };\n}\n\npub unconstrained fn store_in_execution_cache_oracle_wrapper(values: [Field]) {\n let _ = store_in_execution_cache_oracle(values);\n}\n\npub unconstrained fn load<let N: u32>(hash: Field) -> [Field; N] {\n load_from_execution_cache_oracle(hash)\n}\n\n#[oracle(storeInExecutionCache)]\nunconstrained fn store_in_execution_cache_oracle(_values: [Field]) -> Field {}\n\n#[oracle(loadFromExecutionCache)]\nunconstrained fn load_from_execution_cache_oracle<let N: u32>(_hash: Field) -> [Field; N] {}\n"
5916
5916
  },
5917
5917
  "134": {
5918
5918
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr",
@@ -5940,7 +5940,7 @@
5940
5940
  },
5941
5941
  "152": {
5942
5942
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr",
5943
- "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator,\n traits::{Deserialize, Serialize},\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note,\n note_emission::NoteEmission,\n note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context, let N: u32> Storage<T, N> for PrivateImmutable<T, Context>\nwhere\n T: Serialize<N> + Deserialize<N>,\n{\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(self, note: &mut Note) -> NoteEmission<Note>\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n pub unconstrained fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n pub unconstrained fn view_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"
5943
+ "source": "use dep::protocol_types::{\n constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator,\n traits::Packable,\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note,\n note_emission::NoteEmission,\n note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote},\n note_viewer_options::NoteViewerOptions,\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context, let N: u32> Storage<T, N> for PrivateImmutable<T, Context>\nwhere\n T: Packable<N>,\n{\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(self, note: &mut Note) -> NoteEmission<Note>\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n pub unconstrained fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n pub unconstrained fn view_note<let N: u32>(self) -> Note\n where\n Note: NoteInterface<N> + NullifiableNote,\n {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"
5944
5944
  },
5945
5945
  "17": {
5946
5946
  "path": "std/embedded_curve_ops.nr",
@@ -5970,39 +5970,39 @@
5970
5970
  "path": "std/hash/mod.nr",
5971
5971
  "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"
5972
5972
  },
5973
- "235": {
5973
+ "236": {
5974
5974
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr",
5975
5975
  "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"
5976
5976
  },
5977
- "242": {
5977
+ "243": {
5978
5978
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
5979
- "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, 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\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"
5979
+ "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"
5980
5980
  },
5981
- "245": {
5981
+ "246": {
5982
5982
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr",
5983
5983
  "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"
5984
5984
  },
5985
- "247": {
5985
+ "248": {
5986
5986
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr",
5987
5987
  "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"
5988
5988
  },
5989
- "252": {
5989
+ "253": {
5990
5990
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr",
5991
5991
  "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"
5992
5992
  },
5993
- "258": {
5993
+ "259": {
5994
5994
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
5995
5995
  "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"
5996
5996
  },
5997
- "259": {
5998
- "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
5999
- "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 = std::hash::sha256(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_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_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 contructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(contructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == contructed_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 = std::hash::sha256(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"
6000
- },
6001
5997
  "26": {
6002
5998
  "path": "std/hash/poseidon2.nr",
6003
5999
  "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"
6004
6000
  },
6005
6001
  "260": {
6002
+ "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
6003
+ "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 = std::hash::sha256(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 = std::hash::sha256(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"
6004
+ },
6005
+ "261": {
6006
6006
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/indexed_tagging_secret.nr",
6007
6007
  "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"
6008
6008
  },
@@ -6010,31 +6010,31 @@
6010
6010
  "path": "std/hash/sha256.nr",
6011
6011
  "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"
6012
6012
  },
6013
- "275": {
6013
+ "276": {
6014
6014
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/point.nr",
6015
- "source": "pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{hash::poseidon2_hash, traits::{Deserialize, Empty, Hash, 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"
6015
+ "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"
6016
6016
  },
6017
- "276": {
6017
+ "277": {
6018
6018
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
6019
6019
  "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"
6020
6020
  },
6021
- "285": {
6021
+ "286": {
6022
6022
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
6023
6023
  "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"
6024
6024
  },
6025
- "321": {
6025
+ "323": {
6026
6026
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/arrays.nr",
6027
6027
  "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"
6028
6028
  },
6029
- "324": {
6029
+ "326": {
6030
6030
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
6031
6031
  "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"
6032
6032
  },
6033
- "329": {
6033
+ "331": {
6034
6034
  "path": "/root/nargo/github.com/noir-lang/ec/v0.1.2/src/lib.nr",
6035
6035
  "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"
6036
6036
  },
6037
- "333": {
6037
+ "335": {
6038
6038
  "path": "/build-volume/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr",
6039
6039
  "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 serialization since x and y don't fit. Serialize 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 serialize_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 deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [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] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, owner: AztecAddress::from_field(serialized_note[4]), header: NoteHeader::empty() }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] = [0; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = EcdsaPublicKeyNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\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 serialized = self.serialize_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(serialized[0]),\n from_field_unsafe(serialized[1]),\n from_field_unsafe(serialized[2]),\n from_field_unsafe(serialized[3]),\n from_field_unsafe(serialized[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"
6040
6040
  },
@@ -6080,11 +6080,11 @@
6080
6080
  },
6081
6081
  "79": {
6082
6082
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
6083
- "source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, returns_hash::ReturnsHash},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n execution_cache,\n key_validation_request::get_key_validation_request,\n notes::{notify_created_nullifier, notify_nullified_note},\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n notify_created_nullifier(nullifier);\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n let nullifier_counter = self.next_counter();\n notify_nullified_note(nullifier, nullified_note_hash, nullifier_counter);\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: nullifier_counter,\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n execution_cache::store(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n\n /// Safety: Kernels verify that the key validation request is valid and below we verify that a request\n /// for the correct public key has been received.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert_eq(request.pk_m.hash(), pk_m_hash, \"Obtained invalid key validation request\");\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store_array(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store_array(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> ReturnsHash {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n /// Safety: The oracle simulates the private call and returns the value of the side effects counter after\n /// execution of the call (which means that end_side_effect_counter - start_side_effect_counter is\n /// the number of side effects that took place), along with the hash of the return values. We validate these\n /// by requesting a private kernel iteration in which the return values are constrained to hash\n /// to `returns_hash` and the side effects counter to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n ReturnsHash::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store_array(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store_array(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store_array(args);\n self.set_public_teardown_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
6083
+ "source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, returns_hash::ReturnsHash},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n execution_cache,\n key_validation_request::get_key_validation_request,\n notes::{notify_created_nullifier, notify_nullified_note},\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n notify_created_nullifier(nullifier);\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n let nullifier_counter = self.next_counter();\n notify_nullified_note(nullifier, nullified_note_hash, nullifier_counter);\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: nullifier_counter,\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n execution_cache::store(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n\n /// Safety: Kernels verify that the key validation request is valid and below we verify that a request\n /// for the correct public key has been received.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert_eq(request.pk_m.hash(), pk_m_hash, \"Obtained invalid key validation request\");\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> ReturnsHash {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n /// Safety: The oracle simulates the private call and returns the value of the side effects counter after\n /// execution of the call (which means that end_side_effect_counter - start_side_effect_counter is\n /// the number of side effects that took place), along with the hash of the return values. We validate these\n /// by requesting a private kernel iteration in which the return values are constrained to hash\n /// to `returns_hash` and the side effects counter to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n ReturnsHash::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.set_public_teardown_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
6084
6084
  },
6085
6085
  "82": {
6086
6086
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr",
6087
- "source": "use crate::oracle::{\n execution::{get_block_number, get_chain_id, get_contract_address, get_version},\n storage::storage_read,\n};\nuse dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\npub struct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n pub unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub fn block_number(self) -> u32 {\n self.block_number\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n pub fn version(self) -> Field {\n self.version\n }\n\n pub fn chain_id(self) -> Field {\n self.chain_id\n }\n\n pub unconstrained fn raw_storage_read<let N: u32>(\n self: Self,\n storage_slot: Field,\n ) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n pub unconstrained fn storage_read<T, let N: u32>(self, storage_slot: Field) -> T\n where\n T: Deserialize<N>,\n {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"
6087
+ "source": "use crate::oracle::{\n execution::{get_block_number, get_chain_id, get_contract_address, get_version},\n storage::storage_read,\n};\nuse dep::protocol_types::{address::AztecAddress, traits::Packable};\n\npub struct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n pub unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n pub fn block_number(self) -> u32 {\n self.block_number\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n pub fn version(self) -> Field {\n self.version\n }\n\n pub fn chain_id(self) -> Field {\n self.chain_id\n }\n\n pub unconstrained fn raw_storage_read<let N: u32>(\n self: Self,\n storage_slot: Field,\n ) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n pub unconstrained fn storage_read<T, let N: u32>(self, storage_slot: Field) -> T\n where\n T: Packable<N>,\n {\n T::unpack(self.raw_storage_read(storage_slot))\n }\n}\n"
6088
6088
  },
6089
6089
  "85": {
6090
6090
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr",
@@ -6096,11 +6096,11 @@
6096
6096
  },
6097
6097
  "88": {
6098
6098
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr",
6099
- "source": "use dep::protocol_types::{\n address::AztecAddress, constants::PRIVATE_LOG_SIZE_IN_FIELDS, hash::poseidon2_hash,\n point::Point, public_keys::AddressPoint, scalar::Scalar, utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::secret_derivation::derive_aes_secret,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n /// Safety: We assume that the sender wants for the recipient to find the tagged note, and therefore that they\n /// will cooperate and use the correct tag. Usage of a bad tag will result in the recipient not being able to\n /// find the note automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M - 32] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n /// Safety: We assume that the sender wants for the recipient to find the tagged note, and therefore that they\n /// will cooperate and use the correct tag. Usage of a bad tag will result in the recipient not being able to\n /// find the note automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n // TODO(#10273) This should be done by the AVM when it's processing the raw logs instead of their hashes.\n let siloed_tag_bytes: [u8; 32] =\n poseidon2_hash([contract_address.to_field(), tag]).to_be_bytes();\n\n // Temporary hack so that the partial public log remains the same format.\n // It should return field array and make the tag the first field as compute_private_log_payload does.\n let mut log_bytes = [0; M];\n for i in 0..32 {\n log_bytes[i] = siloed_tag_bytes[i];\n }\n for i in 0..encrypted.len() {\n log_bytes[i + 32] = encrypted[i];\n }\n\n log_bytes\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n // Nargo seems to struggle with realizing that `offset` is a constant at this point.\n // We then redefine it in terms of the assertion above to give nargo a hint.\n let offset = M - incoming_body_ciphertext.len();\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n /// Safety: A malicious sender could reveal the whole contents of the encrypted log so trusting it to set\n /// a random padding in plaintext is fine.\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained 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\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n\n /// Safety: We use the randomness to preserve the privacy of both the sender and recipient via encryption, so\n /// a malicious sender could use non-random values to reveal the plaintext. But they already know it themselves\n /// anyway, and so the recipient already trusts them to not disclose this information. We can therefore assume\n /// that the sender will cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8; P + 16 - P % 16] {\n let full_key = derive_aes_secret(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_private_log_payload,\n MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{address::AztecAddress, point::Point, scalar::Scalar};\n use protocol_types::public_keys::AddressPoint;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getIndexedTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a900000000000000000000000000,\n 0x000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba9dc0cec8c7,\n 0x000b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b7295748ad19c,\n 0x001083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd59b3781c9c0,\n 0x002a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162a6e9d06765,\n 0x005cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf62c2f49f549,\n 0x00f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25881548ec96,\n 0x0006a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f89970aeb3d9,\n 0x00489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea19222fb10df35,\n 0x008c765edada497db4284ae30507a2e03e983d23cfa0bd831577e857bbef9cf7,\n 0x0090c97cb5699cc8783a1b4276d929be2882e5b9b72829a4f8404f7e3c853d11,\n 0x00d6d5a000b80134891e95f81007ad35d3945eaeecbe137fff85d01d7eaf8f19,\n 0x00a15eb965c6a4bc97aa87fd3463c31c9d4e0d722a8ba870bcc50c9c7a8b48ad,\n 0x0063c861bdbe490d44c57382decbae663927909652f87ac18dcfd5b30649cce5,\n 0x00820f14caa725efe1fa3485ceac88499eadf0565c5b20998c05931bbf478e68,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\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, 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, 0, 0,\n 0, 0, 0, 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,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 2, 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, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"
6099
+ "source": "use dep::protocol_types::{\n address::AztecAddress, constants::PRIVATE_LOG_SIZE_IN_FIELDS, hash::poseidon2_hash,\n point::Point, public_keys::AddressPoint, scalar::Scalar, utils::arrays::array_concat,\n};\nuse std::{\n aes128::aes128_encrypt, embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe,\n};\n\nuse crate::{\n encrypted_logs::header::EncryptedLogHeader,\n keys::secret_derivation::derive_aes_secret,\n oracle::{\n notes::{get_app_tag_as_sender, increment_app_tagging_secret_index_as_sender},\n random::random,\n },\n utils::{bytes::bytes_to_fields, point::point_to_bytes},\n};\n\n// 1 field is reserved for tag.\nglobal ENCRYPTED_PAYLOAD_SIZE_IN_BYTES: u32 = (PRIVATE_LOG_SIZE_IN_FIELDS - 1) * 31;\n\ncomptime global HEADER_SIZE: u32 = 48;\n\n// Bytes padded to the overhead, so that the size of the incoming body ciphertext will be a multiple of 16.\ncomptime global OVERHEAD_PADDING: u32 = 15;\n\npub comptime global OVERHEAD_SIZE: u32 = 32 /* eph_pk */\n + HEADER_SIZE /* incoming_header */\n + OVERHEAD_PADDING /* padding */;\n\nglobal PLAINTEXT_LENGTH_SIZE: u32 = 2;\n\n// This is enough for 8 fields of data.\n// 1 field for storage slot, 1 field for note/event type id, allowing 6 fields for custom values.\nglobal MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES: u32 =\n ENCRYPTED_PAYLOAD_SIZE_IN_BYTES - OVERHEAD_SIZE - PLAINTEXT_LENGTH_SIZE - 1 /* aes padding */;\n\n// Note: Might have to update PRIVATE_LOG_SIZE_IN_FIELDS in `constants.nr` if the above changes.\n// This value ideally should be set by the protocol, allowing users (or `aztec-nr`) to fit data within the defined size limits.\n// Currently, we adjust this value as the structure changes, then update `constants.nr` to match.\n// Once the structure is finalized with defined overhead and max note field sizes, this value will be fixed and should remain unaffected by further payload composition changes.\n\npub fn compute_private_log_payload<let P: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; PRIVATE_LOG_SIZE_IN_FIELDS] {\n assert(\n P < MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n f\"plaintext for log must not exceed {MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES}\",\n );\n\n let extended_plaintext: [u8; MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; ENCRYPTED_PAYLOAD_SIZE_IN_BYTES] =\n compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n /// Safety: We assume that the sender wants for the recipient to find the tagged note, and therefore that they\n /// will cooperate and use the correct tag. Usage of a bad tag will result in the recipient not being able to\n /// find the note automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n\n array_concat([tag], bytes_to_fields(encrypted))\n}\n\n// We return [Field; 1 + (M + 30) / 31], where M is the byte length of output of encryption because\n// each field (apart from the tag) contains 31 bytes so the length in fields is computed as ceil(setup_log_byte_length / 31)\n// --> we achieve rounding by adding 30 and then dividing without remainder, then add one for the 32 byte tag\npub fn compute_partial_public_log_payload<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n sender: AztecAddress,\n plaintext: [u8; P],\n) -> [Field; 1 + (M + 30) / 31] {\n let extended_plaintext: [u8; P + PLAINTEXT_LENGTH_SIZE] =\n extend_private_log_plaintext(plaintext);\n let encrypted: [u8; M] = compute_encrypted_log(contract_address, recipient, extended_plaintext);\n\n /// Safety: We assume that the sender wants for the recipient to find the tagged note, and therefore that they\n /// will cooperate and use the correct tag. Usage of a bad tag will result in the recipient not being able to\n /// find the note automatically.\n let tag = unsafe { get_app_tag_as_sender(sender, recipient) };\n increment_app_tagging_secret_index_as_sender(sender, recipient);\n // Silo the tag with contract address.\n // This is done by the kernel circuit to the private logs, but since the partial log will be finalized and emitted\n // in public as unencrypted log, its tag is not siloed at the moment.\n // To avoid querying logs using two types of tags, we silo the tag manually here.\n let siloed_tag = poseidon2_hash([contract_address.to_field(), tag]);\n\n array_concat([siloed_tag], bytes_to_fields(encrypted))\n}\n\nfn compute_encrypted_log<let P: u32, let M: u32>(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n plaintext: [u8; P],\n) -> [u8; M] {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; HEADER_SIZE] =\n header.compute_ciphertext(eph_sk, recipient.to_address_point());\n let incoming_body_ciphertext =\n compute_incoming_body_ciphertext(plaintext, eph_sk, recipient.to_address_point());\n\n let mut encrypted_bytes = [0; M];\n let mut offset = 0;\n\n // eph_pk\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[offset + i] = eph_pk_bytes[i];\n }\n offset += 32;\n\n // incoming_header\n for i in 0..HEADER_SIZE {\n encrypted_bytes[offset + i] = incoming_header_ciphertext[i];\n }\n offset += HEADER_SIZE;\n\n // Padding.\n offset += OVERHEAD_PADDING;\n\n // incoming_body\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - offset;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n // Nargo seems to struggle with realizing that `offset` is a constant at this point.\n // We then redefine it in terms of the assertion above to give nargo a hint.\n let offset = M - incoming_body_ciphertext.len();\n for i in 0..size {\n encrypted_bytes[offset + i] = incoming_body_ciphertext[i];\n }\n\n encrypted_bytes\n}\n\n// Prepend the plaintext length as the first byte, then copy the plaintext itself starting from the second byte.\n// Fill the remaining bytes with random values to reach a fixed length of N.\nfn extend_private_log_plaintext<let P: u32, let N: u32>(plaintext: [u8; P]) -> [u8; N] {\n /// Safety: A malicious sender could reveal the whole contents of the encrypted log so trusting it to set\n /// a random padding in plaintext is fine.\n let mut padded = unsafe { get_random_bytes() };\n padded[0] = (P >> 8) as u8;\n padded[1] = P as u8;\n for i in 0..P {\n padded[i + PLAINTEXT_LENGTH_SIZE] = plaintext[i];\n }\n padded\n}\n\nunconstrained 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\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n\n /// Safety: We use the randomness to preserve the privacy of both the sender and recipient via encryption, so\n /// a malicious sender could use non-random values to reveal the plaintext. But they already know it themselves\n /// anyway, and so the recipient already trusts them to not disclose this information. We can therefore assume\n /// that the sender will cooperate in the random value generation.\n let randomness = unsafe { random() };\n\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(randomness);\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\npub fn compute_incoming_body_ciphertext<let P: u32>(\n plaintext: [u8; P],\n eph_sk: Scalar,\n address_point: AddressPoint,\n) -> [u8; P + 16 - P % 16] {\n let full_key = derive_aes_secret(eph_sk, address_point.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(plaintext, iv, sym_key)\n}\n\nmod test {\n use crate::encrypted_logs::payload::{\n compute_incoming_body_ciphertext, compute_private_log_payload,\n MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES,\n };\n use dep::protocol_types::{address::AztecAddress, point::Point, scalar::Scalar};\n use protocol_types::public_keys::AddressPoint;\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_log_matches_typescript() {\n // All the values in this test were copied over from `encrypted_log_payload.test.ts`\n let contract_address = AztecAddress::from_field(\n 0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04,\n );\n\n let plaintext = [\n 0, 0, 0, 1, 48, 22, 64, 206, 234, 117, 131, 145, 178, 225, 97, 201, 44, 5, 19, 241, 41,\n 2, 15, 65, 37, 37, 106, 253, 174, 38, 70, 206, 49, 9, 159, 92, 16, 244, 140, 217, 239,\n 247, 174, 91, 32, 156, 85, 124, 112, 222, 46, 101, 126, 231, 145, 102, 134, 134, 118,\n 183, 135, 233, 65, 126, 25, 38, 14, 4, 15, 228, 107, 229, 131, 183, 31, 74, 181, 183,\n 12, 38, 87, 255, 29, 5, 204, 207, 29, 41, 42, 147, 105, 98, 141, 26, 25, 79, 148, 78,\n 101, 153, 0, 0, 16, 39,\n ];\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"getRandomField\").returns(randomness).times(\n (MAX_PRIVATE_LOG_PLAINTEXT_SIZE_IN_BYTES as u64 + 1 + 30) / 31,\n );\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk).times(1);\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let sender = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n let _ = OracleMock::mock(\"getIndexedTaggingSecretAsSender\").returns([69420, 1337]);\n\n let _ = OracleMock::mock(\"incrementAppTaggingSecretIndexAsSender\").returns(());\n\n let payload = compute_private_log_payload(contract_address, recipient, sender, plaintext);\n\n // The following value was generated by `encrypted_log_payload.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let private_log_payload_from_typescript = [\n 0x0e9cffc3ddd746affb02410d8f0a823e89939785bcc8e88ee4f3cae05e737c36,\n 0x008d460c0e434d846ec1ea286e4090eb56376ff27bddc1aacae1d856549f701f,\n 0x00a70577790aeabcc2d81ec8d0c99e7f5d2bf2f1452025dc777a178404f851d9,\n 0x003de818923f85187871d99bdf95d695eff0a900000000000000000000000000,\n 0x000000a600a61f7d59eeaf52eb51bc0592ff981d9ba3ea8e6ea8ba9dc0cec8c7,\n 0x000b81e84556a77ce6c3ca47a527f99ffe7b2524bb885a23020b7295748ad19c,\n 0x001083618ad96298b76ee07eb1a56d19cc798710e9f5de96501bd59b3781c9c0,\n 0x002a6c95c5912f8936b1500d362afbf0922c85b1ada18db8b95162a6e9d06765,\n 0x005cdf669eb387f8e0492a95fdcdb39429d5340b4bebc250ba9bf62c2f49f549,\n 0x00f37beed75a668aa51967e0e57547e5a655157bcf381e22f30e25881548ec96,\n 0x0006a151b5fbfb2d14ee4b34bf4c1dbd71c7be15ad4c63474bb6f89970aeb3d9,\n 0x00489c8edbdff80a1a3a5c28370e534abc870a85ea4318326ea19222fb10df35,\n 0x008c765edada497db4284ae30507a2e03e983d23cfa0bd831577e857bbef9cf7,\n 0x0090c97cb5699cc8783a1b4276d929be2882e5b9b72829a4f8404f7e3c853d11,\n 0x00d6d5a000b80134891e95f81007ad35d3945eaeecbe137fff85d01d7eaf8f19,\n 0x00a15eb965c6a4bc97aa87fd3463c31c9d4e0d722a8ba870bcc50c9c7a8b48ad,\n 0x0063c861bdbe490d44c57382decbae663927909652f87ac18dcfd5b30649cce5,\n 0x00820f14caa725efe1fa3485ceac88499eadf0565c5b20998c05931bbf478e68,\n ];\n\n assert_eq(payload, private_log_payload_from_typescript);\n }\n\n #[test]\n fn test_incoming_body_ciphertext_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06,\n };\n let address_point = AddressPoint {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false,\n },\n };\n let plaintext = [\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, 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, 0, 0,\n 0, 0, 0, 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,\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 2, 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, 3,\n ];\n\n // `compute_incoming_body_ciphertext(...)` function then derives symmetric key from `eph_sk` and `address_point` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = compute_incoming_body_ciphertext(plaintext, eph_sk, address_point);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160,\n 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157,\n 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93,\n 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130,\n 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95,\n 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234,\n 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162,\n 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185,\n 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236,\n 23, 206, 229, 108,\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"
6100
6100
  },
6101
6101
  "92": {
6102
6102
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/hash.nr",
6103
- "source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<let N: u32>(\n contract_address: AztecAddress,\n log: [u8; N],\n) -> Field {\n let mut hash_bytes = [0; N + 36];\n // Address is converted to 32 bytes in ts\n let address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (N as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..N {\n hash_bytes[36 + i] = log[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd,\n ];\n let serialized_log = arr_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(\n 0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6,\n );\n let log = AztecAddress::from_field(\n 0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303,\n );\n let serialized_log: [u8; 32] = log.to_field().to_be_bytes();\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"dummy\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(\n 0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8,\n );\n let log = \"Hello this is a string\";\n let serialized_log = str_to_be_bytes_arr(log);\n let hash = compute_unencrypted_log_hash(contract_address, serialized_log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"
6103
+ "source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n"
6104
6104
  }
6105
6105
  }
6106
6106
  }